从监控到闭环:Prometheus + Alertmanager 实操指南
前面几篇聊闭环的理论和设计,这篇落地到具体工具。Prometheus + Alertmanager 是当下最主流的监控告警组合,也是大部分团队搭建闭环的起点。
但很多人的用法只停在”采集+告警”,没有走到”自动动作”那一步。这篇把从监控到闭环的完整链路串起来。
前提:Prometheus 基础架构
假设你已经有了基本的 Prometheus 部署。如果没有,快速过一下核心组件:
- Prometheus Server — 采集和存储指标
- Alertmanager — 告警路由、去重、静默
- Pushgateway — 短生命周期任务的指标中转(可选)
- Grafana — 可视化面板
闭环的核心在 Prometheus 的 recording rule + alerting rule + Alertmanager 的 routing + webhook。画个图:
1 | [应用/服务] → [Exporter] → [Prometheus] → [Recording Rules] |
关键:Webhook 是闭环的入口。 Alertmanager 通过 webhook 把告警推给你的自动化服务,自动化服务执行动作。
第一步:用 Recording Rule 预计算指标
直接在告警规则里做复杂计算是个坏习惯——Prometheus 每次评估告警都要重算一遍,性能差且不好复用。Recording Rule 把计算结果存成新指标,后续直接用。
1 | # prometheus_rules.yml |
Recording Rule 的好处是可复用。service:error_rate_5m 这个指标,告警用、面板用、闭环决策也用,算一次到处用。
第二步:告警规则设计
告警规则是闭环的”感知”环节。设计原则:告警要可操作,不可操作的告警是噪音。
1 | # alert_rules.yml |
注意两个关键设计:
for字段 — 告警必须持续一段时间才触发,避免毛刺。1-5 分钟是常见值。actionlabel — 标注建议的闭环动作。这让 Alertmanager 可以根据 action 做路由。
第三步:Alertmanager 路由
Alertmanager 不只是发告警,它能根据标签做精细化路由——不同严重程度走不同通道,不同动作类型走不同处理逻辑。
1 | # alertmanager.yml |
send_resolved: true 很重要——闭环的恢复动作靠的是”告警恢复”信号。
第四步:闭环控制器
Webhook 接收端是闭环的”决策+执行”环节。一个简单的实现:
1 | # loop_controller.py |
这就是一个最小可用的闭环控制器。200 行代码,接收 Alertmanager 的 webhook,执行降级/恢复/扩容,记日志。
第五步:验证闭环生效
闭环上线后,怎么验证它真的管用?
1. 混沌测试。 主动注入故障,看闭环是否能自动恢复。
1 | # 用chaos-mesh注入延迟 |
注入 3 分钟延迟,观察闭环是否在 1 分钟内自动降级支付服务,延迟消失后是否自动恢复。
2. 告警回溯测试。 把过去一周的真实告警数据重放给闭环控制器,看它会做出什么决策,和当时的人工决策对比。
3. 准确率监控。 记录每次自动动作的结果,统计准确率:
1 | # 每周跑一次 |
准确率低于 80% 就该调参,低于 50% 就该关掉自动动作。
几个实操建议
1. Alertmanager 的 inhibit 规则要用上。 critical 告警触发时,自动静默同服务的 warning 告警,避免告警风暴。
1 | inhibit_rules: |
2. 静默窗口。 大促期间手动设置静默,暂时屏蔽非关键告警。或者反过来——大促期间降低告警阈值,更早感知问题。
3. 分环境配置。 测试环境的告警不进闭环,只有生产环境的 critical 告警才触发自动动作。用 Prometheus 的 external_labels 区分:
1 | # prometheus.yml (生产) |
从监控到闭环,Prometheus + Alertmanager 的链路就这样。核心不是工具多复杂,是把感知→决策→执行→验证的闭环逻辑理清楚,工具只是载体。
相关阅读:
- Prometheus 官方文档 - Recording Rules & Alerting Rules
- Alertmanager 官方文档 - Routing & Inhibition
- Chaos Mesh - Kubernetes 混沌工程工具