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

告警阈值是监控系统的“触发开关”,决定了何时将系统状态从“正常”转为“告警”。错误的阈值配置会导致告警风暴或故障遗漏。本节从阈值定义出发,对比静态与动态阈值,并建立阈值与SLO/SLI的量化关联。

3.1 阈值定义与核心参数

阈值(Threshold)是预设的数值边界,用于判断指标是否处于异常状态。一个完整的阈值定义包含以下要素:

参数 说明 示例
指标 被监控的可观测性信号 http_requests_total
比较运算符 触发条件的方向 >、<、>=、<=
阈值数值 边界值 1000
持续时间 条件满足多久后触发 5m
聚合窗口 数据聚合的时间范围 1m avg
最佳实践:阈值定义必须包含“持续时间”参数,避免瞬时抖动引发误告警。例如“CPU > 90% 持续 5 分钟”比“CPU > 90%”更可靠。

3.2 静态阈值 vs 动态阈值

根据阈值是否随时间或数据分布变化,分为静态阈值和动态阈值两大类。

对比维度 静态阈值 动态阈值
定义方式 人工设定固定数值 基于历史数据或算法自动计算
适用场景 资源水位(CPU、内存)、SLO硬边界 流量波动大、周期性业务、新服务
优点 简单、可解释、稳定 自适应、减少误报、覆盖未知模式
缺点 需要人工维护、对突发不敏感 算法复杂、需要训练数据、调试成本高
典型算法 固定值、百分比 标准差、移动平均、分位数、机器学习
选型建议:核心SLO指标(如错误率、延迟P99)优先使用静态阈值,确保硬边界不突破;辅助指标(如请求量、连接数)可使用动态阈值,减少人工调参。

以下SVG图展示了静态阈值与动态阈值在时间序列上的行为差异:

静态阈值 vs 动态阈值 行为对比 静态阈值 阈值=220 告警 告警 动态阈值 上界 下界 静态阈值固定不变,容易在业务高峰误报;动态阈值随基线漂移,自适应调整告警边界

3.3 阈值与SLO/SLI的量化关系

SLO(服务等级目标)是业务承诺,SLI(服务等级指标)是衡量手段,而告警阈值是SLO的“预警防线”。三者形成金字塔结构:

  • SLI:原始指标,如请求延迟P99、错误率、吞吐量。
  • SLO:SLI的目标值,如“P99延迟 < 200ms 达成率 99.9%”。
  • 告警阈值:通常设置在SLO边界之前,预留“燃烧预算”缓冲。
常见误区:直接将SLO边界作为告警阈值。例如SLO要求错误率 < 1%,告警阈值也设为1%。这会导致:一旦触发告警,SLO已经违反,无法提前干预。正确做法是设置“预警阈值”低于SLO边界。

以下SVG图展示阈值与SLO/SLI的层级关系及燃烧预算机制:

阈值与SLO/SLI层级关系 SLO:P99延迟 < 200ms (99.9%) 告警阈值(预警线) P99延迟 > 180ms 持续 5分钟 → 触发告警 SLI:原始指标 http_request_duration_seconds{quantile="0.99"} > 0.18 燃烧预算(Burn Budget) 告警阈值 = SLO边界 - 燃烧预算缓冲。例如SLO=200ms,缓冲=20ms,则告警阈值=180ms

3.4 阈值设计原则

  1. 预留缓冲:告警阈值应低于SLO边界,预留至少10%-20%的燃烧预算。
  2. 多级阈值:设置Warning(预警)和Critical(严重)两级,Warning提前干预,Critical表示SLO已违反。
  3. 持续时间:避免单点触发,使用“持续N分钟”条件过滤毛刺。
  4. 业务周期适配:工作日/周末、白天/夜间使用不同阈值(动态阈值天然支持)。
  5. 定期校准:每季度或每次大版本发布后重新评估阈值合理性。
案例:某电商平台SLO要求“下单成功率 > 99.9%”。SLI为“order_success_rate”。设置两级阈值:Warning:成功率 < 99.95% 持续2分钟;Critical:成功率 < 99.9% 持续1分钟。Warning提前发现错误率上升趋势,Critical确保SLO不突破。