凌晨三点的急诊科,灯火通明。护士台的白板上写着本周值班表,墙上贴着急诊分诊规则:红色标签的危重病人优先抢救,绿色标签的轻症患者排队候诊。突然监护仪响起刺耳的警报,值班医生没有打电话问“该找谁”,而是按照抢救流程图上的步骤,三分钟内开始处置。病人平稳后,科室不会开“批斗会”追究值班医生,而是围坐在一起开病例讨论会:还原时间线、评估影响、追问“为什么我们的流程允许这个错误发生”,然后修订操作规范,盯着整改措施落地。 这套逻辑,正是 SRE(站点可靠性工程)里 On-Call 与事后复盘的完整缩影。On-Call 值班机制解决“故障来了谁管、怎么管”,事后复盘解决“如何让同类故障不再重演”。医院用了几十年的经验,如今在云上系统的每一个深夜警报中再次上演。

岗位关联

学完这篇,你将理解 SRE 最核心的日常运作方式。无论你是想转行做 SRE、DevOps 工程师,还是负责 AI 平台的运维,这套“值班+复盘”的组合拳都是你站稳脚跟的必修课。

目录
  1. 可视化演示
  2. 值班排班轮换
  3. 告警治理分诊
  4. 值班手册
  5. 事后复盘文化
  6. 复盘报告撰写
  7. 改进行动跟踪
  8. 疲劳风险管控
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

值班排班轮换

急诊科护士台的白板上,永远贴着一张本周值班表。谁今晚当班,谁是备班,写得一清二楚。患者被推进来,护士不需要翻通讯录找“现在该联系谁”——值班医生的名字就在那里。On-Call 排班要解决的,正是同一个问题:系统故障随时可能发生,必须有一个明确的“当班医生”。

在 SRE 的语境里,On-Call 指的是工程师轮流担负“值班兜底”职责,7×24 小时覆盖线上系统。排班不是随便拉个名字填上去,它有自己的原则:轮换要公平,不能总让同一个人接深夜的电话;技能要匹配,支付系统故障不能只派一个前端工程师去扛;还要有主备双岗,Primary 是第一响应人,Secondary 负责在他失联时代为接警,避免“一个人的假期毁掉整个备份计划”。

有了值班表,还要把“谁能做什么”划清楚。一线值班工程师拥有处置权,可以按照既定手册执行重启、降级、回滚操作,但没有权限在深更半夜临时改架构。遇到搞不定的问题时,走升级路径:一线 → 二线专家 → 技术负责人 → 管理层,每一级都有明确的响应时限。团队通常会给值班响应定 SLA(服务等级目标),比如 15 分钟内必须接警确认。

一张好的值班表,让系统永远处于“有人管”的状态,就像急诊室永远有医生在。它不是行政表格,而是整个可靠性体系的地基——地基没打牢,后面的一切告警治理、手册、复盘都是空中楼阁。

p=NokNtotal×100%p = \dfrac{N_{\text{ok}}}{N_{\text{total}}} \times 100\%
这个公式衡量的是“值班响应达成率”:在约定时限内接起告警的占比。它就像急诊科的“接诊及时率”,是值班质量最直观的仪表盘。
  1. 分子及时接警数:统计一个周期内,工程师在 SLA 时限内完成确认的告警条数。
    Nok\displaystyle N_{\text{ok}}
  2. 分母总告警数:同一周期内全部需要人工响应的告警数量。
    Ntotal\displaystyle N_{\text{total}}
  3. 乘 100%把比值折算成百分比,方便团队设定目标,例如“响应达成率 ≥ 98%”。
    ×100%\displaystyle \times 100\%

告警治理分诊

急诊科的分诊护士是全院最忙的人。患者涌进来,她必须在几秒内判断:这个是心梗,红色标签,立刻抢救;那个是擦伤,绿色标签,先去排队。如果没有这道分诊,所有患者挤作一团,真正的危重病人反而会被耽误。告警系统就是系统的“分诊台”,而 SRE 团队每天最重要的功课之一,就是让每条告警都像分诊标签一样清晰、分级、可行动。

业界常见的做法是把告警分成 P0、P1、P2 等级。P0 意味着核心业务完全不可用,比如所有用户都无法下单,必须立刻唤醒值班工程师;P1 是部分功能受损,比如某个接口延迟飙升但业务还在跑;P2 则是不影响用户的隐患,可以等到第二天上班再处理。分级的意义在于:不是所有告警都配得上凌晨三点的电话。

但光有分级还不够,告警治理还要做三件事。第一是去重:同一台机器的磁盘故障,往往触发十几条关联告警,需要按根因合并成一条。第二是聚合:把短时间内同一服务的一堆相似告警打包成一个“事件”,值班工程师只需处理一张工单。第三是定“可行动标准”:一条合格的告警,必须能直接对应一个处置动作。如果收到告警后工程师只会想“哦,知道了”然后关掉它,这条告警就是噪声,应该被删掉。判断分诊做得好不好,可以用准确率来度量:

分诊台的价值,是让医生的注意力流向真正需要的地方。告警治理的终极目标同样是“让值班工程师被有意义的告警唤醒”。如果告警天天狼来了,真正的大故障来临时,值班工程师反而会麻木无视——那才是比故障本身更大的灾难。

Acc=TP+TNTP+TN+FP+FNAcc = \dfrac{TP + TN}{TP + TN + FP + FN}
这是在衡量“告警分诊的准确率”:所有告警中,被正确判断为“真故障”和“非故障”的比例。TP 是确实发生故障且告警了,FN 是出了故障却没报警——漏报比误报更危险。
  1. 认识四个字母TP 表示真故障且正确告警;TN 表示无故障且未告警;FP 是误报,没故障乱叫;FN 是漏报,出了故障却没声响。
    TP+TN+FP+FN\displaystyle TP + TN + FP + FN
  2. 分子分诊正确的数量:把“报对了”和“没瞎报”的两类加起来。
    TP+TN\displaystyle TP + TN
  3. 整体正确率:用正确的数量除以全部告警判断结果,得到分诊准确率。
    TP+TNTP+TN+FP+FN\displaystyle \frac{TP + TN}{TP + TN + FP + FN}

值班手册

医院的抢救室墙上,永远挂着心肺复苏流程图。哪怕是最资深的医生,在慌乱中也会下意识地看一眼:先判断意识,再开放气道,然后胸外按压。这张图不依赖任何人的记忆,它是整个科室沉淀下来的“标准动作”。SRE 团队里的值班手册(Runbook),就是贴在系统旁边的抢救流程图。

手册的核心定位是:把处理已知故障的最佳路径写成文档,让值班工程师在困意浓重的凌晨也能照着做。它通常包含四段式结构:症状识别——“支付接口 P95 延迟超过 2 秒”;排查步骤——“先查数据库连接池,再查下游依赖”;处置动作——“重启连接池、摘除异常节点”;升级条件——“如果 10 分钟内未恢复,呼叫二线”。每一步都写清楚“做什么、怎么做、做到什么程度算完”。

优秀的手册背后,是一个持续维护的故障场景库。磁盘写满、证书过期、连接池耗尽、模型推理漂移——凡是发生过的故障,都应沉淀为一条场景文档。复盘会更新手册,季度演练验证手册,版本管理记录手册变更。手册要的就是“哪怕换了个新人值班,他也能靠手册稳住局面”。为什么手册这么重要?因为它直接压缩故障恢复中最不可控的定位阶段:

手册把“老师傅的经验”变成了科室的公共资产。一个经验丰富的工程师离开,手册还在,新人就不会从头开始摸黑。值班手册不是摆设,它是整个团队用一次次故障换来的“抢救流程图”,值得像对待代码一样对待它。

TMTTR=Tdetect+Tack+Tdiag+TfixT_{\text{MTTR}} = T_{\text{detect}} + T_{\text{ack}} + T_{\text{diag}} + T_{\text{fix}}
MTTR(平均恢复时间)是衡量故障处理效率的核心指标,它由四段组成:监控发现耗时、人工响应耗时、根因定位耗时、修复验证耗时。手册压缩的是第三段——定位耗时。
  1. MTTR 总时长从故障发生到服务完全恢复正常的总时间。
    TMTTR\displaystyle T_{\text{MTTR}}
  2. 第一段检测时间:监控系统从故障发生到发出告警所花的时间。
    Tdetect\displaystyle T_{\text{detect}}
  3. 第二段响应时间:值班工程师收到告警到开始动手排查的时间。
    Tack\displaystyle T_{\text{ack}}
  4. 后两段定位与修复:通过手册快速定位根因,再执行处置动作,这两段优化空间最大。
    Tdiag+Tfix\displaystyle T_{\text{diag}} + T_{\text{fix}}

事后复盘文化

医院里最严肃的会议,是死亡病例讨论会。特别之处在于,开场前主持人会先强调一条铁律:今天不追究某个医生的责任,我们只讨论系统。手术流程是否有漏洞?术前检查是否缺了环节?设备维护是否到位?因为大家心里都清楚,如果今天把责任推给某一个医生,明天就没人敢如实描述自己犯过的错。

SRE 的复盘文化,正是从这种“无指责”原则生长出来的,英文叫 Blameless Postmortem。复盘不是批斗会,而是“系统的病例讨论会”。它要还原三样东西:时间线——故障从发生到恢复的每一分钟发生了什么;影响面——多少用户受影响、损失了多少交易;根因——到底是哪一层设计缺陷让这次故障成为可能。复盘的参与者只有一个共同目标:让下一次故障不要以同样的方式发生。

实操中,团队最常用的工具是“5 Whys“:连续追问五个”为什么“,从表象一路挖到系统根因。比如”数据库连不上”→“为什么连不上?连接池耗尽”→“为什么耗尽?突发流量”→“为什么突发流量击穿连接池?没有限流”→“为什么没有限流?架构评审漏掉了这个场景”。追问到第五层,你会发现:几乎所有事故的根因,都不是某个人的手滑,而是流程、架构或制度里的某个空洞。

如果复盘的结论是“工程师小明操作失误”,那这个复盘是失败的,因为开除小明,下一个工程师还会在同样的流程漏洞前跌倒。真正无指责的复盘文化,是把矛头从人身上移开,对准系统本身——这样团队才敢说真话,故障真相才不会被掩埋。

C0←whyC1←whyC2←why⋯←whyCnC_0 \xleftarrow{\text{why}} C_1 \xleftarrow{\text{why}} C_2 \xleftarrow{\text{why}} \cdots \xleftarrow{\text{why}} C_n
这是一条“为什么”因果链:每向左一层,就离表层现象更远一步,离系统性根因更近一步。左边的 C₀ 是你看到的故障表象,右边的 Cₙ 才是真正要修的东西。
  1. 最右端表层现象:值班工程师第一眼看到的故障表现,例如“服务不可用”。
    C0\displaystyle C_0
  2. 向左推进一层每经过一个“为什么”箭头,就挖掘出导致上一层发生的更接近根因的原因。
    ←whyC1\displaystyle \xleftarrow{\text{why}} C_1
  3. 持续深挖到终点追问到某一层后,发现它是流程设计问题而非个人操作问题,就到达了真正的根因。
    Cn\displaystyle C_n

复盘报告撰写

一份规范的病历,从“主诉、现病史、查体、辅助检查”开始写起,任何一个医生拿到手,三分钟就能了解病人的来龙去脉。复盘报告(Postmortem)就是系统的“病历”,它的作用不只是记录,更是让下一次处理故障的人站在前人的肩膀上。

一份合格的复盘报告,结构是固定的,大致包含六个部分:标题(一句话说清是什么故障)、影响摘要(多长时间、多大范围、多少损失)、时间线(精确到分钟的关键事件)、根因分析(对应第 4 节的因果链)、行动项(每条都有负责人和截止日)、附录(监控截图、日志链接等证据)。结构固定的最大好处是:任何人打开报告,都能按同样的路径快速定位自己想看的部分。

写报告时,有两个特别容易犯的错。一是把事实和推断混在一起——“可能是缓存没刷新”和“02:31 缓存过期导致 502”是两回事,事实要写“是什么”,推断要标注“我猜测”。二是措辞带指责性——“工程师没有配置超时”这句话里藏着个人归因,不如写成“系统未对下游请求配置超时”。中性用词让读者把注意力放在系统缺陷上,而不是寻找责任人。报告写完后要共享到团队知识库,可检索、可评论。在复盘中,证据比结论更重要,怀疑可以用公式来表达——报告里对每个根因判断都可以标注信心程度:如果观察到新证据,我们对某个根因的信心应该更新:

一份好病历,能让下一位医生少走弯路;一份好报告,能让下一次故障的 MTTR 缩短一半。写复盘报告不是走流程、交作业,而是用文字把事故的教训冻存起来,让它在未来反复给团队输送经验。

P(R∣E)=P(E∣R)×P(R)P(E)P(R \mid E) = \dfrac{P(E \mid R) \times P(R)}{P(E)}
这是贝叶斯公式的通俗版本:P(R) 是你一开始对某个根因的猜测,P(E|R) 是“如果这个根因为真,那么现有证据出现的可能性”,两者相乘再归一化,得到看到证据后你对根因的新信心。
  1. 先验初始猜测概率:复盘开始时,工程师主观估计某个原因成立的可能性。
    P(R)\displaystyle P(R)
  2. 似然证据与原因的关系:假设根因成立,当前监控数据、日志这些证据被观察到的概率有多大。
    P(E∣R)\displaystyle P(E \mid R)
  3. 归一化更新后的概率:把分子除以证据本身出现的总概率,得到“后验”,也就是证据带来的新信念。
    P(E∣R)×P(R)P(E)\displaystyle \frac{P(E \mid R) \times P(R)}{P(E)}

改进行动跟踪

医生开了药,一定会叮嘱病人:“一周后来复查。”如果只开药不复查,医生永远不知道药有没有效,病情有没有变化。复盘会开完、报告发出去,只是“开了药”,更关键的是跟踪行动项有没有真正落地——这是绝大多数团队最薄弱的一环。

复盘产生的行动项,通常可以分成三类。修复类:立刻要做的,比如“重启数据库、恢复备份”;预防类:中期要做的,比如“为连接池添加水位告警”;研究类:需要进一步调研的,比如“评估自动扩容方案是否可行”。分类之后,每个行动项必须遵循三条铁律:责任到人(写清“谁”负责,而不是“团队”负责)、明确截止时间(具体到日期,而不是“尽快”)、可验证(定义“什么状态算完成”)。

跟踪机制通常落在看板上:待办、进行中、已验证三列。每周的 SRE 例会上,第一件事就是过一遍行动项看板,而不是讨论新点子。更严格的团队还会做效果验证:同类故障在接下来的三个月内有没有复发?某个行动项上线后,相关告警数量是否下降?如果行动项变成了一纸空文,复盘就退化成了“大型情绪安慰现场”。要度量行动的闭环程度,可以用一个简单的公式:

复盘会开得再热闹,如果一个月后行动项一个都没动,那就是一次彻底的浪费。就像处方必须吃到疗程结束,复盘的终点不是报告发布,而是改进真正改变了系统。只有跟踪到位的复盘,才配叫闭环。

Rclose=NdoneNcloseableR_{\text{close}} = \dfrac{N_{\text{done}}}{N_{\text{closeable}}}
这是行动项闭环率:分母是当期应当完成关闭的行动项,分子是实际完成并关闭的。闭环率长期低于 80%,说明复盘在空转。
  1. 分子已关闭的行动项:经验证确实完成、可以从看板划走的行动项数量。
    Ndone\displaystyle N_{\text{done}}
  2. 分母应关闭的行动项:在本周期内存续的、承诺要完成的全部行动项数量。
    Ncloseable\displaystyle N_{\text{closeable}}
  3. 相除得到闭环率这个比值越高,说明复盘产出的改进真正落地得越多。
    NdoneNcloseable\displaystyle \frac{N_{\text{done}}}{N_{\text{closeable}}}

疲劳风险管控

医院有一条不成文的规矩:连续值班超过一定时长,医生必须离岗休息。因为疲惫的医生,手会抖,判断会迟钝,一个微小的疏忽可能直接要了患者的命。SRE 值班也一样——凌晨 4 点被叫醒的工程师,犯错概率远高于白天精神饱满时。过度疲劳不仅威胁线上系统,还会快速烧光工程师的激情,导致团队人才流失。

疲劳的危害常常被低估。连续几天的 On-Call,工程师会陷入“白天写代码,晚上被警醒”的状态,注意力碎片化,甚至产生焦虑。研究睡眠剥夺的文献显示:连续清醒 24 小时后,人的认知能力相当于血液酒精浓度 0.1% 的状态——几乎是酒后开车。为此,成熟的 SRE 团队会制定硬性制度:单次值班不超过 12 小时;夜间接警后第二天可以晚到或补休;每人每周 On-Call 的天数设上限;值班后强制安排“恢复时间”。

除了硬性的疲劳限制,轮换制度也很重要。值班不能总是老面孔,要让新人定期上手、老人在旁护航;激励补偿要跟上,值班津贴、调休、公开认可,让承担压力的人得到回报。比这些更底层的是心理安全:值班时犯了错,不会被羞辱、不会进绩效黑名单,这样的人才会在复盘中如实说出“我当时漏看了一个指标”,而不是找借口掩饰。疲劳带来的失误风险,可以用一个经验模型来理解:

一个系统的可靠性,终究由人来守护。而疲惫的守护者本身就是最大的漏洞。保护值班的人,就是在保护系统本身——这听起来像一句口号,但它是 SRE 团队用无数个失眠的夜晚换来的血泪教训。

Perr(h)=P0×eαhP_{\text{err}}(h) = P_0 \times e^{\alpha h}
这是“疲劳失误模型”:P₀ 是正常状态下的基础失误率,h 是连续值班的小时数,e 的指数项表示失误风险会随着在岗时长加速上涨,而不是匀速上涨。
  1. 基准失误率工程师在状态饱满时的日常失误概率,这是模型的起点。
    P0\displaystyle P_0
  2. 连续值班时长从本次值班开始累计的小时数,是模型的自变量。
    h\displaystyle h
  3. 指数加速e 的 αh 次方让失误风险呈指数上升——意味着多值一小时班,风险不只是加一点,而是越涨越快。
    eαh\displaystyle e^{\alpha h}

AI 应用场景

场景一:AI 平台自身的告警分诊与 On-Call 治理

阶段:模型部署上线后的运营监控与值班响应

解决的问题:AI 模型上线后,传统监控告警经常在深夜误报。模型推理延迟抖动、数据分布正常漂移,会被监控误判为“故障”唤醒工程师,导致严重告警疲劳,真正的 P0 故障反被淹没。

具体案例:某推荐系统团队凌晨 3 点被“排序模型 CTR 指标异常”告警唤醒,值班工程师排查两小时,发现只是新批次数据的正常分布偏移,并非故障。应用本文的告警治理思路后,团队为模型指标设计了“数据漂移 + 业务影响”双阈值分诊规则,P0 告警必须两者同时触发;同时按根因做告警聚合,将同一模型服务的几十条关联告警合并为一条事件。三个月后,夜间误唤次数下降了 70%,值班工程师终于能睡个整觉。

场景二:用 LLM 辅助撰写复盘报告

阶段:事后复盘与知识沉淀

解决的问题:复盘报告写作枯燥且耗时,工程师在故障后往往精疲力尽,不愿意整理散落在聊天记录、监控截图和变更日志里的信息,导致复盘要么拖延、要么草草了事。

具体案例:某支付团队的 SRE 将值班群聊天记录、告警时间线、发布变更记录喂给大语言模型,让 LLM 自动生成一份复盘报告初稿,包括时间线整理、影响摘要和行动项建议。工程师只需校对关键结论、补充证据链接即可。原本需要 4 小时的报告写作压缩到 40 分钟,而 LLM 还会主动提示:“时间线 02:50 到 03:05 之间存在空档,建议补充当时的排查记录”,帮助团队发现复盘盲区。

Python 演示

python52 行
# -*- coding: utf-8 -*-"""从事件时间线生成复盘报告,并输出需要跟踪的行动项."""from datetime import datetime EVENTS = [    ("2025-01-06 02:31:00", "detect", "告警:支付API P95延迟超过2秒"),    ("2025-01-06 02:33:00", "ack",    "值班工程师接警,开始排查"),    ("2025-01-06 02:50:00", "diag",   "定位到数据库连接池耗尽"),    ("2025-01-06 03:05:00", "fix",    "重启连接池并扩容,服务恢复"),] def fmt_time(ts):    return datetime.strptime(ts, "%Y-%m-%d %H:%M:%S") def build_timeline(events):    rows = [{"time": fmt_time(ts), "kind": kind, "desc": desc}            for ts, kind, desc in events]    rows.sort(key=lambda r: r["time"])    return rows def calc_mttr(rows):    start, end = rows[0]["time"], rows[-1]["time"]    return (end - start).total_seconds() / 60.0 def suggest_actions(rows):    actions = []    for r in rows:        if r["kind"] == "diag":            actions.append("为连接池增加水位告警,并写入值班手册")        elif r["kind"] == "fix":            actions.append("评估连接池自动扩容方案,标记负责人")    return actions def render_report(rows):    lines = ["# 复盘报告: 支付API延迟故障", ""]    for r in rows:        lines.append("- {} [{}] {}".format(            r["time"].strftime("%H:%M"), r["kind"], r["desc"]))    lines.append("")    lines.append("MTTR: {:.1f} 分钟".format(calc_mttr(rows)))    lines.append("")    lines.append("## 行动项")    for act in suggest_actions(rows):        lines.append("- [ ] " + act)    return "\n".join(lines) def main():    rows = build_timeline(EVENTS)    print(render_report(rows)) if __name__ == "__main__":    main()
目的:输入一次故障的关键事件列表,自动生成带时间线、MTTR 和可跟踪行动项的复盘报告 Markdown 文本。
  1. rows.sort(key=lambda r: r["time"])把所有事件按时间排序,确保复盘时间线真实可靠。
  2. return (end - start).total_seconds() / 60.0用最后一个事件减去第一个事件的时间差,换算成分钟,算出 MTTR。
  3. if r["kind"] == "diag":定位阶段的信息最能反映系统缺陷,所以从这里提炼预防类行动项。
  4. lines.append("- [ ] " + act)用 Markdown 的未勾选复选框 - [ ] 标记每个行动项,方便导入看板跟踪。
  5. if __name__ == "__main__":让脚本既能被其他模块导入复用,又能直接运行输出报告。

常见误区

误区告警系统不就是用来提醒的吗?宁可多配几个阈值,宁可夜里多被叫醒几次,也不能漏掉任何一个故障。告警数量越多,系统越安全。

正解告警越多越安全,就像把所有病人都贴上红色标签——当每个警报都声称“十万火急”时,值班工程师会对告警彻底麻木,真正的 P0 故障反而会被淹没在噪声里。告警治理的核心标准是“可行动性”:每条告警都必须对应一个明确处置动作。无法行动的告警应该被删掉,而不是留着刷存在感。

为何常见:人们天然害怕“漏报”的责任,所以倾向于把阈值调低、把规则加多,却没意识到“误报”对注意力的消耗同样是巨大的成本。

误区出了问题必须找到责任人,谁的误操作谁写检讨,这样才能长记性。复盘就是要揪出那个犯错的工程师,让他当众说明白。

正解追责式复盘只会让团队学会两件事:隐瞒事实和甩锅。无指责复盘文化的精髓,是把矛头从“谁做的”转向“系统为什么允许他这么做”。真正负责的做法是:假设犯错的人换成任何一位工程师,错误依然会发生,那么该修的就是流程本身。

为何常见:把事故归咎于“某个人操作失误”是最省力的解释,因为不需要改建系统、不需要投入成本,只需要处分一个人就能让管理层觉得“问题已解决”。

误区MTTR 是衡量运维能力的唯一标准。把平均恢复时间压到 5 分钟以内,我们的 On-Call 就算成功了。

正解盲目压低 MTTR 会催生“先重启再说”的速成式修复——表面恢复了,根因还在,几周后故障换个姿势卷土重来。健康的团队会平衡“恢复速度”和“根因修复”:一边用值班手册压缩定位时间,一边用复盘行动项消除病灶。MTTR 是结果指标,不是唯一指标。

为何常见:MTTR 简单、直观、可上报,是管理层最容易理解的数字,因此容易被过度优化,而根因修复的成效难以量化,反而被忽视。

误区复盘会开了,报告也发到群里了,这件事就算闭环了。下次再出问题,翻出报告看看就行。

正解没有行动项跟踪的复盘,本质上只是一场集体倾诉。报告里的行动项如果没有责任人和截止日期,就会在两周后悄悄消失在群聊记录里。成熟的团队会把行动项赶进看板,每周例会逐条过堂,并在数月后验证“同类故障是否复发”。开处方不复查,等于白治。

为何常见:复盘会结束时大家情绪高涨,容易产生“已经解决了”的错觉;而把行动项推到“系统里”、推到“下个迭代”,恰恰是最轻松的逃避方式。

面试题

Q1. On-Call 值班机制的首要目标是什么?

单选题 · easy

  • A.为故障找出首要责任人并问责
  • B.快速响应并恢复线上业务服务← 正确答案
  • C.记录一份完整的故障处理日志
  • D.为管理层编写当日值班简报

答案:B。On-Call 的出发点是“系统故障必须有人第一时间响应”,先恢复业务,再谈其他。追责是复盘的副产品,日志和简报只是辅助手段。就像急诊科值班医生的第一任务是救人,不是写病历。

Q2. 告警分诊中的 P0 级告警通常指什么?

单选题 · easy

  • A.告警消息发生在凌晨的时间段
  • B.核心业务完全不可用的紧急故障← 正确答案
  • C.值班工程师最熟悉的那类故障
  • D.监控系统自动生成的测试告警

答案:B。P0 对应急诊科的红色标签——核心业务整体瘫痪,所有用户受影响,必须立刻唤醒工程师。时间、熟悉度都不是分级依据,分级只取决于影响范围与严重程度。

Q3. 无指责复盘文化中“指责”的正确指向是什么?

单选题 · easy

  • A.指向系统流程而非个人操作← 正确答案
  • B.只指向管理层与架构决策层
  • C.指向值班的一线工程师团队
  • D.追责给外部供应商与服务商

答案:A。无指责复盘的核心理念是“系统思维”:人总会犯错,系统应该在设计上兜住人的错误。如果复盘结论落在某个工程师头上,说明追问得还不够深。这是整个文化的根基,也是面试官最看重的价值观。

Q4. 值班手册(Runbook)最核心的价值是什么?

单选题 · mid

  • A.减少资深工程师被呼叫的次数
  • B.压缩事件定位与修复的处理耗时← 正确答案
  • C.替代监控告警系统的全部能力
  • D.作为团队绩效考核评优的凭证

答案:B。手册像抢救流程图,把“症状→排查→处置”的路径固化下来,重点压缩 MTTR 中的定位阶段。它不能替代告警系统,也不该变成考核材料,它的存在意义就是让处理更快更稳。

Q5. 在 MTTR 的四段分解中,值班手册主要优化哪一段?

单选题 · mid

  • A.检测阶段:监控系统发现异常
  • B.响应阶段:工程师确认接警
  • C.定位阶段:查找根因的时间← 正确答案
  • D.修复阶段:执行变更并验证恢复

答案:C。检测靠监控配置,响应靠排班纪律,修复靠处置手段,唯独“定位”是最依赖经验的环节。手册把已知故障的排查路径写成文档,让新人在凌晨也能照着走,直接砍掉最不可控的定位耗时。

Q6. 告警治理中“可行动性”的含义是什么?

单选题 · mid

  • A.工程师收到告警后可以立即行动
  • B.每条告警都有明确的处置动作← 正确答案
  • C.告警能在手机端远程直接确认
  • D.告警触发后自动执行修复脚本

答案:B。可行动性是说“告警即工单”:看到告警,工程师应该知道下一步做什么。如果一条告警只是通知“有异常”却无处置指引,它就是噪声。自动修复、远程确认都不是可行动性的定义,而是可能的处置方式。

Q7. 关于事后复盘,下列做法正确的有哪些?

多选题 · hard

  • A.还原时间线并区分事实与推断← 正确答案
  • B.找到人为失误并记录行政处分
  • C.为每个行动项明确责任人与期限← 正确答案
  • D.只把根因写入报告不做后续跟踪

答案:AC。复盘要还原时间线、区分事实和猜测,产出必须有责任人和死线的行动项。处分个人违背无指责文化,只写根因不跟踪则让复盘沦为形式。选 B 和 D 说明还没理解复盘“改进系统”的本质。

Q8. 5 Whys 方法的核心目的是什么?

单选题 · mid

  • A.列出五个部门来承担故障责任
  • B.从表层现象逐层逼近系统根因← 正确答案
  • C.收集五条告警日志用于归档备查
  • D.给复盘报告凑足五个分析章节

答案:B。5 Whys 是沿着“为什么”链条向下挖,直到找到流程或设计层面的根因为止。它不是凑章节,也不是分散责任,而是防止停在“人操作失误”这种浅层结论上。

Q9. 以下属于有效疲劳管理措施的有哪些?

多选题 · hard

  • A.限制单次连续 On-Call 的值班时长← 正确答案
  • B.夜间被叫醒后第二天允许补休← 正确答案
  • C.增加告警数量让值班者保持警觉
  • D.定期轮换值班人选避免长期高压← 正确答案

答案:ABD。疲劳管理的思路是“降低人的持续负荷”:限时、补休、轮换都是标准做法。增加告警只会加重疲劳和麻木,与目标背道而驰。记住:疲惫的守护者本身就是系统最大的漏洞。

Q10. 复盘报告为什么要刻意避免指责性措辞?

单选题 · easy

  • A.指责性措辞会打击团队的士气
  • B.真正根因通常是系统性的流程缺陷← 正确答案
  • C.法务合规部门不允许记录真实原因
  • D.避免工程师以后不愿参与复盘会

答案:B。避免指责措辞不是“说话客气”,而是认知上的纠偏:事故的根因大多在流程、架构、制度层面,而非个人态度问题。把“工程师没有配置超时”改成“系统未对下游配置超时”,读者的注意力才会从找人背锅转向修补系统。