如何避免Prometheus误触发‘错误已恢复’的告警?
Prometheus误发错误恢复告警的解决办法
问题描述
按照相关指南配置Prometheus错误告警,使用的告警表达式为:
expr: increase(my_error_metric[15m]) > 0
但当错误持续存在时,15分钟后系统会误触发“错误已恢复”的告警,实际问题并未得到修复。
原因分析
increase(my_error_metric[15m])的判断逻辑是看过去15分钟内错误指标的增量是否大于0。如果错误持续但没有产生新的计数(比如错误一直发生但计数器停止增长,或者错误频率极低),连续15分钟内没有增量的话,increase会返回0,Prometheus就会判定告警已恢复。
解决思路
1. 改用sum_over_time配合for子句
用sum_over_time统计过去15分钟内的错误总量,只要总量大于0就保持告警状态,再通过for子句过滤瞬时波动:
expr: sum_over_time(my_error_metric[15m]) > 0 for: 1m
这样只有当连续1分钟以上,过去15分钟内完全没有错误时,才会触发恢复告警。
2. 用rate函数监控错误速率
如果错误指标是计数器类型,用rate监控短窗口内的错误发生速率,配合for子句确保告警持续:
expr: rate(my_error_metric[5m]) > 0 for: 1m
只要5分钟窗口内有错误发生的速率大于0,告警就会保持触发状态,避免长窗口无增量导致的误恢复。
3. 关闭恢复通知(激进方案)
如果不需要接收错误恢复的通知,可以在Alertmanager配置中对该告警关闭恢复发送:
routes: - match: alertname: 你的错误告警名称 receiver: 你的接收方配置 send_resolved: false
内容的提问来源于stack exchange,提问作者Joseph Cen
相关产品推荐
相关产品推荐

