1. SLI 与 Metric 基础概念
在构建 Jenkins 流水线可观测体系之前,必须厘清两个最核心的术语:SLI(Service Level Indicator,服务等级指标) 与 Metric(度量指标)。它们是整个课程的数据基石,也是后续所有 SLO、错误预算、仪表盘设计的起点。
1.1 SLI 定义
SLI 是对服务或系统某一维度质量的量化描述。它回答的是:“这个服务现在表现得好不好?”
- 核心特征:直接反映用户体验或业务价值,通常是一个比率或百分比。
- 典型例子:请求成功率、流水线构建通过率、部署频率、平均修复时间(MTTR)。
- 在 Jenkins 中的含义:流水线 SLI 衡量的是交付过程的质量,而非基础设施的健康度。
提示:SLI 必须与用户或业务直接相关。例如,“构建成功率 99.5%”是一个好的 SLI;“CPU 使用率 70%”则不是 SLI,而是基础设施 Metric。
1.2 Metric 定义
Metric 是系统或过程中可被采集、存储、聚合的原始数据点。它回答的是:“系统当前发生了什么?”
- 核心特征:数值型、带时间戳、可被标签(Label/Tag)分类。
- 典型例子:构建耗时(秒)、构建队列长度、测试用例总数、失败用例数、制品大小(MB)。
- 在 Jenkins 中的含义:Metric 是流水线执行过程中产生的原始观测值,通常由 Prometheus、InfluxDB 或 Jenkins 内置统计收集。
1.3 SLI 与 Metric 的关系
SLI 与 Metric 不是并列关系,而是派生与聚合的关系。一张表可以清晰说明两者的区别与联系:
| 维度 | Metric(度量指标) | SLI(服务等级指标) |
|---|---|---|
| 定义层级 | 原始观测值 | 派生比率或聚合值 |
| 数据粒度 | 单次事件或瞬时值 | 时间窗口内的统计量 |
| 示例 | 构建耗时 = 120s | 构建耗时 P99 ≤ 300s |
| 是否直接反映质量 | 否,仅反映状态 | 是,反映服务水平 |
| 在 Jenkins 中的用途 | 监控、告警、容量规划 | SLO 计算、错误预算、业务报告 |
核心公式:SLI = 好的事件计数 / 总事件计数。其中“好的事件计数”和“总事件计数”都来自底层 Metric。
关键理解:没有 Metric,SLI 就是无源之水;没有 SLI,Metric 就只是一堆数字,无法回答“服务是否达标”。两者必须配合使用。
1.4 为什么在 Jenkins 流水线中需要 SLI
很多团队在 Jenkins 中只关注“构建是否通过”这一个二元结果,这远远不够。引入 SLI 可以带来以下价值:
- 从“可用”到“可靠”:单个构建通过不代表交付质量稳定。SLI 让你看到趋势,例如“过去 7 天构建成功率从 99% 下降到 95%”。
- 量化交付瓶颈:通过构建耗时 SLI、队列等待 SLI,可以精准定位流水线中的慢环节。
- 驱动改进决策:没有 SLI,改进就是拍脑袋。有了 SLI,可以设定 SLO 目标,用数据驱动优化。
- 建立团队共识:SLI 是开发、测试、运维团队之间统一的“质量语言”,减少扯皮。
- 错误预算管理:SLI 是计算错误预算的基础,帮助团队在“发布速度”和“稳定性”之间做理性权衡。
常见误区:不要试图监控所有 Metric。SLI 应该聚焦在最关键的 3~5 个指标上,否则仪表盘会变成“数据垃圾场”,反而无法快速定位问题。
1.5 小结
本章建立了 SLI 与 Metric 的完整认知框架:
- Metric 是原始观测值,SLI 是派生比率,两者是“数据”与“信息”的关系。
- 在 Jenkins 流水线中,SLI 将零散的构建日志、耗时、结果转化为可量化的交付质量指标。
- 没有 SLI,流水线优化就是盲人摸象;有了 SLI,团队才能用数据驱动持续改进。