2. 传统规则阈值基础:固定阈值、静态阈值的定义与适用场景
在告警降噪策略中,固定阈值(Fixed Threshold)与静态阈值(Static Threshold)是最早被广泛采用的方法。它们基于运维专家对系统行为的先验知识,设定一个或多个不变的数值边界,当监控指标超出边界时触发告警。理解这两种阈值是后续对比动态阈值、评估机器学习降噪效果的前提。
2.1 固定阈值与静态阈值的定义
| 术语 | 定义 | 典型形式 |
|---|---|---|
| 固定阈值 | 针对单一指标设定一个恒定不变的数值边界,超过即告警。不随时间、负载、业务周期变化。 | CPU > 90%、内存使用率 > 85%、延迟 > 500ms |
| 静态阈值 | 在固定阈值基础上,可能包含多个固定边界(如上下限、多级严重度),但边界值本身不随数据分布动态调整。 | 5xx 错误率 > 1% (Warning) / > 5% (Critical)、磁盘空间 < 10% (Critical) |
关键区别: 固定阈值是静态阈值的子集。静态阈值可以包含多个固定边界或复合条件(如 AND/OR 组合),但所有边界值在配置后保持不变。两者统称为“传统规则阈值”。
2.2 传统规则阈值的核心特征
- 确定性: 给定相同的指标值,告警结果完全可预测,便于审计和故障回溯。
- 低计算开销: 仅需简单的数值比较,无需历史数据存储或模型推理,适合大规模基础设施的实时监控。
- 配置依赖专家经验: 阈值通常由 SRE、运维工程师根据 SLI/SLO、容量规划或历史故障复盘手动设定。
- 无自适应能力: 阈值不会因业务高峰、版本发布、流量突增或系统演进而自动调整。
2.3 适用场景分析
传统规则阈值并非在所有场景下都失效。在以下环境中,它们仍然是最优选择:
| 场景类别 | 具体示例 | 适用原因 |
|---|---|---|
| 硬性资源上限 | 磁盘使用率 > 95%、内存耗尽、文件句柄数达到系统限制 | 物理资源有上限,超过即导致服务不可用,阈值无需动态调整。 |
| 合规与SLA边界 | P99 延迟必须 < 200ms(SLA 合同约定)、可用性 > 99.99% | 合同或监管要求固定数值,不可因业务波动而放宽。 |
| 简单基础设施 | 单机应用、开发测试环境、小型非关键系统 | 指标模式稳定,无复杂周期性,固定阈值足以覆盖异常。 |
| 安全与准入控制 | 登录失败次数 > 5 次/分钟、API 调用频率 > 1000 QPS | 安全策略需要严格、不可协商的边界。 |
2.4 传统规则阈值的局限性
核心痛点: 固定阈值在复杂、动态的现代分布式系统中,容易产生大量“误报”或“漏报”,导致告警疲劳和关键事件淹没。
- 误报(False Positive): 业务高峰期(如双11、秒杀)CPU 短暂飙高到 92%,但系统仍健康,固定阈值 90% 触发大量无效告警。
- 漏报(False Negative): 低负载时段(凌晨 3 点)CPU 从 10% 缓慢爬升到 60%,虽未达到 90% 阈值,但已表明存在内存泄漏或死锁。
- 配置维护成本高: 每新增一个指标或服务,都需要人工评估并设定阈值;随着微服务数量增长,配置量呈线性甚至指数级上升。
- 无法感知趋势: 只关注瞬时值,忽略指标的变化速率、周期模式或相关性。
2.5 固定阈值 vs 动态阈值:核心差异一览
| 对比维度 | 固定/静态阈值 | 动态阈值(机器学习) |
|---|---|---|
| 阈值生成方式 | 人工配置,基于经验 | 算法自动学习,基于历史数据 |
| 对时间周期的适应性 | 无,全天候同一标准 | 自动区分工作日/周末、白天/夜间、促销期/平峰期 |
| 对趋势的敏感度 | 不敏感,仅比较当前值 | 可检测缓慢爬升、季节性偏移、突发漂移 |
| 误报率(典型场景) | 高(业务高峰时) | 低(自适应边界) |
| 配置维护工作量 | 高,每指标需人工设定 | 低,模型自动更新 |
| 可解释性 | 极高,规则透明 | 中等,依赖模型可解释性工具 |
2.6 传统规则阈值的工作流示意
下图展示了固定阈值在典型监控系统中的处理流程:
2.7 配置示例:Prometheus 中的固定阈值告警规则
以下是一个典型的 Prometheus 告警规则配置,展示了固定阈值的实际写法:
groups:
- name: example-fixed-thresholds
rules:
- alert: HighCpuUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} CPU usage > 90%"
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 2m
labels:
severity: warning
annotations:
summary: "Instance {{ $labels.instance }} memory usage > 85%"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
for: 1m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} root disk < 10% free"
实践要点:
- 固定阈值配置时应结合
for参数(持续时间),避免瞬时毛刺引发告警。 - 对于已知的业务周期性(如每日 10:00-12:00 为高峰),可考虑使用不同的固定阈值规则组,但本质上仍是静态配置。
- 固定阈值适合作为“最后一道防线”,用于捕获异常;动态阈值则更适合作为“早期预警系统”。