elasticsearch做统计分析接口请求数据,UTC时间导致的8小时无数据解决方案

2 篇文章 0 订阅
1 篇文章 0 订阅

这些天想收集下ES按每天每小时,服务器接口请求量的统计。方法凌晨0点至8点,无数据。

查了下,发现是UTC问题。折腾了大半天,发现不管怎么转换时间,0~8点的数据始终无数据。如下图:

后来发现,index索引也是按天来的。所以要取今日凌晨0点至8点,每小时数据。

则必须根据今日凌晨的时间转换成UTC时间或者时间戳,到昨日的index索引里取。

因为国内的时区是+8的,所以比UTC时间快8小时,而索引是按UTC时间计算存储的。

由于我用的ES和logstash版本比较新,都是6.6。没有找到有时间改源码按国内时区存数据的方法。

只能通过做日期切割来计算获取数据。也还好,就是麻烦了一点点。

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.6.0</version>
        </dependency>

简单参考代码:

 QueryBuilder hourBuilder = QueryBuilders.rangeQuery("@timestamp").gte(startL).lt(endL);
        TransportClient client = EsClientUtil.getInstance();
        SearchResponse rsp = client.prepareSearch(index1, index2).setSearchType(SearchType.DEFAULT).setQuery(hourBuilder).setSize(1).get();
        long count = rsp.getHits().getTotalHits();

index1表示昨日的索引名,index2表示今天的索引名

日志输出:

ElasticsearchApiImpl.0pm count>>>>>>>>>322625
ElasticsearchApiImpl.yesterday count>>>>>>>>>21497297

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值