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 三要素在故障自愈流程中的串联关系:
2.3 Runbook 与自动化脚本的区别
很多团队将 Runbook 等同于 Shell 或 Python 脚本,这是常见的认知误区。两者在设计目标、可观测性、复用性、安全控制等方面存在本质差异。下表从 6 个关键维度进行对比:
| 对比维度 | Runbook | 自动化脚本 |
|---|---|---|
| 设计目标 | 标准化故障处理流程,可编排、可审计 | 完成特定计算或操作任务 |
| 执行方式 | 事件驱动 + 条件判定 + 动作编排 | 命令行调用或定时触发 |
| 可观测性 | 内置日志、指标、状态回调、人工确认点 | 通常只有 stdout/stderr 输出 |
| 复用性 | 参数化模板,可跨环境、跨服务复用 | 通常硬编码,环境耦合度高 |
| 安全控制 | 支持审批流、熔断、回滚、权限校验 | 依赖外部包装,自身无安全机制 |
| 故障处理 | 步骤级失败处理 + 自动回滚 + 升级通知 | 脚本异常退出,缺乏恢复逻辑 |
常见误区: 不要将 Runbook 写成“带注释的脚本”。Runbook 的核心价值在于编排能力——它应该像乐高积木一样,将原子脚本组合成可决策、可回滚、可审计的故障处理流水线。
以下 SVG 从架构层面展示 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 解析为可执行的故障自愈流水线。