4. SLI 基础概念:服务等级指标定义与黄金信号

服务等级指标(Service Level Indicator, SLI)是衡量系统某一特定维度服务质量的量化度量。它是 SRE 实践中最基础的观测单元,直接决定了我们能否客观判断服务是否“健康”。

4.1 SLI 定义与核心特征

SLI 是对服务行为的某个方面进行直接测量的数值,通常表示为一段时间内的比率、计数或分布。一个合格的 SLI 必须满足以下特征:

  • 可测量:能从监控系统或日志中直接采集,而非主观推断。
  • 面向用户:优先测量用户可见的请求路径,而非内部组件指标。
  • 时间聚合:通常以窗口期(如 1 分钟、5 分钟、30 天)聚合为比率。
  • 可区分好坏:能明确判定单次请求或采样点是否“成功”。
实践要点:SLI 的测量口径必须与用户真实体验对齐。例如,测量“服务器 CPU 空闲率”不是 SLI,测量“用户登录请求在 2 秒内返回成功”才是 SLI。

4.2 SLI 与 SLO、错误预算的关系

SLI、SLO(服务等级目标)和错误预算构成了 SRE 质量管理的三角模型。三者关系如下表所示:

概念 定义 典型示例 作用
SLI 服务质量的实际测量值 请求成功率 = 99.95% 反映当前真实状态
SLO SLI 的目标阈值 SLI ≥ 99.9% 定义可接受的服务质量下限
错误预算 SLO 允许的失败额度 30 天内允许 0.1% 的请求失败 平衡可靠性与迭代速度

三者的核心关系可以概括为:SLI 是实际观测值,SLO 是期望目标,错误预算是 SLO 未达标部分的量化额度。当 SLI 持续高于 SLO 时,错误预算累积;当 SLI 跌破 SLO 时,错误预算消耗殆尽,应触发质量门禁或发布暂停。

关键公式:
错误预算 = 1 - SLO(以小数表示)
例如:SLO = 99.9% → 错误预算 = 0.1% = 0.001
在 30 天窗口内,总请求数为 10,000,000,则允许失败请求数 = 10,000,000 × 0.001 = 10,000 次。
SLI / SLO / 错误预算三角关系 SLI 实际测量值 SLO 目标阈值 错误预算 允许失败额度 关系说明 SLI 与 SLO 比较 → 消耗或补充错误预算 错误预算耗尽 → 触发质量门禁,暂停发布

4.3 SLI 的黄金信号(The Four Golden Signals)

Google SRE 经典著作《Site Reliability Engineering》提出了监控分布式系统的四个黄金信号。这四类指标覆盖了用户可感知的服务质量全貌,是定义 SLI 的首选维度。

黄金信号 英文 测量对象 典型 SLI 示例
延迟 Latency 请求处理耗时 P95 延迟 < 500ms;平均延迟 < 200ms
流量 Traffic 请求负载量 QPS > 1000;每秒活跃连接数
错误 Errors 请求失败率 HTTP 5xx 率 < 0.1%;超时率 < 0.05%
饱和度 Saturation 资源耗尽程度 CPU 使用率 < 80%;内存使用率 < 75%

4.3.1 延迟(Latency)

延迟衡量请求从发出到收到完整响应所花费的时间。延迟 SLI 通常使用百分位值(P50、P95、P99)而非平均值,因为平均值会掩盖长尾慢请求。在 CI/CD 流水线中,延迟 SLI 常用于判断新版本是否引入了性能退化。

4.3.2 流量(Traffic)

流量反映系统当前承载的请求量级。常见的流量 SLI 包括每秒请求数(QPS)、每秒事务数(TPS)、活跃连接数等。流量本身不是质量指标,但流量突变往往是延迟或错误率恶化的前兆。

4.3.3 错误(Errors)

错误信号直接衡量请求失败的比例。错误 SLI 的定义必须明确“什么是失败”:显式错误(HTTP 5xx)、隐式错误(返回 200 但业务逻辑异常)、超时、连接拒绝等。在质量门禁中,错误率是最常用的阻断条件。

4.3.4 饱和度(Saturation)

饱和度衡量系统资源被消耗的程度,通常与容量规划直接相关。常见的饱和度 SLI 包括 CPU 利用率、内存使用率、磁盘 I/O 等待时间、连接池使用率等。当饱和度接近 100% 时,延迟和错误率通常会急剧上升。

常见误区:不要将“饱和度”等同于“资源使用率”。饱和度应关注最早达到瓶颈的资源。例如,数据库连接池使用率达到 90% 比 CPU 使用率 50% 更具威胁性。
黄金信号四象限架构 延迟 Latency P95 / P99 响应时间 慢请求占比 端到端耗时 流量 Traffic QPS / TPS 活跃连接数 带宽使用率 错误 Errors HTTP 5xx 率 超时率 / 拒绝率 业务错误码率 饱和度 Saturation CPU / 内存使用率 连接池 / 磁盘 I/O 队列深度 四个信号共同构成 SLI 定义的基础维度,缺一不可

4.4 黄金信号在 CI/CD 质量门禁中的应用

在质量门禁驱动的流水线中,黄金信号被转化为具体的 SLI 口径和门禁阈值。以下是一个典型的门禁配置示例:

# 质量门禁 SLI 配置示例(YAML 格式)
quality_gates:
  - name: "延迟门禁"
    sli_type: latency
    metric: "http_request_duration_seconds_p99"
    threshold: 0.5  # 单位:秒
    window: "5m"    # 评估窗口
    action: "block" # 阻断发布

  - name: "错误率门禁"
    sli_type: errors
    metric: "http_requests_total{status=~'5..'}"
    threshold: 0.001  # 0.1%
    window: "10m"
    action: "block"

  - name: "饱和度门禁"
    sli_type: saturation
    metric: "node_cpu_utilization"
    threshold: 0.8  # 80%
    window: "5m"
    action: "warn"  # 仅告警,不阻断
最佳实践:在流水线中,延迟和错误 SLI 通常设置为硬门禁(阻断发布),而饱和度和流量 SLI 更适合设置为软门禁(告警或人工审核),因为资源饱和度可能由历史流量累积导致,而非当前变更直接引发。

4.5 定义 SLI 的通用步骤

  1. 识别用户关键路径:确定用户最常使用的 API、页面或功能。
  2. 选择黄金信号维度:从延迟、错误、流量、饱和度中选取 1~3 个最相关的维度。
  3. 确定测量口径:明确计数方式(请求总数 vs 成功数)、时间窗口、聚合方式(平均值 vs 百分位)。
  4. 设定好坏判定标准:定义单次请求“成功”和“失败”的精确条件。
  5. 验证可测量性:确认监控系统能稳定采集该指标,且延迟在可接受范围内。

通过以上步骤定义的 SLI,才能可靠地驱动 SLO 和错误预算的计算,最终成为质量门禁的量化依据。