Prometheus 告警的生命周期是怎样的?
Prometheus 告警生命周期:Inactive(未触发)→ Pending(表达式返回该标签集但未满 for 时长)→ Firing;条件消失且保持期结束后回到 Inactive,恢复通知取决于 Alertmanager 配置。Alertmanager 侧还有分组、静默、抑制与通知去重。本文讲清全链路。
告警在 Prometheus 中有三个状态:表达式未返回该标签集的向量元素时是 Inactive;返回该元素但未持续满 for 时长是 Pending;持续满足后进入 Firing 并发送给 Alertmanager,由它完成分组、路由、静默后通知到人。
Prometheus 侧的三态
表达式未返回该标签集且无保持期 → Inactive
表达式返回该标签集,for 未满 → Pending(告警规则页可见,但还不通知)
连续评估返回该标签集满 for 时长 → Firing(发送给 Alertmanager)
表达式不再返回该元素 → 无 keep_firing_for 保持期时,下轮评估转为 Inactive,并报告恢复
告警按向量元素是否存在判断,数值为0也可能仍触发;比较表达式加 bool 会保留0值元素,不能把它误当过滤。keep_firing_for 可在条件消失后继续保持Firing。
for 是防抖核心:for: 10m 表示连续 10 分钟成立才告警,瞬时尖刺不会打扰值班人。
Alertmanager 侧的处理
- 分组(group_by):同组告警合并成一条通知;
- 路由(route):按标签匹配通知渠道(钉钉/邮件/PagerDuty);
- 静默(Silence):维护窗口期屏蔽指定匹配的告警;
- 抑制(Inhibition):高级别告警触发时压住低级别(如节点宕机抑制该节点的服务告警);
- 去重/等待:
group_wait、group_interval、repeat_interval控制通知节奏。
完整链路一图流
规则评估 → Pending → Firing → Alertmanager 分组/路由/静默 → 通知渠道 → 恢复后是否通知取决于接收器配置和发送结果;规则状态不等于通知已送达。
常见问题(FAQ)
Q:Pending 期间会通知吗? 不会,只有 Firing 才发给 Alertmanager。
Q:恢复通知怎么开? Alertmanager 的 receiver 里 send_resolved: true,默认值因集成而异,应检查具体receiver文档。
Q:告警风暴怎么压? 合理 group_by + 抑制规则 + repeat_interval 拉长。