Skip to content
返回运维与 SRE

Runbook 测试

在 staging 定期测 runbook 使真实事件中首次执行非首次测。

为什么

未测 runbook 是假设 — 它看着对、命令写时可能工作,但 6 月系统变静默坏它:服务改名、DB 迁移、kubectl 插件删。你首次发现是真实事件中,值班跑 runbook 得错误,现须调试 runbook 和事件。在 staging 季度测 runbook(过步骤或跑脚本 --apply)在真实事件依赖前抓腐。这与测代码同洞见:未测代码在 prod 坏,未测 runbook 在事件中坏。季度 runbook 测试成本 30 分钟;SEV1 中坏 runbook 成本 15 分钟困惑调试加使事件更糟的风险。

何时使用

所有 runbook 季度、影响它们的系统变后立即、高风险发布前。

如何做

1. 排季度 runbook 测试日
   - 同游戏日节奏;可合(游戏日在场景中测 runbook)
   - 每 runbook:15-30 分钟在 staging 过

2. 文档 runbook:在 staging 手动过步骤
   - 复制粘贴每命令;成功?输出匹配预期?
   - 点每链接;解析?仪表盘显示 runbook 说的?
   - 跑验证;它真确认解决?

3. 可执行 runbook:在 staging 跑脚本 --apply
   - 在 staging 注入失败(混沌工具),再跑脚本
   - 它检测问题?执行修复?验证解决?
   - 记结果:过/失败、什么坏了

4. 修或删失败 runbook
   - 坏 runbook 比无 runbook 更糟(误导值班)
   - 修小 → 同会话修;大 → 工单和负责人

5. 跟踪通过率作指标
   - "staging 测试过 runbook / 总数" — 目标 >90%
   - 通过率降 → 系统变超 runbook 更新

示例

# 季度 runbook 测试(staging)
# runbook/checkout-slo-burn.md — 在 staging 过:
1. 注入失败:部署坏版本到 staging 结账
2. 告警在 staging 触发(或手动触发)
3. 开 runbook:https://rb/checkout-slo-burn
4. 步 1:kubectl rollout history → ✅ 显示坏部署
5. 步 2:kubectl rollout undo → ✅ "deployment rolled back"
6. 验证:错误率 <0.1% 持续 5m → ✅ 确认
7. 结果:过

# runbook/db-failover.md — 过:
1. 杀 staging DB 主(ChaosMesh)
2. 步 1:提升副本 → ❌ 命令是 --promote,runbook 说 --take-over
3. 结果:失败 — runbook 过期
4. 行动:工单"修 db-failover.md 步 1 命令"(负责人:@team-platform,到期:1w)

# 指标:过 runbook / 总数 = 18/20 = 90% ✅(目标 >90%)
# 失败的 2 个已开工单将在下季前修

常见问题

  • ⚠无匹配 prod 的 staging 环境 — runbook 在 staging 测过在 prod 失因配置、规模或依赖异。
  • ⚠测试是一次性努力 — runbook 写时过但数月内随系统变腐;测试须季度。
  • ⚠仅测快乐路径 — runbook 在失败如所述时工作但真实事件有变;也测边界。
  • ⚠无通过率跟踪 — 无指标则 runbook 腐到真实事件才见,这是最坏发现时。

最佳实践

  • ✓季度在 staging 测每 runbook;过步骤(文档)或跑脚本 --apply(可执行)并记过/失败。
  • ✓保持 staging 近 prod(配置、规模、依赖)使 staging 过的 runbook 在 prod 过。
  • ✓同会话修或删失败 runbook;坏 runbook 比无 runbook 更糟因误导值班。
  • ✓跟踪"staging 测试过 runbook / 总数"作指标;目标 >90%,降时调查 — 系统变超更新。