elasticsearch 东八区问题

本文介绍了解决ELK环境中导入数据时@timestamp时间比实际时间少8小时的问题。通过设置查询条件时区及在Logstash中添加importtime字段的方法,确保了时间和日志的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搭建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字段

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值