2. SLI 基础概念:定义与四大黄金信号在 CI/CD 中的映射
2.1 什么是 SLI(服务等级指标)
SLI(Service Level Indicator,服务等级指标)是经过明确定义、可量化测量的某个服务特性或质量维度的具体数值。在容器化 CI/CD 流水线中,SLI 用于回答“流水线跑得好不好”这一核心问题。没有 SLI,性能调优就失去了方向和标尺。
关键认知: SLI 不是 SLA(服务等级协议),也不是 SLO(服务等级目标)。SLI 是原始测量值,SLO 是 SLI 的目标阈值,SLA 是未达成 SLO 后的业务承诺。三者关系为:SLI → SLO → SLA。
| 术语 | 定义 | CI/CD 示例 |
|---|---|---|
| SLI | 实际测量的服务质量指标 | 流水线从提交到完成的中位耗时 = 8 分 32 秒 |
| SLO | SLI 的目标值或范围 | P95 流水线耗时 ≤ 15 分钟 |
| SLA | 未达成 SLO 后的补偿协议 | 连续 3 天未达标,减免 10% 平台服务费 |
2.2 四大黄金信号概述
Google SRE 经典著作《Site Reliability Engineering》提出了监控分布式系统的四大黄金信号(Four Golden Signals):延迟(Latency)、流量(Traffic)、错误(Errors)、饱和度(Saturation)。这四个维度覆盖了系统健康度的全貌,同样适用于 CI/CD 流水线的可观测性建设。
2.3 四大黄金信号在 CI/CD 中的详细映射
2.3.1 延迟(Latency)
延迟衡量流水线完成一次完整工作流所花费的时间。在 CI/CD 中,延迟直接决定开发者的反馈循环速度,是影响研发效率的首要因素。
- 关键 SLI 口径:
- Pipeline 端到端耗时(Commit → Deploy)
- 各阶段耗时:代码检出、依赖安装、编译构建、单元测试、镜像构建、集成测试、部署
- 队列等待时间(Job 在 Agent 队列中的排队时长)
- 测量方式: 在 Pipeline 开始和结束处埋点,记录时间戳差值;使用 Prometheus Histogram 或类似工具记录分位值。
- 常见问题: 依赖缓存未命中、镜像层未复用、Agent 资源不足导致排队。
调优案例: 某团队发现 P95 流水线耗时从 12 分钟飙升至 28 分钟。通过拆分延迟 SLI 发现,镜像构建阶段耗时占比从 35% 升至 68%。根因为基础镜像未更新缓存层,每次全量拉取。优化后恢复至 14 分钟。
2.3.2 流量(Traffic)
流量衡量 CI/CD 系统承载的请求数量与并发度。流量 SLI 帮助判断系统是否处于正常负载范围,以及是否需要扩容。
- 关键 SLI 口径:
- 每分钟/每小时触发的 Pipeline 数量
- 同时运行的并发 Job 数
- Webhook 接收速率(Git Push / PR 事件)
- 制品仓库的推送/拉取请求数
- 测量方式: 通过 CI 平台 API 或事件流(如 Kafka)统计请求速率。
- 常见问题: 突发大量提交导致 Pipeline 风暴,Agent 池被打满;镜像仓库限流导致构建阻塞。
2.3.3 错误(Errors)
错误衡量 CI/CD 流水线中各类失败的比例。错误 SLI 是流水线稳定性的直接体现,也是 SRE 首要关注的信号。
- 关键 SLI 口径:
- Pipeline 总体失败率(失败次数 / 总触发次数)
- 各阶段失败率:编译失败率、测试失败率、部署失败率
- 基础设施错误率:Agent 失联、存储超时、网络错误
- 回滚率(回滚次数 / 部署次数)
- 测量方式: 从 CI/CD 平台数据库或日志中统计状态码为 failure/error 的记录。
- 常见问题: 测试环境不稳定导致假阳性失败;依赖源不可用;镜像签名验证失败。
注意: 错误 SLI 需要区分“用户代码错误”和“基础设施错误”。前者属于开发团队,后者属于平台 SRE 团队。混为一谈会导致责任不清、调优方向错误。
2.3.4 饱和度(Saturation)
饱和度衡量 CI/CD 基础设施资源的使用程度。饱和度 SLI 是预测性指标,用于在系统过载前发出预警。
- 关键 SLI 口径:
- 构建 Agent 的 CPU 使用率、内存使用率
- Agent 队列深度(等待中的 Job 数量)
- 镜像仓库存储使用率
- 网络带宽使用率(尤其是大镜像分发场景)
- 数据库连接池使用率
- 测量方式: 通过 Node Exporter、cAdvisor、云厂商监控 API 采集。
- 常见问题: Agent 池弹性伸缩策略不合理,高峰期资源不足;镜像仓库未设置自动清理策略,存储打满。
2.4 SLI 口径设计原则
定义 SLI 口径时,需要遵循以下原则以确保指标可测量、可对比、可行动:
| 原则 | 说明 | CI/CD 反例 | CI/CD 正例 |
|---|---|---|---|
| 可测量 | 指标必须能从现有系统直接采集 | “开发体验好” | Pipeline 端到端耗时 P95 |
| 可区分 | 能按阶段、服务、团队拆分 | “构建失败率” | “Java 服务编译失败率” vs “前端构建失败率” |
| 可行动 | 指标恶化时有明确的修复动作 | “系统稳定性” | “Agent 队列深度 > 30 → 触发扩容” |
| 可对比 | 使用分位值而非平均值 | “平均耗时 10 分钟” | “P50=8min, P95=15min, P99=30min” |
2.5 本章小结
- SLI 是 CI/CD 流水线可观测性的基石,必须明确定义、可量化测量。
- 四大黄金信号(延迟、流量、错误、饱和度)完整覆盖了流水线的性能与稳定性维度。
- 延迟 SLI 关注反馈速度,流量 SLI 关注负载量级,错误 SLI 关注可靠性,饱和度 SLI 关注资源瓶颈。
- 四个信号需要联动分析:饱和度上升通常先于延迟恶化,错误率异常可能由流量突增或资源饱和引发。
- SLI 口径设计必须遵循可测量、可区分、可行动、可对比原则,避免模糊定义。