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"]
        }
 
    }

这个方式在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(:)

你可能感兴趣的:(logstash 8小时时区问题)