2. SLI 口径定义:构建可观测性的度量基石

SLI(Service Level Indicator,服务等级指标)是服务可靠性最直接的量化表达。但“延迟 200ms”或“成功率 99.5%”这类数字本身没有意义——口径(Measurement Definition)决定了这些数字从哪来、覆盖什么、排除什么。口径定义不清晰,后续的聚合、阈值、SLO 都会产生偏差。

2.1 什么是 SLI 口径

SLI 口径是对一个可观测指标的完整定义,包含:测量对象、测量方法、数据来源、时间窗口以及有效条件。口径决定了“这个数字到底在描述什么”。

核心公式:
SLI = 有效事件中符合成功标准的计数 / 有效事件总数 × 100%

例如“API 请求成功率 99.5%”这个 SLI,其口径必须明确:

  • 测量对象:所有到达网关的 HTTP 请求(排除健康检查、爬虫流量)
  • 成功标准:HTTP 状态码 2xx 或 3xx,且响应体不含业务错误码
  • 数据来源:API 网关访问日志(非客户端埋点)
  • 时间窗口:滚动 5 分钟窗口,每 1 分钟采样一次

2.2 口径的粒度与范围

口径的粒度(Granularity)和范围(Scope)直接影响 SLI 的敏感度和可操作性。粒度越细,越能定位问题;范围越宽,越能反映整体健康度。

维度 细粒度 粗粒度
时间粒度 1 秒 / 1 分钟窗口 1 小时 / 1 天窗口
空间粒度 单 Pod / 单实例 整个集群 / 区域
请求粒度 单 API 端点 / 单用户 全量请求聚合
适用场景 故障定位、根因分析 整体健康度、SLO 报告
实践建议:先定义粗粒度口径用于 SLO 报告,再按需下钻到细粒度口径用于排障。不要一开始就追求最细粒度,否则指标基数会爆炸。

口径的范围还需要明确包含与排除规则:

  • 包含:生产环境所有用户流量、内部服务间调用、核心业务流程
  • 排除:预发布环境、压测流量、健康检查、已知的灰度实验组、非关键路径(如静态资源)

2.3 常见口径类型

在 SRE 实践中,最常用的三类 SLI 口径是:请求成功率、延迟和错误率。它们覆盖了可用性、性能和正确性三个核心维度。

2.3.1 请求成功率(Availability / Success Rate)

衡量服务是否正常响应请求。口径定义要点:

  • 成功定义:HTTP 2xx/3xx + 业务状态码为成功(如 JSON 中 code=0)
  • 失败定义:HTTP 5xx、超时、连接拒绝、业务错误码
  • 计算方式:成功请求数 / 总请求数 × 100%
  • 典型阈值:99.9% ~ 99.99%

2.3.2 延迟(Latency / Response Time)

衡量服务响应速度。口径定义要点:

  • 测量点:客户端发起请求到收到完整响应的时间(端到端延迟)
  • 聚合方式:通常使用百分位值(p50、p95、p99),而非平均值
  • 成功/失败处理:失败请求的延迟是否计入?通常建议计入,因为超时本身就是延迟问题
  • 典型阈值:p99 < 200ms(高交互服务),p99 < 1s(批处理服务)

2.3.3 错误率(Error Rate)

衡量请求中发生错误的比例。与成功率互补,但更关注错误类型分布。

  • 错误分类:客户端错误(4xx)、服务端错误(5xx)、业务逻辑错误
  • 口径粒度:按错误码、按模块、按错误类型分别定义
  • 计算方式:错误请求数 / 总请求数 × 100%
  • 典型阈值:错误率 < 0.1%(高可靠服务),错误率 < 1%(一般服务)
常见陷阱:不要将“错误率”简单等同于“1 - 成功率”。成功率通常只关注服务端错误,而错误率可能包含客户端错误(4xx)和业务错误。两者口径必须独立定义,避免混淆。

2.4 三类口径的关系与选择

三类口径并非互斥,而是从不同维度描述服务质量。一个完整的 SLI 体系通常同时包含这三类口径。

三类 SLI 口径关系图 请求成功率 可用性维度 延迟 性能维度 错误率 正确性维度 多维度聚合(时间、空间、请求维度) 提升 SLI 口径阈值精度 精确的 SLO 定义与告警阈值 三类口径独立定义,通过多维度聚合后共同支撑 SLO 决策

2.5 口径定义清单示例

以下是一个实际微服务场景的口径定义模板:

SLI 名称 口径类型 成功标准 数据来源 排除规则 时间窗口
order-api-success-rate 请求成功率 HTTP 2xx + code=0 Kong 网关日志 健康检查、压测 1 分钟滚动
order-api-p99-latency 延迟 响应时间 < 500ms 应用侧 Prometheus 超时请求计入 5 分钟滚动
order-api-5xx-rate 错误率 HTTP 5xx 占比 Kong 网关日志 4xx 不计入 1 分钟滚动
关键原则:口径定义必须可复现——不同 SRE 工程师根据同一份口径定义,应该能计算出完全相同的 SLI 数值。建议将口径定义写入版本控制(如 YAML 配置文件),与监控系统联动。