logstash|logstash 8小时时区问题
诱因:主要原因是由于logstash底层取的timestamp是直接获取的服务器的系统时间(大多数情况下是直接以GMT时间或者UTC时间去获取的),这样,对于在东八区的我们,就可能会出现这个时间戳少了8个小时的问题
解决方法:
一、直接修改服务器的系统时区,不过这种方法有时候不一定起作用,因为有可能你的服务器本身就是使用CST时区的,但是这个logstash可能还是会从GMT时间或者UTC时间获取,本人亲测,在Linux环境比较有效
二、在logstash的配置中添加:
filter {
ruby {#设置一个自定义字段'timestamp'[这个字段可自定义],将logstash自动生成的时间戳中的值加8小时,赋给这个字段
code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*3600)"
}
ruby {#将自定义时间字段中的值重新赋给@timestamp
code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {#删除自定义字段
remove_field => ["timestamp"]
}
}
【logstash|logstash 8小时时区问题】这个方式在Windows上配合kibana可能会有一些问题,因为Windows本身你的时间使用的是UTC+8,然而,logstash使用这个会使用UTC时间来作为@timestamp的时间,但是你的kibana在Windows上面的默认配置会是使用的brower[也就是utc+8]的,所以会出现在kibana上面的table的@timestamp字段会比你的logstash写到你的_source中的@timestamp字段多了8小时的问题,这个只需要修改kibana的默认时区就行了。这个问题在Linux环境应该是不存在的
三、直接修改logstash源码配置:
这个方法我只使用过在老版本上面的
老版本(1.5之前的版本):
WithZone (org. Joda. Time. DateTimeZone: : UTC)
修改为:
WithZone (org. Joda. Time. DateTimeZone.getDefault ())1.5以后的版本(没试过,这个是别人用过的):
路径:/vendor/bundle/jruby/1.9/gems/logstash-core-(version)-java/lib/logstash/event.rb
/logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.1.0-java/lib/logstash/timestamp.rb
57行
UTC = org.joda.time.DateTimeZone.forID(“UTC”)
修改为:
UTC = org.joda.time.DateTimeZone.getDefault(:)
推荐阅读
- 【剽悍晨读感悟】0714并不是要把一天过成48小时的样子
- 用 logstash 从 kafka 读取数据写入 Elasticsearch(qbit)
- nods中mysql时间相差8小时
- 好好的星期一上毛班|好好的星期一上毛班 | 拍8小时大海,就像过了一生
- ElasticSearch-Logstash6.0.0安装以及mysql数据导入ES
- Boost.deadline_timer实现定时器功能时需注意的时区问题
- centos中修改时区及时间的方法
- 刘子睿(这样管理时间一天拥有48小时)
- Logstash打包和离线安装插件
- 技术分享 | MySQL:一文弄懂时区&time_zone