4、阈值告警机制:静态阈值设定、动态阈值算法(3-sigma、MA、EWMA)、告警抑制与收敛
阈值告警,说白了就是给系统画一条“红线”。
指标一过线,系统就得喊救命。但这条线怎么画,学问大了去了。画得太松,故障都发生了你还在睡大觉;画得太紧,告警邮件能把邮箱塞爆,运维兄弟直接拉黑你。
我干运维这些年,见过太多因为阈值设置不合理导致的“狼来了”事故。今天咱们就把这块掰开揉碎了讲清楚。
4.1 静态阈值:简单粗暴,但别乱用
静态阈值,就是拍脑袋定一个固定值。比如CPU使用率超过90%就告警,磁盘空间低于10%就告警。
优点很明显:配置简单,理解容易,新人上手快。
缺点也很致命:它不认环境,不认时间,不认业务高低峰。
举个例子。我维护过一个电商平台,平时CPU在20%左右晃悠。我设了个80%的静态阈值。结果双十一大促那天,CPU飙到75%,系统其实扛得住,但我觉得不对劲,手动提了阈值。你想想看,大促期间谁有空盯着阈值改来改去?
静态阈值适合的场景:
- 硬件资源硬限制(磁盘满、内存耗尽)
- 安全合规类指标(端口异常开放、登录失败次数)
- 业务SLA底线(响应时间超过10秒)
4.2 动态阈值算法:让系统自己学会“正常”
动态阈值,就是让系统根据历史数据,自动算出当前该不该告警。我个人习惯用三种算法,咱们一个一个说。
4.2.1 3-sigma 算法:适合稳定型指标
3-sigma 基于正态分布。简单说,就是算出一段时间内指标的均值和标准差。如果当前值偏离均值超过3个标准差,就触发告警。
公式长这样:
阈值上限 = μ + 3σ
阈值下限 = μ - 3σ
我在项目中遇到过,有个数据库的连接数指标,平时很稳定。用3-sigma跑了一段时间,效果不错。但注意,这玩意儿对突发尖峰特别敏感——如果历史数据里有一次大故障,那次的异常值会把标准差拉得很大,导致后续的告警阈值变得特别宽松。
4.2.2 MA(移动平均):平滑波动,看清趋势
MA 就是把最近N个数据点取平均。比如5分钟的平均值,能过滤掉秒级的毛刺。
代码实现很简单:
def moving_average(data, window=5):
return sum(data[-window:]) / window
MA 的好处是计算快,资源消耗小。但有个问题——它对突变的反应比较迟钝。如果指标突然飙升,MA 要等好几个周期才能跟上。
我记得有一次,一个服务的错误率在30秒内从0.1%涨到了5%。MA 算法用了整整3分钟才触发告警。嗯,这3分钟里,用户已经骂翻天了。
4.2.3 EWMA(指数加权移动平均):给新数据更多权重
EWMA 和 MA 的区别在于,它给最近的数据更高的权重,给老数据更低的权重。权重按指数衰减。
公式:
EWMA(t) = α * value(t) + (1 - α) * EWMA(t-1)
这里的 α 是平滑因子,一般在0.1到0.3之间。α 越大,对新数据越敏感。
我个人比较喜欢 EWMA,原因有两点:
- 它对趋势变化反应快,能提前发现异常苗头
- 它不需要存太多历史数据,只保留上一个 EWMA 值就行
4.3 告警抑制与收敛:别让告警变成噪音
阈值设好了,告警来了。但问题来了——一个故障可能触发几十上百条告警。如果全发出来,运维兄弟的手机能震到没电。
告警抑制和收敛,就是干这个活的。
4.3.1 告警抑制:重复的别发
最常见的抑制手段:
- 时间抑制:同一个指标,5分钟内只发一次告警
- 依赖抑制:如果上游服务挂了,下游的告警自动屏蔽
- 严重度抑制:高优先级告警已触发,低优先级的同类告警不发了
我曾经踩过一个坑。有一次数据库主库挂了,从库自动切换。结果告警系统同时发出了“主库不可用”、“从库切换成功”、“连接超时”、“查询失败”等20多条告警。运维同学根本分不清哪个是根因。
后来我加了依赖抑制规则:如果检测到“主库不可用”,那么所有依赖主库的告警自动降级为日志记录,不发送通知。
4.3.2 告警收敛:多条合并成一条
收敛是把多条相关的告警合并成一条,减少信息轰炸。
常见的收敛策略:
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 按主机收敛 | 同一台机器上的所有告警合并 | 单机故障 |
| 按指标收敛 | 同一指标在不同维度的告警合并 | 全局性指标异常 |
| 按时间窗口收敛 | 短时间内触发的告警打包 | 突发流量导致的连锁告警 |
4.4 本章知识体系
下面这张图,帮你理清阈值告警的整体逻辑:
4.5 我的建议
说了这么多,最后给你几条实在的建议:
- 别一上来就搞动态阈值。先跑一段时间静态阈值,摸清指标的脾气秉性,再上动态算法。
- 动态阈值要定期重新训练。业务在变,系统在变,阈值也得跟着变。我一般每个月重新算一次基线。
- 告警抑制规则要写清楚。别让运维同事猜“为什么这个告警没发”。每条抑制规则都要有日志可查。
- 收敛不是合并就完事了。收敛后的告警,要能一眼看出根因和影响范围。否则收敛等于没做。
公众号:蓝海资料掘金营,微信deep3321