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 服务。
实战建议: 优先对“幂等且低风险”的场景实施自愈,例如重启无状态服务、清理临时文件。有状态服务(如数据库主节点)需加入人工确认环节。
告警自愈闭环流程 Prometheus 告警 Alertmanager 路由 Webhook 触发 自愈剧本执行 健康检查验证 恢复/升级告警 验证失败 → 重新触发或升级为人工告警

4.3 自愈与自动化运维的关系

自动化运维是自愈的基础,自愈是自动化运维在故障场景下的闭环应用。两者并非替代关系,而是能力递进:

维度 自动化运维 告警自愈
触发方式 定时、手动、CI/CD 触发 告警事件实时触发
执行目标 部署、配置、巡检 故障恢复、状态修复
失败处理 记录日志、通知人工 自动重试、降级、升级告警
安全要求 中等(操作可回滚) 高(需防误操作、防雪崩)
常见误区: 不要试图用自愈覆盖所有故障。对于“未知根因”或“需要跨团队协调”的故障,自愈剧本应主动放弃并升级为 P0 级人工告警,避免自动化造成二次破坏。
自动化运维能力分层 基础设施自动化(CMDB / 容器编排 / 网络配置) 运维任务自动化(部署 / 变更 / 巡检 / 备份) 告警自愈(故障检测 → 自动修复 → 验证) 基础层 应用层 智能层

4.4 自愈剧本的核心要素

一个完整的告警自愈剧本应包含以下五个要素:

  1. 触发条件:匹配的告警名称、标签、严重级别。
  2. 执行环境:目标主机、容器、集群或 API 端点。
  3. 修复动作:具体的命令、脚本或 API 调用。
  4. 安全防护:执行前检查(如当前时间窗口、操作锁、幂等性校验)。
  5. 验证与回滚:修复后检查指标是否恢复,失败时执行回滚或升级。