Logstash由于时区导致8小时时差解决方案 博客分类: python&nodejs logstash 时差问题
程序员文章站
2024-03-21 11:23:22
...
写在最前面, 这个logstash解决时差的原理是利用timestamp字段替换logstash的@timesamp字段。
如果日志里没有这个timestamp字段,则无效。
Logstash 2.3版本
logstash的date插件配置:
date { match =>["timestamp","dd/MMM/yyyy:HH:mm:ss Z"] target =>"@timestamp"}
查看解析结果发现@timestamp比中国时间早了8小时
对于页面查看,ELK 的解决方案是在 Kibana 上,读取浏览器的当前时区,然后在页面上转换时间内容的显示。
解决方案找到两个
1、
vim vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.3-java/lib/logstash/timestamp.rb
把@time = time.utc 改成time即可
2、
这种办法与Linux服务器的时区设置有关系,有些Linux可能修改不成功,推荐用第一种。
http://www.aichengxu.com/view/6621766
1)修改logstash配置
date { match =>["timestamp","yyyy-MM-dd HH:mm:ss"] target =>"@timestamp""locale"=>"en" timezone =>"+00:00"}
添加 timezone => “+00:00”
然后测试@timestamp就是正常的时间了,@timestamp和timestamp是一致的。
2)因为kibana会读取浏览器的时区,然后+8小时,所以需要修改kibana的配置。
Settings – Advanced – dateFormat:tz 修改为UTC
Elasticsearch索引创建错误
修改之后发现logstash在按每天输出到elasticsearch时,每天8:00才创建当天索引,而8:00以前数据还是会输出到昨天的索引,如图:
解决办法如下:
vim ./vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.3-java/lib/logstash/string_interpolation.rb .withZone(org.joda.time.DateTimeZone::UTC)
修改为
.withZone(org.joda.time.DateTimeZone.getDefault())
Logstash5.3版本
解决8小时时差问题,配置如下:
date { match =>["timestamp","dd/MMM/yyyy:HH:mm:ss +0800"] target =>"@timestamp""locale"=>"en" timezone =>"UTC"}