簡體   English   中英

logstash / ELK / elasticsearch中的時區錯誤

[英]timezone incorrect in logstash / ELK / elasticsearch

我是彈性搜索的新手,花了很長時間嘗試解決以下問題。 也許解決方案應該在文檔中-但不是:-(

我的服務器在多個時區運行。

日志文件被同步到具有不同時區的服務器中,但是很容易通過時區字段(例如{“ timezone”:“ UTC”})或通過時間格式本身(例如{“ @timestamp”)來知道原始時區: “2015-02-20T12:11:56.789Z”}

我對日志文件擁有完全控制權,如有必要,可以對其進行調整。

使用Logstash時-將時間格式更改為正在運行的服務器的本地時間。 例如“ @timestamp” =>“ 2015-02-21T22:26:24.920-08:00”

如何通過日志存儲和彈性搜索從源日志文件中獲取一致的時區? (很明顯-之后我要在Kibana中擁有它)。 我嘗試了很多事情,但都沒有成功。

提前致謝。

我的目標是在elasticsearch中創建_id並在其中添加日志記錄時間-以便即使通過logstash重新發送日志也永遠不會重復

在花了幾個小時解決這個問題后-我得出一些結論,據我所知,該文檔還沒有得到足夠的記錄,因此建議您解決。

1)如果日志文件的格式中包含時區,則無法在logstash中進行任何修改。 因此-不要在時區或部分匹配或添加時區上浪費時間。 如果時間末尾有Z,則為格林尼治標准時間。 我認為這是一個錯誤,當這種情況發生時-不發出警告。

2)無論輸入字符串的格式如何,Logstash都使用本地時間將其輸出到標准輸出/文件。

3)Logstash使用當地時間作為時間-因此將時間串聯到變量中變得混亂-即使原始字符串是GMT。 因此,甚至不要嘗試使用@timestamp變量!

4)彈性搜索在GMT中有效-因此行為正常。 因此,您在logstash輸出中看到的“ @timestamp” =>“ 2015-02-21T20:26:24.921-08:00”可以通過彈性搜索正確地解釋為“ @timestamp” =>“ 2015-02-21T12 :26:24.921Z”

因此,我的解決方法如下:1)保留時間戳記不是@timestamp的日志2)始終將日志文件中的時間保存為GMT並用尾隨Z標記它們3)使用最基本形式的日期過濾器。 沒有時區屬性

filter {
    date {
        match => ["log_time", "YYYY-MM-dd'T'HH:mm:ss.SSSZ"]
        #timezone => "Etc/GMT-8" <--- THIS DOES NOT WORK IF THERE IS A Z IN SOURCE
    }   
}

4)直接從log變量而不是@timestamp創建時間導數。 例如

output {
    stdout { codec => rubydebug }
    elasticsearch { 
        host => localhost
        document_id => "%{log_time}-%{host}" # <--- DO THIS
        # document_id => "%{@timestamp}-%{host}" <--- DON'T DO THIS
    }   
}

如果約旦·西塞爾(Jordan Sissel)碰巧讀了這篇文章-我認為logstash默認應與elasticsearch保持一致-或至少可以選擇在GMT內部輸出並在內部工作。 我第一次嘗試使用現有日志進行該工具時遇到了麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM