Logstash之时区问题的建议和修改

来源:互联网 发布:cms监控软件最新版 编辑:程序博客网 时间:2024/05/22 02:05

大家在用Logstash收集日志时,发现@timestamp的时间比本地早8个小时,这是正常的,因为这个时间是UTC时间,日志应统一采用这个时间。

原则上建议大家不要修改这个时间戳:

[plain] view plain copy
  1. 时区问题的解释  
  2.   
  3. 很多中国用户经常提一个问题:为什么 @timestamp 比我们早了 8 个小时?怎么修改成北京时间?+  
  4. 其实,Elasticsearch 内部,对时间类型字段,是统一采用 UTC 时间,存成 long 长整形数据的!对日志统一采用 UTC 时间存储,是国际安全/运维界的一个通识——欧美公司的服务器普遍广泛分布在多个时区里——不像中国,地域横跨五个时区却只用北京时间。  
  5. 对于页面查看,ELK 的解决方案是在 Kibana 上,读取浏览器的当前时区,然后在页面上转换时间内容的显示。  
  6. 所以,建议大家接受这种设定。否则,即便你用 .getLocalTime 修改,也还要面临在 Kibana 上反过去修改,以及 Elasticsearch 原有的 ["now-1h" TO "now"] 这种方便的搜索语句无法正常使用的尴尬。  
  7. 以上,请读者自行斟酌。  


如果你非要修改,可以这么配置:


如果上述报错,就直接修改配置文件吧:

[plain] view plain copy
  1. 老版本(1.5之前的版本):  
  2. WithZone (org. Joda. Time. DateTimeZone: : UTC)  
  3. 修改为:  
  4. WithZone (org. Joda. Time. DateTimeZone.getDefault ())  
  5.   
  6. 1.5以后的版本:  
  7. 路径:/vendor/bundle/jruby/1.9/gems/logstash-core-(version)-java/lib/logstash/event.rb  
  8.   
  9. 我的例子(2.1版本的Logstash):  
  10. /logstash/vendor/bundle/jruby/1.9/gems/logstash-core-2.1.0-java/lib/logstash/timestamp.rb  
  11. 57行  
  12. UTC = org.joda.time.DateTimeZone.forID(“UTC”)  
  13. 修改为:  
  14. UTC = org.joda.time.DateTimeZone.getDefault(:)  

0 0
原创粉丝点击