Prometheus中Error_pods告警未触发问题排查求助
我在Prometheus中配置了如下告警规则:
- alert: Error_pods expr: sum by (namespace) (kube_pod_status_ready{namespace="gradl-enterprise", condition="false"}) > 0 for: 5m
能看到该查询在对应时间段内有数据返回,但告警始终处于Normal状态,无法触发。
补充说明:我还尝试了以下规则,依然无效:
- alert: Error_pods expr: sum by (namespace) (kube_pod_status_ready{namespace="gradl-enterprise", condition="false"}) > bool 0 for: 5m
排查方向及解决建议
确认
for时间段内数据是否持续达标
Prometheus的for要求查询结果在整个5分钟内持续满足>0,而非某一刻有数据。在Prometheus UI用范围查询sum by (namespace) (kube_pod_status_ready{namespace="gradl-enterprise", condition="false"})[5m:],查看过去5分钟的时间序列是否全程大于0。如果中间有某一刻值回到0,告警就不会触发。检查指标实际取值
单独查询kube_pod_status_ready{namespace="gradl-enterprise", condition="false"},确认每个实例的取值是不是1。如果该指标在condition="false"时本身就是0,那sum后结果还是0,自然不满足>0的条件。验证告警规则是否正确加载
打开Prometheus的/rules页面,查看Error_pods规则是否存在且状态正常。如果没加载,检查配置文件路径是否正确、YAML语法有没有缩进错误(YAML对缩进要求严格),或者查看Prometheus日志有没有报错信息。确认评估间隔与等待时间
告警规则默认1分钟评估一次,for:5m意味着至少要等5个评估周期(即5分钟)才会触发。如果刚改完规则就查看,可能还没到触发时机。> bool的无效性说明> bool只是把比较结果转成0/1的布尔值,要是原sum结果本身是0,加bool后依然是0,满足不了告警触发的条件(告警需要表达式返回非空且值为1),所以这个改动解决不了问题。
内容的提问来源于stack exchange,提问作者Caio Gomes

