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