这类问题我又碰上了一次。一套 Prometheus 加 Alertmanager 的监控日均告警两百多条,运维把群消息设成免打扰,结果磁盘写满那条被漏掉,第二天业务反馈才发现。
第一反应是「告警不分级,全部走同一个通道」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。阈值按静态值设,业务高峰必然触发;同一条规则对多个实例各发一次,没有聚合;恢复通知和告警混在一起,群里刷屏。
动手时先统计一周内触发次数最多的规则
curl -s http://10.0.0.41:9093/api/v2/alerts | python -m json.tool | grep alertname | sort | uniq -c | sort -rn | head
随后按服务与级别做分组路由
amtool config routes show --config.file=/etc/alertmanager/alertmanager.yml
接着把静态阈值改成基于基线的动态值
grep -n 'expr' /etc/prometheus/rules/node.yml | head
末了分级路由让严重告警走电话
amtool check-config /etc/alertmanager/alertmanager.yml
怎么算真的好了,看的是同一批现象。一周后日均告警降到二十条以内,严重级别全部有响应记录,磁盘类告警能在五分钟内送达。
告警治理的目标是让每条告警都有人看,不是把数量压到零;先删没人处理的规则,再谈阈值优化。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
