2. SLO与SLI基础:定义服务等级目标(SLO)与服务等级指标(SLI),黄金信号四大指标

在构建Error Budget监控体系之前,必须首先统一团队对“服务健康”的度量语言。SLI(Service Level Indicator)是服务质量的量化观测值,SLO(Service Level Objective)是团队承诺的目标阈值。两者共同构成熔断降级阈值自动调优的数学基础——没有SLO,Error Budget便无从计算。

2.1 SLI:可观测的量化指标

SLI是服务某一维度特性的直接测量值,通常表示为一段时间内的比率或分布。选择SLI需遵循“可测量、可区分、可行动”原则:

  • 可测量:指标能从监控系统直接采集,无需人工估算。
  • 可区分:指标能清晰区分“好”与“坏”的请求。
  • 可行动:指标恶化时,团队能定位根因并采取修复措施。
实践建议:初期每个服务只定义2~3个核心SLI,避免指标爆炸。优先覆盖用户最敏感的请求路径(如登录、下单、搜索)。

2.2 SLO:团队与用户之间的契约

SLO是SLI的目标值,例如“99.9%的请求延迟≤200ms”。SLO定义了可接受的故障预算:

  • 宽松SLO(如99%)→ Error Budget充足,允许频繁发布或实验。
  • 严格SLO(如99.99%)→ Error Budget稀缺,熔断降级阈值需更敏感。

SLO设定需平衡用户体验与运维成本。下表展示了常见SLO对应的年度最大不可用时间:

SLO(可用性) 年度最大不可用时间 典型场景
99% 3.65天 内部工具、开发环境
99.9% 8.76小时 一般业务服务
99.99% 52.56分钟 核心交易、支付
99.999% 5.26分钟 金融核心、实时通信

2.3 黄金信号四大指标

Google SRE团队提出的黄金信号(Four Golden Signals)是SLI选型的通用框架。这四个维度覆盖了用户可感知的服务质量全貌:

  1. 延迟(Latency):请求处理耗时,通常关注P50/P95/P99分位值。
  2. 流量(Traffic):系统负载,如QPS、RPS、并发连接数。
  3. 错误(Errors):显式错误(HTTP 5xx)与隐式错误(返回成功但业务逻辑异常)。
  4. 饱和度(Saturation):资源使用程度,如CPU、内存、连接池水位。
关键区别:延迟和错误是用户视角的SLI,直接影响SLO;流量和饱和度是运维视角的先行指标,用于预测SLO风险。
黄金信号四大指标与SLO/SLI关系 SLO 目标阈值 延迟 (Latency) 流量 (Traffic) 错误 (Errors) 饱和度 (Saturation) SLI 从四个黄金信号中选取,SLO 设定目标值,Error Budget 由此计算

2.4 SLI定义实践:以延迟为例

定义SLI时需明确测量窗口、聚合方式、好坏判定。以下是一个延迟SLI的完整定义示例:

# 延迟SLI定义(YAML格式)
sli:
  name: "api_request_latency"
  metric_source: "prometheus"
  query: 'histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{job="api-gateway"}[5m])) by (le))'
  good_condition: "value <= 0.2"  # 200ms以内为“好”
  window: "5m"
  aggregation: "p99"
常见陷阱:仅使用平均值定义延迟SLI。P99延迟可能比平均值高10倍以上,平均值会掩盖长尾故障。始终使用分位值(P95/P99)作为延迟SLI。

2.5 从黄金信号到SLI映射矩阵

不同服务类型对黄金信号的敏感度不同。下表展示了典型微服务的SLI选型参考:

服务类型 核心SLI 辅助SLI 典型SLO
API网关 延迟P99、错误率 QPS、连接数 P99 ≤ 200ms, 错误率 ≤ 0.1%
数据库 查询延迟P95、连接池饱和度 慢查询数、复制延迟 P95 ≤ 50ms, 饱和度 ≤ 70%
消息队列 投递延迟、堆积数 吞吐量、重试率 P99投递延迟 ≤ 500ms
缓存 命中率、响应延迟 内存使用率、逐出数 命中率 ≥ 95%, P99 ≤ 10ms

2.6 SLI采集与聚合策略

SLI数据通常通过以下方式采集:

  • 客户端埋点:在服务框架中注入指标采集(如Prometheus Client、OpenTelemetry SDK)。
  • 服务网格:利用Sidecar代理(如Istio/Envoy)自动捕获流量指标。
  • 基础设施探针:对数据库、中间件使用Exporter采集饱和度指标。

聚合时需注意时间窗口对齐:Error Budget计算通常使用滑动窗口(如30天),而熔断决策使用短窗口(如1分钟)。

SLI 采集与聚合架构 数据源层 • 服务埋点 (Prometheus SDK) • 服务网格 (Envoy/Istio) • 基础设施 Exporter 采集层 • Prometheus Server • OpenTelemetry Collector • 日志采集 (Fluentd) 聚合层 • 滑动窗口聚合 • 分位值计算 (P50/P95/P99) • 错误率/饱和度计算 SLI 输出 → SLO 评估 → Error Budget 计算 用于熔断降级阈值自动调优 关键设计:采集层与聚合层解耦,支持多数据源统一SLI视图 聚合窗口需与Error Budget计算窗口对齐(推荐5m/30d双窗口)

2.7 本章小结

  • SLI是服务的可量化观测指标,SLO是SLI的目标阈值,两者共同定义Error Budget。
  • 黄金信号(延迟、流量、错误、饱和度)是SLI选型的通用框架,覆盖用户与运维双视角。
  • SLI定义需明确测量窗口、聚合方式、好坏判定,避免使用平均值掩盖长尾故障。
  • 不同服务类型应选择不同的核心SLI组合,SLO严格度直接影响熔断降级阈值设计。