3. 核心指标定义:黄金信号与 SLO/SLI/SLA 基础

在 On-Call 自动化故障排查体系中,指标是决策的“眼睛”。没有明确定义的指标,告警就是噪音,排查就是盲人摸象。本章将系统讲解 黄金信号(The Four Golden Signals)、自定义业务指标以及 SLO/SLI/SLA 的基础概念与落地方法,帮助你建立值班基线核验的量化标准。

3.1 黄金信号:系统健康的四大支柱

Google SRE 团队提出的“黄金信号”是衡量用户侧与系统侧健康度的核心维度。任何 On-Call 值班基线都必须覆盖这四个方面。

信号 定义 典型指标示例 故障排查价值
延迟(Latency) 请求从发出到收到响应所消耗的时间 P50/P95/P99 响应时间、平均延迟 识别性能瓶颈、慢查询、网络抖动
流量(Traffic) 系统承载的请求量或数据吞吐量 QPS、RPS、带宽使用率、并发连接数 判断是否遭遇流量突增、DDoS、容量不足
错误(Errors) 请求失败的比率或数量 HTTP 5xx 率、4xx 率、异常堆栈计数 直接定位功能故障、代码缺陷、依赖异常
饱和度(Saturation) 系统资源被消耗的程度,接近极限的程度 CPU 使用率、内存占用、磁盘 I/O 队列、连接池耗尽率 预警即将发生的性能退化或系统崩溃
值班基线核验要点: 在 On-Call 手册中,必须为每个黄金信号定义明确的“异常阈值”和“升级路径”。例如:P99 延迟 > 500ms 持续 5 分钟 → 触发 P2 告警;错误率 > 5% → 触发 P1 告警并自动拉起故障群。

3.2 自定义业务指标:从技术指标到业务价值

黄金信号解决的是“系统是否在正常工作”,而自定义业务指标回答的是“业务是否在正常运转”。On-Call 工程师不能只看 CPU,还要看订单量、支付成功率、用户登录率。

  • 定义原则: 指标必须与用户可感知的体验或收入直接挂钩。
  • 常见类别:
    • 转化率类: 下单成功率、支付完成率、注册转化率。
    • 核心流程类: 搜索响应率、视频播放成功率、消息投递率。
    • 业务吞吐类: 每分钟订单数、每小时活跃用户数。
  • 采集方式: 通过应用层埋点(SDK)、业务日志解析、数据库聚合查询。
实战案例: 某电商平台在“大促”期间,黄金信号显示 CPU 和延迟正常,但自定义指标“购物车加购成功率”从 99% 骤降至 60%。最终排查发现是 Redis 缓存热 key 导致库存扣减接口超时。如果没有自定义业务指标,该故障会被延迟 30 分钟才发现。

3.3 SLO / SLI / SLA 基础:量化可靠性的语言

这三个概念是 SRE 故障排查和值班基线核验的“度量衡”。没有它们,你无法判断当前故障是否“值得”被叫醒。

术语 全称 定义 On-Call 场景作用
SLI Service Level Indicator 服务水平的具体度量指标,如请求延迟、错误率 作为告警的原始数据源,直接计算是否达标
SLO Service Level Objective SLI 的目标阈值,如“P99 延迟 < 200ms” 定义告警触发边界,决定是否升级为故障
SLA Service Level Agreement 对客户承诺的服务水平协议,通常包含赔偿条款 决定故障的严重等级和响应时效要求
常见误区: 不要把 SLA 直接当作告警阈值。SLA 通常是宽松的(如 99.9%),而 SLO 应该比 SLA 更严格(如 99.95%),留出“燃烧预算”空间,避免在 SLA 违约边缘才告警。

3.4 黄金信号与 SLO 的联动关系(SVG 架构图)

下图展示了从原始指标采集到 SLO 违约判断的完整链路,这是 On-Call 自动化故障排查的数据基础。

黄金信号 → SLI → SLO → 告警决策链路 延迟(Latency) P50/P95/P99 流量(Traffic) QPS / 带宽 错误(Errors) 5xx / 4xx 率 饱和度(Saturation) CPU / 内存 / IO SLI 定义:将原始信号转化为可度量的服务指标 例如:请求延迟 P99、HTTP 500 错误率、CPU 使用率 1m 平均 SLO 目标:为 SLI 设定可容忍的阈值 例如:P99 延迟 ≤ 200ms(99.9% 时间窗口内) 告警决策:SLO 燃烧速率 → 触发 On-Call 核验 燃烧预算消耗 > 10%/h → P1 告警;> 2%/h → P2 告警

3.5 自定义业务指标与 SLO 的映射(SVG 架构图)

技术指标必须映射到业务指标,才能让 On-Call 工程师理解“这个告警对用户意味着什么”。

自定义业务指标 → 技术 SLI 映射示例 业务指标层 订单创建成功率 视频播放流畅度 用户登录成功率 消息投递成功率 技术 SLI 层 下单接口 P99 延迟 首帧加载时间 认证服务错误率 MQ 投递延迟 P99 映射规则 1. 每个业务指标 至少对应 1 个 SLI 2. SLI 必须可量化 3. 优先使用黄金信号 4. 避免指标爆炸

3.6 值班基线核验清单

在 On-Call 交接班或系统上线前,使用以下清单核验核心指标是否就绪:

  1. 黄金信号全覆盖: 每个服务是否都采集了延迟、流量、错误、饱和度四个维度的数据?
  2. SLI 定义明确: 每个 SLI 是否有明确的采集方式、聚合窗口(如 1 分钟、5 分钟)?
  3. SLO 阈值合理: SLO 是否比 SLA 严格 10%~20%?是否设置了燃烧预算告警?
  4. 业务指标映射: 核心业务流程(登录、下单、支付)是否都有对应的技术 SLI?
  5. 告警可执行: 当 SLO 被违反时,On-Call 手册是否明确说明了“先看哪个仪表盘、先查哪个日志”?
自动化核验脚本示例(伪代码):
# 核验黄金信号覆盖率
for service in services:
    if not (has_metric(service, "latency_p99") and
            has_metric(service, "qps") and
            has_metric(service, "error_rate") and
            has_metric(service, "cpu_util")):
        alert("服务 {} 缺少黄金信号指标".format(service))

# 核验 SLO 燃烧预算
for slo in slos:
    burn_rate = calculate_burn_rate(slo)
    if burn_rate > 0.1:  # 每小时消耗超过 10%
        trigger_p1_alert(slo.name, burn_rate)

通过以上定义,On-Call 工程师不再需要猜测“系统是否正常”,而是基于明确的 黄金信号 → SLI → SLO → 告警 链路,快速定位故障根因并执行恢复操作。