专业书籍精读 · SRE · 第 12 章

有效排障:先止血,再破案

Site Reliability Engineering · Ch 12 · Chris Jones · Google · 2016

EN →

这一章讲什么?

网站打不开、App 转圈、付款卡住——总得有人把毛病找出来。你可能以为这活儿靠天赋:有些人天生「手感好」,扫一眼日志就知道哪儿坏了。Google 这本书的第 12 章说:不是天赋,是手艺,手艺可以教。它把「高手怎么查故障」拆成了一套谁都能照着走的步骤。

先打个比方

把它想成急诊室。病人推进来,医生的第一件事不是弄清病因——是先把血止住。原因可以之后慢慢查,人不能等。稳住之后才是抽血、拍片(看指标和日志),然后推断,然后试着用药看反应,最后写病历。

整章最值钱的一句就藏在这个顺序里:第一步不是找原因,是止血。你花四十分钟查清了真凶,这四十分钟里用户一直在疼——他们不会因为你破了案就少疼一分钟。

旧世界为什么难

难在「猜」。书里点了几种最常见的猜法:盯着一个跟这事没关系的指标看半天;把巧合当因果——两条线一起往上翘就认定一个导致了另一个(监控的东西越多,碰巧长得像的两条线就越多);还有抓住上次的原因不放

这章的核心点子

止血和破案是两件事,可以同时干。把流量切到没坏的机器上、关掉一个不重要的功能、把慢的东西降级——这些都不需要知道原因。但有个前提:别把现场清了。最常见的止血手段是重启,而重启往往把唯一的证据一起烧掉,于是同一个故障下个月照样再来。

折半,而不是从头一个个试。一次请求要过七八个环节:网关、前端、鉴权、业务、缓存、数据库、存储。直接在中间那个环节量一刀:中间是好的,毛病在后半段;中间已经不对,毛病在前半段。一刀砍掉一半,七八个环节三刀之内就能圈定。这是「查」和「猜」的分水岭。

坏掉的系统通常还在忙,只是忙错了地方。所以别问「它为什么坏」,问三句更具体的:它在干什么?力气花在哪儿?为什么花在那儿?书里的例子:一个数据库集群变慢,问「CPU 用在哪」,发现在给日志排序;再问「排序里的哪一步」,发现是拿一条写得很糟的匹配规则去套文件名。症状和真凶隔着四层,靠猜猜不到,一层层追问「力气花在哪」就必然能到。

最省事的一问:最近谁动过它?系统有惯性——好端端跑着的东西不会自己坏。先翻改动记录,往往比翻代码快得多。

一件真事

2019 年 7 月,Cloudflare 上线了一条新的防火墙规则,里面一段匹配写得不好,让全球机器 CPU 瞬间打满,大量网站打不开。看时间线就懂了这章:13:42 出事,14:02 才弄明白怎么回事,明白的当下就一键把这批规则全局关掉,14:09 流量恢复。至于那条规则本身怎么改、怎么重新打开,是四十多分钟以后的事。

一句话记住

排障是手艺不是天赋:先止血再破案(但别把证据一起清掉),从中间折半而不是从头挨个试,问「它在忙什么、力气花在哪」而不是干瞪着「它为什么坏」,还有永远先看最近谁动过它。诚实说一句代价:这套流程全建立在「你能看见系统里发生了什么」之上——日志、指标、请求链路都得在平时花钱埋好,当初没埋,出事那天流程再漂亮也只能靠猜。

想进到完整流程图、对比表和真实案例? → 切到精读版