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的早期预警边界。三者构成完整的质量门禁链路:
- SLI定义:选择可测量的服务质量指标(如请求延迟、错误率)
- SLO设定:基于业务需求定义目标值(如P99延迟 < 200ms,达成率99.9%)
- 阈值推导:根据SLO燃烧速率计算告警触发边界
- 门禁卡点:阈值触发后进入质量门禁流程(降级/阻断/人工介入)
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 阈值基线优化流程
从原始指标到生产可用的告警阈值,需要经过以下基线优化步骤:
- 数据采集阶段:收集至少30天的历史指标数据,覆盖业务高峰/低谷/异常时段
- 基线计算阶段:使用分位数(P50/P95/P99)、均值、标准差等统计方法建立基线
- SLO映射阶段:将基线数据与SLO目标对齐,计算燃烧速率阈值
- 验证调优阶段:回放历史告警,调整阈值避免误报/漏报
- 持续优化阶段:定期(每月/每季度)重新校准基线,适应系统演进
工程建议:在实施阈值基线优化时,优先选择P99延迟和错误率作为首批优化指标。这两个指标与用户体验直接相关,且燃烧速率模型成熟度高。避免一开始就对所有指标进行动态阈值化,容易导致维护成本失控。