logstash如何將日誌中字串型別的時間轉化成@timestamp
在ELK組合中我們在outputs/elasticsearch中常用的%{+YYYY.MM.dd}來建立索引,而這種寫法是必須要讀@timestamp這個欄位的。預設情況下@timestamp欄位顯示的是當前時間,但我們可能需要記錄的是日誌中的字串型別的時間,所以我們需要把日誌中字串型別的時間覆蓋掉@timestamp中的當前時間。
建立配置檔案 code.conf
input {
stdin{}
}
filter {
grok {
match => ["message", "%{TIMESTAMP_ISO8601:logdate}"]
}
date {
match => ["logdate", "yyyy-MM-dd HH:mm:ss,SSS"]
target => "@timestamp"
}
}
output{
stdout{
codec=>rubydebug{}
}
}
說明:標紅出為日誌中的時間格式,這個根據具體的日誌自行修改或自己開發正則去匹配。
這裡我用的是logstash自帶的正則。要檢視自帶了哪些正則可檢視檔案:/logstash-2.2.0/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.2/patterns/grok-patterns
測試:
./logstash -f code.conf
手動輸入:
2016-08-24 18:05:39,830
可以看到@timestamp欄位已經被覆蓋。最後別忘了刪除logdate欄位
mutate {
remove => ["logdate"]
}