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的多级告警策略在自动化编排中的完整链路:从指标采集到告警分级,再到自愈动作的触发。

基于SLO的多级告警编排架构 指标采集 SLI / 请求日志 SLO 计算引擎 燃烧率 / 预算剩余 告警分级器 燃烧率 + 预算阈值 Info / Warning Critical Pager (紧急) 自动降级 / 限流 扩容 / 重启 人工介入 + Runbook 反馈闭环:自愈结果 → 更新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. 步骤1: 指标采集器(如Prometheus)计算当前燃烧率和预算剩余。
  2. 步骤2: 告警分级器根据阈值判断级别:
    • 燃烧率 < 2x 且预算剩余 > 50% → 不告警,仅记录。
    • 燃烧率 2x-5x 或预算剩余 25%-50% → Warning,触发自动降级Runbook。
    • 燃烧率 5x-10x 或预算剩余 10%-25% → Critical,触发自动扩容Runbook。
    • 燃烧率 > 10x 或预算剩余 < 10% → Pager,触发紧急自愈Runbook并通知值班人员。
  3. 步骤3: Runbook执行后,将结果反馈回SLO计算引擎,更新预算状态。
  4. 步骤4: 如果自愈成功且预算恢复,自动清除告警;否则升级为人工事件。
最佳实践: 在编排系统中为每个告警级别设置冷却时间(Cooldown),避免同一事件反复触发。例如:Warning级别冷却5分钟,Critical级别冷却15分钟,Pager级别冷却30分钟。

3.7 告警策略的持续优化

告警体系不是一次性设计,而是需要持续迭代的。建议定期(如每两周)回顾以下指标:

  • 告警准确率: 真正需要人工介入的告警占比。
  • 平均响应时间(MTTR): 从告警触发到自愈完成的时间。
  • 误报率: 无需任何操作的告警占比,目标控制在5%以下。
  • 预算恢复率: 自愈动作后错误预算是否得到有效恢复。

通过持续优化,让告警体系从“被动响应”进化为“主动预防”,真正实现SLO告警事件驱动的自愈自动化。