1. SLI 基础概念:定义、作用与层级关系
SLI(Service Level Indicator,服务等级指标)是衡量软件服务某一维度质量水平的可量化度量值。在 CI/CD 流水线语境下,SLI 将抽象的“流水线质量”转化为具体的数字指标,为后续的 SLO 制定和 SLA 评估提供数据基础。
1.1 什么是 SLI
SLI 本质上是一个比率或计数,通常以“好事件 / 总事件”的形式表达。例如:
- 成功率:构建成功次数 / 总触发次数
- 延迟:流水线完成时间(P50 / P95 / P99)
- 覆盖率:代码扫描通过率 / 总扫描次数
- 可用性:流水线服务正常响应时间 / 总时间
核心公式: SLI = 有效好事件计数 ÷ 总事件计数 × 100%
1.2 SLI 在 CI/CD 流水线中的核心作用
CI/CD 流水线是软件交付的“高速公路”,SLI 在其中扮演三个关键角色:
| 作用维度 | 具体说明 | 流水线示例 |
|---|---|---|
| 可观测性 | 将流水线黑盒变为白盒,暴露瓶颈与失败模式 | 构建阶段耗时 P95 超过 10 分钟 |
| 质量门禁 | 作为自动化卡点,阻止低质量变更进入下一阶段 | 单元测试覆盖率 SLI < 80% 则阻断合并 |
| 持续改进 | 提供趋势数据,驱动流水线优化与资源调整 | 部署失败率 SLI 周环比上升 5% 触发告警 |
实践建议: 优先选择与“用户(开发者)体验”强相关的 SLI,例如“从代码提交到生产部署的端到端时长”,而非仅关注内部资源利用率。
1.3 SLI 与 SLO / SLA 的关系
SLI、SLO(Service Level Objective,服务等级目标)和 SLA(Service Level Agreement,服务等级协议)构成一个三层金字塔结构:
1.4 三者对比总结
| 维度 | SLI | SLO | SLA |
|---|---|---|---|
| 定义 | 实际测量指标 | 目标阈值 | 合同承诺 |
| 示例 | 构建成功率 = 99.7% | 构建成功率 ≥ 99.5% | 构建成功率 ≥ 99.0%,否则赔偿 |
| 受众 | 开发 / 运维工程师 | 技术团队负责人 | 业务方 / 客户 |
| 时间窗口 | 实时 / 近实时 | 滚动窗口(如 30 天) | 合同周期(如月度 / 季度) |
| 变更频率 | 随流水线持续变化 | 按迭代周期调整 | 合同期内固定 |
| CI/CD 典型值 | 构建耗时 P95 = 8.2 min | 构建耗时 P95 ≤ 10 min | 构建耗时 P95 ≤ 15 min |
1.5 流水线 SLI 的典型分类
在 CI/CD 场景中,SLI 通常按流水线阶段进行划分:
- 提交阶段:代码扫描通过率、静态检查耗时
- 构建阶段:构建成功率、构建缓存命中率、构建耗时
- 测试阶段:单元测试通过率、集成测试覆盖率、测试执行时间
- 部署阶段:部署成功率、回滚率、部署耗时
- 发布阶段:发布频率、变更失败率、恢复时间(MTTR)
常见误区: 不要将基础设施指标(如 CPU 使用率、磁盘 IO)直接作为流水线 SLI。这些是“资源指标”,而非“服务质量指标”。流水线 SLI 应聚焦于用户可感知的交付质量与效率。
1.6 为什么 SLI 是 SRE 在 CI/CD 中的第一块基石
没有 SLI,SLO 就是空谈;没有 SLO,SLA 就是赌博。在 CI/CD 流水线中,SLI 提供了以下关键能力:
- 数据驱动决策:基于 SLI 趋势决定是否优化构建缓存、扩容构建集群
- 错误预算计算:SLI 是错误预算(Error Budget)的输入源,决定发布节奏
- 自动化告警:SLI 阈值触发告警,避免人工巡检
- 容量规划:SLI 历史数据用于预测流水线资源需求