ELK - Logstash 中 date 日期時間的常見匹配和處理方式


1、在配置文件中自定義的時間格式
  例如 tomcat 定義的格式 %{yyyy-MM-dd HH:mm:ss Z},按照這樣的配置,輸出的日志原文是 

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

  那么在 logstash 中應該這樣配置

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

 這樣子不會報 "_dateparsefailed" 的錯誤

 

2、帶有中括號的格式

 日志原文是這樣:

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

  帶有一對中括號,那么在 grok 中需要轉義中括號

\[%{HTTPDATE:timestamp}\]

 date插件可以直接轉換:

date {
  match => [ "timestamp", "dd/MM/yyyy HH:mm:ss Z"]
  target => "@timastamp"
}
這樣子不會報 "_dateparsefailed" 的錯誤

3、ISO8601 形式1

 原日志中的顯示如下,重點是后面的三位數毫秒,日志原文

2019-12-11 130845.254

 在 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" }

 這樣子也不會報 "_dateparsefailed"  的錯誤,可以參考時間匹配規則表

 

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM