4. 告警自愈剧本概述
告警自愈是运维自动化的高级形态,指系统在检测到异常指标后,无需人工介入,自动执行预定义的修复动作,使服务恢复到正常状态。在 Prometheus 生态中,告警自愈通常由 Alertmanager 触发 Webhook,再由自动化引擎(如 Ansible、Kubernetes Operator、自研脚本)执行修复逻辑。
4.1 什么是告警自愈
告警自愈的核心闭环包含四个阶段:检测 → 决策 → 执行 → 验证。与传统告警流程相比,自愈流程将“人工排障”替换为“剧本驱动”,大幅缩短 MTTR(平均修复时间)。
| 阶段 | 传统告警流程 | 告警自愈流程 |
|---|---|---|
| 检测 | Prometheus 触发告警 | Prometheus 触发告警 |
| 决策 | 值班人员查看告警、分析根因 | Alertmanager 匹配自愈路由规则 |
| 执行 | 人工 SSH 登录、执行命令 | Webhook 调用自动化剧本 |
| 验证 | 人工观察指标是否恢复 | 自动查询指标或健康检查接口 |
关键指标: 自愈成功率 ≥ 95%,单次自愈耗时 ≤ 60 秒,误触发率 ≤ 1%。
4.2 常见自愈场景
根据故障类型和修复手段,告警自愈场景可分为以下五类:
- 进程/服务重启:检测到进程挂掉或端口无响应,自动执行 systemctl restart 或容器重启。
- 磁盘/内存清理:磁盘使用率超过阈值,自动清理日志、临时文件或扩容临时存储。
- 配置回滚:配置变更导致服务异常,自动回滚到上一个稳定版本。
- 流量调度:单节点负载过高,自动将流量摘除或触发弹性伸缩。
- 证书/密钥续期:SSL 证书即将过期,自动调用 ACME 协议续签并 reload 服务。
实战建议: 优先对“幂等且低风险”的场景实施自愈,例如重启无状态服务、清理临时文件。有状态服务(如数据库主节点)需加入人工确认环节。
4.3 自愈与自动化运维的关系
自动化运维是自愈的基础,自愈是自动化运维在故障场景下的闭环应用。两者并非替代关系,而是能力递进:
| 维度 | 自动化运维 | 告警自愈 |
|---|---|---|
| 触发方式 | 定时、手动、CI/CD 触发 | 告警事件实时触发 |
| 执行目标 | 部署、配置、巡检 | 故障恢复、状态修复 |
| 失败处理 | 记录日志、通知人工 | 自动重试、降级、升级告警 |
| 安全要求 | 中等(操作可回滚) | 高(需防误操作、防雪崩) |
常见误区: 不要试图用自愈覆盖所有故障。对于“未知根因”或“需要跨团队协调”的故障,自愈剧本应主动放弃并升级为 P0 级人工告警,避免自动化造成二次破坏。
4.4 自愈剧本的核心要素
一个完整的告警自愈剧本应包含以下五个要素:
- 触发条件:匹配的告警名称、标签、严重级别。
- 执行环境:目标主机、容器、集群或 API 端点。
- 修复动作:具体的命令、脚本或 API 调用。
- 安全防护:执行前检查(如当前时间窗口、操作锁、幂等性校验)。
- 验证与回滚:修复后检查指标是否恢复,失败时执行回滚或升级。