3. 自愈剧本概念:什么是自愈剧本、剧本的生命周期

在 SLO 驱动的运维体系中,自愈剧本(Self-Healing Playbook)是将人工故障处理经验转化为自动化执行逻辑的核心载体。它不再依赖运维人员逐条执行命令,而是通过预定义的检测、决策、执行与验证闭环,让系统在 SLO 偏离时自动触发修复动作。

3.1 什么是自愈剧本

自愈剧本是一组结构化的、可编排的自动化规则与动作序列,它定义了:

  • 触发条件:哪些 SLO 指标或事件会启动剧本(如错误预算耗尽、P99 延迟超过阈值)。
  • 决策逻辑:根据当前系统状态选择最合适的修复策略(如扩容、重启、流量切换)。
  • 执行动作:通过 Kubernetes API、监控系统或配置中心执行的具体操作。
  • 验证标准:判断修复是否成功的 SLO 回退条件。
关键区别:自愈剧本不同于传统告警触发脚本。剧本强调状态感知与闭环验证,而非简单的“告警-执行-结束”线性流程。剧本在执行过程中会持续评估系统状态,避免过度修复或重复执行。

3.2 剧本的生命周期:检测-决策-执行-验证

每个自愈剧本都遵循一个标准的四阶段生命周期,形成完整的闭环。下表总结了各阶段的核心任务与输出:

阶段 核心任务 关键输出 典型工具/组件
检测 持续采集 SLO 指标,识别异常偏离 触发事件、上下文快照 Prometheus、Datadog、自定义 Exporter
决策 基于规则引擎或模型选择修复策略 修复方案、风险评分 OPA、Celery、决策树
执行 调用 Kubernetes API 或基础设施接口 操作日志、变更记录 kubectl、Helm、Argo Workflows
验证 确认 SLO 是否恢复,评估副作用 验证结果、回滚决策 PromQL 查询、健康检查

下图展示了自愈剧本的完整生命周期流转,以及各阶段之间的反馈关系:

自愈剧本生命周期流程图 检测 SLO 指标采集 异常识别 决策 策略匹配 风险评分 执行 K8s API 调用 变更实施 验证 SLO 回退检查 副作用评估 回滚/重试 持续监控反馈 图例说明 正向流程 回滚/重试反馈 持续监控反馈

3.3 各阶段详细说明

3.3.1 检测阶段

检测是剧本的起点。系统通过 Prometheus 等监控工具持续采集 SLO 指标(如请求成功率、延迟分布),当指标突破预设的阈值或错误预算耗尽时,生成触发事件。检测阶段需要附带上下文快照,包括当前 Pod 状态、节点资源、流量模式等,为后续决策提供依据。

检测示例(PromQL 触发条件):
# 当 5 分钟内错误率超过 5% 时触发
sum(rate(http_requests_total{status=~"5.."}[5m])) 
/ 
sum(rate(http_requests_total[5m])) > 0.05

3.3.2 决策阶段

决策引擎接收检测事件后,根据预定义的规则或模型选择修复策略。常见决策方式包括:

  • 规则匹配:基于 OPA(Open Policy Agent)编写条件-动作规则,如“如果错误率 > 5% 且 CPU < 80%,则执行扩容”。
  • 风险评分:对多个候选策略进行风险评估,选择影响最小的方案(如优先重启而非全量回滚)。
  • 熔断机制:当系统处于不稳定状态时,跳过执行阶段,直接进入验证或告警。

3.3.3 执行阶段

执行阶段通过 Kubernetes API 或基础设施接口实施修复动作。典型执行操作包括:

  • 水平扩缩容:调整 Deployment 的 replicas 或 HPA 配置。
  • 滚动重启:触发 Pod 滚动更新以恢复异常进程。
  • 流量切换:将流量从异常实例迁移至健康实例(如修改 Service 端点)。
  • 配置回滚:将 ConfigMap 或环境变量恢复至上一稳定版本。
执行安全:所有执行动作必须记录审计日志,并设置最大执行次数限制(如最多扩容 3 次),防止剧本陷入无限循环。建议在执行前通过 Dry-Run 模式验证操作可行性。

3.3.4 验证阶段

验证是闭环的关键。执行完成后,系统重新评估 SLO 指标,判断是否恢复到安全阈值内。验证结果分为三种:

  • 成功:SLO 恢复正常,剧本结束,记录成功案例。
  • 部分恢复:指标改善但未完全达标,触发二次决策或升级告警。
  • 失败:指标恶化或无变化,执行回滚操作并通知运维人员。

下图展示了验证阶段的分支逻辑,以及如何与决策阶段形成闭环:

验证阶段分支决策图 验证执行结果 成功:SLO 恢复 部分恢复 失败:指标恶化 剧本结束 二次决策 执行回滚 通知运维人员

3.4 剧本设计原则

编写自愈剧本时,应遵循以下原则以确保稳定性和可维护性:

  • 幂等性:同一剧本重复执行应产生相同结果,避免副作用累积。
  • 渐进式修复:从影响最小的动作开始(如重启 Pod),逐步升级到大规模操作(如全量回滚)。
  • 超时与熔断:每个阶段设置超时时间,超时后自动熔断并告警。
  • 可观测性:剧本执行过程必须输出结构化日志和指标,便于事后审计。
实践建议:在 Kubernetes 环境中,建议将自愈剧本定义为 CRD(Custom Resource Definition),通过 Operator 模式管理剧本的生命周期。这样可以利用 Kubernetes 原生的控制器循环,实现声明式的自愈编排。