4. 静态阈值设定方法:固定百分比法、固定数量法、基于历史均值的静态阈值
静态阈值是巡检告警体系中最基础、最直观的设定方式。它不依赖实时动态基线或机器学习模型,而是基于运维专家对系统容量的经验判断或历史数据的统计结果,直接设定一个固定的告警门限。本章详细拆解三种最常用的静态阈值设定方法:固定百分比法、固定数量法和基于历史均值的静态阈值法。
适用场景提示:静态阈值最适合指标波动规律性强、业务负载相对稳定、或对极端值容忍度低的场景(如内存使用率、磁盘空间、CPU 空闲时间)。对于突发流量或周期性极强的业务,建议结合动态阈值使用。
4.1 固定百分比法
固定百分比法将告警阈值设定为指标最大容量的某个百分比。该方法适用于有明确上限的资源类指标,例如 CPU 使用率、内存使用率、磁盘空间占用率、带宽利用率等。
4.1.1 设定公式与典型值
| 指标类型 | 典型阈值(百分比) | 告警级别 | 说明 |
|---|---|---|---|
| CPU 使用率 | 80% / 90% | Warning / Critical | 超过 80% 需关注,超过 90% 可能引发性能抖动 |
| 内存使用率 | 85% / 95% | Warning / Critical | 预留部分内存给内核和突发进程 |
| 磁盘空间使用率 | 80% / 90% | Warning / Critical | 避免写满导致服务只读或崩溃 |
| 带宽利用率 | 70% / 85% | Warning / Critical | 预留余量应对流量毛刺 |
4.1.2 实施步骤
- 确定指标上限:例如物理内存总量、磁盘总容量、网卡带宽。
- 选择百分比基准:根据运维经验或行业标准(如 Google SRE 书中推荐的 80% 水位线)。
- 计算阈值:阈值 = 上限 × 百分比。
- 配置告警规则:在监控系统中写入固定数值。
示例(Prometheus 规则):
groups:
- name: static_thresholds
rules:
- alert: HighDiskUsage
expr: (disk_used_bytes / disk_total_bytes) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "磁盘使用率超过 90%"
4.2 固定数量法
固定数量法直接设定一个绝对值作为告警阈值,不依赖百分比。该方法适用于无明确上限或上限极大的指标,例如错误日志数量、连接数、队列深度、进程数、慢查询次数等。
4.2.1 典型应用场景
- 错误计数:例如 5 分钟内错误日志超过 100 条触发告警。
- 连接数:例如数据库连接数超过 500 触发 Warning。
- 队列积压:例如消息队列未消费消息超过 10000 条触发 Critical。
- 慢查询:例如每分钟慢查询超过 50 条触发告警。
4.2.2 设定原则
| 原则 | 说明 | 示例 |
|---|---|---|
| 基于容量规划 | 根据系统设计容量或压测结果设定 | 连接池最大 1000,阈值设为 800 |
| 基于历史峰值 | 取历史正常峰值的 1.5~2 倍 | 正常峰值 200 QPS,阈值设为 400 |
| 基于业务容忍度 | 根据业务允许的异常量设定 | 允许 10 笔交易失败,阈值设为 20 |
注意:固定数量法容易受系统规模变化影响。例如,扩容后连接数上限提升,原阈值可能过低导致误告。建议在系统架构变更后重新评估阈值。
4.3 基于历史均值的静态阈值
该方法通过计算历史数据的均值(如过去 7 天、30 天的平均值),再乘以一个安全系数,得到一个静态阈值。它比纯经验设定更客观,适合指标有长期稳定趋势但短期有波动的场景。
4.3.1 计算步骤
- 收集历史数据:取最近 N 天(通常 7~30 天)的指标数据,粒度 1~5 分钟。
- 计算均值(μ):对所有数据点求算术平均。
- 设定安全系数(k):根据指标波动性选择,通常 1.5~3.0。
- 计算阈值:阈值 = μ × k(或 μ + k × σ,σ 为标准差)。
4.3.2 安全系数参考表
| 指标波动性 | 推荐安全系数(k) | 适用指标示例 |
|---|---|---|
| 低波动(CV < 0.2) | 1.5 ~ 2.0 | CPU 使用率、内存使用率 |
| 中波动(0.2 ≤ CV < 0.5) | 2.0 ~ 2.5 | 请求延迟、错误率 |
| 高波动(CV ≥ 0.5) | 2.5 ~ 3.0 | 并发连接数、流量突发 |
Python 计算示例:
import numpy as np
# 假设过去 7 天的 CPU 使用率数据(%)
data = [45, 48, 52, 47, 50, 55, 49]
mean = np.mean(data) # 均值 ≈ 49.43
std = np.std(data) # 标准差 ≈ 3.31
cv = std / mean # 变异系数 ≈ 0.067(低波动)
# 设定安全系数 k=1.8
threshold = mean * 1.8 # 阈值 ≈ 88.97
print(f"建议静态阈值: {threshold:.1f}%")
4.4 三种方法对比与选型建议
| 方法 | 适用指标 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|---|
| 固定百分比法 | 有明确上限的资源指标 | 直观、易于理解、跨机器可比 | 忽略实际负载特征,可能过松或过紧 | 磁盘、CPU、内存、带宽 |
| 固定数量法 | 无上限或上限极大的计数指标 | 直接反映绝对容量,适合容量告警 | 随系统规模变化需手动调整 | 连接数、队列深度、错误计数 |
| 基于历史均值法 | 有长期稳定趋势的指标 | 基于数据驱动,比纯经验更准确 | 需要历史数据,对突变不敏感 | 请求延迟、错误率、常规负载 |
最佳实践:在实际巡检配置中,建议将三种方法组合使用。例如,对磁盘使用率同时配置固定百分比法(90% Critical)和基于历史均值法(μ×1.8 Warning),前者兜底极端情况,后者提前预警异常增长。