故障时间线怎么记,才能在 30 分钟后还原判断过程?
真正容易从事故现场丢掉的,不只是截图和日志,而是“为什么那时先看这个、先做那个”。把时间线记成证据、判断、动作和结果的连续变化,30 分钟后才有机会还原现场,而不是只剩一串零散操作。
我第一次真正意识到“时间线会记废”,是在一次已经做过回滚的事故里。
现场刚结束时,大家都觉得记录还算完整:
- 群里留了很多截图
- 回滚时间有
- 限流时间有
- 谁拉了 DBA、谁暂停了任务,也都找得到
可 40 分钟后复盘草记一摊开,最关键的问题一个都回答不上来:
- 为什么 20:11 先回撤灰度,而不是先关重试?
- 为什么 20:17 又补了一次限流?
- 为什么 20:23 明明错误率降了,还没有立刻恢复入口?
也就是说,动作都在,理由不在。
从那以后我才越来越确定:
时间线最怕的,不是漏记某个时间点,而是把现场记成了一串“发生了什么”,却没记下“当时为什么这么判断”。
这篇不是给复盘写模板,也不是教秘书怎么做会议纪要。它只处理一个非常现场的问题:当事故还在继续时,怎样把判断过程留下来,别让 30 分钟后的自己完全失忆。
那次事故里,真正救场的不是补截图,而是补“决策理由”
后来我们重新整理那场事故时,发现最值钱的不是监控图本身,而是一个同学临时在群里留下的几行短句:
- “20:08,只有灰度实例 queue 抬头,先按局部实例 / 变更链看。”
- “20:11,回撤一半灰度,观察 queue 和 timeout 是否同步回落。”
- “20:17,queue 回落但 pending 仍高,先不恢复流量,继续看连接获取耗时。”
这几句当时看起来很随手,后面却成了整条时间线里最硬的骨架。
因为它同时留下了四样东西:
- 时间
- 证据
- 判断
- 动作后的观察点
反过来,很多截图虽然也留着,但离开当时的上下文以后,别人根本不知道它为什么会在那个时间点被贴出来。
所以后来我们不再把时间线记成流水账,而是记成“证据推动动作”的链
我现在更推荐的时间线长相,不是:
- 20:03 告警响
- 20:11 回滚
- 20:17 限流
- 20:25 恢复
而是每一条都至少带下面这几个意思:
当时看到了什么
不是笼统写“系统变慢了”,而是尽量写成现场证据。
例如:
submitOrder的 P99 从 300ms 升到 4s- 只有灰度 4 台实例 queue 抬高
- 连接池 pending 连续 3 分钟没回落
时间线里第一值钱的不是感受,而是证据。
因此更像什么,不像什么
这一句特别重要,因为它会留下当时的判断路径。
例如:
- 更像局部实例 / 变更链,不像全局数据库先坏
- 更像等待在放大,不像 CPU 计算突然打满
- 更像止血动作还没打中压力点,不像已经自然恢复
少了这句,后面别人只能看到你做了什么,却不知道为什么不是另一种做法。
所以做了什么动作
动作本身当然要记,但别只记动词。
比起“回滚了”,更有用的是:
- 回撤一半灰度,保留一半实例继续观察差异
- 暂停补偿任务,观察 queue 和 pending 是否一起回落
- 关闭同步重试,确认实际调用量倍率是否下降
动作如果不带目的,时间线还是会重新变成流水账。
动作后准备盯什么
很多时间线之所以后来没法复原,不是因为没写动作,而是没有写“预期验证点”。
例如:
- 如果 queue 不降,说明回撤灰度没打中
- 如果 timeout 降了但 pending 不降,说明压力只是换了个出口
- 如果调用量倍率先降,说明重试确实是放大器
这一句一旦写上,时间线就不只是记录过去,还会变成现场接下来 5 分钟的工作台。
真正该更新时间线的,往往不是每次告警,而是每次判断变化
很多人记时间线会卡在一个问题上:是不是所有细节都要记?
我后来越来越觉得,不用。
真正必须更新的时刻,通常是下面几种:
- 第一次切清影响面时
- 第一次形成方向判断时
- 每次关键动作前后
- 判断被新证据推翻时
尤其最后一种最值钱。
因为现场最容易被复盘误解的地方,就是“你们是不是一开始就判断错了”。
其实很多时候不是判断草率,而是证据后来变了。这个变化如果不在时间线上留下来,后面就只会被看成瞎试。
这件事为什么不能等事故结束后再补
因为判断理由是最容易蒸发的东西。
日志和监控回头还能翻,动作记录系统里也常能找回来,但下面这些通常过一会儿就只剩模糊印象:
- 为什么当时先看 A 没先看 B
- 为什么那个动作只做了一半
- 为什么那时觉得还不能恢复
- 为什么某个证据当时被认为不重要
这些东西不在现场写下,30 分钟后往往就只能靠回忆拼。
而靠回忆补时间线,最容易把真正现场里的犹豫、推翻、验证,全都补成一条事后看起来很顺的假故事。
这篇的边界也别放大
如果你现在还没把多告警现场收成几条故障链,先去做范围切分,而不是急着记漂亮时间线。像值班时看到多个告警同时响,第一轮该怎样做范围切分?这种问题,优先级更高。
如果你现在已经进入事故结束后的经验沉淀阶段,更该接着看故障复盘如何从“现象记录”升级为“可复用方法论”?。
这篇只守一个边界:事故还在进行时,怎么把判断过程保下来。
我后来最看重的一条时间线,不是写得最全的,而是让后面的人能立刻接上现场的
真正好的时间线,不会让后来加入的人只看到:
- 告警响了
- 动作做了
- 曲线好了
而是能让他一眼接上:
- 你们现在认为什么更像主线
- 刚才那个动作想验证什么
- 下一分钟最该盯哪组指标
- 如果结果不对,接下来准备改哪条判断
时间线记到这个程度,它就不再只是复盘材料,而是排障本身的一部分。
现场越乱,越需要有人把“为什么刚才这么做”写下来。
不然 30 分钟后你手里明明有一整串动作,却还是还原不出那场故障到底是怎么被一点点判断出来的。