默认状况下ELK收集到的日志在kibana上展现出来的时间戳和日志的生成时间是不一致的,或许不少朋友来讲和日志生成的时间相差无几,nginx
那我只能说,你的日志系统可能资源比较充足,处理的比较及时,因此你看到的日志收集时间戳和日志产生时间戳是相差无几的效果,ide
但若是是想导入历史日志数据进行相应的分析,这个时候恐怕你的日志系统处理速度再块也没法解决日志收集时间和日志生成时间相差太spa
远的问题。若是不进行处理,你在kibana上所看到的时间序列根本不是日志生成的时间戳,因此说如何使用日志的生成时间戳去替换掉存日志
储在Elasticsearch中的时间戳也即@timestamp字段就显得尤其重要了。场景搞明白了,重要的就是如何实现了!server
看过不少博客,最后发现是把本身给绕进去了,为何这么说了,不少人都只是想下文同样,贴上了本身的配置,别的什么也没多说。索引
filter {资源
if [type] == "nginx-log" {rem
grok {博客
match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ACCESS_LOG}" }it
match => { "message" => "%{HOSTNAME:logserver} %{PATH:logpath} %{NGINX_ERROR_LOG}" }
remove_field => "message"
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
}
对于本文来其实要讲的是以下段落
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
容易出现问题的是不少人在上文使用grok解析日志时都没有使用timestamp这个字段名称,他也直接照抄,那你能够想一下,date这一部分
是基于上一个流程的结果进行的,因此会报错"date plug-in parsing exception"。
但也有人说了,我有timestamp这个字段,仍是没有解析正确,那很大的可能就是"dd/MMM/yyyy:HH:mm:ss Z"这个字段的配置没理解正确,
笔者当初也是同样,误觉得这个字段是设定格式化后的日期时间显示格式,但最后查询了不少资料以后,终于看到有人详说了,这个是本身的
日志文件里面日期日间的格式,也就是说"dd/MMM/yyyy:HH:mm:ss Z"这个字段是要看源日志里面的日期时间格式后在此配置的,并不是全部的
日志里面的日期时间都是同样的,因此须要根据不一样的文件日志设定为不一样的配置,固然若是在同一类日志文件里面有多种日期时间格式,是
能够,用空格+逗号配置成能够匹配多个日期时间格式的。
由此以来,咱们就能够很方便的根据用户的访问时间直接去查询该时间段内的相应日志,这是很是有用的。
除此以外,若是想导入历史日志进行相应的分析,这个时间戳能以以前的真实生成时间进行索引也是至关有益的。