Runbook、演练和复盘:只写"重启、扩容、清队列"的 Runbook 不能用
新人按 Runbook 恢复时需要知道触发证据、适用版本、精确目标和停止条件——"重启一下"不是恢复方案。本页定义可执行 Runbook、分层演练与可验收的复盘行动项。事故中的角色与止损见事故指挥与沟通结构。
runbook必须可执行与可退出
Runbook 描述触发条件、确认信号、低风险动作、停止条件和升级路径;它应避免把未经验证的命令复制到生产环境。高风险步骤需双人检查和数据保护。一份有效runbook写触发证据、适用版本/权限、只读检查、操作目标、预期变化、停止条件、回退/前向修复及验证。只写"重启、扩容、清队列"不能让新人安全恢复。具体目标用服务/分片/租户身份定位,不用宽泛通配符操作全部资源。
示例积压恢复:先核对最老任务、流入/处理速率、错误类型和下游配额;毒消息进入可重放隔离,不直接删除;逐步增加处理能力但保持数据库与渠道预算;达到期限的任务按业务规则终结。清队列会消灭已受理意图,应是有明确授权的业务动作,不能当常规诊断。
演练需要检验假设
Runbook 演练验证不仅是流程可运行,还包括权限、负责人、监控、恢复时间、数据校验和依赖。演练频率由故障风险和变更速度决定。桌面推演验证角色、状态与恢复方案;进程故障验证本地恢复;多节点网络分区验证主权与日志;机房故障还包含共享网络/控制面,单机多容器不能证明。每次演练给故障注入、停止阈值与数据保护范围,不对现有用户服务随意操作。
假设积压12万、流入1000/秒、恢复处理1500/秒,理想4分钟追平;演练若8分钟,分析重试、热点和回写瓶颈,不直接把模型公式删掉。原始结果与预期差异是学习证据。积压净追赶的通用推导见队列网络、扇出与瓶颈迁移。
复盘如何变成改进
无责复盘聚焦系统条件、检测缺口、决策和缓解措施,不把"人为失误"作为终点解释。参考Google无责复盘。无责不等于无责任:仍需修复系统保护、文档与演练,并在下一轮故障条件下验证。按检测、止损、恢复、根因、促成因素和未发生的更坏结果组织。根因可能是配置、交互、流程与资源条件组合,不把某个人的最后操作当唯一解释。
行动项需有负责人、优先级、截止条件和后续效果验证;"加强意识"无法验收。两种改进应比较预防概率、恢复时间、复杂度和维护成本,避免事故后一次性堆功能。
交付检查
交给未参与编写者执行隔离恢复,观察它是否能根据证据选正确分支、停止危险步骤并给业务恢复结论。记录runbook版本和最后验证时间;依赖升级后复核命令与权限。
复盘产物的证据链:从时间线到可验收行动
本页前面讲了复盘要无责、行动项要可验收,但没有给出可检查的产物结构。复盘报告的价值不在于"我们学到了什么",而在于每条结论都能沿证据链追到时间线、促成因素与验证动作。
证据链四段:时间线(检测、决策、执行、恢复各段耗时与证据来源)、促成因素(技术、流程、组织,每条附"若无它会怎样"的反事实)、行动项(负责人、期限、可观察的验证信号)、验证结果(下一次演练或运行中确认行动项生效)。缺任何一段,结论都只是叙述。
反例:"团队加强监控意识"不是行动项——没有负责人、没有期限、没有可观察信号。可验收的写法是"最老任务年龄超过 5 分钟告警上线,负责人 SRE,期限 11 月 15 日,用注入 12 万积压验证告警在 60 秒内触发"。另一个反例是把"增加更多指标"当改进:如果促成因素是"没有按租户分层",增加全局指标不会修复它。
行动项还要区分预防与恢复:预防降低发生概率,恢复缩短影响时间,两者成本与验证方式不同。复盘里同时记录"未发生的更坏结果"(如果当时不是低峰、如果重试再放大一倍),它揭示的是运气还是设计裕度。
执行 python3 labs/observability_models.py postmortem_actions:模型把三条行动项按"负责人/期限/可观察信号"三要素过滤,预期 valid 两条、rejected 一条且文本为 "raise awareness"。脚本只做规则检查,不评价真实复盘质量。
两个合理选择:A 复盘只写根因与改进方向,轻量但行动容易落空;B 四段证据链加三要素过滤,重但每条行动可追踪。本例选 B,并规定复盘关闭条件是"行动项全部有验证结果或明确接受剩余风险",而不是"报告写完"。
架构师变化条件
把恢复目标从 4 分钟收紧到 2 分钟:净追赶需要 3000/秒处理或压低流入,Runbook 的能力预算、下游保护阈值与自动暂停条件全部重算。若演练发现权限不足(新人无法访问隔离队列),改进项是权限模型而不是再加一段文档。复盘发现两个事故共享同一促成因素(如同一配置通道)时,行动项应合并为系统性修复并验证覆盖面。每次演练后更新 Runbook 版本与最后验证时间。
闭卷验收
本页 8 道闭卷题收进了下方自测面板:先回忆,再展开参考答案与评分点,最后给三档自评。