--- tags: [sre, error-budget, budget-allocation, sre-alerting] create time: 2026-05-18 00:50 --- # Error Budget 深度解析 — 稳定性与速度的平衡杠杆 ## 概述 Error Budget(错误预算)是 SRE 体系中最具实操价值的概念之一。它将抽象的"SLO 目标"转化为具体的可消耗量,为产品迭代的快慢提供量化依据。更多背景见 [[../04-SRE实践/01-SLI-SLO-SLA详解]]。 ## 计算方式 ``` 可用率 = (总时间 - 故障时间) / 总时间 × 100% 错误预算 = 1 - SLO SLO = 99.9% → 错误预算 = 0.001 每月可容忍故障 = 30 × 24 × 60 × 0.001 = 43.2 分钟 每周可容忍故障 = 7 × 24 × 60 × 0.001 = 10.1 分钟 SLO = 99.99% → 错误预算 = 0.0001 每月可容忍故障 ≈ 4.3 分钟 ``` > [!tip] 理解错误预算的本质 > > 错误预算不是"允许出错的额度",而是"**允许不完美的空间**"。它回答了一个关键问题:在当前的可靠性要求下,团队还能冒多大的风险? ## 基于错误预算的决策矩阵 ```mermaid flowchart TD Ratio["错误预算使用率 = 已消耗 / 总预算"] Ratio -- "< 50%" --> Green["🟢 绿灯阶段
预算充足: 可以大胆发布
新功能、尝试激进方案
常规发布节奏"] Ratio -- "50~90%" --> Yellow["🟡 黄灯阶段
预算紧张: 收紧发布频率
增加人工审查
暂停非关键功能开发"] Ratio -- "\> 90%" --> Orange["🟠 橙灯阶段
严重不足: 冻结发布
专注稳定性修复
全员 On-Call"] Ratio -- "\> 100%" --> Red["🔴 红灯阶段
预算耗尽: 禁止所有
功能性变更
SLO 事故复盘"] style Green fill:#c8e6c9 style Yellow fill:#fff9c4 style Orange fill:#ffe0b2 style Red fill:#ffcdd2 ``` ### 各阶段的典型行动清单 | 阶段 | 功能发布 | 技术债处理 | 人员安排 | |------|---------|-----------|---------| | 🟢 绿灯 | 正常节奏 | 按计划推进 | 按需 On-Call | | 🟡 黄灯 | 减少 50%,需额外审批 | 启动专项清理 | 增加第二响应人 | | 🟠 橙灯 | 冻结(仅 Hotfix) | 全员投入修复 | 负责人值班 | | 🔴 红灯 | 全面冻结 | Postmortem + 专项改进 | 全员待命 | ## 错误预算告警联动 ```yaml # Prometheus 告警规则示例 groups: - name: error-budget rules: - alert: ErrorBudgetBurnRateHigh expr: | sum(rate(http_requests_total{status=~"5.."}[1h])) / sum(rate(http_requests_total[1h])) > 0.001 for: 1h labels: severity: warning budget_phase: yellow annotations: summary: "错误预算消耗加速" message: "当前错误率 {{ $value }}% > SLO 阈值 0.1%" - alert: ErrorBudgetExhausted expr: | (sum(rate(http_requests_total{status=~"5.."}[24h])) / sum(rate(http_requests_total[24h]))) >= 0.001 labels: severity: critical budget_phase: red annotations: summary: "错误预算已耗尽!" message: "本月 SLO 已破线,冻结非紧急变更" ``` > [!info] Multi-window Burn Rate Alerting > > Google SRE 推荐的做法是使用**两个窗口**来检测预算消耗速度: > - **短窗口(1h/5m)**:检测突发大量错误的情况(立即触发黄灯) > - **长窗口(半天/一天)**:检测慢性缓慢泄漏的情况(防止温水煮青蛙) > > 只有当两个窗口同时超限时才亮红灯,这样可以避免误报导致的警报疲劳。 ## 补充:多服务 Error Budget 管理策略 当集群中有几十上百个服务时,不能把所有预算分配给同一个 SLO。推荐分层策略: | 层级 | 示例 | 预算分配 | |------|------|---------| | P0 核心链路 | 支付、登录 | 99.99% → 极低容错 | | P1 重要服务 | 订单、搜索 | 99.95% → 中等容错 | | P2 一般服务 | 后台管理、报表 | 99.9% → 较高容错 | > [!tip] Error Budget 分配实战技巧 > > 将月度预算**均匀摊分到每周**作为基线。例如月预算 43 分钟 → 每周预算约 10 分钟。这比月末一次性清算更有操作性——你可以在周报中直接看到本周预算余量。 ## 关联笔记 - [[../04-SRE实践/01-SLI-SLO-SLA详解]] — SLI/SLO/SLA 三层模型基础 - [[../04-SRE实践/03-SRE心法与事故复盘]] — Blameless Postmortem 模板 - [[../hhs/MS/05-部署运维/02-Kubernetes]] — K8s HPA 弹性伸缩支撑 SLO 保障