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

PromQL中increase()函数无法正确返回计数器增量的问题

PromQL计数器增量计算结果不符问题排查与解决

问题描述

  • 基础查询:sum(endk_custom_label_total_count{BusinessProcess="acknowledgmentsent", Status="400"}) 可正常返回对应结果
  • 增量计算查询:使用increase()函数计算指定时间范围内的计数器增量时,执行
    sum(increase(endk_custom_label_total_count{BusinessProcess="acknowledgmentsent", Status="400"}[$__range]))
    
    返回结果为1,但根据原始指标数据,预期结果应为3
  • 尝试添加.. OR vector(0)的两种写法后,问题仍未解决

排查与解决方法

1. 校验时间范围变量的对齐问题

$__range是面板级的时间范围变量,increase()的计算依赖时间范围首尾的样本点。如果时间范围起始点刚好落在计数器多次更新之后,可能只捕获到最后一次增量。可以先手动指定具体时间范围(比如[10m])替代$__range,验证是否能得到正确结果。

2. 改用rate()结合时间秒数计算总增量

当计数器存在重置(如进程重启导致计数器归零)或样本采集间隔匹配不佳时,increase()的计算容易出现偏差。可以改用以下查询:

sum(rate(endk_custom_label_total_count{BusinessProcess="acknowledgmentsent", Status="400"}[$__range])) * $__range_seconds

rate()会计算时间范围内的平均每秒增量,再乘以时间范围的秒数($__range_seconds是对应时间范围的秒数变量),这种方式对计数器重置的兼容性更强,计算结果更准确。

3. 检查指标的标签维度是否完整过滤

确认endk_custom_label_total_count是否存在未过滤的额外标签(如instance、job),如果多个实例都有该指标,increase()会按每个时间序列单独计算增量再求和,若部分实例无增量可能拉低总和。可以先执行以下查询查看所有相关时间序列的变化:

endk_custom_label_total_count{BusinessProcess="acknowledgmentsent", Status="400"}

根据结果补充过滤条件,确保只包含有增量的时间序列。

4. 验证样本采集间隔配置

如果Prometheus的scrape_interval(采集间隔)大于计数器的更新频率,可能会漏掉中间的增量样本。检查采集配置,确保采集频率足够覆盖计数器的更新频次,避免样本丢失导致计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:07:27