2. Runbook 基础概念

在构建事故响应值班机器人之前,必须理解 Runbook 的核心定义与组成。Runbook 不是普通的脚本,而是一套可执行、可编排、可审计的故障处理知识库。本章从定义、组成要素和与脚本的差异三个维度建立基础认知。

2.1 Runbook 的定义

Runbook(运行手册)是一份结构化的、可重复执行的故障处理流程文档,它将运维专家的经验转化为机器可读的步骤序列。在自动化故障自愈场景中,Runbook 是值班机器人的“大脑”——它告诉机器人:当什么事件发生、在什么条件下、执行什么操作、如何判断成功或失败。

关键认知: Runbook 的本质是“决策树 + 动作序列”的标准化封装。它既包含人类可读的说明,也包含机器可执行的指令。

2.2 Runbook 的组成要素

一个完整的 Runbook 由三个核心要素构成:触发器(Trigger)、条件(Condition)、动作(Action)。三者缺一不可,形成“事件 → 判断 → 执行”的闭环。

要素 定义 典型示例 在值班机器人中的角色
触发器 启动 Runbook 的外部事件或信号 Prometheus Alertmanager 告警、Webhook 回调、定时 Cron 监听入口,决定“何时启动”
条件 执行动作前必须满足的判定逻辑 告警级别 == critical、服务状态 == down、时间窗口在 09:00-18:00 决策节点,决定“是否执行”
动作 满足条件后执行的具体操作序列 重启服务、扩容 Pod、回滚版本、发送通知、创建工单 执行单元,决定“做什么”

以下 SVG 展示了 Runbook 三要素在故障自愈流程中的串联关系:

Runbook 三要素串联流程 触发器 告警 / Webhook / 定时 条件 级别判定 / 状态检查 动作 重启 / 扩容 / 回滚 条件不满足 → 跳过 / 升级 说明: 条件判定是 Runbook 的核心安全阀。条件不满足时,动作不执行,避免误操作。 值班机器人通过条件分支实现“自愈 or 升级”的智能决策。

2.3 Runbook 与自动化脚本的区别

很多团队将 Runbook 等同于 Shell 或 Python 脚本,这是常见的认知误区。两者在设计目标、可观测性、复用性、安全控制等方面存在本质差异。下表从 6 个关键维度进行对比:

对比维度 Runbook 自动化脚本
设计目标 标准化故障处理流程,可编排、可审计 完成特定计算或操作任务
执行方式 事件驱动 + 条件判定 + 动作编排 命令行调用或定时触发
可观测性 内置日志、指标、状态回调、人工确认点 通常只有 stdout/stderr 输出
复用性 参数化模板,可跨环境、跨服务复用 通常硬编码,环境耦合度高
安全控制 支持审批流、熔断、回滚、权限校验 依赖外部包装,自身无安全机制
故障处理 步骤级失败处理 + 自动回滚 + 升级通知 脚本异常退出,缺乏恢复逻辑
常见误区: 不要将 Runbook 写成“带注释的脚本”。Runbook 的核心价值在于编排能力——它应该像乐高积木一样,将原子脚本组合成可决策、可回滚、可审计的故障处理流水线。

以下 SVG 从架构层面展示 Runbook 与普通脚本在系统集成上的差异:

Runbook vs 自动化脚本:架构对比 自动化脚本 硬编码逻辑 if-else 直接写在代码中 无状态执行 失败即退出,无恢复逻辑 环境耦合 路径、变量、密钥硬编码 Runbook 编排引擎 触发器层 条件判定层 动作编排层 审计 & 回滚层 升级

2.4 一个简单的 Runbook 示例

以下是一个“Nginx 进程异常退出自动重启”的 Runbook 伪代码,展示三要素如何落地:

# Runbook: nginx_auto_restart
# 版本: v1.2
# 负责人: SRE Team

trigger:
  type: alert
  source: prometheus
  alert_name: "NginxProcessDown"
  severity: critical

condition:
  - check: "告警持续时间 > 30秒"
    operator: ">"
    value: 30
  - check: "当前实例数 > 0"
    operator: ">"
    value: 0
  - check: "最近1小时内未执行过此Runbook"
    operator: "not_executed_in"
    value: "1h"

action:
  - step: 1
    name: "获取实例信息"
    command: "kubectl get pod -l app=nginx -o json"
    on_failure: "abort_and_escalate"

  - step: 2
    name: "重启Nginx容器"
    command: "kubectl rollout restart deployment/nginx"
    timeout: 120
    on_failure: "rollback_and_notify"

  - step: 3
    name: "健康检查"
    command: "curl -f http://localhost/health"
    retry: 3
    interval: 10
    on_success: "clear_alert"
    on_failure: "escalate_to_oncall"
要点总结:
  • Runbook 是事件驱动 + 条件判定 + 动作编排的标准化故障处理单元。
  • 三要素(触发器、条件、动作)构成 Runbook 的骨架,缺一不可。
  • Runbook 与脚本的核心区别在于:可编排性、可观测性、安全控制、复用性。
  • 值班机器人的核心能力就是将 Runbook 解析为可执行的故障自愈流水线。