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

Prometheus自定义计数器无法精准查询:如何获取近1分钟事件次数?

正确查询Prometheus自定义计数器近1分钟事件次数的方法

首先得明确:你要的是近1分钟内事件的绝对发生总数,咱们先拆解你用的两个函数的问题,再给出正确的解决思路:

为什么你之前的查询不对?

  • sum(rate(my_counter[1m])):这个函数计算的是每秒的平均增长率,返回的是“每秒发生多少次事件”,不是1分钟的总次数,从根上就不符合你的需求。
  • sum(increase(my_counter[1m])):这个函数理论上应该返回1分钟内计数器的总增量(也就是事件总次数),但结果不准的话,大概率是下面几个细节出了问题:

排查并解决问题的步骤

1. 确认自定义计数器的实现是否正确

Prometheus的计数器必须是单调递增的——每次事件发生时只能加1(或固定正数值),绝对不能减少或主动重置到0(进程重启这种不可避免的情况除外)。如果你的自定义计数器逻辑有问题(比如事件回滚时减了数值),那increase的结果肯定会失真。

2. 检查标签过滤是否准确

如果你的计数器带有多维度标签(比如instance、job、event_type等),要确保你只sum了需要的时间序列:

  • 如果你要的是某个服务的总次数,要加上标签过滤,比如:
    sum(increase(my_counter{job="your_service_name"}[1m]))
    
  • 如果不小心包含了无关的实例或事件类型,sum后的结果自然会偏离预期。

3. 处理计数器重置的情况

如果你的服务进程会重启(导致计数器重置为0),increase函数其实会自动检测这种情况并累加重置后的增量,但你可以用另一种方式验证结果是否正确:

sum(clamp_min(my_counter - my_counter offset 1m, 0))

这个语句的逻辑是:拿当前计数器值减去1分钟前的值,用clamp_min把负数(重置导致的)转为0,再sum总增量,结果应该和sum(increase(...))一致。

4. 确认查询的时间范围逻辑

Prometheus里的[1m]指的是“当前查询时间点往前推1分钟的区间”。如果你在Grafana等可视化工具里使用这个查询,要注意面板的时间范围设置——比如如果面板显示的是过去5分钟的数据,每个数据点对应的是该点往前1分钟的增量,而不是整个面板时间范围的总量。

最终正确的查询语句

如果你的计数器实现正确、标签过滤到位,直接用下面的语句就能得到近1分钟的事件总次数:

sum(increase(my_counter[1m]))

如果需要按某个维度分组统计(比如按事件类型),可以用sum by (label_name):

sum by (event_type) (increase(my_counter{job="your_service"}[1m]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:50:44