Runbook 结构
用固定模板结构化 runbook:症状、诊断、步骤、验证、升级。
为什么
凌晨 3 点无人读一墙散文的 runbook — 值班工程师扫 30 秒若找不到"我做什么"就瞎来。固定模板(症状 → 诊断 → 步骤 → 验证 → 升级)使 runbook 可扫:症状确认"是这是我的告警"、步骤编号可复制粘贴、验证告诉何时停、升级告诉何时放弃。这结构也使 runbook 20 分钟可写而非 2 小时,因作者填表而非写散文。采用模板的团队报一周 内 80% runbook 写于告警后,无模板则 20% — 结构去写摩擦。
何时使用
创建任何告警前或立即后。每告警须链接此结构 runbook。
如何做
1. 每 runbook 用固定模板 ## <告警名> **症状:** 用户术语下告警意味什么 **诊断:** 如何确认这是对的 runbook(查询、仪表盘链接) **步骤:** 编号、可复制粘贴命令、每步带预期输出 **验证:** 如何确认问题解决 **升级:** 步骤不工作时 page 谁 2. 症状用用户术语非指标术语 - "结账错误率 >1%" → "用户无法完成购买" - 值班需知用户影响非仅指标 3. 步骤编号且可复制粘贴 - "1. 跑:kubectl get pods -n checkout | grep Crash" - "2. 若 pod 崩,跑:kubectl logs <pod> --tail=50" - 每步有命令和预期输出 — 无散文 4. 含验证 - "确认:结账仪表盘错误率 <0.1% 持续 5m" - 这告诉值班何时停并宣布解决 5. 从告警链接 runbook - 告警注解:runbook_url;paging 系统在 page 中展示它 - runbook 在稳定 URL(git 版本化,非会腐的 Confluence 页)
示例
# runbook/checkout-slo-burn.md ## CheckoutSLOBurnRateFast **症状:** 用户无法完成购买;结账错误率 >1%。 **严重性:** SEV1(影响收入)— 立即 page。 **诊断:** 1. 开结账仪表盘:https://grafana/d/checkout 2. 确认过去 5m 错误率 >1%(若 <1%,告警过期 — 关它) 3. 按路由查错误分解:哪个端点在失败? **步骤:** 1. 查最近部署: ```bash kubectl rollout history deploy/checkout -n checkout | head -5 ``` 若最近 30m 有部署 → 可能是因。到步 2。 2. 回滚上次部署: ```bash kubectl rollout undo deploy/checkout -n checkout ``` 预期:"deployment rolled back" 3. 若无最近部署 → 在服务图查下游依赖: https://grafana/d/servicemap?focus=checkout 若依赖挂 → page 那队值班。 **验证:** - 确认结账仪表盘错误率 <0.1% 持续 5m - 确认 SLO 燃烧率 <1x **升级:** - 若回滚失败 → page payments-platform 副值班 - 若依赖健康且错误持续 → page @checkout-sme
常见问题
- ⚠散文墙非编号步骤 — 值班凌晨 3 点无法扫且瞎响应,更慢更险。
- ⚠无验证步 — 值班跑修复但不知何时停,故事件多留"调查中"20 分钟。
- ⚠runbook 在 Confluence 非 git — 静默腐、链接断、无人注意直到真实事件撞 404。
- ⚠症状用指标术语("错误率 >1%")非用户术语("用户无法买")— 值班不懂紧急度且欠响应。
最佳实践
- ✓每 runbook 用固定模板(症状、诊断、步骤、验证、升级)— 凌晨 3 点可扫且 20 分钟可写。
- ✓症状用用户术语("用户无法买")非指标术语;值班需影响非查询。
- ✓步骤编号带可复制粘贴命令和预期输出;无散文 — 值班执行非读散文。
- ✓runbook 存 git 稳定 URL 非 Confluence;从告警注解链接使 paging 系统在 page 中展示它。