kibana中的数据晚8个小时
问题描述:
在指定时间范围内查询ES中的数据时发现 数据丢失
问题分析
中国在东八区,相比于中时区多了8个小时,导致kibana自动减去8个小时。
ES默认是0时区,但是我们一般用的是北京时间东八区,因此间隔了八小时
问题解决
封装ES查询条件的时候对时间格式进行处理
- 错误实例
BoolQueryBuilder totalBoolQueryBilder = QueryBuilders.boolQuery();
totalBoolQueryBilder = totalBoolQueryBilder
.must(QueryBuilders.termQuery("id", id))
.must(QueryBuilders.rangeQuery("absTime")
.gte(startDate)
.lt(endDate).timeZone("GMT+8"))
;
NativeSearchQuery totalSearchQuery = new NativeSearchQueryBuilder()
.build();
对应Kibana中的
"range" : {
"absTime" : {
"from" : "2024-06-13T00:00:00.000Z",
"to" : "2024-07-12T14:45:28.536Z",
"include_lower" : true,
"include_upper" : true,
"time_zone" : "GMT+08:00",
"boost" : 1.0
}
}
- 正确实例
这里的办法是改变数据源,写入es中的时间数据是通用时间yyyy-MM-dd HH:mm:ss 格式的数据,并指定时区为 GMT+8
BoolQueryBuilder totalBoolQueryBilder = QueryBuilders.boolQuery();
totalBoolQueryBilder = totalBoolQueryBilder
.must(QueryBuilders.termQuery("id", id))
.must(QueryBuilders.rangeQuery("absTime")
.gte(DateUtil.format(startDate, "yyyy-MM-dd HH:mm:ss"))
.lt(DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss"))
.format("yyyy-MM-dd HH:mm:ss")
.timeZone("GMT+8"));
对应Kibana中的
"range": {
"absTime": {
"from": "2024-07-06 00:00:00",
"to": "2024-07-12 15:48:25",
"include_lower": true,
"include_upper": false,
"time_zone": "GMT+08:00",
"format": "yyyy-MM-dd HH:mm:ss",
"boost": 1
}
}
idea中断点参考正确写法