更新时间:2022-07-02 04:04:24
运维监控系统/平台,一般是通过配置固定阈值或条件,达到阈值或满足特定条件后自动触发/生成告警。如网络中断、闪断、系统升级更新等。在设备多、监控内容多等情况下,可能会产生海量告警。以下为告警管理常见问题:
在监控场景下,一旦出现告警风暴,告警本身就失去了意义和价值。因此需要有一套方案,帮助用户在不遗漏重要告警前提下,有效减少告警数量。
如果把监控告警放到机器学习领域,它是一个典型的机器学习回归问题,是一个牺牲准确率,满足召回率的场景,即宁可多报、误报,也不遗漏告警。而告警降噪的目的就是在保证所有重要告警成功报出的前提下,尽量减少重复、无意义的告警(噪音)。换言之,是保证告警召回率接近 100%的前提下,尽量提升准确率(有意义、不重复的告警)。
告警降噪主要有三种机制:
前两种降噪机制需要用户手工配置规则和参数,第三种智能算法降噪则不需要用户过多的配置。
本文主要调研了业界常见的监控/告警系统中使用到的智能算法降噪方案。
Moogsoft提供了一个关联引擎(Correlation Engine)来将相似的告警合并为一个事件(Incident)
其算法总体流程如下:
通过上述流程,相似的告警在一定的时间窗口内将被聚合为一个告警事件(Incident),从而达到减少重复告警数量(降噪)的效果。
Azure Monitor在其告警管理模块提供了一个智能组的功能,用于进行告警的智能降噪。其官网描述如下:
“智能组是使用机器学习算法自动创建的,用于将表示单个问题的相关警报组合在一起。 某个告警触发后,智能组会根据历史模式、相似属性和相似结构等信息,将其添加到新智能组或现有智能组。同一个智能组的告警,在一定时间窗口内,不会被重复通知。 ”
其主要的智能降噪方法有2种:
相似的告警或在历史数据中频繁共现的告警,将被分配到一个智能组之中。对于对警报进行故障排除的人员来说,智能组不仅可以通过将相关警报作为单个聚合单元进行管理来降低噪音,还可以引导他们找到其警报的可能共同根本原因。
下面是Azure Monitor智能组的一个例子:
PagerDuty中的事件智能组件(PagerDuty Event Intelligence),通过内置的自适应机器学习算法,可以有效地降低告警噪声,让开发运维人员专注在处理重要事件上,避免无意义的告警风暴。
其智能降噪算法的核心是一个支持用户反馈的自适应机器学习模型,该学习模型主要由两部分组成:
上述两个模型会通过动态权重进行合并训练,得到一个统一的模型。在初始阶段,由于缺少告警数据和用户行为数据,更多的程度上是文本相似度模型在发挥更大作用。随着告警数据不断的产生以及用户持续的对智能降噪的结果进行反馈,该模型会自适应地进行训练,提高分类模型在整个模型中的权重,使该模型的智能降噪结果更贴近去用户行为。
Cloud Alert(原OneAlert,下面简称CA)通过积累各行各业2亿条原始告警,3GB告警专业特色词库以及230万条告警人工标注,并利用机器学习算法进行模型的在线训练和迭代,为告警降噪提供了智能算法支撑。总结来说,主要提供两种降噪算法:
下图是其聚类效果截图:
其他常见的监控/告警管理系统,如AWS CloudWatch、AlertManager等,只是提供了基于自定义规则的降噪方案,并未提供相关智能算法降噪方案。
对于监控系统的运维人员来说,告警的降噪与分组不仅可以将相关告警作为单个聚合单元进行管理来降低噪音,还可以引导他们找到告警的可能共同的根本原因。
然而现实环境总是十分复杂的,作为运维人员,往往很难确定如何按照某种固定的规则去对告警进行合并、降噪,即使设置了比较合理的合并降噪规则,现实场景下也有可能出现意想不到的告警风暴。
智能告警降噪算法,可以在最小化用户配置成本的同时,通过智能的机器学习算法,自动化地去学习告警之间的关联或相似关系,同时接受用户的反馈,去进一步优化学习模型,达到贴合用户行为的智能降噪效果。