2. Runbook 编排概述
2.1 Runbook 的定义
Runbook(运维手册)是一套结构化的、可重复执行的文档化流程,用于指导运维人员处理标准操作、故障响应或变更执行。在可观测性与 SRE 语境下,Runbook 将隐性的运维经验转化为显性的、可审计的操作步骤,是组织从“英雄式救火”走向“工程化运维”的关键载体。
核心特征: 可重复性、可审计性、可自动化、版本化。
| 维度 | 传统运维文档 | SRE Runbook |
|---|---|---|
| 触发方式 | 人工查阅、经验驱动 | 告警事件自动触发、Pipeline 集成 |
| 更新频率 | 被动、滞后 | 随管线变更持续迭代 |
| 验证机制 | 无或手动验证 | 自动化测试 + 回滚演练 |
| 回滚支持 | 依赖个人记忆 | 内置回滚步骤与决策树 |
2.2 Runbook 在 SRE 中的角色
Runbook 在 SRE 体系中承担着“操作层标准化”与“知识层沉淀”的双重角色。它连接了可观测性告警与具体的恢复动作,是 SRE 核心原则——减少琐事(Toil)、可靠性工程化——的具体落地工具。
2.3 回滚 Runbook 的核心要素
回滚 Runbook 是专门针对变更失败场景设计的特殊 Runbook。它必须具备以下核心要素,才能在高压故障场景下指导操作员快速、安全地恢复服务。
- 触发条件:明确哪些告警、指标异常或变更状态触发回滚流程。
- 回滚决策树:根据故障影响范围、变更类型、管线阶段,提供分支判断逻辑。
- 原子操作步骤:每一步必须是可独立执行、可验证的原子操作,避免“执行若干步骤”等模糊描述。
- 验证点:每个关键步骤后设置验证点,确认操作生效或判断是否需要升级。
- 回退路径:当主回滚路径失败时,提供备选方案或升级通道。
- 状态记录:操作过程中的关键输出、时间戳、决策原因必须记录,用于事后复盘。
| 要素 | 说明 | OTel 管线场景示例 |
|---|---|---|
| 触发条件 | 明确启动回滚的信号 | OTel Collector 内存使用率 > 90% 且持续 5 分钟 |
| 决策树 | 分支判断逻辑 | 影响范围:单节点 → 回滚配置;全集群 → 回滚版本 |
| 原子步骤 | 最小可执行操作单元 | 步骤 3:执行 helm rollback otel-collector 1 |
| 验证点 | 操作生效检查 | 检查 otelcol_metrics_dropped 指标归零 |
| 回退路径 | 主路径失败时的备选 | 升级至 SRE 值班组,执行手动数据恢复 |
| 状态记录 | 操作审计与复盘 | 记录回滚开始/结束时间、操作人、决策原因 |
2.4 回滚 Runbook 的设计原则
设计回滚 Runbook 时,必须遵循以下原则,确保其在真实故障场景中可用、可靠、可维护。
设计原则总览: 可执行性 > 完备性 > 美观性。一份在 5 分钟内能执行完的 Runbook,远胜于一份覆盖所有边界但需要 30 分钟阅读的文档。
2.4.1 可执行性
每条指令必须精确到可直接复制到终端执行的程度。避免使用“检查 Collector 状态”这类模糊描述,应改为:
# 检查 OTel Collector 健康状态
curl -s http://localhost:13133/health | jq '.healthy'
# 预期输出:true
2.4.2 可验证
每个关键步骤后必须附带验证点,明确“如何确认这一步执行成功”。验证点应关联可观测性指标:
# 验证步骤:确认回滚后数据不再丢失
# 指标:otelcol_metrics_dropped
# 命令:
curl -s http://localhost:8888/metrics | grep otelcol_metrics_dropped
# 预期:该指标在回滚后 2 分钟内归零
2.4.3 幂等性
回滚操作必须支持重复执行而不产生副作用。例如,配置回滚应使用版本号而非“回滚到上一个版本”,因为“上一个”在并发场景下可能产生歧义。
2.4.4 最小权限
Runbook 中使用的凭证、、密钥应遵循最小权限原则。回滚操作只应授予恢复服务所需的最小权限集,避免在故障场景下扩大攻击面。
2.4.5 可审计
所有操作步骤、决策分支、时间戳、操作人必须被记录。在 OTel 管线场景中,这些审计日志应通过 OTel Collector 自身导出到集中日志平台,形成闭环。
常见反模式: 将回滚 Runbook 写成“操作指南”而非“执行脚本”。例如:“如果回滚失败,请尝试其他方法”——这种表述在故障场景下毫无价值。回滚 Runbook 必须提供明确的备选路径和升级条件。