1. SLO 基础概念:定义 SLO、SLI、SLA,理解它们之间的关系与区别

在基于 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 实践中的典型层级结构:

SLI / SLO / SLA 层级关系图 SLA(服务等级协议) 法律合同 · 对外承诺 · 含惩罚条款 SLO(服务等级目标) 内部目标 · 可靠性预算 · 错误预算驱动 SLI(服务等级指标) 原始测量 · 可观测性 · Prometheus 指标 SLI 是基础数据,SLO 是目标阈值,SLA 是合同承诺。SLO 通常比 SLA 更严格。

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 角色 采集与计算 告警与错误预算 报告与审计