logstash中date的時間處理方式總結

一、直接在配置文件中自定義的時間格式

這是tomcat配置文件中的一段日誌時間配置,按照這樣的配置,那麼輸出的日誌是這樣子的:mysql

 "timestamp" : "2019-12-11 10:11:12 +0800"

 而後你繼續在logstash中這樣子配置nginx

date {
  match => [ "timestamp", "yyyy-MM-dd HH:mm:ss Z"]
  target => "@timastamp"
}

此時logstash就不會報"_dateparsefailed"錯誤了。web

這種形式在nginx、apache等web服務器中配置是最好的,也比較方便分析。sql

二、第二種,帶有中括號的

[07/Feb/2018:16:24:19 +0800]

 那麼在grok插件中這樣子定義就行:apache

\[%{HTTPDATE:timestamp}\]

date插件能夠直接轉換,以下:tomcat

date {
    match => ["timestamp","dd/MM/yyy:HH:mm:ss Z"]
target => "@timastamp" }

三、ISO8601形式1

在日誌文件中原生日誌是這個樣子的服務器

2019-03-19 13:08:07.782

重點是後面的」.782「,後面附加以毫秒爲單位的。spa

那麼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"
}

四、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"
}

四、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"
}
相關文章
相關標籤/搜索