概述

2021 年我刚接手一个运维团队时,做了个简单统计:团队 12 个人,一周 40 小时工作时间里,平均 24 小时花在手动处理工单、重启服务、补磁盘空间这些事情上。琐事占比 60%。剩下 16 小时里,一半在开会同步信息,真正做工程优化的时间每周不到 8 小时。

团队里每个人都很忙,但系统还是不稳定。MTTR 40 分钟,可用性 99.5%,告警群每天 200 多条。老板问我:“我们团队到底行不行?“我答不上来。不是谦虚,是没有量化标准。

后来我花了 3 年时间,把可用性从 99.5% 推到 99.9%,MTTR 从 40 分钟压到 8 分钟,琐事占比从 60% 降到 20% 以内。回头复盘,最关键的一步不是引入了什么工具,而是建立了一套成熟度评估体系——先搞清楚团队在哪个段位,再决定下一步投什么。

这篇文章分享我实际用过的 SRE 团队成熟度 5 级模型。它借鉴了 CMMI 的分层思路,但完全针对 SRE 场景重新设计,每个级别都有可量化的判断标准。文末有一份 Python 自检脚本,你跑一下就知道自己的团队在哪一级。

为什么需要 SRE 成熟度模型

先说几个常见场景,看看你中了几条:

  • 招人时 JD 写"精通 K8s 和 Prometheus”,面了一圈发现候选人技术栈差不多,但来了之后产出天差地别——因为你不知道团队缺的是"会写 PromQL 的人"还是"能设计 SLO 体系的人”
  • 申报预算时跟老板说"我们需要买 Datadog 和搭建混沌工程平台",老板问"现在是什么水平?投了能到什么水平?“你答不上来
  • 跨团队协作时,开发觉得 SRE 只会卡上线,SRE 觉得开发只管发版不管稳定性——根源是双方对"SRE 该干什么"没有共识
  • 团队里有人想推进自动化,有人觉得"手动操作挺好的为什么要改”,你作为负责人没法用数据说服

这些问题的共同根因是:没有一把可量量的尺子来衡量团队能力。

CMMI 解决的是软件过程的问题,关注的是需求管理、配置管理、质量保证这些开发流程。SRE 成熟度模型关注的不是"你怎么写代码",而是"你怎么保障线上系统稳定运行"——监控覆盖到哪些服务、故障多久能恢复、变更出问题能不能自动回滚、团队多少时间在做工程多少时间在做琐事。

传统运维是"出了问题我来修",SRE 是"用工程方法让问题少发生、发生了快速恢复"——两者定位完全不同。

SRE 团队成熟度 5 级模型

我参考 CMMI 的五级分层(初始级→已管理级→已定义级→量化管理级→持续优化级),结合 Google SRE Book 的核心实践和自己在多个项目中的落地经验,设计了下面这个 SRE 专属的成熟度模型。

L1:救火队(Reactive)

核心特征:被动响应,手动运维,没有体系。

关键指标范围:

指标典型值说明
MTTR30-60 分钟靠人肉排查,无标准流程
琐事占比50%-70%大量时间花在重复手动操作
告警准确率<30%大量误报,告警疲劳严重
SLO 覆盖率0%没有定义任何 SLO
变更回滚手动出问题靠人肉回滚,经常回滚错版本

常见表现:

  • 监控面板是装 Prometheus 时自带的默认模板,没人改过
  • 告警配置是"CPU > 80% 就报警",不管白天黑夜都往群里发
  • 出了故障先在群里问"谁动了什么",翻聊天记录找原因
  • 运维知识在某个老员工脑子里,他休假就出事
  • 发布靠手动 kubectl apply,出问题靠手动 kubectl rollout undo

我接手的第一个团队就是这个状态。不是说团队不行——每个人技术能力都不差,但整个团队没有工程化思维,所有问题都靠"多盯盯"解决。

L2:规范化(Managed)

核心特征:有流程、有分工、有基本监控,但靠制度驱动而非数据驱动。

关键指标范围:

指标典型值说明
MTTR15-30 分钟有值班机制和排障文档
琐事占比40%-50%部分操作脚本化,但维护成本高
告警准确率30%-50%开始分级,但策略粗糙
SLO 覆盖率<20%可能定义了核心服务的 SLO 但没落地
变更回滚半自动CI/CD 有回滚按钮但要人判断什么时候触发

常见表现:

  • 有了 On-Call 轮值表,凌晨告警有人接,但交接班信息靠口口相传
  • 有 Runbook,但文档更新滞后于实际操作,经常"文档写的是 A 步骤,实际要做 B"
  • Prometheus + Grafana 搭好了,面板是照搬别人的模板,没针对自己的业务调过
  • CI/CD 流水线跑起来了,但发布频率还是受限于"发布要找老王审批"
  • 故障复盘在做,但复盘结论经常是"加强监控"“提高意识"这种没法落地的话

On-Call 轮值设计是个大话题,相关文章:凌晨三点的电话又响了:On-Call 排班设计与疲劳治理 有详细讨论。

从 L1 到 L2 的跃迁相对容易,核心动作是建立流程和分工。但很多团队卡在 L2 上不去,因为 L2 到 L3 需要的不是"再多加几个流程”,而是一次思维方式的转变——从"制度驱动"到"数据驱动"。

L3:度量驱动(Measured)

核心特征:SLI/SLO 体系落地,错误预算驱动决策,告警基于 SLO 而非阈值。

关键指标范围:

指标典型值说明
MTTR8-15 分钟告警精准,排障有标准化路径
琐事占比25%-40%自动化覆盖核心运维操作
告警准确率60%-80%基于 SLO burn rate 的告警替代阈值告警
SLO 覆盖率60%-80%核心和重要服务都有 SLO
变更回滚自动触发基于错误预算或健康检查自动回滚

常见表现:

  • 每个核心服务都有定义好的 SLI(可用性、延迟、错误率),SLO 目标和产品方达成一致
  • 告警不是"CPU 80%“而是"错误预算消耗速度异常”,减少了 70% 以上的无效告警
  • 故障复盘有结构化模板,每条改进项有负责人和 deadline
  • 开始用 IaC(Terraform/Ansible)管理基础设施,不再手动创建资源
  • 有容量规划的意识,大促前会做压测和扩容预案

我在某出行项目落地 SLO 体系时,最有体感的变化是:告警群从每天 200 多条降到 20 条以内,每条都是需要立即处理的。团队从"被告警追着跑"变成"有问题再看告警"。MTTR 从 30 分钟降到 8 分钟,不是因为排查更快了,而是告警准了,定位时间从 25 分钟缩到 3 分钟。

SLI/SLO 体系的具体设计方法,相关文章:SRE 核心理念:SLI、SLO 与错误预算 有完整讲解。

L4:工程化(Engineering)

核心特征:平台化运维,自动化覆盖全链路,可靠性门禁嵌入研发流程。

关键指标范围:

指标典型值说明
MTTR3-8 分钟自动化诊断 + 自愈机制
琐事占比15%-25%运维操作平台化,自助化
告警准确率80%-95%告警即工单,自带上下文
SLO 覆盖率80%-95%含非核心服务
变更回滚体系化多层防护(金丝雀→健康检查→自动回滚→错误预算门禁)

常见表现:

  • 运维操作平台化:20+ 运维操作(扩缩容、重启、配置变更、日志清理等)集成到自助平台,研发可自助执行
  • 新服务上线有生产就绪审查(Production Readiness Review),不达标的不能上线
  • 变更管理由错误预算驱动:预算充足时发布自由走,预算紧张时自动收紧审批
  • 监控即代码:告警规则用 Terraform 或 YAML 管理,版本可控、可 review
  • 容量规划有数据模型支撑,不是拍脑袋,而是基于历史趋势和压测数据

这个阶段最大的变化是 SRE 从"服务的运维者"变成"可靠性的工程化建设者"。团队不直接运维某个服务,而是建设让开发团队能自助运维的平台和工具。

关于运维操作平台化的具体架构,我在 相关文章:从"群里 @ 运维"到自助执行:运维操作平台化的 6 层架构 中有详细拆解。

L5:自优化(Optimizing)

核心特征:持续实验和改进,混沌工程常态化,AI 辅助决策。

关键指标范围:

指标典型值说明
MTTR<3 分钟大部分故障自愈,无需人工介入
琐事占比<15%团队 85%+ 时间做工程
告警准确率>95%预测性告警,故障发生前预警
SLO 覆盖率>95%全覆盖,含第三方依赖
变更回滚预防性变更前自动验证,不合规变更不让孩子发布

常见表现:

  • 混沌工程定期执行,主动注入故障验证系统韧性
  • 告警从"反应式"变成"预测式":基于趋势分析在故障发生前预警
  • 容量弹性完全自动化:HPA/VPA/CA 联动,扩缩容从 25 分钟到 1 分钟
  • 知识管理从"文档"变成"可执行的 Runbook":不是人去看文档,而是平台根据故障类型自动推荐处理方案
  • 团队时间分配:85% 做工程(平台开发、SLO 优化、混沌实验),15% 做日常运维

坦白说,L5 是理想态。Google 自己也还在往这个方向走。我见过的国内团队,能做到 L4 的已经是头部了。但 L5 给了一个目标方向——知道终点在哪,中间的每一步才有意义。

6 个评估维度

光有 5 级模型还不够——你需要知道从哪些维度来评估。下面是我实际用过的 6 个评估维度,每个维度有具体的可量化指标。

维度 1:事件响应能力

评估你的团队在故障发生时的响应速度和规范化程度。

评估项L1L2L3L4L5
MTTR30-60min15-30min8-15min3-8min<3min
故障分级无有但靠经验SEV 分级明确自动定级预测性
复盘执行不做做了但没跟踪结构化复盘+改进跟踪改进项完成率>80%改进项自动跟踪
On-Call无有轮值但疲劳严重轮值+疲劳管控轮值+自动化辅助自愈为主

维度 2:SLO 落地程度

SLI/SLO 体系是 SRE 的根基。没有 SLO,谈可靠性就是在凭感觉。

评估项L1L2L3L4L5
SLO 覆盖率0%<20%60-80%80-95%>95%
错误预算无概念了解落地+告警驱动发布决策驱动产品决策
SLI 定义无手动配置标准化模板IaC 管理自动发现
SLO 评审无无季度评审月度调整持续优化

维度 3:琐事占比

Google SRE Book 规定运维琐事不得超过 50%。这个数字是硬约束——超过 50%,团队就没有时间做工程优化,会陷入"越忙越没时间改进越忙"的死循环。

评估项L1L2L3L4L5
琐事占比50-70%40-50%25-40%15-25%<15%
自动化覆盖率<10%10-30%30-60%60-85%>85%
重复操作识别不识别偶尔发现定期审计平台化消除预测性消除
工单数量无跟踪有但不分析趋势分析分类治理自动路由

维度 4:变更安全性

变更导致的故障占所有故障的 60% 以上(Google SRE Book 数据)。变更管理是 SRE 成熟度的核心维度。

评估项L1L2L3L4L5
回滚方式手动有按钮半自动自动+多层预防性
灰度策略无手动灰度自动灰度金丝雀+流量管理自动+AB测试
变更审查无人工审批PR Review自动化门禁预测性门禁
变更冻结无大促手动冻结错误预算驱动动态窗口风险预测冻结

维度 5:可观测性覆盖

可观测性不是"装了 Prometheus"就完了——关键是你能不能在不看日志的情况下回答"系统现在正不正常"。

评估项L1L2L3L4L5
监控覆盖核心服务核心全量核心全量+重要服务全量+依赖全量+第三方
告警策略阈值分级阈值SLO burn rate告警即工单预测性告警
日志覆盖关键日志结构化日志集中采集+搜索日志即数据自动根因分析
链路追踪无有但不全核心链路全链路自动拓扑发现

维度 6:知识管理

知识管理是最容易被忽略的维度。很多团队技术上不差,但知识传递效率极低——新人上手要 3 个月,老人走了知识就断层。

评估项L1L2L3L4L5
Runbook无有但过时定期更新可执行自动推荐
架构图口口相传有但不准版本化IaC 生成实时拓扑
故障案例库无有但不查可搜索结构化+关联自动匹配
培训机制师徒制偶尔培训定期分享体系化课程自动化学习

量化自检脚本

光看表格还不够直观。下面是一个 Python 脚本,输入你团队在各维度的实际情况,它会算出你的成熟度分数和级别。

#!/usr/bin/env python3
"""SRE 团队成熟度自检评分脚本

用法: python3 sre_maturity_score.py
按提示输入各维度数据,输出成熟度等级和改进建议。
"""

import json
import sys

# 6 个维度的评估项和评分规则
# 每个维度满分 100 分,6 个维度总分 600
# L1: <150, L2: 150-250, L3: 250-380, L4: 380-480, L5: >480

DIMENSIONS = {
    "incident_response": {
        "name": "事件响应能力",
        "questions": [
            {
                "key": "mttr",
                "prompt": "团队平均 MTTR(分钟)",
                "scores": {60: 10, 30: 25, 15: 45, 8: 70, 3: 90, 0: 100},
            },
            {
                "key": "severity",
                "prompt": "故障分级机制(1=无 2=有但靠经验 3=SEV明确 4=自动定级 5=预测性)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
            {
                "key": "postmortem",
                "prompt": "复盘改进项完成率(0-100%)",
                "scores": lambda x: min(100, int(x)),
            },
            {
                "key": "oncall",
                "prompt": "On-Call 机制(1=无 2=有轮值 3=轮值+疲劳管控 4=轮值+自动化 5=自愈为主)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
        ],
    },
    "slo_adoption": {
        "name": "SLO 落地程度",
        "questions": [
            {
                "key": "slo_coverage",
                "prompt": "SLO 覆盖率(0-100%)",
                "scores": lambda x: min(100, int(x)),
            },
            {
                "key": "error_budget",
                "prompt": "错误预算使用(1=无 2=了解概念 3=落地+告警 4=驱动发布 5=驱动产品决策)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
            {
                "key": "sli_standard",
                "prompt": "SLI 定义方式(1=无 2=手动 3=标准化 4=IaC 5=自动发现)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
        ],
    },
    "toil_ratio": {
        "name": "琐事占比",
        "questions": [
            {
                "key": "toil_pct",
                "prompt": "运维琐事占比(0-100%)",
                "scores": lambda x: max(0, 100 - int(x) * 1.5),
            },
            {
                "key": "automation",
                "prompt": "自动化覆盖率(0-100%)",
                "scores": lambda x: min(100, int(x)),
            },
        ],
    },
    "change_safety": {
        "name": "变更安全性",
        "questions": [
            {
                "key": "rollback",
                "prompt": "回滚方式(1=手动 2=有按钮 3=半自动 4=自动+多层 5=预防性)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
            {
                "key": "canary",
                "prompt": "灰度策略(1=无 2=手动 3=自动 4=金丝雀+流量管理 5=自动+AB)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
            {
                "key": "change_gate",
                "prompt": "变更审查(1=无 2=人工审批 3=PR Review 4=自动化门禁 5=预测性)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
        ],
    },
    "observability": {
        "name": "可观测性覆盖",
        "questions": [
            {
                "key": "monitoring",
                "prompt": "监控覆盖率(0-100%)",
                "scores": lambda x: min(100, int(x)),
            },
            {
                "key": "alerting",
                "prompt": "告警策略(1=阈值 2=分级 3=SLO burn 4=告警即工单 5=预测性)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
            {
                "key": "tracing",
                "prompt": "链路追踪(1=无 2=有不全 3=核心 4=全链路 5=自动拓扑)",
                "scores": {1: 10, 2: 30, 3: 55, 4: 80, 5: 100},
            },
        ],
    },
    "knowledge": {
        "name": "知识管理",
        "questions": [
            {
                "key": "runbook",
                "prompt": "Runbook 状态(1=无 2=过时 3=定期更新 4=可执行 5=自动推荐)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
            {
                "key": "architecture",
                "prompt": "架构图(1=口口相传 2=有但不准 3=版本化 4=IaC生成 5=实时拓扑)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
            {
                "key": "case_library",
                "prompt": "故障案例库(1=无 2=有但不查 3=可搜索 4=结构化 5=自动匹配)",
                "scores": {1: 10, 2: 25, 3: 50, 4: 75, 5: 100},
            },
        ],
    },
}

LEVEL_NAMES = {
    1: "L1 救火队(Reactive)",
    2: "L2 规范化(Managed)",
    3: "L3 度量驱动(Measured)",
    4: "L4 工程化(Engineering)",
    5: "L5 自优化(Optimizing)",
}

LEVEL_THRESHOLDS = [
    (0, 150, 1),
    (150, 250, 2),
    (250, 380, 3),
    (380, 480, 4),
    (480, 601, 5),
]


def score_question(q, answer):
    """根据答案计算单项得分"""
    scores = q["scores"]
    if callable(scores):
        return scores(answer)
    # 找到 <= answer 的最大 key
    best = 0
    for threshold, score in sorted(scores.items()):
        if answer >= threshold:
            best = score
    return best


def run_assessment():
    """交互式自检"""
    print("=" * 60)
    print("SRE 团队成熟度自检")
    print("=" * 60)

    results = {}
    total = 0

    for dim_key, dim in DIMENSIONS.items():
        print(f"\n--- {dim['name']} ---")
        dim_score = 0
        q_count = len(dim["questions"])
        for q in dim["questions"]:
            while True:
                try:
                    raw = input(f"  {q['prompt']}: ").strip()
                    if q["scores"] == q.get("scores") and callable(q["scores"]):
                        answer = float(raw)
                    elif isinstance(q["scores"], dict):
                        answer = int(raw)
                        if answer not in q["scores"] and max(q["scores"].keys()) > 5:
                            answer = float(raw)
                    else:
                        answer = float(raw)
                    break
                except ValueError:
                    print("    输入无效,请重新输入")
            s = score_question(q, answer)
            dim_score += s
            results[f"{dim_key}.{q['key']}"] = {"answer": raw, "score": s}

        dim_avg = round(dim_score / q_count)
        print(f"  → {dim['name']} 得分: {dim_avg}/100")
        total += dim_avg

    # 判定级别
    level = 1
    for low, high, lv in LEVEL_THRESHOLDS:
        if low <= total < high:
            level = lv
            break

    print("\n" + "=" * 60)
    print(f"总分: {total}/600")
    print(f"成熟度等级: {LEVEL_NAMES[level]}")
    print("=" * 60)

    # 改进建议
    weakest = min(
        DIMENSIONS.keys(),
        key=lambda k: sum(
            results[f"{k}.{q['key']}"]["score"]
            for q in DIMENSIONS[k]["questions"]
        ) / len(DIMENSIONS[k]["questions"]),
    )
    print(f"\n最薄弱维度: {DIMENSIONS[weakest]['name']}")
    print(f"建议优先投入: {DIMENSIONS[weakest]['name']} 的改进")
    print(f"完整结果已保存到 sre_maturity_result.json")

    with open("sre_maturity_result.json", "w") as f:
        json.dump({"total": total, "level": level, "details": results}, f, indent=2)

    return total, level


if __name__ == "__main__":
    run_assessment()

这个脚本我在团队里用了两年。每次季度复盘跑一遍,对比上次的分数,就知道这三个月到底有没有进步。比跟老板汇报"我们做了很多优化"有说服力多了。

6 个跃迁决策

从一级到下一级不是自然发生的,需要刻意投入。下面是 6 个关键决策,每个都是我在实际项目中做过的选择。

决策 1:L1→L2,先建值班机制还是先建监控

我的推荐:先建值班机制。

理由很直接:监控可以照搬别人的模板,但值班机制建立的是"谁负责、出了问题找谁"这个基础协作关系。没有这个关系,再好的监控也没人看。

具体做法:

  • 排定 On-Call 轮值表,7 天一轮,主备各一人
  • 定义告警渠道:P0 电话通知、P1 短信+群消息、P2 群消息
  • 建交接班清单:当前未解决的告警、即将到期的变更、已知风险
  • On-Call 期间琐事占比不超过 25%(Google 标准),超了就说明排班不合理

踩坑:我第一次排班时把最强的人排在主班,结果他成了"所有问题的终点",不仅自己累死,团队其他人也得不到锻炼。正确的做法是强弱搭配,主班处理 P0,副班处理 P1 并跟主班学习。

决策 2:L2→L3,先做 SLO 还是先清告警

我的推荐:先做 SLO,用 SLO 驱动告警清理。

先清告警是个陷阱——没有标准,你怎么判断哪条告警该删?删错了出事故谁负责?SLO 给了你一个客观标准:任何不消耗错误预算的波动都不该告警。

落地顺序:

  1. 选 1-2 个核心服务,定义 SLI(建议从可用性开始:成功请求/总请求)
  2. 跟产品方确认 SLO 目标(不要自己拍,要业务方认可)
  3. 配置错误预算 burn rate 告警,替代旧的 CPU/内存阈值告警
  4. 观察 2 周,确认新告警有效性后,逐步清理旧告警

实测数据:我在某出行项目落地 SLO 后,告警数量从 200 条/天降到 20 条/天,告警准确率从 28% 提升到 78%。团队每周少花 15 小时处理无效告警。

决策 3:L3→L4,错误预算门禁放在哪一层

我的推荐:三层门禁,不要一步到位。

错误预算门禁是 L4 的标志性实践,但一步到位推全量会遭到开发团队的强烈反弹。我的做法是分三层:

层级触发条件动作推行时机
黄色错误预算消耗 >50%自动通知研发团队,提示控制发布频率第1个月
红色错误预算消耗 >75%新发布需 SRE review,自动灰度范围缩小第2个月
黑色错误预算耗尽发布冻结,只允许 bugfix 和回滚第3个月

踩坑:一开始我把红色门禁设成"所有发布都需 SRE 审批",结果 SRE 变成了瓶颈——每天 20 个发布请求排队等审批。后来改成"红色时只 review 变更风险高的发布",审批量降到每天 3-5 个。门禁的目的是降低风险,不是卡住业务。

决策 4:L4→L5,自愈平台投入产出比

我的观点:80% 的团队不应该追求 L5。

L5 的核心特征是自愈——大部分故障不需要人介入。但自愈平台的开发成本极高:你需要为每种故障类型设计自动化恢复逻辑,覆盖的故障类型越多,开发量越大。

我见过一个团队花了 6 个月开发自愈平台,覆盖了 12 种常见故障,结果上线后发现:这 12 种故障只占总故障数的 35%。另外 65% 的故障是长尾,每种一年才发生一两次,投入自动化根本不划算。

务实建议:

  • 先把 L4 做扎实——80% 的故障可以通过标准化运维操作平台化解决
  • 自愈只针对高频故障(Top 5 故障类型,占总数 60% 以上)
  • 其他的靠自动化辅助(自动诊断+推荐方案),不是完全自愈

决策 5:投资优先级排序

如果你有一笔预算,该投什么?下面是我的优先级排序表:

成熟度区间第一优先第二优先不推荐
L1On-Call 机制 + 基础监控Runbook混沌工程
L2SLO 体系 + 告警治理CI/CD 自动化AIOps
L3错误预算门禁 + 运维平台IaC自愈平台
L4自愈(高频故障) + 混沌工程预测性告警全量自愈

核心原则:不要跳级投资。L1 的团队上混沌工程是灾难——你连稳定状态都没建立,注入故障只会制造更多混乱。

决策 6:避免过度工程化

这是我最想强调的一点。成熟度模型是给你做自检用的,不是给你做 KPI 用的。

我见过一个团队主管拿到这个模型后,给每个维度定了"半年内升一级"的目标。结果团队为了升 L3,把所有服务的 SLO 都定了 99.99%——但其中一半服务根本没那么重要,SLO 定太高反而导致开发团队被错误预算绑死,什么都不敢发。

正确的用法:

  • 每季度跑一次自检,看分数变化趋势
  • 最薄弱的维度优先投入,不追求全面均衡
  • 不同服务可以有不同目标——核心服务做到 L4,边缘服务做到 L2 就够了
  • 成熟度提升是结果,不是目标——目标是提升系统可靠性和团队效率

生产实践:3 年从 L1 到 L4

最后分享我实际的跃迁路径,给一个具体的时间线参考。

第一年:L1→L2(建立秩序)

前 3 个月:

  • 建立 On-Call 轮值,7 天一轮,主备搭配
  • 清理告警渠道:P0 电话、P1 短信、P2 群消息,各归各位
  • 写了 8 份核心服务的 Runbook,虽然粗糙但有了

3-6 个月:

  • Prometheus + Grafana 基础面板搭建完成
  • CI/CD 流水线接入自动测试,发布从手动 apply 变成流水线触发
  • 开始记录工单数据,第一次有了琐事占比的量化数据:55%

6-12 个月:

  • MTTR 从 40 分钟降到 28 分钟(主要靠 Runbook 缩短了定位时间)
  • 琐事占比从 60% 降到 45%
  • 团队开始有"这是工程问题不是操作问题"的意识

第二年:L2→L3(数据驱动)

前 6 个月:

  • 为 3 个核心服务定义 SLI/SLO,SLO 覆盖率从 0% 到 45%
  • 告警策略从阈值切换到 SLO burn rate,告警数量下降 70%
  • 开始用 Terraform 管理基础设施,手动创建资源的次数降到 0

6-12 个月:

  • SLO 覆盖率推到 72%
  • MTTR 降到 12 分钟
  • 琐事占比降到 30%
  • 错误预算开始驱动发布节奏,开发团队从抵触到接受

第三年:L3→L4(工程化)

  • 运维操作平台上线,20+ 运维操作自助化,琐事占比降到 22%
  • 生产就绪审查落地,新服务上线前必须过 7 维度门禁
  • 变更回滚从"有按钮"升级到"多层自动防护"
  • MTTR 降到 8 分钟
  • 可用性从 99.5% 提升到 99.9%

三年下来,团队从 12 个人变成 8 个人(人力降 40%),但系统比之前稳定得多。省下来的 4 个人力不是裁了,而是转去做平台开发和 SLO 优化——这就是 SRE 的价值:用工程方法替代人力堆叠。

替代方案与权衡

DORA 指标 vs SRE 成熟度模型

DORA(DevOps Research and Assessment)定义了 4 个关键指标:部署频率、变更前置时间、变更失败率、故障恢复时间。它的优势是跨行业可比,数据积累厚。

对比项DORA 指标SRE 成熟度模型
关注点交付效率+稳定性稳定性工程能力
指标数4 个6 维度 20+ 项
适用场景整体研发效能评估SRE 团队专项评估
数据获取从 CI/CD 系统提取需要多系统综合
量化程度高(4 个精确数字)中(多维评分)

我的建议:DORA 和 SRE 成熟度不矛盾,搭配用。DORA 看整体研发效能,SRE 成熟度看 SRE 团队专项能力。如果只能选一个,SRE 团队用 SRE 成熟度模型更聚焦。

CMMI vs SRE 成熟度模型

CMMI 关注的是软件过程改进,5 级分层(初始→已管理→已定义→量化管理→持续优化)。SRE 成熟度模型借鉴了它的分层思路,但评估维度完全不同。

CMMI 评估的是"你写代码的过程规范不规范",SRE 成熟度评估的是"你保障线上系统稳不稳"。如果你的团队同时做开发和运维,CMMI 和 SRE 成熟度可以互补——前者看开发流程,后者看运维能力。

不要为了评估而评估

最后提醒一个常见误区:把成熟度评估做成 KPI 考核工具。

成熟度模型的价值是自检和定位——帮你发现短板、决定下一步投入方向。一旦把它变成 KPI,团队就会为了分数做表面功夫:SLO 覆盖率 100% 但一半是"99% 可用性"这种没意义的指标;Runbook 写了 50 份但没人维护更新。分数上去了,实际能力没变。

我的做法是:评估结果只用于内部复盘和规划,不挂钩绩效考核。团队知道这是帮他们发现问题的工具,不是考核他们的鞭子。这样大家才会诚实打分,评估才有意义。

总结

回到开头的问题:你的 SRE 团队到底行不行?

别凭感觉回答。用 5 级成熟度模型和 6 维量化自检跑一遍,数字会告诉你答案。

几个核心观点:

  1. 成熟度是分层递进的,不能跳级。L1 的团队上混沌工程是灾难,L3 的团队还在手动回滚是浪费。先搞清楚自己在哪一级,再决定投什么。

  2. 琐事占比是最硬的指标。如果团队 50% 以上的时间在手动操作,不管你装了多少工具、写了多少文档,都是 L1-L2 水平。Google SRE Book 的 50% 上限不是建议,是硬约束。

  3. SLO 是分水岭。没有 SLO 的团队最多是 L2。SLO 落地后,告警、变更、容量规划都有了一个统一的衡量标准,团队才能从"制度驱动"转向"数据驱动"。

  4. L4 已经是头部水平。国内能做到 L4 的团队不多。L5 是理想态,80% 的团队不需要追求 L5——把 L4 做扎实,80% 的故障能通过平台化解决。

  5. 成熟度模型是自检工具,不是 KPI。用来发现短板、指导投入方向,不是用来考核团队。一旦挂钩绩效,评估就失真了。

我在多个企业客户落地这套模型后,最常见的反馈是:“以前不知道团队缺什么,现在知道了。“这比任何工具和流程都重要——知道自己在哪里,才知道往哪走。

参考资料与致谢

本文在撰写过程中参考了以下资料,感谢原作者的贡献:

  1. Site Reliability Engineering — Google SRE Team,SRE 的奠基性著作,本文的琐事占比上限、错误预算、SLI/SLO 等核心概念均源自此书
  2. SRE Best Practices: The 2026 Playbook — Nova AI Ops,2026 年 SRE 最佳实践综述,提供了自动化 SLO 监控和 burn rate 告警的最新实践参考
  3. Setting SLOs and Error Budgets That Reduce Burnout — SquareOps,关于 SLO 落地实践和团队疲劳管理的实战经验,本文 On-Call 疲劳治理部分参考了其分析框架
  4. SRE 体系从理念指标到组织协同的落地实践 — 阿里云开发者社区,提供了 SRE 体系建设的全局视角和 MTBF/MTTR 度量框架参考
  5. Capability Maturity Model Integration (CMMI) — R. Morales-Fernández 等,CMMI 成熟度模型的学术基础,本文 5 级分层架构的设计灵感来源于此