Think Deep,Work Lean

排查事故别让AI一口气读完,先要时间线,快一倍

Posted on By zack

大家好,我是Zack。

先说个场景:早上服务挂了,用户付款一直报 502。你把日志导出来,一千多行,从网关报错到数据库重启再到队列积压全混在一起。

老板在群里问:什么情况,多久能好。

你打开日志从头翻。翻到一半发现两个报错时间挨得很近,分不清哪个是因哪个是果。翻完了还得在心里把时间点重新排一遍,才能开口说话。这一翻,半小时就没了。

我昨天拿一份 25 行的事故日志做了个实验,把这事儿量化了一下。

一次问和分两步问,差了一倍

大多数人(包括之前的我)拿到日志,第一反应是整份丢给 AI,一句话:「帮我看看出了什么问题,根因是什么,我马上要汇报。」

我跑了这个版本,掐表,142 秒出结果。结论本身没毛病,根因、时间线、连带影响都有。

但有个问题:它一口气给你端上来所有东西,你根本不知道它有没有漏。我数了数它给的时间线,再对着日志核,漏了 5 个地方——网关进程退出后那 10 分钟是静默的,它没提;Kafka 为什么挂、内存为什么 94%,日志里只有结果没有原因,它也没提。

然后我换了个打法:别一次要全部,分两步。

第一步只要时间线:

读 /tmp/incident.log,把里面的事件按时间排成一条时间线输出,格式:
- 一行一个事件,格式为「时间 | 组件 | 发生了什么」
- 时间精确到秒,按发生顺序排
- 不要分析根因,不要给建议,只要时间线
- 最后单独一行标出「第一个异常事件」是哪一行

29 秒跑完。25 行日志,一行一个事件排得整整齐齐,连每条重试都单独一行。

第二步,拿着这份排好的时间线再做分析:

读 /tmp/incident.log 和 /tmp/timeline.md(这是已经排好的时间线)。
基于时间线做根因分析,要求:
1. 根因是什么,引用日志原文三行以内作为证据
2. 连带影响有哪些服务,各自的因果链一句话说清
3. 时间线上哪几段是「故障期」,哪几段是「恢复期」,中间有没有被漏掉的异常
4. 给两条防复发建议
输出成可以贴进事故复盘文档的格式。

37 秒。两步加起来 66 秒,比一口气问快了 76 秒。

快还不是最大的收益

66 秒对 142 秒,省了一分钟,说实话这点差距不算什么。真正的差别在质量上。

因为我要求它「标出第一个异常事件」,时间线一排,事故的起点一目了然:08:21:07,网关连数据库被拒。前面没有任何异常,它就是第一张多米诺骨牌。

因为我要求它「指出有没有被漏掉的异常」,第二步它主动交了 5 条静默盲区:网关退出后靠什么拉起来的、Kafka broker 本身一条日志都没有、内存被谁吃掉的没记录、auth-service 慢查询之后没了下文、502 只记录了 3 条明显被采样了。这 5 条,一口气问的版本一条都没给我。

这些盲区才是复盘会上最容易被追问的地方。汇报的时候你主动说「日志里没有这部分,需要补查」,比你被问住强太多。

为什么分两步反而快

我琢磨了下原理。一口气问的时候,AI 在一次输出里要同时干两件事:把乱序的日志按时间归位,再基于时间线推理根因。这是两种完全不同的活儿,混在一起,它要来回切换,输出又长又慢。

分开之后,每一步只有一件事,提示词短,输出短,跑得快。而且第一步的时间线是实打实的文件,第二步是在确认过的事实上做推理——相当于你自己先把证据整理好,再让法医下结论。

还有个隐藏好处:时间线那份文件你自己也能看。排完你扫一眼,心里就有数了,等 AI 跑第二步的时候你已经在核对它的输出了。

三步操作,直接可抄

第一步,导日志。别只导报错,把故障时间窗内的全量日志都拿出来,包括 INFO 和 WARN。这次实验里,内存压力是 WARN、容器重启是 INFO,只导 ERROR 的话连带影响整条链就断了。

第二步,发时间线提示词,就用上面那个模板。要改的地方只有日志路径。如果你日志特别乱(多服务混在一起),可以加一句「按组件分组再排时间线」。

第三步,看着时间线想 10 秒:起点是哪行?哪段是静默的?然后带着问题发第二个提示词。你自己的疑问直接写进去,比如「Kafka 为什么挂了,日志里能找到原因吗」——它就会专门去核这个问题。

一个边界要说清楚

这套打法只管「日志里写了什么」。日志里没写的,它不知道,瞎猜反而误事。这次实验里数据库为什么崩,日志里就是没有,两个版本都如实说了要补查——这是对的,你也别指望它凭空编出来。

另外,时间线排完你自己扫一遍这个动作不能省。AI 排错了时间格式、漏了一行,你 10 秒钟就能看出来;跳过这步,后面的分析就是空中楼阁。

通用原则就一条

排查问题的时间,一大半花在「翻记录」上,不是花在「想」上。翻记录这种死功夫,是最适合丢给 AI 的部分。

但别让它一口气干完翻记录和下结论两件事。先让它把事实摆整齐,你核一眼,再让它基于事实推理。顺序反了,你就是在一堆它可能没读懂的原始记录上盖楼。

下次服务挂了别慌,先导日志,再要时间线。评论区聊聊:你们排查一次线上事故,一般翻日志翻多久?