1. SLO 基础概念:什么是 SLO、SLI、SLA

在开始使用 Prometheus 构建 SLO 告警体系之前,必须先理解三个核心术语:SLI、SLO 和 SLA。它们是现代站点可靠性工程(SRE)的基石,也是后续所有告警规则、作业模板和故障响应流程的设计依据。

1.1 核心定义

术语 英文全称 中文释义 一句话理解
SLI Service Level Indicator 服务等级指标 你测量什么——一个可量化的数值
SLO Service Level Objective 服务等级目标 你承诺什么——一个目标阈值
SLA Service Level Agreement 服务等级协议 你合同上写什么——有惩罚条款的承诺
记忆口诀:SLI 是数据,SLO 是目标,SLA 是合同。没有 SLI 就没有 SLO,没有 SLO 就没有 SLA。

1.2 三者的区别与联系

下面这张关系图清晰地展示了 SLI → SLO → SLA 的层级结构:

SLI / SLO / SLA 层级关系 SLI — 服务等级指标 延迟(Latency)· 错误率(Error Rate)· 吞吐量(Throughput)· 可用性(Availability) 例如:99.9% 的请求在 200ms 内完成 SLO — 服务等级目标 基于 SLI 设定的目标阈值,例如: “过去 30 天内,99.9% 的请求延迟 ≤ 200ms” SLA — 服务等级协议 对外合同承诺,通常比 SLO 更宽松 例如:SLA 99.9%,内部 SLO 99.95% SLO 是内部承诺 SLA 是外部合同
关键区别:SLO 是内部目标,由团队自主设定;SLA 是外部合同,通常附带赔偿条款。SLO 一般比 SLA 更严格,为 SLA 留出安全缓冲。

1.3 为什么 SLO 对现代运维如此重要

传统运维以“系统不宕机”为唯一目标,但现代分布式系统无法做到 100% 可用。SLO 提供了一种可量化、可协商、可告警的运维范式,其重要性体现在以下五个方面:

  1. 从“尽力而为”到“数据驱动”——不再凭感觉判断系统是否健康,而是用 SLI 数据说话。
  2. 定义“足够好”的标准——明确告诉团队:“系统达到什么程度就算正常”,避免过度追求不切实际的 100%。
  3. 指导告警与故障响应——基于 SLO 燃烧速率(Burn Rate)设置告警,比静态阈值更精准、更早发现问题。
  4. 平衡可靠性与迭代速度——SLO 为“允许犯错”划出边界,团队可以在 SLO 范围内放心发布新功能。
  5. 建立客户信任——SLA 是商业承诺,SLO 是技术保障,两者结合形成可审计的服务质量报告。
常见误区:不要将 SLO 等同于 SLA。SLO 是内部工具,可以随时调整;SLA 是法律文件,修改需要合同流程。很多团队把 SLA 直接当作 SLO 使用,导致告警过于宽松或频繁触发无意义的告警。

1.4 典型 SLI 指标分类

在 Prometheus 生态中,常见的 SLI 指标通常分为四大类,每一类都可以通过 Prometheus 的 histogram、counter 或 gauge 来采集:

类别 典型指标 Prometheus 示例
可用性 请求成功率 / 服务存活率 sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
延迟 P50 / P95 / P99 响应时间 histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))
吞吐量 每秒请求数(RPS) sum(rate(http_requests_total[5m]))
错误率 5xx / 4xx 占比 sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))

1.5 一个完整的 SLO 定义示例

假设我们有一个电商 API 服务,可以这样定义它的 SLO:

# SLI 定义
- 指标名称:API 请求延迟(P99)
- 数据来源:http_request_duration_seconds 直方图

# SLO 定义
- 目标:过去 30 天内,99.9% 的请求延迟 ≤ 200ms
- 测量窗口:30 天滚动窗口
- 燃烧速率告警:当 1 小时内消耗 5% 的误差预算时触发告警

# SLA 定义(对外)
- 承诺:99.95% 的请求延迟 ≤ 500ms
- 惩罚:低于 99.95% 时,按月度服务费的 10% 赔偿
本课程后续内容:我们将基于这个示例,使用 Prometheus 的 sloth 或 prometheus-operator 生成 SLO 告警规则,并联动作业模板实现自动化故障响应。