燃烧率报警(Burn Rate)
想象一个 SLO 目标:每月可用性 99.9%(即每月允许 43.8 分钟的不可用)。如果今天早上 8 点到 10 点发生了 2 小时的故障,剩余 28 天的预算会在多少天内耗尽?
答案是:不到 3 天。这就是燃烧率报警的核心场景。传统阈值告警只看「当前是否超标」,而燃烧率报警看「按当前速度,剩余的预算什么时候会耗尽」。
什么是燃烧率
定义
物理含义
把 SLO 预算想象成一杯水:
- 水流进来(系统正常):没有错误,水位不变
- 水流出去(发生故障):有错误,水位下降
- 水位到零(预算耗尽):发布冻结,必须修问题
燃烧率就是「水流出的速度相对正常速度的倍数」。
为什么要用燃烧率
传统阈值告警的问题
问题:静态阈值无法适应流量波动。100 QPS 的 1% 错误率和 10000 QPS 的 1% 错误率,代表的问题严重程度完全不同。
燃烧率的优势
燃烧率计算
基础公式
多窗口设计
为了同时检测突发故障和慢性退化,燃烧率报警通常使用多窗口:
Prometheus 燃烧率告警规则
标准规则(SLO 99.9%)
prometheus-alerts.yml
通用模板
为了避免重复配置,可以创建一个通用的模板:
slo-alerts-template.yml
燃烧率与错误预算的关系
预算消耗可视化
告警阈值推导
多 SLO 场景
按服务/接口配置不同的 SLO
质量判断标准
读完本节后,你应该能够回答:
- 燃烧率的物理含义是什么?为什么说它是「水流出的速度」?
- 燃烧率报警为什么要使用多窗口(1小时/6小时/1天/3天)?每个窗口分别检测什么类型的故障?
- 如何推导燃烧率告警的阈值?14.4x 这个数字是怎么计算出来的?
- 对于 99.9% 的 SLO,如果过去 1 小时内燃烧率达到了 20x,这意味着什么?剩余的预算还能撑多久?
- 燃烧率报警和传统的「错误率 > 1%」阈值报警在本质上有何不同?为什么说燃烧率更适合 SLO 时代?