1. SLO 设计方法论中从用户旅程出发定义 SLI(可用性/延迟/吞吐量/质量)、错误预算计算与多窗口燃烧率
请阐述从用户旅程出发设计 SLO 的完整方法论,包括如何定义 SLI(可用性/延迟/吞吐量/质量四类指标)、计算错误预算,以及多窗口燃烧率告警的设计原理?
- SLI 四类核心指标(可用性、延迟、吞吐量、质量)的定义与选取
- 错误预算的计算公式(1 - 目标达成率)
- 多窗口燃烧率告警的数学原理与落地
设计 SLO 的第一步是明确"用户真正关心什么",从用户旅程出发而非从内部指标出发。以最常见的四类 SLI 为例:可用性(availability)用请求成功率衡量,如「成功请求数 / 总请求数」;延迟(latency)用分位数衡量,如 P95 请求延迟 < 500ms;吞吐量(throughput)衡量系统处理能力,如「每秒请求数」;质量(quality)衡量业务质量,如「查询结果正确率」「推荐点击率」。SLI 必须可测量、可采集、具有业务意义。选定 SLI 后,为其设定目标值即 SLO。错误预算 = 1 - SLO 目标,例如 99.9% 可用性对应 0.1% 的错误预算,即每月约 43 分钟(30 天 × 1440 分钟 × 0.1%)。错误预算相当于"允许出错的预算",是系统可靠性投入的货币化体现。多窗口燃烧率(multi-window multi-burn-rate)告警则通过多个时间窗口(如 1 小时与 5 分钟双窗口、6 小时窗口)观测错误预算消耗速率,当燃烧速率达到阈值(如 14.4 倍)时触发告警,从而在错误预算快速耗尽时及时预警,兼顾"发现快"与"少误报"。
该方法论的核心是「以用户为中心定义指标」,避免工程师只盯着内部指标(如 CPU、内存)而忽略真实用户体验。错误预算把可靠性从"玄学"变成可量化、可交易的资源,多窗口特性则通过长时间窗口过滤瞬时抖动、短窗口保证快速响应,是 Google SRE 手册的标准做法。
多窗口燃烧率告警的 Prometheus 规则示例:
# 99.9% SLO,错误预算 0.1%,燃烧率 14.4(错误率达到 1.44% 时触发)
groups:
- name: slo
rules:
- record: job:slo_errors:ratio_rate5m
expr: |
sum(rate(http_requests_total{job="api",status=~"5.."}[5m]))
/ sum(rate(http_requests_total{job="api"}[5m]))
- alert: ErrorBudgetBurn
expr: |
(sum(rate(http_requests_total{status=~"5.."}[1h])) / sum(rate(http_requests_total[1h])) > 0.0144)
and on(job) (sum(rate(http_requests_total[1h])) > 0)
for: 2m