[英]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.