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

如何计算Prometheus中当前告警与1分钟前告警的数量差值

原有查询问题说明

你之前使用的count_over_time函数的作用是统计指定时间区间内的样本总数量,而非统计某一时刻的告警活跃条数,两个不同区间的count_over_time结果相减自然无法得到两个时间点的告警数量差值。

正确实现方案

使用PromQL的offset偏移修饰符即可实现需求,基础查询语句如下:

count(ALERTS{job="m60"}) OR vector(0) - (count(ALERTS{job="m60"} offset 1m) OR vector(0))

语句说明:

  • count(ALERTS{job="m60"}):统计当前时刻的活跃告警总条数,每一个触发中的告警对应一条独立的ALERTS时序,count求和后就是当前告警总数
  • offset 1m:指定查询1分钟前的时序数据,用来获取1分钟前的告警总条数
  • OR vector(0):处理空值场景,当某一时刻没有活跃告警时,count结果会返回空值,用OR vector(0)可以将空值替换为0,避免相减后得到无效的空结果

如果需要仅统计firing状态的告警(排除pending状态),可以额外添加alertstate标签过滤:

count(ALERTS{job="m60", alertstate="firing"}) OR vector(0) - (count(ALERTS{job="m60", alertstate="firing"} offset 1m) OR vector(0))

上述查询返回的结果完全匹配你的需求:结果为正代表当前告警比1分钟前增多,结果为负代表告警减少,直接配置到Grafana的面板中即可正常展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:39:03