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。
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)的转化过程,以及错误预算的计算结果。
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 复核结果可能失真。