1. SLI 与 SLO 基础概念

在可观测性与站点可靠性工程(SRE)体系中,SLI(Service Level Indicator,服务等级指标)与SLO(Service Level Objective,服务等级目标)是定义系统健康度、指导运维决策的核心度量框架。没有明确的 SLI 与 SLO,任何调用链数据、指标与日志都只是噪声,无法转化为可执行的可靠性行动。

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

SLI 是对服务某一维度真实表现的量化度量。它回答一个基本问题:“用户此刻感受到的服务质量如何?”。SLI 必须可采集、可计算、可对比,通常以比率或分布形式呈现。

SLI 类别 典型指标 采集来源
延迟(Latency) 请求 p50 / p95 / p99 响应时间 Jaeger Span 耗时、APM 直方图
错误率(Error Rate) HTTP 5xx 占比 / gRPC 错误码占比 Jaeger Span 状态、日志错误计数
吞吐量(Throughput) 每秒请求数(RPS)、每秒事务数(TPS) 调用链入口 Span 计数
可用性(Availability) 成功请求数 / 总请求数 健康检查、调用链完成率
饱和度(Saturation) CPU 使用率、连接池占用率、队列深度 基础设施指标、Jaeger 采样率变化
关键认知: SLI 必须从用户视角定义。例如,数据库查询延迟的 SLI 不应只采集服务端平均耗时,而应采集用户端感知到的 p99 延迟,后者通常包含网络开销与排队等待时间。

1.2 什么是 SLO(服务等级目标)

SLO 是为 SLI 设定的目标阈值,它定义了“多好才算足够好”。SLO 不是一个固定值,而是基于业务容忍度、成本与风险平衡后确定的承诺边界。SLO 通常以“在时间窗口内,SLI 达到或超过目标值的比例”来表达。

# SLO 典型表达格式
SLO = "在 [滚动窗口] 内,[SLI 名称] ≥ [目标值] 的比例 ≥ [达标比例]"

# 示例
SLO = "在 28 天滚动窗口内,HTTP 请求 p99 延迟 ≤ 500ms 的比例 ≥ 99.9%"
SLO 严格程度 典型目标值 适用场景
严格 SLO 99.99% 以上(四个九) 支付、实时交易、核心数据库
中等 SLO 99.9% ~ 99.99%(三个九) API 网关、用户认证、商品查询
宽松 SLO 99% ~ 99.9%(两个九) 日志收集、非实时报表、后台批处理
尽力 SLO < 99% 开发环境、实验性功能、内部工具
常见误区: 不要将 SLO 设定为 100%。100% 可用性意味着零故障容忍,这在分布式系统中既不现实,也会导致过度投入成本。SRE 实践推荐使用错误预算(Error Budget)来管理 SLO 的剩余空间。

1.3 SLI 与 SLO 在可观测性中的核心地位

可观测性(Observability)的三大支柱——指标(Metrics)、日志(Logs)、调用链(Traces)——只有在 SLI/SLO 框架下才能形成闭环。调用链数据(如 Jaeger 采集的 Span)是构建 SLI 最精细的数据源,因为它能穿透服务拓扑,定位到每一次请求的完整路径。

核心关系链:
Jaeger 调用链数据 → 提取 SLI(延迟/错误率/吞吐量) → 对比 SLO 目标 → 触发告警或错误预算消耗 → 驱动基线校准与容量规划
SLI / SLO 在可观测性中的核心地位 指标(Metrics) 日志(Logs) 调用链(Traces) SLI 提取层(延迟 / 错误率 / 吞吐量 / 可用性) SLO 对比与错误预算计算 告警触发 / 基线校准 / 容量规划 / 故障定位

1.4 为什么调用链数据是 SLI 的最佳载体

相比聚合指标与日志,调用链数据在 SLI 构建中具有不可替代的优势:

  • 端到端穿透:一次用户请求经过多个微服务,调用链能将各阶段延迟与错误串联,构建真实用户 SLI,而非单点指标。
  • 错误根因定位:当 SLI 违反 SLO 时,调用链可直接定位到故障 Span,无需人工排查日志关联。
  • 依赖拓扑可视化:通过调用链数据可自动生成服务依赖图,辅助识别 SLI 瓶颈节点。
  • 高基数维度:调用链携带 Trace ID、Span ID、用户 ID、请求参数等标签,支持按任意维度切分 SLI。
调用链数据构建 SLI 流程 用户请求 Jaeger 调用链采集 Span / Trace / 上下文 SLI 计算引擎 延迟 / 错误率 / 吞吐量 SLO SLI 口径基线校准 动态阈值 / 告警规则 / 容量规划决策 反馈校准

1.5 SLI 口径基线校准的必要性

SLI 口径基线校准是指:基于历史调用链数据,为 SLI 建立动态的、可自适应的基准线,而非依赖固定阈值。原因如下:

  1. 业务周期性波动:白天与夜晚、工作日与周末的流量模式不同,固定阈值会导致误告警或漏告警。
  2. 服务拓扑变化:新服务上线、旧服务下线、依赖关系变更都会改变 SLI 分布。
  3. 版本迭代影响:代码变更可能引入毫秒级延迟增加,固定阈值无法感知渐进式退化。
  4. 错误预算精细化:只有校准后的基线,才能准确计算错误预算消耗速率。
本课程核心命题: 如何利用 Jaeger 调用链数据(Span 耗时、错误状态、服务依赖)自动构建 SLI 口径基线,并在 SLO 违反前给出预警,实现从“被动响应”到“主动校准”的 SRE 能力升级。