PrekshaShah2509/incident-response-runbook
GitHub: PrekshaShah2509/incident-response-runbook
一份覆盖事件全生命周期的实用响应手册,帮助工程团队将故障应对从即兴发挥转变为标准化执行。
Stars: 0 | Forks: 0
# 事件响应手册
一份供工程团队使用的、全面且可复刻改编的事件响应手册。它涵盖了完整的事件生命周期:在系统故障前的准备工作、检测与分类、执行响应、沟通、恢复以及事后复盘。
大多数事件响应的失败并非技术原因。它们往往是在压力下做出的决策:谁负责指挥、什么情况才算严重、谁需要知情,以及在事件关闭前必须达成什么结果。本手册提前确定了这些决策,从而让响应过程变成纯粹的执行,而非即兴发挥。
## 目录
1. [事件生命周期](#incident-lifecycle)
2. [准备清单](#preparedness-checklist)
3. [检测与告警](#detection-and-alerting)
4. [严重性分类](#severity-classification)
5. [角色与职责](#roles-and-responsibilities)
6. [事件处理期间](#during-the-incident)
7. [沟通](#communication)
8. [解决与恢复](#resolution-and-recovery)
9. [复盘](#postmortem)
10. [事件指标](#incident-metrics)
11. [深度指南](#deep-dive-guides)
12. [模板](#templates)
13. [根据公司规模调整](#adapting-by-company-size)
14. [使用说明](#how-to-use)
15. [贡献](#contributing)
16. [许可证](#license)
## 事件生命周期
```
Prepare -> Detect -> Declare -> Respond -> Resolve -> Learn
| | | | | |
runbooks alerting severity mitigate verify postmortem
on-call triage and IC and comms recovery and actions
```
每个阶段都包含一些提前决定成本远低于临时决定的决策。以下各部分为每个阶段提供了相应的检查清单。
## 准备清单
在事件发生前所做的工作决定了事件的走向。详见 [guides/preparedness.md](guides/preparedness.md)。
### On-Call 基础
- [ ] 定义了包含主要负责人和指定备选人员的 On-call 轮班机制
- [ ] On-call 时间表已发布并对全团队可见
- [ ] 寻呼工具已配置并进行了端到端测试
- [ ] 工作时间之外也能确实联系到每一位 On-call 工程师
- [ ] 定义了 On-call 补偿或调休政策
- [ ] 记录了轮班之间的交接流程
### 就绪状态
- [ ] 定义了事件协调渠道并确保所有人都知晓
- [ ] 定义了事件指挥官的轮换或指定方法
- [ ] 严重性定义已记录在案,并附有具体示例
- [ ] 为每个严重级别定义了升级上报路径
- [ ] 服务归属已明确映射:每个关键服务都有指定的负责人
- [ ] 响应人员可访问生产环境诊断工具
- [ ] 紧急破窗访问流程已定义并经过审计
- [ ] 状态页面已配置并完成测试
### 演练
- [ ] 针对过去发生过的事件,至少进行过一次桌面演练
- [ ] 定期安排故障注入演练或 Game Day
- [ ] 新响应人员在主导事件前先进行跟班学习
- [ ] 为每个服务最可能出现的故障模式编写了相应的 Runbook
## 检测与告警
你无法响应你检测不到的问题。详见 [guides/detection-and-alerting.md](guides/detection-and-alerting.md)。
### 告警质量
- [ ] 告警需与面向客户的症状挂钩,而不仅仅是内部指标
- [ ] 每个告警都必须是可操作的:它能告诉响应人员该检查什么
- [ ] 告警阈值经过调优,以减少噪音和误报
- [ ] 审查告警疲劳:修剪或修复嘈杂的告警
- [ ] 每个告警都链接到相关的 Runbook 或仪表板
- [ ] 关键路径具备合成监控或端到端监控
### 分诊
- [ ] 首席响应人员能在几分钟内确认影响范围
- [ ] 响应人员能够看到最近的变更(部署、配置、开关)
- [ ] 依赖项的健康状况是可观测的,并能进行归因分析
- [ ] 存在明确的“这算不算事件”的界定标准
## 严重性分类
严重性由客户和业务影响决定,而不是由修复难度决定。完整矩阵详见 [guides/severity.md](guides/severity.md)。
| 级别 | 定义 | 示例 |
| :--- | :--- | :--- |
| SEV1 | 严重。正在发生大规模中断或数据丢失,已确认对收入或安全造成影响。 | 核心服务宕机、正在发生的数据损坏、正在进行的安全漏洞攻击。 |
| SEV2 | 主要。存在严重降级但有应对方案,或部分客户完全受阻。 | 关键功能不可用、错误率升高、单一区域宕机。 |
| SEV3 | 次要。影响有限或仅为表面问题,没有客户完全受阻。 | 非关键 endpoint 响应缓慢、单租户边缘情况、内部工具降级。 |
- [ ] 严重性定义已记录并共享
- [ ] 每个级别编写了二到三个真实案例
- [ ] 定义了分歧处理规则:在证据表明可以降级之前,按较高级别处理
- [ ] 指定了严重性级别的决策者(通常是事件指挥官)
## 角色与职责
对于 SEV1 和 SEV2,必须在开始时明确指定这些角色。在小型团队中,一个人可以担任多个角色,但仍需大声明确说出这些角色的分配。详见 [guides/roles.md](guides/roles.md)。
- [ ] 指定 **事件指挥官 (IC)**。负责整体响应,而非具体修复。负责决策和委派。不参与 Debug。
- [ ] 指定 **运维负责人**。主导技术调查和修复。
- [ ] 指定 **沟通负责人**。负责向利益相关者和客户发布更新。
- [ ] 指定 **记录员**。记录观察到的情况、做出的决策以及对应的时间轴。
- [ ] 每个角色都清楚自己负责什么、不负责什么
- [ ] 如果 IC 需要交接,必须有备选人员可用
## 事件处理期间
实时响应。快速参考卡详见 [checklist/quick-reference.md](checklist/quick-reference.md)。
### 最初的 5 分钟
- [ ] 宣布发生事件并分配严重性级别
- [ ] 指定事件指挥官
- [ ] 开启专用的事件沟通渠道
- [ ] 确认范围:谁受到了影响、从什么时候开始的、最近发生了什么变更
- [ ] 开始记录时间轴
### 稳定局势
- [ ] 首先缓解。在追究根本原因之前先恢复服务
- [ ] 考虑最快且安全的手段:回滚、feature flag、扩容、failover
- [ ] 未经 IC 签字同意,避免在活跃的 SEV1 事件中进行风险大、猜测性的修复
- [ ] 将所有决策保留在事件渠道中
### 协调
- [ ] 由一个人(即 IC)代表响应团队对外发声
- [ ] 响应人员在采取行动前需先说明他们将要做什么
- [ ] 分配并行的调查任务,而不是即兴发挥
- [ ] 记录员保持时间轴是最新的
## 沟通
按时发布简短的更新胜过迟到的详细更新。详见 [guides/communication.md](guides/communication.md)。
| 级别 | 内部更新 | 外部更新 |
| :--- | :--- | :--- |
| SEV1 | 每 30 分钟 | 确认客户受到影响后立即更新,随后按固定间隔更新 |
| SEV2 | 每 60 分钟 | 如果客户受到影响则更新 |
| SEV3 | 解决时 | 通常无需更新 |
- [ ] 开始并保持内部更新节奏,即使没有新消息
- [ ] 确定外部沟通的负责人
- [ ] 如果客户受到影响,需更新状态页面
- [ ] 根据严重性阈值通知领导层
- [ ] 将“无变化,仍在调查中”视为有效的更新
- [ ] 确保支持团队和面向客户的团队保持信息同步
## 解决与恢复
- [ ] 确认客户影响已结束,而不仅仅是清除了告警
- [ ] 跟踪临时的缓解措施,以便进行彻底修复
- [ ] 如果数据存在风险,需验证数据完整性
- [ ] 正式结束沟通节奏
- [ ] 状态页面恢复正常
- [ ] 标记事件为已解决,并记录结束时间
- [ ] 在事件关闭前排定复盘会议
## 复盘
对事不对人。目标是找出系统和流程本应展现出什么,而不是追究谁漏掉了它。模板见 [templates/postmortem.md](templates/postmortem.md),详见 [guides/postmortem.md](guides/postmortem.md)。
- [ ] 在规定的窗口时间内安排复盘会议
- [ ] 根据事件记录重构时间轴
- [ ] 量化客户影响
- [ ] 将促成因素作为客观条件记录下来,而不是归咎于个人
- [ ] 记录做得好的地方,而不仅仅是失败之处
- [ ] 行动项有明确的负责人和截止日期
- [ ] 至少记录一项**监控埋点变更**行动项
- [ ] 持续跟踪行动项直至完成,而不仅仅是归档了事
## 事件指标
跟踪趋势,而非单一数字。详见 [guides/metrics.md](guides/metrics.md)。
| 指标 | 告诉你的信息 |
| :--- | :--- |
| MTTD (平均检测时间) | 你发现问题的速度。较长的 MTTD 指向检测盲区。 |
| MTTA (平均响应时间) | 寻呼机制和 On-call 是否在起作用。 |
| MTTR (平均解决时间) | 整体响应的健康度,需作为趋势来观察。 |
| 按严重程度统计的事件数 | 系统是变得越来越稳定还是越来越不稳定。 |
| 复发率 | 复盘是否真正防止了重复事件的发生。 |
| 产生埋点变更的事件比例 | 经验教训是否正在转化为系统的可观测性。 |
## 深度指南
| 指南 | 涵盖内容 |
| :--- | :--- |
| [guides/preparedness.md](guides/preparedness.md) | On-call、归属权、Game Day、事件发生前的准备。 |
| [guides/detection-and-alerting.md](guides/detection-and-alerting.md) | 可操作的告警、分诊、减少噪音。 |
| [guides/severity.md](guides/severity.md) | 严重性矩阵、边缘情况、分歧处理。 |
| [guides/roles.md](guides/roles.md) | 深入探讨 IC、Ops、Comms、Scribe。 |
| [guides/communication.md](guides/communication.md) | 内部和外部沟通、状态页面、领导层。 |
| [guides/postmortem.md](guides/postmortem.md) | 无指责复盘与行动纪律。 |
| [guides/metrics.md](guides/metrics.md) | 测量什么以及如何解读。 |
| [guides/scaling-by-company-size.md](guides/scaling-by-company-size.md) | 从初创公司到企业平台如何调整该 Runbook。 |
## 模板
| 模板 | 用途 |
| :--- | :--- |
| [templates/incident-report.md](templates/incident-report.md) | 实时事件记录。 |
| [templates/postmortem.md](templates/postmortem.md) | 无指责复盘。 |
| [templates/status-update.md](templates/status-update.md) | 内部和外部更新的措辞。 |
| [templates/severity-matrix.md](templates/severity-matrix.md) | 填写严重性定义。 |
| [templates/on-call-handoff.md](templates/on-call-handoff.md) | 轮班交接。 |
实战案例位于 [examples/](examples/) 目录:包含一次处理得当的事件、一次处理糟糕的事件,以及从中得出的经验教训。
## 根据公司规模调整
从 5 人的初创团队到企业级平台组织,其结构都是相同的。变化的是每个角色由多少人担任,以及流程的正式程度。有关初创、中型、大型和企业级团队的配置详见 [guides/scaling-by-company-size.md](guides/scaling-by-company-size.md)。
无论规模大小都不变的是:
- 严重性由影响决定,绝非由修复的难度决定。
- 指定一名总指挥,他们负责决策而不是 Debug。
- 在追究根本原因之前先恢复服务。
- 即使没有新消息,也要保持更新节奏。
- 每次复盘都必须产出监控埋点变更,否则同类事件还会发生。
## 使用说明
1. **采用:** 将此代码库 fork 到你自己的仓库中,存放在 `docs/` 或 `incidents/` 目录下。
2. **填充:** 填入严重性示例、On-call 轮班和协调渠道。
3. **选择规模:** 阅读扩展指南,并根据实际情况进行删减或规范化。
4. **演练:** 在正式投入实战前,针对过去的事件进行一次桌面演练。
5. **改进:** 在每次 SEV1 和 SEV2 事件后审查book。它是否与实际响应的需求相匹配?
## 许可证
MIT。详见 [LICENSE](LICENSE)。随意使用、改编并发布。欢迎注明出处,但不作强制要求。
由工程主管 Preksha Shah 维护。更多工程实践与文章请访问 [preksha-shah.vercel.app](https://preksha-shah.vercel.app) 和 [LinkedIn](https://www.linkedin.com/in/preksha-shah-065552183/)。
标签:IT服务管理, 团队协作, 库, 应急响应, 文档模板, 运维, 防御加固