故障不可避免,关键是多快恢复

做运维的都希望系统永远不出事,但 SRE 这个领域的第一课恰恰相反:故障是一定会发生的,追求「零故障」既不现实、也会把团队压得不敢变更。真正该追求的,是出了事之后多快能恢复——用户感受到的影响,是「故障持续了多久」,而不是「有没有故障」。

所以这一篇不讲怎么把系统做到永不宕机,而是讲出了问题怎么把影响压到最小、怎么从每次故障里学到东西、怎么让下一次更快。这就是 SRE 的核心:不是消灭故障,是把故障的代价一次次压低。

用户不在乎你有没有备份,在乎的是你花了多久把它恢复。
本文核心知识点
  • MTTR把恢复时间拆成几段,分别优化。
  • 告警分级别把半夜的每一次告警都当成真正的故障。
  • 先止血故障中优先恢复,再慢慢定位根因。
  • 复盘对事不对人,把教训变成制度。
SRE 故障响应与复盘配图:中央发着橙红警报的控制台大屏、周围值班人员剪影围着应急、旁边听诊器与复盘圆桌图标的蓝色扁平科技插画
故障来时,一群人围着大屏有序响应,而不是各自慌乱。

MTTR:把故障拆成几段来盯

MTTR(平均恢复时间)是 SRE 最核心的指标之一,但光看一个总数没用,得拆开:

MTTR = MTTD 发现时间
     + MTTA 响应时间(人接到告警并开始动手)
     + MTTF  定位+止血时间
     + MTTV  验证恢复时间

很多团队盯着「恢复要多久」,其实瓶颈不在定位,而在前面两段——告警响了二十分钟才有人看,或者值班的人不知道该干嘛。把这几段分别计时,你才知道该优化哪里:是告警太晚(监控没覆盖)?是响应太慢(没人值班)?还是定位太久(日志找不到)?每一段对应不同的改进动作。

值班与告警:别让半夜的电话白响

告警这东西,响得多了人就麻了。一个被半夜叫醒十次、其中九次是误报的值班工程师,第十次真故障来的时候反而会觉得「又是误报,再睡会儿」——这就是告警疲劳,最危险的状态。

解法是分级:P0 真故障(影响线上用户)才打电话叫人;P1 影响小一点,发个群消息白天处理;P2 只是需要关注的指标波动,记录下来别打扰人。配合前面讲的监控告警体系,每一级告警都要问一句:这条告警叫醒了人,是真的需要人立刻动手吗?不需要的就降级,别浪费值班人的睡眠。

故障响应流程:发现、止血、定位

真故障来了,现场容易乱。提前定好一个标准流程,按顺序走:

第一步:发现与定级
  - 谁先发现的?影响多大?定 P0/P1/P2
第二步:拉起响应群
  - 值班人 + 相关服务负责人进一个群,统一信息
第三步:止血(见下一节)
  - 先把用户影响止住,别死磕根因
第四步:记录时间线
  - 几点发现、几点止血、几点恢复,全记下来
第五步:恢复确认
  - 监控指标回到正常再宣布恢复

这个流程的关键是有人统一指挥——故障现场最怕一堆人各自动手,越帮越忙。值班负责人负责协调,其他人按分工查日志、查监控、准备回滚。