3. 告警阈值基础:阈值的定义、静态阈值 vs 动态阈值、阈值与SLO/SLI的关系

3.1 阈值的定义与核心作用

告警阈值是触发告警行为的边界条件,本质上是可观测性信号与业务影响程度之间的量化映射。在SRE实践中,阈值定义了“系统何时处于不健康状态”的判断标准。

维度 说明 典型示例
数值边界 指标超过或低于某个具体数值时触发 CPU使用率 > 80%
持续时间 异常状态需维持一定时长才触发 延迟 > 500ms 持续 30s
聚合窗口 在特定时间窗口内计算聚合值 5min内错误率均值 > 1%
条件组合 多个条件同时满足才触发 内存 > 90% 且 GC暂停 > 1s
关键原则:阈值不是随意设定的数字,而是从历史基线、容量规划、SLO目标三个维度交叉验证得出的工程决策。错误的阈值会导致告警风暴或漏报。

3.2 静态阈值 vs 动态阈值

两种阈值策略在可观测性体系中各有适用场景,核心差异在于适应能力和维护成本。

对比维度 静态阈值 动态阈值
定义方式 人工设定固定数值 基于历史数据自动计算基线
适应能力 不随负载/时间变化 自动适应周期性、趋势性变化
维护成本 低(一次设定) 高(需持续训练模型)
误报率 高(业务高峰易误报) 低(排除正常波动)
漏报率 高(阈值过宽时) 低(异常偏离基线即告警)
适用场景 资源水位、硬性容量限制 业务指标、流量波动型服务
最佳实践:生产环境中通常采用混合策略——核心资源使用静态阈值兜底,业务指标使用动态阈值捕捉异常。例如:CPU > 95% 静态告警 + P99延迟动态基线偏离告警。

3.3 阈值与SLO/SLI的关系模型

SLO(服务等级目标)是业务承诺,SLI(服务等级指标)是实际测量值,而告警阈值是SLO的早期预警边界。三者构成完整的质量门禁链路:

  1. SLI定义:选择可测量的服务质量指标(如请求延迟、错误率)
  2. SLO设定:基于业务需求定义目标值(如P99延迟 < 200ms,达成率99.9%)
  3. 阈值推导:根据SLO燃烧速率计算告警触发边界
  4. 门禁卡点:阈值触发后进入质量门禁流程(降级/阻断/人工介入)
阈值与SLO/SLI关系模型 SLI 测量 延迟/错误率/饱和度 SLO 目标 99.9% 请求 < 200ms 告警阈值 燃烧速率 > 2x/小时 定义 推导 SLO燃烧速率阈值计算 错误预算 = (1 - SLO) × 总请求量 燃烧速率 = 消耗的错误预算 / 时间窗口 告警触发条件:燃烧速率 × 剩余时间 > 错误预算剩余 质量门禁卡点 阈值触发 → 自动降级 / 阻断发布 / 通知On-Call 触发

3.4 阈值基线优化策略

基于SLO的阈值设定需要遵循燃烧速率(Burn Rate)方法论,这是Google SRE推荐的标准化阈值推导方式:

燃烧速率倍数 告警严重级别 响应时间要求 典型阈值示例(SLO=99.9%)
1x Info / 通知 24小时内响应 错误率 > 0.1% 持续6小时
2x Warning / 警告 2小时内响应 错误率 > 0.2% 持续30分钟
5x Critical / 严重 30分钟内响应 错误率 > 0.5% 持续6分钟
10x P0 / 紧急 5分钟内响应 错误率 > 1% 持续3分钟
常见陷阱:直接使用SLO数值作为告警阈值(如SLO=99.9%时设置错误率阈值0.1%)会导致告警滞后——当阈值被触发时,错误预算可能已经耗尽。正确做法是使用燃烧速率提前预警。

3.5 阈值基线优化流程

从原始指标到生产可用的告警阈值,需要经过以下基线优化步骤:

  1. 数据采集阶段:收集至少30天的历史指标数据,覆盖业务高峰/低谷/异常时段
  2. 基线计算阶段:使用分位数(P50/P95/P99)、均值、标准差等统计方法建立基线
  3. SLO映射阶段:将基线数据与SLO目标对齐,计算燃烧速率阈值
  4. 验证调优阶段:回放历史告警,调整阈值避免误报/漏报
  5. 持续优化阶段:定期(每月/每季度)重新校准基线,适应系统演进
阈值基线优化五步流程 ① 数据采集 30天+历史指标 ② 基线计算 分位数/均值/标准差 ③ SLO映射 燃烧速率计算 ④ 验证调优 历史回放/误报分析 ⑤ 持续 优化 反馈循环:每月/每季度重新校准 输出:多级燃烧速率阈值 + 动态基线参数 + 门禁触发规则
工程建议:在实施阈值基线优化时,优先选择P99延迟和错误率作为首批优化指标。这两个指标与用户体验直接相关,且燃烧速率模型成熟度高。避免一开始就对所有指标进行动态阈值化,容易导致维护成本失控。