深色模式
错误预算计算
摘要:SLO 说“99.9% 可用”,到底允许坏多久?错误预算(Error Budget)= 1 - SLO,把百分比换算成“每月能坏多少分钟 / 多少请求”,一切决策就有了量化基准。
适用环境
- 已选定 SLI 与 SLO 目标(如可用性 99.9%)
- 能统计窗口内的总请求/总时长
操作步骤
1. 时间口径换算
text
SLO = 99.9% → 错误预算 = 0.1%
一个月(30d) = 43200 分钟
允许不可用 = 43200 × 0.1% = 43.2 分钟/月1
2
3
2
3
2. 请求口径换算
text
SLO = 99.9% → 错误预算 = 0.1%
若月总请求 = 1 亿
允许错误请求 = 1亿 × 0.1% = 10 万次/月1
2
3
2
3
3. 用 Prometheus 实时算剩余预算
promql
# 30 天窗口内的错误率,与 SLO 比较
1 - (
sum(rate(http_requests_total{code!~"5.."}[30d]))
/ sum(rate(http_requests_total[30d]))
) > (1 - 0.999)
# 上式为真表示已超出预算1
2
3
4
5
6
2
3
4
5
6
4. 算“还够烧多久”
promql
# 当前燃烧速率下,剩余预算耗尽时间
(error_budget_remaining) / (burn_rate)1
2
2
DANGER
预算是“滚动窗口”概念,不是每月 1 号清零。用 increase/rate 的 30d 窗口,避免月初预算“凭空满血”的错觉。
验证
bash
# 取一个月窗口,确认错误率落在预算内
# 可用 Grafana 面板展示“本月已用预算 %”1
2
2
常见坑
WARNING
- 时间口径和请求口径结果可能不同:低频高影响(每次请求都很关键)用时间口径,高频小错用请求口径。
- 把多个 SLI 的预算简单相加没有意义,每个 SLI 独立算。