多窗口燃烧率报警
燃烧率(Burn Rate)报警是 SLO(Service Level Objective)监控中最重要的报警方式。与传统阈值报警不同,燃烧率报警能够在保证 SLO 目标的前提下,提前发现系统健康度的衰退趋势。
燃烧率的核心概念
燃烧率描述的是系统「消耗」错误预算的速度。燃烧率为 1 意味着系统按预期速度消耗错误预算;燃烧率大于 1 意味着消耗速度超过预期,SLO 可能会被违反。
燃烧率大于 1 并不立即意味着 SLO 被违反——如果只在短时间内超出允许错误率,平均下来仍然可能满足 SLO。但持续的高燃烧率会消耗错误预算,最终导致 SLO 违约。
多窗口燃烧率报警
多窗口燃烧率报警通过多个时间窗口同时监控燃烧率,既能快速发现短期异常,又不会因为瞬时抖动而产生误报。
窗口选择原理
30 天窗口对应的是长期的 SLO 目标达成情况。如果 30 天内燃烧率持续为 1,则 SLO 刚好被满足。如果燃烧率偶尔超过 1,但被其他时间段的低错误率抵消,整体仍然可以达标。
短期窗口(1 小时、6 小时)则用于快速发现异常。如果 1 小时内燃烧率达到 14.4,说明系统正在快速消耗错误预算,需要立即关注。
快速消耗场景举例
假设 99.9% SLO(每月允许 43.8 分钟错误时间):
- 如果某小时错误率为 2%(远高于 0.1%),则该小时燃烧率 = 2% / 0.1% = 20
- 该小时消耗的错误预算相当于 20 小时的允许预算
- 如果这种状态持续 6 小时,将消耗约 5 天的错误预算
Prometheus 实现
完整报警规则
最佳实践
同时配置多个窗口:不要只依赖单一窗口,短期窗口快速发现,长期窗口确保无遗漏。
合理设置 for 子句:短期窗口的 for 时间应当足够长以避免抖动,长期窗口可以适当延长。
结合多指标:燃烧率报警可以应用于错误率、延迟、可用性等多种指标。
持续优化阈值:基于实际运行数据调整燃烧率阈值,找到噪音和灵敏度的平衡点。