Logstash 将日志中的时间替换为@timestamp 时间

前言

之前迁移ES日志时发现,迁移后的ES日志@timestamp时间在kibana上显示晚了8个小时,导致0点至8点没有数据,其实呢可以通过Logstash 的date 插件将日志中的时间修改为 ES的@timestamp字段。

Logstash 修改@timestamp 时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
input {
file {
path => "/usr/local/nginx/logs/access.*"
codec => "json"
}
}

filter {
date {
match => ["client_time", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
# 这里是如果client_time跟后面的格式匹配上了就会去替换,target默认指的就是 @timestamp, 所以就是以client_time的时间更新 @timestamp的时间
}
}

output {
#stdout {
# codec => rubydebug
#}
elasticsearch {
hosts => ["es1:9200","es2:9200","es3:9200"]
index => "logstash-%{+YYYY.MM}"
}
}

如果不用 date 插件,那么 Logstash 会将处理时间作为时间戳。

时间戳字段是 Logstash 自己添加的内置字段 @timestamp,也就是说如果你没有设置date过滤器,因为这个时间是UTC时间,那么@timestamp 时间就是比北京时间采集时间少8个小时。

-------------本文结束感谢您的阅读-------------