2. SLI 基础概念:SLI、SLO、SLA 的定义与区别

2.1 核心术语定义

在微服务 CI/CD 流水线中,可靠性度量需要从三个层次进行定义:

术语 全称 定义 CI/CD 场景示例
SLI Service Level Indicator 服务等级指标,是实际测量的量化数据 构建成功率 = 成功构建次数 / 总触发次数
SLO Service Level Objective 服务等级目标,是团队承诺的目标阈值 构建成功率 ≥ 99.5%(月度统计)
SLA Service Level Agreement 服务等级协议,是面向用户的正式承诺 对外承诺构建成功率 ≥ 99.0%,否则赔付
关键区别: SLI 是“测量值”,SLO 是“目标值”,SLA 是“合同值”。SLO 通常比 SLA 更严格,为团队留出安全缓冲。

2.2 三者的层级关系

下图展示了 SLI → SLO → SLA 的递进关系,以及它们在 CI/CD 流水线中的位置:

SLI / SLO / SLA 层级关系与 CI/CD 映射 SLI 测量层 构建耗时 P95 | 部署频率 | 错误率 | 流水线饱和度 SLO 目标层 构建成功率 ≥ 99.5% | 部署前置时间 ≤ 30min SLA 协议层 对外承诺 ≥ 99.0% SLO 比 SLA 严格 预留安全缓冲 SLI 是 SLO 的 数据基础

2.3 黄金信号在 CI/CD 中的映射

Google SRE 定义的四个黄金信号(延迟、流量、错误、饱和度)在 CI/CD 流水线中有明确的对应指标:

黄金信号 CI/CD 映射指标 SLI 口径示例 测量粒度
延迟 (Latency) 流水线各阶段耗时 构建阶段 P95 耗时 ≤ 5min 按流水线/阶段
流量 (Traffic) 构建/部署触发频率 每小时构建触发次数 按时间窗口
错误 (Errors) 构建失败率、测试失败率 构建失败次数 / 总构建次数 按流水线/分支
饱和度 (Saturation) CI 资源利用率、队列深度 构建节点 CPU 使用率 ≥ 80% 时长 按节点/集群
实践建议: 在 CI/CD 流水线中,优先定义“错误”和“延迟”两个黄金信号的 SLI,因为它们直接影响开发者的交付效率。饱和度和流量信号通常在流水线规模扩大后逐步引入。

2.4 黄金信号映射关系图

下图展示了四个黄金信号如何从微服务运行态映射到 CI/CD 流水线的各个阶段:

黄金信号在 CI/CD 流水线中的映射 延迟 流量 错误 饱和度 代码提交 构建编译 自动化测试 部署发布 提交到构建开始延迟 构建 P95 耗时 每小时构建触发次数 并发构建数 构建失败率 测试用例失败率 CI 节点 CPU/内存使用率 构建队列深度 每个黄金信号可对应多个 CI/CD 阶段,需按阶段定义独立 SLI

2.5 SLI 口径设计原则

  • 可测量性: SLI 必须能从 CI/CD 工具(Jenkins、GitLab CI、GitHub Actions)的日志或 API 中直接采集。
  • 可对比性: 同一 SLI 在不同流水线、不同分支间的口径必须一致,避免“口径漂移”。
  • 业务相关性: 优先选择直接影响开发者体验的指标,如“构建排队时间”比“构建节点温度”更有意义。
  • 时间窗口: 明确 SLI 的统计周期(滚动窗口 1h / 24h / 7d),避免因短期波动导致误判。
常见陷阱: 不要将“构建成功率”定义为“成功构建次数 / 总触发次数”就结束。需要明确“成功”的标准——是编译通过?测试全部通过?还是镜像推送完成?口径定义越模糊,后续 SLO 监控越容易产生争议。

2.6 本章小结

概念 一句话总结
SLI 你实际测量到的数据(如:构建成功率 99.3%)
SLO 你给自己定的目标(如:构建成功率 ≥ 99.5%)
SLA 你对外承诺的底线(如:构建成功率 ≥ 99.0%)
黄金信号 延迟、流量、错误、饱和度,映射到 CI/CD 各阶段形成具体 SLI