You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus的increase()能否支持动态时间范围计算?需实现当日0点增量统计

解决方案

要实现计数器从当日0点到当前时刻的增量统计,同时避免实例重启导致的负值问题,可采用以下两种可靠方法:

方法一:动态生成时间范围的increase查询

利用PromQL的时间计算能力,直接算出当日已流逝的时长,作为increase的时间范围参数。increase会自动处理计数器重启的场景(重启后计数器重置为0,increase会从0开始累加增量,不会出现负值)。

原生Prometheus查询语句

increase(my_counter[(time() - (time() % 86400))s])
  • 核心逻辑:time() % 86400计算当前时间距离当日0点的秒数,time() - (time() % 86400)得到当日0点到现在的总秒数,将其作为时间范围传入increase,等价于凌晨1点用[1h]、凌晨2点用[2h]的效果。

Grafana环境简化写法

如果在Grafana中使用,可直接借助内置变量获取当日已过时长:

increase(my_counter[${__range_s}s])

方法二:分段增量求和(更稳妥)

若担心时间范围计算的精度问题,可先按小粒度计算分段增量,再统计当日内所有增量的总和,彻底避免负值:

sum_over_time(increase(my_counter[1m])[1d:1m])
  • 核心逻辑:先以1分钟为粒度计算每个时间段的增量increase(my_counter[1m]),再用sum_over_time统计当日(1d)内所有分段增量的总和,最终得到从当日0点到现在的总增量。

为什么不推荐last_over_time差值法?

用last_over_time(my_counter offset 1d[1m]) - my_counter这类方式计算时,若实例重启后计数器重置为0,当前值会小于0点的旧值,直接导致结果为负。而increase和sum_over_time都会自动识别计数器重置行为,只累加正增量,不会出现负值问题。

内容的提问来源于stack exchange,提问作者progquester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:47:38