1、直接在配置文件中自定義的時間格式
這是tomcat配置文件中的一段日志時間配置,按照這樣的配置,那么輸出的日志是這樣子的:
"timestamp" : "2019-12-11 10:11:12 +0800"
然后你繼續在logstash中這樣子配置
date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss Z"] target => "@timastamp" }
此時logstash就不會報"_dateparsefailed"錯誤了。
這種形式在nginx、apache等web服務器中配置是最好的,也比較方便分析。
2、第二種,帶有中括號的
[07/Feb/2018:16:24:19 +0800]
那么在grok插件中這樣子定義就行:
\[%{HTTPDATE:timestamp}\]
date插件可以直接轉換,如下:
date { match => ["timestamp","dd/MM/yyy:HH:mm:ss Z"]
target => "@timastamp" }
3、ISO8601形式1
在日志文件中原生日志是這個樣子的
2019-03-19 13:08:07.782
重點是后面的”.782“,后面附加以毫秒為單位的。
那么grok插件中可以這樣子定義匹配的規則:
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_create_time}" }
}
date插件這樣匹配
date { match => [ "log_create_time", "MMM d HH:mm:ss", "MMM DD HH:mm:ss", "ISO8601"] target => "@timestamp" }
或者這樣,推薦使用這個,更加簡介
date { match => [ "log_create_time", "yyyy-MM-dd HH:mm:ss.SSS" ] target => "@timestamp" }
4、ISO8601形式2
時間 date 中帶 T,日志原文如下:
2019-12-11T17:06:33 +08:00
此時, grok 可以這樣寫:
grok { match => { "message" => "%{TIMESTAMP_ISO8601}:log_create_time" } }
而 date 插件 轉存到 @timestamp 中可以這樣匹配:
date { match => [ "log_create_time", "yyyy-MM-dd'T'HH:mm:ss ZZ" ] target => "@timestamp" }
也可以用更簡潔的寫法:
date { match => [ "log_create_time", "ISO8601" ] target => "@timestamp" }
4、Unix時間戳形式
典型的如 MySQL 的慢查詢日志,日志原文:
# Time: 2019-12-11T01:50:21.123793Z //舍棄這個時間 # User@Host: root[root] @ elk-master01 Id: 4 # Quert Time: 4.650893 Lock time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1554342621; // 需要的是這個 selecet sleep(4.65);
在 grok 中這樣匹配:
%{NUMBER:timestamp_mysql_slowquery}
在 date 插件中這樣匹配:
date { match => [ "timestamp_mysql_slow_query", "UNIX" ] target => "@timestamp" }