如何把一个系统的 MTTR 从 30 分钟降到 5 分钟,给出可落地步骤
解读
面试官问“30→5 分钟”不是考公式,而是验证候选人能否把“可观测性-定位-恢复”闭环拆成国内互联网公司可落地的工程动作。
评分维度:
- 是否先量化现状(日志、监控、链路、SOP 缺失率)
- 是否用“左移”思维把 70% 定位工作提前到发布前
- 是否给出“3 层 9 步”时间预算(1 min 发现-2 min 定界-2 min 恢复)
- 是否兼顾工具链、流程、人和钱,避免“堆人熬夜”式答案
知识点
- MTTR 分解:MTTR = MTTI(发现)+ MTTK(定位)+ MTTF(修复)+ MTV(验证)
- 国内主流可观测栈:Prometheus + Grafana + Loki/ELK + SkyWalking/ARMS + 钉钉/飞书 OnCall
- 故障等级与 SLO:P1 核心接口错误率 ≥5% 或 P99 延迟 ≥3×基线即触发
- 预案分级:L0 自动自愈(限流、重启、切流),L1 人工决策(回滚、降级),L2 架构改造
- 红蓝军演练:每月一次“不提前打招呼”的随机注入,验证 5 分钟 SLA
- 合规要求:日志留痕 ≥180 天,变更必须关联 Jira 编号,否则审计不通过
答案
我曾在××支付平台把 MTTR 从 28 min 压到 4 min,思路可复制为“3 阶段 9 动作”,全部可 2 个月内落地:
阶段 1:让故障 1 分钟必现(压缩 MTTI)
动作 1 补齐黄金指标:对入口网关、核心订单、账户余额 3 条链路补全“流量-错误-延迟”三合一告警,阈值用上周峰值 3σ,告警延迟 ≤30 s。
动作 2 告警降噪:用 Alert-Manager 做同环比抑制,合并 80% 抖动告警,确保值班手机 10 s 内只响一次。
动作 3 OnCall 工具链:钉钉群机器人同步告警,一键生成 WarRoom 语音会议,自动拉入最近发布人、Owner 和 SRE,平均省 2 min 找人时间。
阶段 2:让根因 2 分钟可定界(压缩 MTTK)
动作 4 链路染色:在灰度环境预置“红色 TraceId”,上线前跑 5 万次压测,把 95% 异常栈提前收录进“故障字典”,生产出现相同栈可直接匹配。
动作 5 一键日志:用 Loki 的 LogQL 模板固化 6 条高频查询(如“慢 SQL>1 s”“线程池满”),绑定到 Grafana 面板,值班只点一次按钮即可拉齐日志,省 3 min 手写 grep。
动作 6 容量基线:每晚 0 点自动跑 30% 峰值容量探测,把 CPU≥70% 或 QPS 下跌 10% 的节点标红,故障时优先看红色节点,定界时间缩短 40%。
阶段 3:让系统 2 分钟可恢复(压缩 MTTF+MTV)
动作 7 L0 自愈:
- 接口 5xx 率 ≥5% 持续 30 s → 自动重启 Pod(K8s 滚动,maxUnavailable=10%)
- 慢 SQL 比例 ≥20% → 自动触发 Druid 连接池重置
- 单机 CPU≥95% → 自动弹出 HPA,30 s 内扩容 1 倍
以上动作 60% 故障无需人工介入。
动作 8 一键回滚:GitLab CI 里固化“回滚流水线”,绑定镜像 tag 与配置版本,回滚按钮在 WarRoom 钉钉卡片内,平均 90 s 完成。
动作 9 演练固化:每两周随机注入 CPU 打满、网络延迟、MySQL 锁等待 3 类故障,要求值班 5 min 内恢复,连续 3 次达标才通过,否则补充预案。
落地排期与资源
- 第 1-2 周:动作 1-3,需 1 名 SRE+1 名测试,预算 0(复用现有 Prometheus)
- 第 3-4 周:动作 4-6,需 2 名后端开发补充埋点,测试负责压测验证
- 第 5-6 周:动作 7-8,需 1 名 DevOps 写 Ansible 与 CI 脚本
- 第 7-8 周:动作 9,组织 4 次红蓝演练,测试承担“红军”注入方
8 周后 MTTR 可稳定 ≤5 min,全年线上 P1 故障数下降 55%,无额外硬件成本。
拓展思考
- 如果系统跑在自建机房、无 K8s,可把“重启 Pod”换成“Ansible 批量重启虚拟机”,但需提前验证 IP 漂移后 Session 保持方案,避免 302 跳错节点。
- 对金融场景,回滚可能违反合规(账务已落库),此时要把动作 8 换成“补偿交易”+“冲正脚本”,并提前在备库跑对账,确保资损为 0。
- MTTR 降到 5 min 后,下一步可挑战“1 分钟”级别,需要引入 eBPF 内核级指标、连续 profiling(如 Pyroscope),把定位粒度从“节点”提升到“函数”级,但需权衡 3% 以内 CPU 开销。