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 为高峰),可考虑使用不同的固定阈值规则组,但本质上仍是静态配置。
  • 固定阈值适合作为“最后一道防线”,用于捕获异常;动态阈值则更适合作为“早期预警系统”。

2.8 小结