amtool alert add DiskFull severity=warning --annotation=summary=test amtool alert resolve DiskFull curl -s localhost:9093/api/v2/alerts | jq '.[].status.state'
磁盘使用率告警发了 3 条,指标回落到 60% 以后没有收到任何恢复消息。Alertmanager 的 UI 里状态已经是 inactive,接收群里最后一条还是 2 小时前的 firing。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,receiver 里 send_resolved 默认是 false,不显式打开就只发 firing。用 webhook 自建通知时,模板里也只处理了 firing 分支,resolved 进来后被渲染成空消息。
围绕「send_resolved 恢复通知」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
处理上按这个顺序:在每个 receiver 下显式写 send_resolved: true;检查模板里有没有对 Status 做分支 补上 resolved 的文案;用 amtool 造一条告警再 resolve 观察两次投递;确认恢复消息带上 fingerprint 方便对上原始告警。
改完只确认一件事:手动 resolve 后 10 秒内收到一条恢复消息,内容里带原始告警名。
