Files
cs-note/hhs/MS/05-部署运维/04-SRE实践/02-错误预算深度解析.md
T
2026-05-24 11:42:38 +08:00

4.4 KiB
Raw Blame History

tags, create time
tags create time
sre
error-budget
budget-allocation
sre-alerting
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] 理解错误预算的本质

错误预算不是"允许出错的额度",而是"允许不完美的空间"。它回答了一个关键问题:在当前的可靠性要求下,团队还能冒多大的风险?

基于错误预算的决策矩阵

flowchart TD
    Ratio["错误预算使用率 = 已消耗 / 总预算"]
    
    Ratio -- "< 50%" --> Green["🟢 绿灯阶段<br/>预算充足: 可以大胆发布<br/>新功能、尝试激进方案<br/>常规发布节奏"]
    Ratio -- "50~90%" --> Yellow["🟡 黄灯阶段<br/>预算紧张: 收紧发布频率<br/>增加人工审查<br/>暂停非关键功能开发"]
    Ratio -- "\> 90%" --> Orange["🟠 橙灯阶段<br/>严重不足: 冻结发布<br/>专注稳定性修复<br/>全员 On-Call"]
    Ratio -- "\> 100%" --> Red["🔴 红灯阶段<br/>预算耗尽: 禁止所有<br/>功能性变更<br/>SLO 事故复盘"]
    
    style Green fill:#c8e6c9
    style Yellow fill:#fff9c4
    style Orange fill:#ffe0b2
    style Red fill:#ffcdd2

各阶段的典型行动清单

阶段 功能发布 技术债处理 人员安排
🟢 绿灯 正常节奏 按计划推进 按需 On-Call
🟡 黄灯 减少 50%,需额外审批 启动专项清理 增加第二响应人
🟠 橙灯 冻结(仅 Hotfix) 全员投入修复 负责人值班
🔴 红灯 全面冻结 Postmortem + 专项改进 全员待命

错误预算告警联动

# 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 分钟。这比月末一次性清算更有操作性——你可以在周报中直接看到本周预算余量。

关联笔记