必示科技2020年度告警数据挖掘方向顶会论文分享(二)
发布时间:2020-12-07 14:30:57
今天,我们继续分享必示科技在2020年发表的另外两篇顶会论文。一篇是发表于ICSE SEIP 2020的论文“Understanding and Handing Alert Storm for Online Service Systems”;另一篇是发表于ESEC/FSE 2020的论文“Real-time Incident Prediction for Online Service Systems”。
ICSE SEIP 2020:告警风暴摘要
这是发表在ICSE SEIP 2020的一篇论文,核心是对告警风暴做实时检测和摘要。也就是说,对海量告警做降噪和聚类,减少工程师需要查看的告警数量,以便快速定位问题。
一般情况下,当应用服务出现故障时,会伴随着大量的告警,告警风暴便产生了。因为告警风暴的告警数量非常大,如果运维工程师手工检查每一条告警,系统排障过程会耗费大量的时间和精力。
为了保证服务质量,处置告警风暴至关重要。论文中,我们主要回答了“告警风暴中到底发生了什么故障”“哪些告警与故障相关”“告警风暴的核心内容是什么”等问题。
那么,目前现状是什么,又遇到了哪些挑战?其一,告警风暴出现的频率很高,大约每周一次,这是运维工程师的真实痛点;其二,当前对告警风暴的识别方法,一般是人工设置固定阈值,但这种方法不能适应动态的在线服务场景;其三,告警风暴中包含一部分与故障无关的常规告警,并且许多与故障相关的告警也存在关联关系,比如说文本相关性和拓扑相关性。
我们遇到的挑战在于:固定阈值的告警风暴检测方法表现不好,混杂在故障中的不相关告警影响排障,需要做告警降噪,告警之间复杂的关联关系也需要建模来精炼。
我们的论文工作包括告警风暴检测和告警风暴摘要两大部分。
第一部分告警风暴检测,需要知道什么时间发生了告警风暴。其实监控的是告警数量,将告警风暴检测转化为一个突变点检测,使用EVT去自适应准确检测告警风暴。下图中右上角的曲线表示每天告警产生的数量,可以自动检测到告警数量的突增情况。
第二部分,告警风暴摘要。准确检测到告警风暴发生后,需要做三个步骤:基于学习的告警降噪,将告警风暴中与此次故障无关的告警全部删除;差异化的告警聚类,总结告警里有多少告警簇;代表性告警选择,在每一个簇找到代表性的告警选择,减少工程师看的数量。最终的目的是通过告警风暴摘要,选取出与故障相关的告警集合,并且这些告警能够从多方面反映故障。
下图是告警风暴里面的一些告警,告警降噪会去掉无关的告警,告警聚类对它们进行分类,针对每一个簇选择有代表性的告警。最后,成百上千个告警只呈现出几个告警,极大加快了运维的排障效率。
下面详细介绍告警风暴摘要的三个步骤。
步骤一:基于机器学习的告警降噪。我们将它定义成异常检测的问题,这是比较巧妙的做法。因为故障不常发生,经常发生的告警和这次故障没有关系。经常发生的告警有点像我们在异常检测里定义的日常情况,而不经常发生的罕见告警有点像我们定义的异常情况。我们使用isolation forest方式检测到的罕见告警,更有可能和故障相关。这一过程中,我们对告警进行了很多属性提取和特征统计。
步骤二:经过告警降噪过滤后,剩下的告警去做告警聚类,这里我们使用了DBSCAN聚类方法。对聚类的度量,也就是相似性度量,我们考虑了文本相似性和拓扑相关性。文本相似性使用了Jaccard距离;拓扑相关性方面,定义了软件层面和硬件部署层面两种拓扑,使用它们相连的最短路径去刻画拓扑相关性。
步骤三:有了告警相关性,我们使用聚类方法得到告警的类,每一类均代表对故障的描述,选择一个聚类中心来作为代表性的告警。
我们在真实环境中166个告警风暴案例上做了测试,可以发现:从检测方面来看,极值理论的告警风暴检测比固定阈值方法要好;从摘要的方向来看,告警摘要算法能显著减少工程师需要查看的告警数量,并且推荐的告警与故障相关的准确率达到75%,极大缩小了查看的范围,有助于经验聚焦得到有意义的告警。
为什么选择isolation forest?为什么选择DBSCAN?通过对比一些常见的聚类方法、异常检测方法,可以发现我们选择的方法比现有方法都好。
ESEC/FSE 2020:基于告警的事件预测
这篇论文核心在于用历史低级别告警去预测和故障相关的高级别告警,并提供可解释的预测分析。
告警数据是一个比较完全或者积累数据比较多、信息量比较大的数据集,在一个和故障相关的表象告警发生时,底层很多组件都会有低级别的告警情况发生。能不能把这些信息、征兆利用起来去做预测?我们论文就是去解决这个问题。
我们将事件预测定义为一个窗口分类的问题,即在当前时刻t,拿过去一段历史告警数据(观测窗口),基于窗口内的告警数据去提取特征,来预测未来一段时间(预测窗口)会不会出现某个事件。这其实是对预测窗口的分类。
为什么中间有修复时间?这就是故障预测常提到的Leading-Time,留给工程师足够的时间做修复措施,来避免事件的发生。对1分钟后出问题的故障进行预测毫无意义,我们要预测的比如20分钟之后出问题,而这20分钟足够管理员去重启机器,或者做止损措施。我们把它定义成了这样的数学模型。
下图是整体的方法,通过历史告警数据和事件的标签得到训练数据,再进行特征抽取和特征聚合,完成后利用分类器建立模型对在线数据进行预测。最后加上可解释分析。因为我告诉你未来要发生故障,但是不告诉原因,大家就很难操作。对于该做什么、怎么相信,我们给出了可解释分析的结果。
具体来说,在特征提取部分,我们主要融合文本特征和统计特征。对观测窗口内的告警数据的文本,通过LDA主题模型提取文本的潜在语义特征,并且加入窗口内所有告警数量、窗口时间、告警间隔时间等其他统计特征。
在特征聚合部分,为什么要借助多示例学习MIL思想?实际场景中,不是所有的告警都有助于事件预测,有征兆的告警可能被淹没在大量的噪声告警中,进而导致预测效果不好,这也是不能在特征提取后就做模型预测的原因。为了避免噪声告警带来的影响,我们采用了多示例学习的思想,在聚合过程中去弱化噪音告警的权重,增强征兆告警的权重,以此来避免噪声告警对预测告警的干扰。
最后,我们使用LIME对每次的预测结果给出可解释分析,告诉工程师哪些特征对事件发生起到的作用最大,那么这些特征有可能和事件根因有关,帮助工程师主动采取措施来规避故障。
此次我们分享的三篇论文主要是解决故障处置、智能故障分析方向上的痛点。这里再总结下:
第一篇论文“自适应的告警动态定级”,提出了基于排序模型的告警动态定级算法,基于多特征融合,设计并从多源数据中提取了多种特征,用于表征告警的严重性。
第二篇论文“告警风暴摘要”,聚焦在告警风暴这一运维问题当中,提出了用动态剧变点检测方法准确检测告警风暴,并提出一套有效的告警风暴摘要算法,包括噪声告警过滤、告警聚类和典型告警选择。
第三篇论文“基于告警的事件预测”,我们采用了多示例学习的思想,去解决噪声告警对预测的干扰,基于有监督的分类算法构建了事件预测模型,提供可解释的结果去方便工程师主动采取措施规避故障。
学术内容介绍到这里,谢谢大家!