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 流水线的可观测性建设。

四大黄金信号 → CI/CD 流水线映射全景 延迟 Latency 流量 Traffic 错误 Errors 饱和度 Saturation 代码检出耗时 镜像构建耗时 / 部署耗时 每日构建次数 / 并发 Pipeline 数 制品推送频率 构建失败率 / 测试失败率 部署回滚率 构建节点 CPU/内存使用率 镜像仓库存储水位 / 网络带宽 映射要点 • 延迟:端到端耗时,关注 P50/P95/P99 分位值 • 流量:请求量级,关注 峰值与趋势 • 错误:失败率,关注 错误类型与根因 • 饱和度:资源耗尽点, 关注瓶颈预测 • 四个信号联动分析 才能定位真凶

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 池弹性伸缩策略不合理,高峰期资源不足;镜像仓库未设置自动清理策略,存储打满。
饱和度 → 延迟的传导效应(CI/CD 资源瓶颈模型) 饱和度上升 Agent CPU > 80% 队列深度 > 50 排队等待 Job 等待 Agent 平均等待 3~8 分钟 延迟飙升 P95 耗时从 12min 升至 25min+ 调优启示 1. 饱和度是延迟的先行指标:当 Agent CPU > 75% 或队列深度持续增长时,延迟即将恶化。 2. 设置饱和度告警阈值(如 CPU > 70% 持续 5 分钟),在延迟受影响前触发弹性扩容。 3. 结合延迟 SLI 和饱和度 SLI 做联合分析,避免误判(如延迟高但饱和度低,则问题在代码或依赖)。

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 口径设计必须遵循可测量、可区分、可行动、可对比原则,避免模糊定义。