1. SLO 基础概念:SLO、SLI、SLA 的定义与区别

在构建 Envoy 网关的可靠性体系时,SLO、SLI、SLA 是三个最核心的术语。它们共同定义了“服务是否健康”的衡量标准。理解三者的定义与区别,是进行 SLO 预算复核的前提。

1.1 核心定义

术语 英文全称 中文定义 核心特征
SLI Service Level Indicator 服务等级指标,是衡量服务质量的具体量化数据。 可测量、可采集的原始数据点
SLO Service Level Objective 服务等级目标,是对 SLI 设定的目标阈值或范围。 内部承诺、可调整、用于决策
SLA Service Level Agreement 服务等级协议,是服务提供方与用户之间的正式契约。 外部契约、含惩罚条款、法律效力
记忆口诀:SLI 是“测量什么”,SLO 是“目标是多少”,SLA 是“达不到怎么办”。

1.2 三者的层级关系

SLI 是底层数据,SLO 是上层目标,SLA 是顶层契约。Envoy 网关的请求延迟、错误率等原始指标属于 SLI;团队设定“99.9% 的请求延迟低于 200ms”属于 SLO;而对外承诺“若低于 99.9% 则赔偿 10% 月费”则属于 SLA。

SLI / SLO / SLA 层级关系 SLA(服务等级协议) 外部契约 · 法律效力 · 赔偿条款 SLO(服务等级目标) 内部承诺 · 可调整 · 驱动决策 SLI(服务等级指标) 可测量 · 可采集 · 原始数据 SLI 是基础数据 → SLO 是目标阈值 → SLA 是正式契约

1.3 关键区别对比

对比维度 SLI SLO SLA
受众 工程师、监控系统 工程团队、管理层 客户、法务、商务
严格程度 无严格性,仅数据 内部严格,可调整 外部严格,不可随意改
时间窗口 实时/近实时 通常按周/月统计 按合同周期(季度/年)
后果 无直接后果 触发告警、复盘 赔偿、罚款、法律追责
Envoy 示例 upstream_rq_total, upstream_rq_time 99.9% 请求延迟 ≤ 200ms 若低于 99.9% 则赔偿 5% 月费

1.4 Envoy 网关场景中的典型映射

在 Envoy 网关的 SLO 预算复核中,我们通常关注以下三类 SLI:

  • 延迟(Latency):Envoy 的 upstream_rq_time 指标,衡量请求从进入网关到收到响应的耗时。
  • 错误率(Error Rate):Envoy 的 upstream_rq_5xx 与 upstream_rq_total 的比值。
  • 可用性(Availability):Envoy 健康检查通过的后端实例比例,或成功响应占比。
Envoy 实战提示:Envoy 的 stats 接口原生暴露了丰富的计数器(Counter)和直方图(Histogram),这些就是最原始的 SLI 数据源。SLO 预算复核的第一步,就是确认这些 SLI 的采集口径是否正确。

1.5 一个完整的 SLO 定义示例

假设我们为 Envoy 网关定义了一个“核心 API 延迟 SLO”:

SLO 名称:核心交易 API 延迟 SLO
SLI 指标:Envoy upstream_rq_time(P99)
目标值:≤ 200ms
合规窗口:28 天滚动窗口
合规率:≥ 99.9%
错误预算:28 天内允许的故障时间 ≈ 40 分钟
告警触发:错误预算消耗 ≥ 50% 时发出 P2 告警

这个示例清晰地展示了从 SLI(P99 延迟)到 SLO(99.9% ≤ 200ms)的转化过程,以及错误预算的计算结果。

Envoy 网关 SLI → SLO 映射流程 Envoy 数据面 请求/响应处理 原始指标 Counter / Histogram SLI 定义 P99 延迟 / 错误率 SLO 目标 99.9% ≤ 200ms 错误预算 40 分钟 / 28 天 SLO 预算复核决策 Envoy stats 采集 → 定义 SLI → 设定 SLO → 计算错误预算 → 驱动复核决策

1.6 常见误区与避坑

  • 误区一:将 SLA 直接当作 SLO 使用。SLA 通常比 SLO 宽松,直接使用 SLA 作为内部目标会导致可靠性退化。
  • 误区二:SLI 定义不精确。例如“延迟”未明确是 P50、P95 还是 P99,导致 SLO 无法准确衡量。
  • 误区三:忽略 SLI 的采集窗口。Envoy 的直方图默认是 5 分钟窗口,SLO 复核时需确认聚合周期是否匹配。
  • 误区四:SLO 目标设置过高(如 99.999%),导致错误预算过小,频繁触发告警,团队疲劳。
Envoy 特别提醒:Envoy 的 upstream_rq_time 直方图默认使用 毫秒 单位,且 P99 计算方式受 bucket 配置影响。在定义 SLI 时,务必确认 Envoy 的直方图配置(histogram_buckets)是否满足精度要求,否则 SLO 复核结果可能失真。