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

Prometheus AlertManager 错误发送告警已解决通知问题咨询

问题根因分析

  • 聚合查询空值匹配逻辑问题:你当前使用的sum by(pcName) (cm_summary{regState="p_online"}) == 0逻辑存在漏洞:当某一个pcName在Prometheus规则评估瞬间没有对应regState的样本时,sum函数会返回NaN而非0,NaN == 0的判断结果为空,整条告警查询不会返回该pcName的时序,Prometheus会判定告警恢复;下一个评估周期样本正常返回后,条件重新满足,告警再次触发。这是概率性出现该问题的最常见原因,和你描述的随机间隔触发恢复的特征完全匹配。
  • 指标抓取时间差跨评估窗口:如果cm_summary指标的scrape_interval(抓取间隔)接近甚至大于告警规则的evaluation_interval(评估间隔),不同regState的样本抓取时间戳存在毫秒级偏差时,可能出现在某个评估时间点,部分regState的最新样本还未入库,导致对应sum结果为空,触发告警恢复。
  • 指标数值瞬时抖动:如果cm_summary指标对应regState的计数值存在毫秒级的跳变(比如瞬间从0变为1又立刻回落),刚好被Prometheus的规则评估捕获到,也会导致临时不满足==0的条件,触发恢复通知。
  • 规则组评估资源不足:如果该告警规则所在的规则组包含大量高复杂度查询,Prometheus规则评估线程资源不足时会出现评估延迟,部分评估周期被跳过,导致告警状态出现异常翻转。

修复方案

你可以先使用如下优化后的查询替换原有告警规则,观测问题是否复现:

(
  sum by(pcName) (cm_summary{regState="p_online"} or on(pcName) sum(cm_summary) by(pcName) * 0) == 0 
  and sum by(pcName) (cm_summary{regState="nb_online"} or on(pcName) sum(cm_summary) by(pcName) * 0) == 0 
  and sum by(pcName) (cm_summary{regState="f40_online"} or on(pcName) sum(cm_summary) by(pcName) * 0) == 0 
) 
and on(pcName) (sum(cm_summary) by (pcName) >= 5)

上述查询通过or算子给没有对应regState样本的pcName补0,避免空值导致的判断失效。

如果修改后问题仍然存在,可以依次排查:

  • 检查该告警规则所在规则组的evaluation_interval配置,建议设置为指标抓取间隔的2倍以上
  • 检查Prometheus日志中是否存在规则评估超时、评估跳过的相关报错
  • 对触发异常的pcName拉取对应3类regState指标的历史曲线,确认是否存在数值跳变情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:15:05