elasticsearch 东八区问题

来源:互联网 发布:音乐截取软件手机 编辑:程序博客网 时间:2024/06/14 21:41
搭建ELK环境导入的数据发现,@timestamp时间永远比nginx日志里面的文件记录的时间少了8小时,比如日志文件里面一行记录,设置的字段时间为2017-06-22 09:33:26,但是导入到es里面时间变成"@timestamp": "2017-06-22T01:33:26.000Z",少了整整8个小时,但是kibana显示图表的时候却是没有。后来查资料知道这是es设置的东八区问题,kibana会根据浏览器国家自动添加时间,所以我们看到kibana上显示是正常的。

解决办法如下:

1.在查询条件上设置时区

QueryBuilders.rangeQuery("@timestamp").format("yyyy-MM-dd HH:mm:ss.SSS").gte("2017-06-22 00:00:00.000").lte("2017-06-22 23:59:59.999").timeZone("Asia/Shanghai")

Asia/Shanghai也可以替换成+8:00

2.logstash filter的时候添加字段,比如添加importtime字段

 grok {         match => { "message" => "\[visit_time:(?<ctime>.*)\],\[uid:(?<uid>.*)\],\[ip:(?<ip>.*)\],\[city_id:(?<cityid>.*)\],\[event:(?<event>.*)\],\[typeOnename:(?<typeOnename>.*)\],\[typeOnevalue:(?<typeOnevalue>.*)\],\[typetwoname:(?<typetwoname>.*)\],\[typetwovalue:(?<typetwovalue>.*)\],\[channel_type:(?<channel_type>.*)\],\[aid:(?<aid>.*)\],\[ticket_group_id:(?<ticket_group_id>.*)\],\[order_sn:(?<order_sn>.*)\],\[extends:(?<extends>.*)\]" } add_field => [ "importtime", "%{@timestamp}" ]    }        date {        match => ["ctime", "YYYY-MM-dd HH:mm:ss"]        target => "@timestamp"    }    ruby {            code => "event.set('importtime', event.get('@timestamp').time.localtime + 8*60*60)"    }
用字段方法过滤后,在es里面会发现每行记录多了个importtime字段

原创粉丝点击