在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"]
}
---
更多文章关注公众号