在查询页手动跑 expr 返回的值已经超过阈值,告警页面却一直是 inactive,只有 restore,从来没出现过 firing。日志里能对上时间点,这种反而好排。
规则文件没被 rule_files 的通配路径覆盖到,或者 for 比 evaluation_interval 长出太多,也可能是标签匹配写错导致分组成空。这一点先确认清楚,后面就不用反复试。
promtool check rules /etc/prometheus/rules/*.yml curl -s localhost:9090/api/v1/rules | jq -c '.data.groups'
「告警规则不触发」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:在 rules 页面确认这条规则真的被加载;核对评估间隔和 for 的倍数关系是否合理;把 expr 原样贴回查询页看返回值是否稳定越线。
结果对不对很好判断,规则状态从 inactive 走到 pending 再到 firing,通知能按时收到。
