4. 自愈流程概述

自愈流程是 Error Budget 超限后触发 Runbook 自动执行的核心环节。它并非简单的自动化脚本,而是一套具备感知、决策、执行与验证能力的闭环机制。本节将明确自愈的定义、与自动化的本质区别,并拆解其核心要素。

4.1 自愈的定义

自愈(Self-Healing)是指系统在检测到异常或故障后,无需人工干预,自动执行预定义的恢复策略,使服务恢复到正常状态的能力。在 SRE 语境下,自愈流程通常由 Error Budget 消耗速率或剩余阈值触发,是保障服务等级目标(SLO)的最后一道防线。

关键特征: 闭环、无人工介入、可观测驱动、策略可编程。

4.2 自愈与自动化的区别

自动化是自愈的基础,但自愈在决策能力和反馈机制上要求更高。下表从多个维度对比两者的差异:

维度 自动化 自愈
触发方式 定时、事件、手动 可观测指标异常 + 策略匹配
决策能力 固定逻辑(if-then) 多条件判断、回滚、降级、熔断
反馈闭环 执行即结束 执行 → 验证 → 恢复 → 通知
失败处理 报错或重试 回滚、告警升级、人工介入
目标 减少重复操作 维持 SLO、降低 MTTR
实践建议: 优先将高频、低风险的故障场景自动化;当自动化覆盖率达到 80% 以上时,再逐步引入自愈策略。

4.3 自愈流程的核心要素

一个完整的自愈流程包含以下五个核心要素,它们共同构成闭环:

  1. 感知(Perception):通过指标、日志、链路追踪等可观测数据,实时检测异常。常见信号包括:Error Budget 消耗速率、错误率、延迟 P99、饱和度。
  2. 决策(Decision):根据预定义的策略引擎(如规则引擎、策略表、ML 模型),判断当前异常是否触发自愈动作,以及选择何种恢复策略。
  3. 执行(Execution):调用 Runbook 中的原子操作,如重启实例、扩缩容、切换流量、回滚版本、降级功能等。
  4. 验证(Verification):执行后再次检查关键指标,确认恢复是否成功。若失败,则进入回滚或升级流程。
  5. 记录与通知(Recording & Notification):将自愈过程、结果、耗时记录到事件平台,并通知相关团队。
避坑提示: 自愈流程必须设置最大执行次数和冷却时间,防止“自愈风暴”——即系统反复触发自愈导致资源耗尽或状态混乱。

4.4 自愈流程闭环架构

下图展示了自愈流程的闭环架构,从感知到通知形成完整链路:

自愈流程闭环架构图 自愈流程闭环架构 ① 感知 (Perception) ② 决策 (Decision) ③ 执行 (Execution) ④ 验证 (Verification) ⑤ 记录 & 通知 验证失败 执行失败 闭环要点 • 验证失败 → 回退到决策 • 执行失败 → 回退到决策 • 冷却时间 & 最大重试次数

4.5 自愈流程的触发条件与策略分级

并非所有异常都适合自愈。根据 Error Budget 消耗速率和严重程度,可将自愈策略分为三个等级:

等级 触发条件 典型动作 风险
L1 轻量自愈 Error Budget 消耗速率 > 阈值 120% 重启实例、清理缓存、重试队列 低
L2 标准自愈 Error Budget 剩余 < 30% 且持续消耗 扩缩容、切换 AZ、回滚版本 中
L3 紧急自愈 Error Budget 剩余 < 10% 或 SLO 即将违反 熔断、降级、全局流量切换 高
设计原则: L1 自愈可全自动执行;L2 建议加入“人工确认窗口”(如 60 秒内无人取消则自动执行);L3 必须触发告警升级,由值班 SRE 确认后执行。

4.6 自愈流程的 Runbook 模板结构

一个标准自愈 Runbook 应包含以下字段,确保可重复执行和审计:

# 自愈 Runbook 模板
---
name: "error_budget_exhaustion_self_heal"
version: "1.2.0"
trigger:
  metric: "error_budget_remaining_ratio"
  condition: "< 0.3"
  duration: "5m"
steps:
  - id: "step_1_perception"
    action: "query_metrics"
    params:
      metrics: ["error_rate", "p99_latency", "saturation"]
  - id: "step_2_decision"
    action: "evaluate_strategy"
    params:
      strategy_table: "config/self_heal_strategies.yaml"
  - id: "step_3_execution"
    action: "run_playbook"
    params:
      playbook: "{{ strategy.playbook }}"
  - id: "step_4_verification"
    action: "verify_recovery"
    params:
      check_interval: "30s"
      max_retries: 3
  - id: "step_5_notification"
    action: "send_alert"
    params:
      channel: "pagerduty"
      severity: "critical"
rollback:
  action: "rollback_last_step"
  timeout: "120s"
cool_down: "300s"
max_executions: 3
关键字段说明: cool_down 防止自愈风暴;max_executions 限制单次故障的自愈次数;rollback 定义失败后的回滚动作。

通过以上定义与结构,自愈流程不再是简单的自动化脚本,而是一套具备感知、决策、执行、验证、回滚能力的闭环系统,能够有效降低 MTTR,保障 Error Budget 不超支。