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选型的通用框架。这四个维度覆盖了用户可感知的服务质量全貌:
- 延迟(Latency):请求处理耗时,通常关注P50/P95/P99分位值。
- 流量(Traffic):系统负载,如QPS、RPS、并发连接数。
- 错误(Errors):显式错误(HTTP 5xx)与隐式错误(返回成功但业务逻辑异常)。
- 饱和度(Saturation):资源使用程度,如CPU、内存、连接池水位。
关键区别:延迟和错误是用户视角的SLI,直接影响SLO;流量和饱和度是运维视角的先行指标,用于预测SLO风险。
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分钟)。
2.7 本章小结
- SLI是服务的可量化观测指标,SLO是SLI的目标阈值,两者共同定义Error Budget。
- 黄金信号(延迟、流量、错误、饱和度)是SLI选型的通用框架,覆盖用户与运维双视角。
- SLI定义需明确测量窗口、聚合方式、好坏判定,避免使用平均值掩盖长尾故障。
- 不同服务类型应选择不同的核心SLI组合,SLO严格度直接影响熔断降级阈值设计。