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

如何使用Prometheus Counter指标测量周期性事件并实现异常告警?

问题解答

1. 使用Counter指标是否合适?

完全合适。Counter是Prometheus中专门用于单调递增数值的指标类型,完美匹配消息处理成功/失败次数的统计场景:

  • 每个Kubernetes Pod实例会独立累计自身处理的消息数,Counter天然支持多实例部署,后续通过sum()聚合所有Pod的指标就能得到全局总处理量。
  • Counter会自动适配实例重启后的数值重置(PromQL的increase/rate函数能识别重置逻辑并正确计算增量),不会导致统计数据失真。

2. sum_over_time(mycount[1hr])能否满足需求?

不能直接使用这个函数,它的逻辑不符合Counter的特性:

  • sum_over_time是将1小时内采集到的所有Counter样本值直接相加,但Counter是累计值(比如11点时为20,11:30时为40,12点时为60),相加后得到的是无业务意义的累计值总和,并非你需要的每小时处理增量。

正确的PromQL写法

要获取每小时成功/失败的消息总数,应该使用:

sum(increase(mycount{job="你的后台服务标识"}[1h]))
  • increase(mycount[1h]):计算单个Pod在1小时内的Counter增量(即该Pod处理的消息数)。
  • sum(...):聚合所有Pod的增量,得到全局每小时总处理量,正好匹配你示例中的20、20、1、20这类数据。

若要计算每秒处理速率(可转换为每小时总量),也可以用rate函数,结果与increase写法完全一致:

sum(rate(mycount{job="你的后台服务标识"}[1h])) * 3600

3. 波动告警与Grafana图表实现

波动告警配置

针对13-14点这类异常低峰场景,可通过对比当前小时处理量与历史平均值设置告警规则,示例PromQL:

sum(increase(mycount[1h])) < avg_over_time(sum(increase(mycount[1h]))[6h:1h]) * 0.2
  • 逻辑:如果当前小时处理量低于过去6小时每小时平均处理量的20%,触发告警(阈值可根据业务实际调整)。

Grafana图表实现

  • 小时级波动图表:
    指标使用sum(increase(mycount[1h])),时间范围选择「最近24小时」,步长设置为「1小时」,即可展示每小时的处理量波动曲线。
  • 日级每小时平均处理量图表:
    指标使用avg_over_time(sum(increase(mycount[1h]))[1d:1h]),逻辑是统计过去1天内,每个小时区间的处理量平均值(比如每天11点的平均处理量、12点的平均处理量),完全符合你要的「日级每小时平均」需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:05:11