1. SLO基础概念
在基于 Prometheus 进行性能调优与可靠性工程之前,必须准确理解三个核心术语:SLI(服务等级指标)、SLO(服务等级目标)和 SLA(服务等级协议)。它们是 SRE 方法论中定义、测量和承诺服务质量的基石。
1.1 核心定义
| 术语 | 英文全称 | 定义 | 典型示例 |
|---|---|---|---|
| SLI | Service Level Indicator | 服务质量的量化指标,直接反映用户体验或系统健康度 | 请求延迟 P99、错误率、吞吐量 |
| SLO | Service Level Objective | 对 SLI 设定的目标阈值,是团队内部承诺的可靠性边界 | P99 延迟 ≤ 200ms(过去 30 天 99.9% 的时间) |
| SLA | Service Level Agreement | 与客户签订的正式合同,包含 SLO 及未达标时的惩罚条款 | 月度可用性 ≥ 99.99%,否则赔付 10% 月费 |
关键区分:SLI 是测量值,SLO 是目标值,SLA 是合同值。SLO 通常比 SLA 更严格,为团队预留“燃烧预算”以避免触发合同惩罚。
1.2 三者关系与层级结构
SLI、SLO、SLA 构成一个从测量到承诺的递进关系。下图展示了它们在 SRE 实践中的典型层级结构:
1.3 典型 SLI 分类与 Prometheus 采集方式
在 Prometheus 生态中,SLI 通常分为四大黄金信号类别。每个类别都有对应的指标采集模式:
| 黄金信号 | SLI 示例 | Prometheus 指标类型 | 典型查询表达式 |
|---|---|---|---|
| 延迟 | 请求响应时间 P99 | Histogram / Summary | histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) |
| 流量 | 每秒请求数 (RPS) | Counter | rate(http_requests_total[5m]) |
| 错误 | HTTP 5xx 错误率 | Counter | rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) |
| 饱和度 | CPU 使用率 / 队列深度 | Gauge | rate(node_cpu_seconds_total{mode="idle"}[5m]) 或 node_filesystem_avail_bytes |
实践要点:定义 SLI 时,必须明确测量窗口(如 5 分钟速率)、聚合方式(如 P99 分位数)和有效事件(如排除健康检查请求)。Prometheus 的
rate() 和 histogram_quantile() 函数是计算 SLI 的核心工具。
1.4 SLO 定义示例:以 API 服务为例
假设我们有一个用户查询 API,可以定义如下 SLO:
- SLI-延迟:过去 30 天内,所有成功请求的 P99 延迟。
- SLO-延迟:P99 延迟 ≤ 200ms,在 30 天滚动窗口内达标率 ≥ 99.9%。
- SLI-可用性:过去 30 天内,非 5xx 响应占总请求的比例。
- SLO-可用性:可用性 ≥ 99.99%,在 30 天滚动窗口内达标率 ≥ 99.9%。
- SLA:月度可用性 ≥ 99.95%,否则按合同条款进行服务费减免。
常见误区:SLO 不是“平均值”。使用平均值(如平均延迟)会掩盖长尾问题。SRE 最佳实践要求使用分位数(P50、P95、P99)或最小值来定义 SLI,确保覆盖绝大多数用户体验。
1.5 错误预算:SLO 的衍生概念
错误预算 = 1 - SLO。例如,如果 SLO 是 99.9% 可用性,则错误预算为 0.1%(即 30 天内允许约 43.2 分钟的不可用时间)。错误预算用于平衡可靠性与发布速度:
- 当错误预算充足时,团队可以更频繁地发布新功能。
- 当错误预算即将耗尽时,团队应暂停发布,优先修复稳定性问题。
Prometheus 结合 Alertmanager 可以实时监控错误预算消耗速率,并在预算接近阈值时触发告警。
1.6 小结:三者的区别与联系
| 维度 | SLI | SLO | SLA |
|---|---|---|---|
| 角色 | 测量者 | 目标设定者 | 合同承诺者 |
| 受众 | 工程师 / 监控系统 | 工程团队 / 管理层 | 客户 / 法务 / 业务 |
| 严格程度 | 无阈值,仅数据 | 内部严格(通常比 SLA 高 1~2 个 9) | 合同约束,有惩罚 |
| 变更频率 | 随系统演进调整 | 季度/半年度评审 | 年度合同周期 |
| Prometheus 角色 | 采集与计算 | 告警与错误预算 | 报告与审计 |