3. 自愈剧本原理:事件驱动自愈、剧本触发条件、剧本执行流程、回滚机制
自愈剧本是 SLO 自愈体系的核心执行单元。它接收可观测性平台发出的事件信号,按照预定义的触发条件进行匹配,然后执行一系列自动化操作,并在失败时触发回滚。理解剧本的完整生命周期,是提升自愈精准度的关键前提。
3.1 事件驱动自愈模型
自愈剧本采用事件驱动架构,而非轮询或定时检查。当 SLI 采集链路检测到指标异常并生成告警事件后,事件总线将事件推送给订阅了该事件类型的剧本引擎。这种模型具备低延迟、高扩展性和松耦合的特点。
核心优势: 事件驱动模型将“检测”与“响应”解耦,剧本引擎无需关心 SLI 如何采集,只需处理标准化的事件负载。
3.2 剧本触发条件
触发条件是剧本的“准入控制”。一个事件是否触发剧本执行,需要经过多层条件校验,避免误触发或无效执行。
| 条件类型 | 说明 | 示例 |
|---|---|---|
| 事件类型匹配 | 剧本只订阅特定的事件类型(如 error_budget_burn、latency_breach) | 仅处理 error_budget_burn 事件 |
| 严重级别过滤 | 根据告警的严重级别(P0/P1/P2)决定是否触发 | 仅 P0 和 P1 级别触发自愈 |
| 标签/属性匹配 | 事件携带的标签(service、cluster、region)必须与剧本规则匹配 | service=payment, region=us-east-1 |
| 冷却期检查 | 同一资源在冷却期内不重复触发,防止风暴 | 冷却期 300 秒 |
| 依赖条件 | 前置条件必须满足(如上游服务健康、变更窗口) | 当前不在变更冻结期 |
最佳实践: 触发条件应尽量精确。建议将冷却期和依赖条件作为必选配置,避免剧本在变更窗口或上游故障期间盲目执行。
3.3 剧本执行流程
一个标准的自愈剧本执行流程包含 5 个阶段:事件接收、条件校验、动作编排、执行确认、结果反馈。每个阶段都有明确的输入输出和错误处理逻辑。
3.3.1 动作编排示例
动作编排是剧本的核心逻辑,通常包含多个步骤。以下是一个典型的“Pod 重启”剧本的动作编排示例:
# 自愈剧本:Pod 重启恢复
# 触发条件:error_budget_burn & service=payment & severity=P0
steps:
- name: "获取异常 Pod 列表"
action: kubernetes.get_pods
params:
namespace: "payment"
label_selector: "app=payment-service"
status: "CrashLoopBackOff|Error"
- name: "执行 Pod 重启"
action: kubernetes.delete_pod
params:
pod_name: "{{ steps.get_pods.result[0].name }}"
namespace: "payment"
timeout: 30s
- name: "等待 Pod 恢复"
action: kubernetes.wait_for_pod_ready
params:
pod_name: "{{ steps.delete_pod.result.name }}"
namespace: "payment"
timeout: 120s
- name: "验证 SLI 恢复"
action: sli.check_health
params:
service: "payment"
metric: "latency_p99"
threshold: "< 200ms"
timeout: 60s
3.4 回滚机制
回滚是自愈剧本的安。当剧本执行过程中出现任何步骤失败、超时或验证不通过时,必须触发回滚操作,将系统恢复到执行前的状态。
| 回滚触发场景 | 回滚动作 | 说明 |
|---|---|---|
| 步骤执行失败 | 执行该步骤的逆操作 | 如重启失败,则恢复原 Pod 配置 |
| 步骤超时 | 中止当前步骤,执行回滚 | 超时视为不可恢复,立即回滚 |
| 验证步骤不通过 | 回滚所有已执行的动作 | SLI 未恢复,说明操作无效或有害 |
| 剧本引擎异常 | 全局回滚 + 人工介入 | 引擎自身故障,需要人工确认 |
3.4.1 回滚策略设计原则
- 幂等性: 每个动作和回滚动作都必须是幂等的,多次执行结果一致。
- 原子性: 要么全部执行成功,要么全部回滚,不允许部分生效。
- 可观测性: 回滚过程必须记录详细日志和指标,便于事后分析。
- 人工兜底: 对于高风险操作,回滚后应自动通知 SRE 介入确认。
注意: 回滚不是万能的。对于数据变更类操作(如修改数据库配置),回滚可能无法完全恢复。这类剧本应设置更高的触发门槛,并强制人工审批。
3.5 剧本生命周期总结
自愈剧本从事件触发到回滚完成,形成一个完整的闭环。理解这个闭环,有助于我们在设计 SLI 采集链路时,确保事件数据的完整性、时效性和准确性,从而提升自愈剧本的精准度。
| 阶段 | 关键动作 | 对 SLI 采集的要求 |
|---|---|---|
| 事件驱动 | 事件生成与推送 | SLI 采集延迟 < 30s,事件携带完整标签 |
| 触发条件 | 条件匹配与过滤 | SLI 标签标准化,支持精确匹配 |
| 执行流程 | 动作编排与执行 | SLI 实时数据用于验证步骤 |
| 回滚机制 | 状态恢复与通知 | SLI 历史数据用于回滚决策 |