2、SLI基础:什么是SLI(服务等级指标)、SLI的选取原则、常见的SLI类型(延迟、错误率、吞吐量、饱和度)

2.1 什么是SLI(服务等级指标)

SLI(Service Level Indicator,服务等级指标) 是对服务某个特定维度进行量化的直接测量值。它是可观测性体系中最原始的“信号”,反映了服务在用户视角下的真实表现。SLI 不是目标,而是事实——它回答的是“服务现在怎么样”,而不是“服务应该怎么样”。

核心定义: SLI = 对服务行为的一个可量化、可采集、可聚合的原始测量指标。例如:过去5分钟内所有HTTP请求的P99延迟为 210ms。

SLI 是 Error Budget 计算的原材料。没有精确的 SLI 口径,后续的 SLO 制定和 Error Budget 量化都无从谈起。SLI 必须满足 可采集、可聚合、可对比 三个基本属性。

属性 说明 反例
可采集 能从监控系统、日志、链路追踪中直接获取原始值 “用户体验满意度”无法直接采集
可聚合 能在时间窗口(如1分钟、5分钟)内做统计计算 单次请求的耗时无法代表整体
可对比 不同时间段的SLI值可以比较,用于判断趋势 “系统负载”在不同硬件下无法直接对比

2.2 SLI的选取原则

选取正确的 SLI 是 Error Budget 工程中最关键的决策之一。错误的 SLI 会导致 SLO 失真,进而使 Error Budget 失去指导意义。以下是经过生产环境验证的 SLI 选取四原则:

  1. 用户视角优先: 始终从用户(或下游调用方)的体验出发,而不是从基础设施视角出发。例如:选择“用户侧请求延迟”而非“CPU使用率”。
  2. 高覆盖率: SLI 应覆盖服务的大部分流量。避免只采集健康实例的数据而忽略故障实例。建议覆盖至少 95% 以上的生产流量。
  3. 可区分好坏: SLI 必须能明确区分“好”与“坏”的边界。例如:延迟 SLI 需要定义“多快算好”,错误率 SLI 需要定义“什么算错误”。
  4. 避免代理指标: 不要使用间接指标代替直接指标。例如:用“TCP连接数”代替“请求成功率”是错误的,因为连接数正常不代表请求成功。
实战建议: 在选取 SLI 时,先列出所有可能的候选指标,然后逐一用“用户视角”过滤。最终保留的 SLI 数量建议控制在 3~5 个以内,避免指标爆炸。
SLI 选取原则决策流程 SLI 选取原则决策流程 候选指标池 ① 用户视角过滤 ② 覆盖率检查(≥95%) ③ 好坏边界定义 最终 SLI 避坑提示 不要使用代理指标 不要只选基础设施指标 不要超过5个SLI

2.3 常见的SLI类型

在生产环境中,SLI 通常被归纳为 四大黄金信号:延迟、错误率、吞吐量、饱和度。这四类指标从不同维度刻画了服务的健康状态,是 Error Budget 量化的基础。

2.3.1 延迟(Latency)

延迟衡量服务响应请求所花费的时间。延迟 SLI 通常使用 百分位值(P50、P90、P99)而非平均值,因为平均值会掩盖长尾问题。在 Error Budget 中,延迟 SLI 的“好”与“坏”由阈值定义,例如:P99 延迟 ≤ 500ms 算作“好”,否则算作“坏”。

2.3.2 错误率(Error Rate)

错误率衡量请求失败的占比。错误不仅包括 HTTP 5xx 状态码,还包括业务逻辑错误(如返回错误码、超时、熔断)。错误率 SLI 的计算公式为:错误请求数 / 总请求数 × 100%。在 Error Budget 中,错误率 SLI 通常要求低于某个阈值(如 0.1%)。

2.3.3 吞吐量(Throughput)

吞吐量衡量服务在单位时间内处理的请求量或数据量。常见的吞吐量 SLI 包括:QPS(每秒查询数)、RPS(每秒请求数)、TPS(每秒事务数)。吞吐量 SLI 通常与容量规划相关,当吞吐量接近系统上限时,Error Budget 消耗会加速。

2.3.4 饱和度(Saturation)

饱和度衡量服务资源被占用的程度。常见的饱和度 SLI 包括:CPU 使用率、内存使用率、连接池使用率、队列深度。饱和度 SLI 是“前兆性”指标——当饱和度升高时,延迟和错误率往往会随之恶化。在 Error Budget 中,饱和度 SLI 用于预警,而非直接计入 Error Budget 消耗。

SLI 类型 典型指标 采集方式 在 Error Budget 中的角色
延迟 P99 延迟、P50 延迟 请求耗时埋点、APM 直接计入消耗
错误率 HTTP 5xx 占比、业务错误码占比 日志、监控指标 直接计入消耗
吞吐量 QPS、RPS、TPS 流量统计、网关指标 间接影响(容量规划)
饱和度 CPU 使用率、队列深度 系统指标、中间件指标 预警信号(不直接计入)
重要区分: 在 Error Budget 量化中,只有 延迟 和 错误率 两类 SLI 通常被直接用于计算“坏事件”消耗。吞吐量和饱和度更多作为辅助指标,用于解释 Error Budget 消耗的原因或预测未来趋势。
四大黄金信号关系图 四大黄金信号关系图 服务 (Service) 延迟 错误率 吞吐量 饱和度 Error Budget 直接消耗来源 延迟 + 错误率 → 直接计入坏事件 吞吐量 + 饱和度 → 预警与容量规划

2.4 SLI 口径定义示例

为了让 SLI 真正可量化,必须给出精确的 口径定义。以下是一个典型的 HTTP 服务 SLI 口径定义模板:

SLI 名称:HTTP 请求延迟(P99)
采集来源:Nginx 访问日志 / APM 代理
统计窗口:1 分钟(滚动窗口)
好事件定义:P99 延迟 ≤ 500ms
坏事件定义:P99 延迟 > 500ms
排除条件:健康检查请求、内部监控探针
覆盖范围:所有外部用户请求(排除内部流量)
关键提醒: 在定义 SLI 口径时,必须明确“排除条件”。例如,健康检查请求如果被计入 SLI,会拉低延迟值,掩盖真实用户问题。同样,批处理任务和定时任务也应从在线服务的 SLI 中排除。