3. 告警体系设计:基于SLO的多级告警策略
在SRE实践中,告警不是越多越好,而是越精准越好。基于SLO的多级告警策略通过燃烧率(Burn Rate)和预算耗尽(Budget Exhaustion)两个核心指标,将告警从“噪声驱动”转变为“风险驱动”。本章将详细拆解这两种告警策略的设计原理、阈值计算与编排落地方式。
3.1 燃烧率告警:量化错误消耗速度
燃烧率(Burn Rate)衡量的是错误预算被消耗的速度。如果SLO设定为99.9%(月度),则每月允许的不可用时间为43.2分钟。燃烧率告警的核心逻辑是:当错误预算在短时间内被快速消耗时,立即触发告警,而不是等到月底才发现预算耗尽。
| 燃烧率 | 含义 | 典型告警窗口 | 响应级别 |
|---|---|---|---|
| 1x | 按SLO允许的最大错误率匀速消耗 | 30天 | 信息(Info) |
| 2x | 消耗速度是允许值的2倍 | 15天 | 警告(Warning) |
| 5x | 消耗速度是允许值的5倍 | 6天 | 严重(Critical) |
| 10x | 消耗速度是允许值的10倍 | 3天 | 紧急(Pager) |
关键公式: 燃烧率 = 实际错误率 / SLO允许错误率。例如:SLO 99.9%(允许错误率0.1%),若实际错误率为0.5%,则燃烧率 = 0.5% / 0.1% = 5x。
3.2 预算耗尽告警:剩余时间的倒计时
预算耗尽告警关注的是剩余错误预算的值。当剩余预算低于某个阈值时,系统需要提前介入,避免在月底前彻底耗尽。这种告警通常与燃烧率配合使用,形成“速度+存量”的双重防护。
- 一级阈值(75%耗尽): 剩余预算仅剩25%,触发黄色告警,建议启动自动化降级策略。
- 二级阈值(90%耗尽): 剩余预算仅剩10%,触发橙色告警,需要人工介入评估。
- 三级阈值(100%耗尽): 预算已耗尽,触发红色告警,SLO已违反,启动紧急自愈流程。
实践建议: 预算耗尽告警的窗口建议设置为滚动窗口(如过去7天或30天),而非固定日历月,以避免月初/月末的边界效应导致误报。
3.3 多级告警策略的编排架构
下图展示了基于SLO的多级告警策略在自动化编排中的完整链路:从指标采集到告警分级,再到自愈动作的触发。
3.4 告警阈值计算示例
以月度SLO 99.9%(允许错误率0.1%)为例,假设当前窗口为1小时,计算不同燃烧率下的告警触发条件:
# 月度总时间:30天 × 24小时 × 60分钟 = 43200分钟
# 允许不可用时间:43200 × (1 - 0.999) = 43.2分钟
# 燃烧率 10x 告警(紧急):
# 窗口内允许错误时间 = 43.2 / (30 × 24) = 0.06分钟/小时
# 10x 燃烧率下,1小时内错误时间达到 0.6分钟(36秒)即触发告警
# 燃烧率 5x 告警(严重):
# 1小时内错误时间达到 0.3分钟(18秒)即触发告警
# 燃烧率 2x 告警(警告):
# 1小时内错误时间达到 0.12分钟(7.2秒)即触发告警
注意: 窗口越短,告警越灵敏,但误报率也越高。建议为不同燃烧率设置不同的窗口长度:高燃烧率(10x)使用短窗口(5-10分钟),低燃烧率(2x)使用长窗口(1-6小时)。
3.5 告警策略对比:燃烧率 vs 预算耗尽
| 维度 | 燃烧率告警 | 预算耗尽告警 |
|---|---|---|
| 关注点 | 错误消耗的速度 | 剩余预算的存量 |
| 触发条件 | 短时间内错误率超过SLO允许值的N倍 | 剩余预算低于预设百分比(如25%、10%) |
| 响应速度 | 快(分钟级) | 慢(小时/天级) |
| 适用场景 | 突发流量、代码缺陷、基础设施故障 | 长期慢性错误、容量规划不足 |
| 误报率 | 较高(需合理设置窗口) | 较低(趋势性告警) |
| 推荐组合 | 作为第一响应告警 | 作为升级/兜底告警 |
3.6 多级告警策略的编排落地
在自动化编排中,告警策略需要与Runbook绑定。以下是一个典型的编排决策树:
- 步骤1: 指标采集器(如Prometheus)计算当前燃烧率和预算剩余。
- 步骤2: 告警分级器根据阈值判断级别:
- 燃烧率 < 2x 且预算剩余 > 50% → 不告警,仅记录。
- 燃烧率 2x-5x 或预算剩余 25%-50% → Warning,触发自动降级Runbook。
- 燃烧率 5x-10x 或预算剩余 10%-25% → Critical,触发自动扩容Runbook。
- 燃烧率 > 10x 或预算剩余 < 10% → Pager,触发紧急自愈Runbook并通知值班人员。
- 步骤3: Runbook执行后,将结果反馈回SLO计算引擎,更新预算状态。
- 步骤4: 如果自愈成功且预算恢复,自动清除告警;否则升级为人工事件。
最佳实践: 在编排系统中为每个告警级别设置冷却时间(Cooldown),避免同一事件反复触发。例如:Warning级别冷却5分钟,Critical级别冷却15分钟,Pager级别冷却30分钟。
3.7 告警策略的持续优化
告警体系不是一次性设计,而是需要持续迭代的。建议定期(如每两周)回顾以下指标:
- 告警准确率: 真正需要人工介入的告警占比。
- 平均响应时间(MTTR): 从告警触发到自愈完成的时间。
- 误报率: 无需任何操作的告警占比,目标控制在5%以下。
- 预算恢复率: 自愈动作后错误预算是否得到有效恢复。
通过持续优化,让告警体系从“被动响应”进化为“主动预防”,真正实现SLO告警事件驱动的自愈自动化。