1. SLI 基础概念:服务等级指标的基石

在构建可靠的 CI/CD 流水线之前,必须理解 SLI 的核心定义及其在服务可靠性工程中的位置。SLI(Service Level Indicator,服务等级指标)是对服务某个特定维度(如延迟、错误率、吞吐量)进行量化的直接测量值。它是 SRE 实践的起点——没有精确的测量,就无法定义目标,更无法进行调优。

1.1 什么是 SLI?

SLI 是一个可观测、可计算、可比较的数值指标,通常以比率、百分比或速率的形式呈现。例如:

  • 延迟 SLI:过去 5 分钟内,99% 的 HTTP 请求响应时间 ≤ 200ms。
  • 错误率 SLI:每分钟内,返回 HTTP 5xx 状态的请求占总请求数的比例。
  • 吞吐量 SLI:每秒成功处理的 CI/CD 构建任务数。
  • 可用性 SLI:服务在指定时间窗口内成功响应的请求百分比。
关键原则:SLI 必须来自用户视角的测量。对于 CI/CD 流水线,用户是开发者和发布工程师,SLI 应反映他们感知到的构建速度、部署成功率和回滚效率。

1.2 SLI 与 SLO / SLA 的关系

SLI、SLO(Service Level Objective,服务等级目标)和 SLA(Service Level Agreement,服务等级协议)构成了可靠性管理的三层金字塔。下表清晰展示了三者的区别与联系:

概念 定义 示例(CI/CD 场景) 关键特征
SLI 实际测量的服务指标值 过去 1 小时内,构建任务的平均完成时间为 4.2 分钟 可观测、实时、原始数据
SLO 团队为 SLI 设定的目标阈值 99.9% 的构建任务在 5 分钟内完成 内部承诺、可协商、驱动行动
SLA 对外部客户承诺的正式协议 每月构建可用性 ≥ 99.95%,否则提供补偿 法律约束、有惩罚条款、对外公开

三者之间的逻辑链条为:SLI 是测量基础 → SLO 是目标设定 → SLA 是商业承诺。没有准确的 SLI,SLO 就是空中楼阁;没有 SLO 的约束,SLA 无法被有效监控。

SLI / SLO / SLA 三层关系模型 SLI(服务等级指标) 实际测量值:构建延迟、错误率、吞吐量、可用性 SLO(服务等级目标) 内部目标阈值:99.9% 构建在 5 分钟内完成 SLA(服务等级协议) 对外商业承诺:月可用性 ≥ 99.95%,含补偿条款 测量驱动目标 目标约束协议 内部 → 外部 技术 → 商业

1.3 为什么在 CI/CD 中需要 SLI?

CI/CD 流水线是软件交付的核心动脉,其稳定性直接影响研发效率和发布质量。引入 SLI 可以带来以下四个关键收益:

  1. 量化交付质量:将“构建快不快”“部署稳不稳”等模糊感受转化为可比较的数字,例如“构建成功率 99.8%”。
  2. 驱动调优决策:当 SLI 偏离基线时,团队可以基于数据决定是否扩容、优化构建缓存、调整测试并行度。
  3. 建立错误预算:通过 SLI 与 SLO 的差值计算错误预算,允许团队在预算内进行风险发布,避免过度保守。
  4. 提升团队协作:DevOps 和 SRE 团队使用统一的 SLI 语言沟通,减少“我觉得慢”与“数据不慢”之间的争论。
实战案例:某团队发现部署流水线的“部署耗时 SLI”从 3 分钟飙升至 12 分钟。通过 SLI 趋势告警,定位到容器镜像仓库的 I/O 瓶颈,优化后恢复至 2.5 分钟。如果没有 SLI 的持续测量,该问题可能被忽略直到生产事故爆发。

1.4 CI/CD 流水线中的典型 SLI 分类

下表列出了 CI/CD 流水线中最常用的 SLI 维度及其测量方式:

SLI 类别 具体指标 测量方式 典型阈值参考
构建效率 构建完成时间(P50/P95) CI 工具 API + 时间戳日志 P95 ≤ 10 分钟
构建可靠性 构建成功率 成功构建数 / 总构建数 ≥ 99.5%
部署速度 部署前置时间 代码合并到生产部署完成的时间差 ≤ 1 小时
部署稳定性 部署失败率 / 回滚率 失败部署数 / 总部署数 ≤ 2%
测试质量 测试通过率 / 测试覆盖率 CI 测试报告解析 通过率 ≥ 99%
基础设施 CI Runner 可用性 Runner 心跳检测 + 任务排队时间 可用性 ≥ 99.9%
CI/CD 流水线 SLI 数据流架构 代码提交 Git Push / PR CI 构建 编译 / 单元测试 制品仓库 镜像 / 包存储 部署流水线 金丝雀 / 滚动 SLI 监控 Prometheus / Datadog SLI 数据采集点(5 个关键节点)

1.5 选择 SLI 的黄金法则

在 CI/CD 场景中定义 SLI 时,请遵循以下四条原则:

  • 用户视角优先:选择开发者或发布经理直接感知的指标,而非内部系统指标。例如“构建排队时间”比“Runner CPU 使用率”更贴近用户体验。
  • 可测量且可行动:SLI 必须能被自动化工具持续采集,且当指标异常时团队能采取明确的修复动作。
  • 保持精简:每个流水线阶段选择 2-3 个核心 SLI,避免指标泛滥导致监控疲劳。
  • 区分信号与噪声:关注长期趋势而非单点波动。例如单次构建失败可能是环境问题,但连续 1 小时构建成功率低于 95% 才是需要响应的信号。
常见误区:不要将基础设施指标(如磁盘 IO、网络延迟)直接作为流水线 SLI。这些是底层原因,而非用户感知的服务等级。正确的做法是将它们作为“诊断指标”与 SLI 关联分析,而非替代 SLI。