月度复盘只报故障数量,容易把“这个月出了几次事故”当成质量结论,却看不出影响面、恢复速度和风险集中位置。本文给出一组互补指标,逐项说明分子、分母、时间窗与数据来源,并演示如何计算和组合解读,帮助质量负责人在复盘会上讲清质量水平、变化趋势和改进是否有效。
要点总览(TL;DR)
- 故障数量只回答“发生了几次”,且受分级口径和统计窗口影响,适合作为入口指标而非结论依据。
- 建议纳入五类互补指标:影响面(受影响用户数、受影响请求占比)、时长(持续时长、MTTD、MTTR)、密度(按服务或按发布批次)、逃逸率与发布相关故障占比、SLO达标率与错误预算消耗及用户侧体验指标。
- 每个指标写清分子、分母、单位和自然月时间窗,跨月故障归属规则与口径变更说明提前固定,分母为零或数据缺失时标注“不适用”“无样本”,不记0。
- 解读时先看体验与SLO类结果指标,再看影响面与时长,最后用密度、逃逸和发布相关占比定位流程薄弱环节;故障数持平但影响面或时长恶化,同样说明质量在变差。
- 指标是观测信号,小样本月份只做描述性说明,避免用单一指标给团队排名,具体根因与改进措施交由故障复盘和缺陷分析处理。
月度复盘要回答的质量问题与评估目标
线上质量月度复盘通常面向研发负责人、质量负责人和业务负责人,用于判断当月质量是否可接受、风险集中在哪些服务、上月改进项是否见效,以及下月资源投向哪里。指标组合应服务这些决策,而非堆砌数字。
评估目标可以拆成四类问题,每类对应不同视角的指标:
- 质量水平如何:当月线上可用性、错误率、延迟是否在可接受范围,对应体验类与SLO类指标。
- 变化趋势如何:与上月、近三个月相比,故障影响面和恢复时长是改善还是恶化,对应影响面类与时长类指标。
- 风险集中在哪:问题集中在哪些服务、哪些发布批次,对应密度类与发布相关故障占比。
- 改进是否有效:测试阶段拦截能力是否提升、同类问题是否重复发生,对应逃逸类指标与趋势对比。
故障数量只能回答“发生了几次”,且受故障分级口径和统计窗口影响明显:分级放宽,数量下降;跨月故障归属不同,两个月的数据都失真。因此故障数量适合作为入口指标,结论需要由影响、时长、密度、逃逸、体验五类视角共同支撑。
除故障数量外应纳入的指标与统计范围
建议纳入以下指标,每项补足故障数量的一个盲区。统计范围统一为生产环境、按团队约定的故障分级口径纳入、时间窗为自然月。
| 指标 | 定义 | 补足的盲区 | 统计范围 |
|---|---|---|---|
| 受影响用户数 | 故障期间受到影响的去重用户数 | 故障数量不区分大小,一次小范围故障与一次全量故障计数相同 | 生产环境,自然月内发生的故障 |
| 受影响请求占比 | 故障期间失败或超时请求数 ÷ 同期总请求数 | 反映业务实际受损程度,抵消业务量差异 | 生产环境,按服务统计 |
| 故障持续时长 | 从故障开始到恢复正常的时长 | 数量相同但时长差异大,用户感受完全不同 | 生产环境,按故障记录 |
| MTTD(平均发现时长) | 故障开始到被监控或人员发现的平均时长 | 暴露监控告警覆盖不足 | 生产环境,纳入统计的故障 |
| MTTR(平均恢复时长) | 故障发现到恢复的平均时长 | 暴露应急响应与回滚能力 | 生产环境,纳入统计的故障 |
| 故障密度(按服务) | 故障数 ÷ 服务数,或单服务故障数 | 避免大团队因服务多而故障数天然偏高 | 生产环境,按服务归集 |
| 故障密度(按发布批次) | 引发故障的发布批次数 ÷ 总发布批次数 | 把故障与变更关联,识别发布质量 | 生产环境,自然月内发布记录 |
| 逃逸率 | 线上问题中本应在测试阶段拦截的问题数 ÷ 线上问题总数 | 反映测试拦截能力,故障数量无法体现 | 生产环境,按问题单归集 |
| 发布相关故障占比 | 由发布变更引发的故障数 ÷ 故障总数 | 区分变更风险与存量缺陷风险 | 生产环境,按故障根因分类 |
| SLO达标率 | 达标时间窗口数 ÷ 总统计窗口数,或按请求成功率计算 | 用服务承诺衡量质量,而非只看事故 | 生产环境,按SLO定义窗口 |
| 错误预算消耗 | 当月实际不可用时长 ÷ SLO允许的不可用时长 | 把故障换算成对承诺的侵蚀程度 | 生产环境,自然月 |
| 可用性 | 1 − 不可用时长 ÷ 统计总时长 | 用户侧最直观的质量信号 | 生产环境,按服务或按业务线 |
| 错误率 | 失败请求数 ÷ 总请求数 | 捕捉未达故障标准但持续存在的错误 | 生产环境,按服务统计 |
| P95延迟 | 95%请求的响应时间不超过该值 | 性能退化往往先于故障出现 | 生产环境,按接口或服务统计 |
这张表的作用是让复盘会上的每个数字都有明确出处。故障分级口径需要在团队内固定,例如只纳入P1、P2级故障,P3及以下作为观察项单独列出,避免口径随月份漂移。
数据口径与证据要求
指标能否跨月比较,取决于分子、分母、单位和时间窗是否稳定。建议为每个指标建立口径说明,逐项写清计算方式和数据来源。
| 指标 | 分子 | 分母 | 单位 | 数据来源 | 缺失或分母为零 |
|---|---|---|---|---|---|
| 受影响请求占比 | 故障期间失败或超时请求数 | 同期总请求数 | 百分比 | 监控与网关日志 | 无请求时记“不适用”,不记0 |
| MTTD | 各故障发现时间减开始时间之和 | 纳入统计的故障数 | 分钟 | 监控告警记录、故障单 | 无故障时记“无样本” |
| MTTR | 各故障恢复时间减发现时间之和 | 纳入统计的故障数 | 分钟 | 故障单、值班记录 | 同上 |
| 故障密度(按发布) | 引发故障的发布批次数 | 当月总发布批次数 | 次/百次发布 | 发布记录、故障单关联字段 | 无发布时记“不适用” |
| 逃逸率 | 线上问题中应被测试拦截的问题数 | 线上问题总数 | 百分比 | 缺陷或问题单、测试记录 | 无线上问题时记“无样本” |
| SLO达标率 | 达标统计窗口数 | 总统计窗口数 | 百分比 | SLO平台或监控系统 | 窗口数据缺失时标注并剔除 |
| 错误预算消耗 | 当月不可用时长 | SLO允许的不可用时长 | 百分比 | SLO平台 | 未定义SLO时记“未配置” |
时间窗统一为自然月。跨月故障按“开始时间归属”或“影响时长拆分”二选一,并在口径文档中固定;一旦选定,后续月份沿用同一规则。故障分级口径变更时,需在复盘材料中注明变更月份和影响范围,变更前后的数据不做直接比较,或同时给出新旧口径两套数字。
数据来源建议固定为四类:监控告警系统提供可用性、错误率、延迟和发现时间;故障工单提供分级、持续时长、影响范围和根因分类;发布记录提供发布批次和变更关联;SLO平台提供达标率和错误预算。四类数据在月度复盘前完成对齐,避免同一故障在不同系统里数字不一致。
计算与评估步骤
从取数到形成结论,可以按以下步骤执行,保证结果可复算。
- 取数与清洗:导出当月故障单、发布记录、监控指标和SLO数据,剔除测试环境记录和重复工单,统一服务命名。
- 按服务归一化:计算单服务故障数、单服务受影响请求占比,避免服务数量多的团队总量天然偏高。
- 按发布批次归一化:用“引发故障的发布批次数 ÷ 总发布批次数 × 100”计算每百次发布的故障密度,便于不同发布节奏的团队比较。
- 计算逃逸率:从线上问题单中筛出根因属于测试阶段可覆盖范围的问题,除以线上问题总数。筛选标准需提前约定,例如需求逻辑错误、边界条件遗漏计入,第三方服务故障不计入。
- 计算发布相关故障占比:按故障单的根因分类字段统计由变更引发的故障数,除以故障总数。
- 分组对比:按服务、按团队分别列出上述指标,同时给出全公司总量,避免总量掩盖局部恶化。
- 趋势对比:与上月及近三个月均值对比,标注变化方向和幅度;样本过少的组只做描述,不做排名。
- 组合判断:先看体验类和SLO类指标判断整体水平,再看影响面和时长类指标判断单次故障的严重程度,最后看密度、逃逸和发布相关占比定位流程薄弱环节。
形成结论时,建议给不同指标设定不同权重:体验类和SLO类作为结果指标,权重较高;密度、逃逸、发布相关占比作为过程指标,用于解释结果而非直接打分。权重方案应在年初或季度初确定,月度复盘沿用,避免每月调整口径导致趋势失真。
计算示例:一个月的线上质量指标
以下为一组假设数据,仅用于演示计算过程,不代表任何真实团队的表现。
假设某月:纳入统计的故障4次,受影响用户合计1.2万人,总请求数5000万次,故障期间失败请求合计25万次;4次故障持续时长分别为40、90、30、20分钟,发现时长分别为5、10、3、2分钟;当月发布120批次,其中3批次引发故障;线上问题单50个,其中20个属于测试阶段应拦截的问题;SLO统计窗口30天,达标28天,当月不可用时长合计3小时,SLO允许不可用时长为4.3小时。
| 指标 | 计算过程 | 结果 |
|---|---|---|
| 受影响请求占比 | 25万 ÷ 5000万 | 0.5% |
| 平均故障持续时长 | (40+90+30+20) ÷ 4 | 45分钟 |
| MTTD | (5+10+3+2) ÷ 4 | 5分钟 |
| MTTR | (40+90+30+20−5−10−3−2) ÷ 4 | 40分钟 |
| 故障密度(按发布) | 3 ÷ 120 × 100 | 2.5次/百次发布 |
| 逃逸率 | 20 ÷ 50 | 40% |
| 发布相关故障占比 | 3 ÷ 4 | 75% |
| SLO达标率 | 28 ÷ 30 | 93.3% |
| 错误预算消耗 | 3 ÷ 4.3 | 69.8% |
组合解读时,如果上月故障数同为4次,但上月受影响请求占比为0.2%、MTTR为25分钟,则本月故障数量持平,影响面和恢复时长都在恶化,结论应是“故障频次稳定但单次影响变大、响应变慢”,改进重点放在应急响应和变更管控,而非单纯要求减少故障次数。反过来,若故障数上升但影响面下降、MTTR缩短,说明小故障被更早发现和更快恢复,质量趋势未必变差。
结果解读与使用限制
指标是观测信号,能说明发生了什么、变化方向如何,不能单独证明某项改进导致了质量提升。复盘结论应写成“指标变化 + 可能原因 + 待验证假设”,而非直接归因。
- 口径变化导致不可比:故障分级标准、逃逸率筛选标准、SLO定义调整后,变更前后的数据不做直接比较,需在材料中标注。
- 小样本月份谨慎解读:故障数只有一两次、发布批次很少时,密度和占比波动大,只做描述性说明,不据此排名或下结论。
- 避免单一指标排名:用故障数或逃逸率单独给团队排名,容易诱导少报或调整分级,应结合影响面、时长和趋势综合判断。
- 组合与趋势结合:先看三个月趋势判断方向,再看当月分布定位集中点,最后对照上月改进项检查是否见效。
- 与根因分析分工:本文指标回答“质量如何、风险在哪”,具体缺陷根因和改进措施属于故障复盘与缺陷分析的范围,两者结论互相引用但不互相替代。
月度复盘的数据汇总、故障单与发布记录的关联、指标看板的共享,可以在ONES效能管理中完成:系统自动收录研发过程中流转的数据,按交付效率、交付质量等维度形成分析指标,并提供场景化仪表盘模板,复盘前把故障、发布和问题数据对齐后共享给参会角色,减少重复取数和口径解释的成本。指标口径本身仍需团队在复盘制度中固定,工具承担的是数据汇总与呈现。
常见问题
故障数量与故障分级口径变化时,月度数据还能直接比较吗?
口径变更后,变更前后的数据不宜直接比较。建议在复盘材料中注明变更月份、变更内容和影响范围,并同时给出新旧口径两套数字,或把对比区间截取到口径统一之后。若只是个别月份的分级判定有争议,可保留原始记录,在趋势图中标注异常点,不调整历史数据。
当月没有发生故障,MTTD、MTTR和逃逸率应该填什么?
没有故障时,MTTD、MTTR记“无样本”,不记0,避免把“没有故障”误读为“发现和恢复时间为零”。逃逸率同理,线上问题总数为零时记“无样本”。受影响请求占比在无请求时记“不适用”。这些标注需要在口径文档中提前约定,保证各月填写方式一致。
逃逸率中“本应在测试阶段拦截”由谁判定,如何减少争议?
判定标准应在季度初由质量负责人与各团队负责人共同约定,写清计入和不计入的情形,例如需求逻辑错误、边界条件遗漏计入,第三方服务故障、生产环境配置差异不计入。判定时以问题单的根因字段为依据,争议问题由质量负责人复核并记录,后续月份沿用同一标准。
指标组合在复盘会上怎么用,才不至于变成逐项念数字?
建议按“趋势—分布—改进项”的顺序组织:先用三个月趋势说明整体方向,再用按服务和按发布的分组数据定位集中点,最后对照上月改进项检查是否见效。结果指标用于判断水平,过程指标用于解释原因,两者结合形成结论,避免逐项复述数值。
这些指标的数据在ONES效能管理中如何汇总?
ONES 效能管理自动收录系统内日常流转的研发数据,按交付效率、交付质量等维度形成分析指标,并提供场景化仪表盘模板,可将仪表盘共享给参会角色。故障单、发布记录和问题数据的关联与对齐仍需团队在复盘前完成,指标口径也需在复盘制度中固定,工具承担的是数据汇总与呈现。
