Logstash由于时区导致8小时时差解决方案

本文介绍了Logstash在处理时区问题时的解决方案,特别是当遇到8小时时差的情况。通过利用timestamp字段替换@timestamp字段,并在Logstash 2.3及5.3版本中进行相应配置调整,可以解决这个问题。关键步骤包括在date插件中设置timezone为“+00:00”,以及可能需要调整Kibana的配置为UTC时间。同时,针对Elasticsearch索引创建错误,提出了修改Logstash配置以确保正确的时间戳索引创建。
写在最前面, 这个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"}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值