解惑:关于 PromQL 范围查询的问题

背景

前几天朋友问了我这样一个问题: 为什么收集的数据(counter 类型),使用 query_range 查询来显示最近一周每日数据增涨的时候,唯独缺少最后一天的数据,但将查询结束时间(end)增加 1s 后就能显示?

这里我们用http_requests_total来表示收集到的数据,经仔细了解后,发现朋友使用的是类似 的 PromQL,并且将 query_range 时间范围设置为:start=周一的 00:00,end = 周日的 23:59:59,看上去没有问题,但为什么会出现上面的问题呢?

排查思路

首先我们来了解下 Prometheus 对于( v range-vector) 范围查询的实现原理,以 v2.2 为例(参考源码:https://git.io/fCxtw):

计算总共返回的数据个数:

通过 来循环获取每个点的数据

回到这个例子,一开始返回的数据点个数为: , 当将 end 添加 1 秒后,start-end 恰好就是 604800,再除上步长 1d,所以刚好是 7个点,也就可以成功显示最后一天数据了。

学到什么

通过这个例子,我们可以学到:

PromQL 的范围查询的实现逻辑。

当我们统计 Counter 数据在某个时刻的增量情况,例如这里的每日请求数,更推荐使用 increase,而不是 delta,具体可以参见链接:https://prometheus.io/docs/prometheus/latest/querying/functions/#increase。

ps: 最后如果你对内容感兴趣,请加入我们的知识星球:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180621G1LMQL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励