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-1113:08:45.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 {
unix时间戳转换日期格式  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"
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。