背景
运维监控系统/平台,一般是通过配置固定阈值或条件,达到阈值或满足特定条件后自动触发/生成告警。如网络中断、闪断、系统升级更新等。在设备多、监控内容多等情况下,可能会产生海量告警。以下为告警管理常见问题:
- 故障期间,告警风暴,手机/邮箱会被海量告警淹没;
- 运维人员很难从海量告警从筛选出重要告警,容易忽略重要告警;
- 固定阈值控制,频繁误报、漏报告警;
- ...
在监控场景下,一旦出现告警风暴,告警本身就失去了意义和价值。因此需要有一套方案,帮助用户在不遗漏重要告警前提下,有效减少告警数量。
如果把监控告警放到机器学习领域,它是一个典型的机器学习回归问题,是一个牺牲准确率,满足召回率的场景,即宁可多报、误报,也不遗漏告警。而告警降噪的目的就是在保证所有重要告警成功报出的前提下,尽量减少重复、无意义的告警(噪音)。换言之,是保证告警召回率接近 100%的前提下,尽量提升准确率(有意义、不重复的告警)。
告警降噪机制
告警降噪主要有三种机制:
- 自定义规则降噪
- 通过用户自定义的规则对告警进行降噪,日志服务告警策略便属于此类型。
- 自动去重(第一种机制的子集,简化版)
- 通过一个或一组字段的集合来标识一个告警的ID,ID取值相同的告警被视为同一类告警。Moogsoft中的Deduplicate机制便是属于此类型。
- 指定时间窗口内,相同ID的告警会被合并。
- ID标识和时间窗口可由用户自定义,也可系统内置。
- 智能算法降噪(本文的主题)
- 智能降噪的原理是以历史数据预测当前状态。通过历史的告警数据来预测当前新来的告警是否需要被过滤掉。
- 可供选择的算法模型包括经典统计模型比如相似度模型、分类模型、预测模型,或机器学习回归模型等。
前两种降噪机制需要用户手工配置规则和参数,第三种智能算法降噪则不需要用户过多的配置。
本文主要调研了业界常见的监控/告警系统中使用到的智能算法降噪方案。
常见监控/告警管理系统中的智能降噪方案
一、Moogsoft
Moogsoft提供了一个关联引擎(Correlation Engine)来将相似的告警合并为一个事件(Incident)
其算法总体流程如下:
- (可选) 用户选择告警内容中的一组指定字段,并且为这一组或每个字段分别配置相似度阈值;
- 告警触发后,如果是首次触发,则直接发送告警通知;
- 如果不是首次,则将该告警的指定字段值与历史告警的指定字段值计算相似度,如果相似度高于用户设定的阈值,则认定为重复告警,自动静默该告警。
- 如果用户不配置特定字段。使用告警的全文本来进行相似度计算。
通过上述流程,相似的告警在一定的时间窗口内将被聚合为一个告警事件(Incident),从而达到减少重复告警数量(降噪)的效果。
二、Azure Monitor
Azure Monitor在其告警管理模块提供了一个智能组的功能,用于进行告警的智能降噪。其官网描述如下:
“智能组是使用机器学习算法自动创建的,用于将表示单个问题的相关警报组合在一起。 某个告警触发后,智能组会根据历史模式、相似属性和相似结构等信息,将其添加到新智能组或现有智能组。同一个智能组的告警,在一定时间窗口内,不会被重复通知。 ”
其主要的智能降噪方法有2种:
- 计算告警之间的相似度,包含:
- 文本相似性
- 告警结构相似性
- 挖掘历史告警数据中的共现关系,对告警进行合并。
相似的告警或在历史数据中频繁共现的告警,将被分配到一个智能组之中。对于对警报进行故障排除的人员来说,智能组不仅可以通过将相关警报作为单个聚合单元进行管理来降低噪音,还可以引导他们找到其警报的可能共同根本原因。
下面是Azure Monitor智能组的一个例子:
- 如果某个订阅中多个虚拟机上的 % CPU 同时达到峰值导致生成许多单独的警报,并且如果此类警报在过去的任何时间一起发生,则这些警报可能会被分组到一个智能组中,从而表明存在潜在的共同根本原因。
三、PagerDuty
PagerDuty中的事件智能组件(PagerDuty Event Intelligence),通过内置的自适应机器学习算法,可以有效地降低告警噪声,让开发运维人员专注在处理重要事件上,避免无意义的告警风暴。
其智能降噪算法的核心是一个支持用户反馈的自适应机器学习模型,该学习模型主要由两部分组成:
- 文本相似度模型
- 利用告警的标题、内容、触发时间等文本信息,计算两个告警的相似度
- 该模型将在冷启动(即缺少历史告警数据和用户行为数据)时,承担大部分的工作。
- 分类模型
- 利用历史告警数据的合并/静默行为,训练出的分类模型。
- 用户在使用过程中,可以手动对告警智能合并的结果进行打标,标注合并错误或正确,这样的行为会持续改进该分类模型
上述两个模型会通过动态权重进行合并训练,得到一个统一的模型。在初始阶段,由于缺少告警数据和用户行为数据,更多的程度上是文本相似度模型在发挥更大作用。随着告警数据不断的产生以及用户持续的对智能降噪的结果进行反馈,该模型会自适应地进行训练,提高分类模型在整个模型中的权重,使该模型的智能降噪结果更贴近去用户行为。
四、Cloud Alert (睿象云)
Cloud Alert(原OneAlert,下面简称CA)通过积累各行各业2亿条原始告警,3GB告警专业特色词库以及230万条告警人工标注,并利用机器学习算法进行模型的在线训练和迭代,为告警降噪提供了智能算法支撑。总结来说,主要提供两种降噪算法:
- 仿阅读智能算法:
- 告警全文本预处理:基于CA打造的告警专业特色词/停用词库,数据字典,人工标注信息等,对告警全文本分词处理等;
- 基于CA内置的分类等算法,对告警进行自动标注分类信息。
- 对于新触发的告警,利用其分类信息,判断新触发的告警是否已存在同类告警,如果存在,则静默该告警,避免重复发送。
- 高聚合智能算法:
- 告警全文本预处理:与算法智能分类预处理一致,无需重复处理;
- 基于CA内置聚类等算法,提取告警关键特征信息,对告警进行算法聚类,将关键特征信息与聚类结果关联。
- 对于新触发的告警,如果与已有告警属于同一聚类,则将其静默,避免重复发送。
下图是其聚类效果截图:
五、其他监控/告警管理系统
其他常见的监控/告警管理系统,如AWS CloudWatch、AlertManager等,只是提供了基于自定义规则的降噪方案,并未提供相关智能算法降噪方案。
总结
对于监控系统的运维人员来说,告警的降噪与分组不仅可以将相关告警作为单个聚合单元进行管理来降低噪音,还可以引导他们找到告警的可能共同的根本原因。
然而现实环境总是十分复杂的,作为运维人员,往往很难确定如何按照某种固定的规则去对告警进行合并、降噪,即使设置了比较合理的合并降噪规则,现实场景下也有可能出现意想不到的告警风暴。
智能告警降噪算法,可以在最小化用户配置成本的同时,通过智能的机器学习算法,自动化地去学习告警之间的关联或相似关系,同时接受用户的反馈,去进一步优化学习模型,达到贴合用户行为的智能降噪效果。