4. 故障排查方法论:从5W1H到根因分析

故障排查这事儿,干久了你会发现,技术问题往往不是最难搞的。最难搞的,是乱。是大家一窝蜂冲上去,你改一下配置,我重启一下服务,最后问题莫名其妙好了,谁也不知道真正原因是什么。

所以我一直强调,故障排查必须有一套方法论。没有方法,你就是在碰运气。今天这一章,我就把压箱底的那套东西拿出来聊聊。

4.1 故障排查的5W1H原则

5W1H不是什么新鲜概念,但用在故障排查上,特别好使。说白了,就是让你在动手之前,先把问题搞清楚。

要素 含义 故障排查中的具体问题
What 发生了什么 具体是什么故障?是服务挂了,还是响应慢了?错误码是什么?
Why 为什么会发生 初步判断可能的原因是什么?代码变更?配置修改?外部依赖?
Where 发生在哪里 影响哪个机房?哪个集群?哪个服务实例?哪个用户群体?
When 什么时候发生的 首次出现时间?持续多久?是否有规律?是否与发布窗口重合?
Who 谁发现的/谁影响的 监控告警发现的?用户反馈的?影响了多少用户?
How 如何发生的/如何复现 复现步骤是什么?触发条件是什么?
我的习惯:接到故障通知,第一件事不是去看日志,而是先花5分钟把5W1H填完。填完你会发现,很多问题其实已经缩小了范围。

举个例子。有一次半夜被叫起来,说支付接口超时。我按5W1H捋了一遍:

  • What:支付接口HTTP 503,响应时间超过30秒。
  • Why:初步怀疑是数据库连接池耗尽。
  • Where:只影响华南区机房,其他区域正常。
  • When:22:15开始,持续至今。
  • Who:监控告警触发,影响约2000笔交易。
  • How:复现?直接请求接口即可复现。

你看,这么一整理,排查方向就很清晰了——直奔华南区机房的数据库连接池。

4.2 故障定级与响应流程

不是所有故障都值得半夜爬起来。我见过有些团队,磁盘使用率到80%就发P0告警,结果运维天天睡不好觉,真正出大事的时候反而麻木了。

故障定级,核心就两个维度:影响范围和影响程度。

级别 定义 响应要求 示例
P0 核心业务完全不可用,影响大量用户 立即响应,5分钟内拉起应急群,全员投入 支付接口全挂、数据库主库宕机
P1 核心功能严重受损,但非完全不可用 15分钟内响应,安排核心人员处理 下单成功率低于50%、首页加载超10秒
P2 非核心功能异常,或影响少量用户 1小时内响应,可走常规工单流程 某个报表页面打不开、个别用户登录失败
P3 轻微问题,不影响业务 24小时内处理,可排入迭代 页面样式错乱、日志中少量WARN
避坑指南:我曾经见过一个团队,把P0定义为"所有用户不可用",结果有一次某个功能影响了99%的用户,但因为还有1%能用,他们只定了P1。响应慢了半小时。所以定级标准一定要清晰,不要留模糊地带。

响应流程这块,我推荐一个简单的三阶段模型:

  1. 止血阶段:先恢复服务,别管原因。重启、回滚、切流量,怎么快怎么来。
  2. 排查阶段:服务恢复后,再慢慢查根因。这时候可以看日志、查监控、拉代码。
  3. 根治阶段:找到根因后,修复代码或配置,并补充监控和告警。

很多人容易犯一个错——止血和排查混在一起。一边重启一边看日志,结果重启完了,日志也被冲掉了。我的建议是:先止血,再排查,分清楚。

4.3 故障复盘与根因分析

故障复盘,不是为了追责。是为了下次不再掉进同一个坑里。

我参与过上百次复盘,发现一个规律:大多数故障的根因,都不是"某个人操作失误",而是"系统设计有缺陷"。

根因分析,我常用5 Whys法。就是连续问五个"为什么",直到找到真正的根因。

举个例子:

现象:线上服务OOM(内存溢出)。

  1. 为什么OOM?→ 因为堆内存被占满,GC无法回收。
  2. 为什么堆内存被占满?→ 因为有一个缓存Map无限增长。
  3. 为什么缓存Map无限增长?→ 因为没有设置过期策略。
  4. 为什么没有设置过期策略?→ 因为开发同学不知道这个Map会被频繁写入。
  5. 为什么开发同学不知道?→ 因为代码评审没有覆盖到这个逻辑,且没有相关的监控。

真正的根因:代码评审流程不完善 + 缺少缓存容量监控。

你看,问到最后,根因往往落在流程和机制上。这才是复盘要解决的问题。

复盘报告怎么写?我一般包含这几个部分:

  • 故障概述:一句话说清楚发生了什么。
  • 时间线:从故障发生到恢复,精确到分钟。
  • 根因分析:用5 Whys或其他方法,找到真正的根因。
  • 改进措施:列出具体的TODO,并指定负责人和截止时间。
  • 经验教训:这次故障教会了我们什么。

嗯,这里要注意一点:时间线一定要客观。不要写"10:00 发现故障,10:05 开始排查",要写"10:00 监控告警触发,10:03 值班人员确认,10:05 拉起应急群"。越客观,越能发现问题。

4.4 知识体系总览

下面这张图,是我对故障排查方法论的一个总结。你可以把它当作一个检查清单,每次遇到故障,照着走一遍。

故障排查方法论知识体系 故障排查方法论 5W1H 原则 故障定级与响应 复盘与根因分析 What Why Where When Who How P0 紧急 P1 严重 P2 一般 P3 轻微 止血 → 排查 → 根治 5 Whys 根因分析法 复盘报告结构 改进措施跟踪 核心思想 先搞清楚问题(5W1H)→ 按级别响应(定级)→ 恢复后找根因(复盘) 每一步都要有方法,不要靠直觉

你想想看,有了这套方法论,是不是心里踏实多了?遇到故障不再慌,按步骤来就行。说白了,故障排查拼的不是手速,是思路。