编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 质量保障

  • 产品思考

  • 软实力

  • 开发流程

    • README
    • 敏捷开发实践指南
    • Scrum框架入门指南
    • 版本发布流程设计
    • 代码分支管理策略
    • 需求评审方法实践
    • 项目管理工具指南
    • 线上事故响应流程
      • 一、事故发生的三分钟——做对这三件事
      • 二、止损——四种武器
      • 三、事故指挥官——不是官衔,是职责
      • 四、复盘——不追责,追根因
        • 4.1 复盘不是批斗会
        • 4.2 复盘报告的结构
        • 4.3 复盘产出必须是 actionable 的
      • 五、事故分级——不是所有问题都是 P0
      • 六、小结
    • 技术文档管理规范
  • Git应用

  • 技术模版

  • 技术规范

  • markdown

  • mermaid

  • license

  • 博客部署

  • 技术招聘

  • 测试经验

  • 技术
  • 开发流程
杨充
2019-07-13
目录

线上事故响应流程

# 线上事故响应流程

告警→定位→止损→复盘→改进——出事后前三分钟最重要

# 一、事故发生的三分钟——做对这三件事

告警响了,你的第一反应是什么?
  ❌ 慌 → 本能地打开代码找 bug → 找了 20 分钟没找到 → 用户一直在受影响
  ❌ 在群里说"我去看一下" → 没人知道你在看什么,也没人知道谁在协调

✅ 前三分钟的标准动作:
  第 1 分钟:确认影响面
    → 多少人受影响?核心功能还是边缘功能?哪个服务/接口?
    → 直接看监控面板,不是去猜

  第 2 分钟:宣布事故
    → 在事故响应群里发:时间、现象、影响面、当前在做什么
    → 指定 Incident Commander(事故指挥官,通常是第一个发现的人或 oncall)

  第 3 分钟:止损优先
    → 重启?回滚?降级?切流量?——先止血,再找根因
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

前三分钟的铁律:止血优先于查因。 用户不关心你用了什么架构,用户只关心"功能什么时候恢复"。你花 20 分钟定位到根因但用户已经流失了——这不是英雄,这是事故处理失败。


# 二、止损——四种武器

武器 怎么做 耗时 适用场景
Feature Flag 关掉有问题的新功能开关 秒级 新功能引发的故障
回滚 部署上一个已知稳定的版本 5-15 分钟 刚上线的新版有 bug
降级 关闭非核心功能,保证核心路径可用 分钟级 整体负载过高或有级联故障
切换 把流量切到备用集群/灾备环境 分钟级 基础设施故障(机房/云服务)

你至少要有两种止损手段。 如果只有一个"等运维回滚"——你的止损能力就是运维的响应速度,不靠谱。


# 三、事故指挥官——不是官衔,是职责

事故指挥官(IC)的职责不是自己修——是让修的人不被干扰。

IC 做什么:
  ① 宣布事故级别(P0/P1/P2),决定是否需要全团队 stop-the-line
  ② 确认影响面,通知 stakeholders(运营/客服/管理层)
  ③ 协调各小组分工:一组止血,一组查根因,一组和外部团队沟通
  ④ 记录时间线:几点几分做了什么,结果如何
  ⑤ 决定什么时候宣布事故结束

IC 不做什么:
  ① 不亲自排查代码(除非团队只有一个人)
  ② 不接受"好像修好了"——必须确认修复措施已验证
1
2
3
4
5
6
7
8
9
10
11
12

# 四、复盘——不追责,追根因

# 4.1 复盘不是批斗会

❌ "这次事故是谁的锅?"
  → 一旦开始追责,没有人会如实描述发生了什么。复盘的价值归零。

✅ "我们的什么流程/工具/监控放过了这个错误?"
  → 即使是一个人的疏忽——为什么系统允许一个人的疏忽造成事故?
  → 没有 code review 拦住?没有自动化测试覆盖?没有灰度?
1
2
3
4
5
6

# 4.2 复盘报告的结构

## 事故概要
- 时间:2024-01-15 14:30 - 15:20(持续 50 分钟)
- 级别:P1(核心支付功能不可用)
- 影响:约 500 个订单支付失败,直接损失约 ¥8000

## 时间线
14:28  部署 v2.3.1 到生产环境
14:30  监控告警:支付接口错误率从 0.01% 升至 5%
14:32  IC 宣布 P1 事故,启动止损
14:35  确认和 v2.3.1 有关,开始回滚
14:40  回滚到 v2.3.0,错误率降到 0.01%——止血完成
14:45  确认支付功能恢复正常
15:20  事故结束,开始写复盘

## 根因分析(5 Why)
为什么支付失败?
→ 支付接口返回 500
为什么返回 500?
→ 支付服务调用新版本的配置中心,配置缺失
为什么配置缺失?
→ v2.3.1 新增了一个必填配置项,发布时没有同步到生产配置中心
为什么没有同步?
→ 发布 checklist 里没有"检查新增配置项"这一步
为什么 checklist 没有?
→ 我们从未有正式的发布 checklist

## 改进措施
□ [P0 立即] 紧急修复 v2.3.1 并验证配置完整 → 负责人:张三,今天完成
□ [P1 本周] 制定发布 checklist 模板 → 负责人:李四,本周五前
□ [P2 下 Sprint] 配置中心增加"新增配置项必须在所有环境存在"的校验 → 负责人:王五
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 4.3 复盘产出必须是 actionable 的

❌ "加强风险意识"
  → 这是鸡汤,不是改进措施。没人知道怎么执行。

✅ "发布流程增加一个环节:配置变更必须有第二个人的 review"
  → 有人负责、有时间节点、可以验证是否完成。

每一条改进措施都要有:做什么 + 谁做 + 什么时候做完。
1
2
3
4
5
6
7

# 五、事故分级——不是所有问题都是 P0

P0(Critical):核心业务流程完全不可用
  → 登录、注册、支付、下单不可用
  → 全团队 stop-the-line,5 分钟内启动响应
  → 目标:15 分钟内止血

P1(High):核心功能部分不可用 / 非核心功能完全不可用
  → 支付成功率下降但不完全中断、某个非核心页面 404
  → 指定至少 2 人处理,通报 stakeholders
  → 目标:2 小时内修复

P2(Medium):非核心问题,不影响主流程
  → 某个管理后台页面样式错乱、边缘功能的性能下降
  → 正常 Sprint 中排优先级修复
1
2
3
4
5
6
7
8
9
10
11
12
13

不要把 P2 升级成 P1——不是要轻视问题,是不要把所有人的注意力频繁打断。


# 六、小结

事故响应的五个阶段:

1. 发现 → 监控告警、用户反馈、oncall 值班发现
2. 止损 → 重启/回滚/降级/Feature Flag——先止血,再查因
3. 定位 → 对着监控面板 + 日志找根因。如果 30 分钟找不到 → 拉人帮忙
4. 复盘 → 5 Why 挖根因,产出 actionable 的改进措施,不追责
5. 改进 → 每条措施有负责人和 deadline,下次 Retro 验收

最重要的一句话:前三分钟做对"确认影响面→宣布事故→止损优先",比后面三小时做对一切都重要。
1
2
3
4
5
6
7
8
9

行动清单:

  • [ ] 你们团队有事故响应群吗?没有的话建一个,把 oncall 值班表贴进去
  • [ ] 你上一次发布有没有可用的 Feature Flag?没有的话给下一个功能加上
  • [ ] 模拟一次事故——在 staging 环境断开一个服务,团队按流程走一遍(谁当 IC?怎么宣布?怎么止损?)
#事故响应
上次更新: 2026/06/15, 14:32:53
项目管理工具指南
技术文档管理规范

← 项目管理工具指南 技术文档管理规范→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式