那年那日那朵花

".......(o´ω`o)......"

logstash时区问题

2016-08-25 14:48 elk

在使用elk的时候遇到的一个问题。就是如果使用logstash output到elasticsearch的时候,根据日期自动创建索引。但是由于logstash是使用utc时间。所以造成的结果就是每天早上八点才创建出当天的索引。结果就像这样。

drwxr-xr-x 8 elasticsearch elasticsearch 4096 Aug 22 09:29 local3-2016.08.22
drwxr-xr-x 8 elasticsearch elasticsearch 4096 Aug 23 08:00 local3-2016.08.23
drwxr-xr-x 8 elasticsearch elasticsearch 4096 Aug 24 08:00 local3-2016.08.24
drwxr-xr-x 8 elasticsearch elasticsearch 4096 Aug 25 08:00 local3-2016.08.25

在使用kibana查看的时候其实这样是没有关系的,而且官方也推荐使用utc时间。但是由于我有脚本要定时执行,所以这样就会在使用时给我带来麻烦。

后来网上参考了一些方法结合着使用,现记录下来。

第一种

就是在logstash的filterplugin中加上如下这个。

filter {

    ruby {
        code => "event.timestamp.time.localtime"
    }

}

我试了下,只改这个无效。。。。。但是记录的文档里面[_source] [@timestamp] 确实是从2016-08-24T03:00:59.935Z 格式变为 2016-08-24T11:26:07.464+08:00格式了

第二种

这种是改logstash源码。网上说的是改event.rb文件,但是我找了下logstash的目录没找到。。。。。。所以网上所说的应该是针对比较老的logstash1.x 版本,而现在我使用的是Logstash 2.3.4。

那么我这个版本的话,需修改的文件位置如下,这个是个相对路径,前面是logstash的路径。

** $LOGSTASH/vendor/bundle/jruby/1.9/gems/logstash-core-event-2.3.4-java/lib/logstash/string_interpolation.rb **

修改内容

.withZone(org.joda.time.DateTimeZone::UTC)

变为

.withZone(org.joda.time.DateTimeZone::getDefault())

总之我两种方法同时结合着使用了,问题解决。

心情

Cloudhu 个人随笔|built by django|

沪ICP备16019452号-1