Prometheus规则评估原理:为何expr持续不满足时仅触发一次告警
问题结论
不是,Prometheus 不会在每次 expr 符合告警触发条件时都重复生成新告警,仅在告警从非激活状态首次进入触发状态时产生一次告警记录。
原因说明
- 首先纠正一个常见误区:
for: 1s不是指规则每秒评估一次,告警规则的评估间隔由 Prometheus 全局配置的evaluation_interval参数决定(默认1分钟),for字段的作用是:当 expr 连续多次评估结果都为真、且持续时长超过for配置的值时,才会正式触发告警。 - Prometheus 告警有三个固定状态流转:
Inactive:规则表达式评估为假,无告警Pending:表达式首次评估为真,还未达到for配置的等待时长Firing:表达式持续为真超过for配置时长,告警正式触发
- 同一个告警(标签集完全匹配的告警实例)只要处于
Firing状态,就只会保留一条活跃告警记录,对应ALERTS指标里值为1的时间序列,不会重复生成新的告警。你多次删除 Pod 的过程中,告警触发条件一直成立,expr 持续返回真,告警一直处于Firing状态没有恢复过,所以只会产生一次告警记录。只有当 expr 评估为假、告警回到Inactive状态后,再次符合触发条件才会生成新的告警。
内容的提问来源于stack exchange,提问作者overexchange
相关产品推荐
相关产品推荐

