背景
AIOps,即 Artificial Intelligence for IT Operations,智能运维。随着智能化时代的快速发展,企业内服务系统的数量不断增加,系统之间的关系也越来越复杂。如图,在传统运维方式中,运维工程师难以快速准确地对海量告警做出正确判断,导致服务停滞,并造成不可逆的损失。在AIOps智能运维下,智能化的判断告警故障定位非常值得深入探索。
下面对告警的常见问题做简单概括:
告警是什么?
告警是运维软硬件发生特定事件后的事件通报;通过监控中心进行实时监控,并对告警事件进行采集存储。
为什么需要告警规约和故障定位?
当发生告警风暴时,传统运维工作需要对每条告警进行分析,运维工作量很大。因此,采用AIOps方法能大量减轻运维工程师的工作量。AIOps采用算法思想智能化的实现告警压缩和故障定位。
如何做到告警规约和故障定位?
基于以上问题,我们设计了一套关于告警事件的分析方案,包括了采集告警数据、提取告警关联规则、告警故障定位。该分析方案可以更实时、快速且准确的定位告警源,接下来将具体介绍一下我们的分析方案。
分析方案
该分析方案是主要分为离线学习和在线分析两个过程,目的是为了提取告警关联规则,实现告警压缩和告警故障定位。如图所示:
离线学习
离线学习是通过历史告警数据获取告警事件间的关联关系,并通过规约算法消除关联的噪声告警,划分出具有强关联的告警分组。
历史告警:获取各监控设备上的历史告警数据,主要包含有时间、设备型号、告警标题、告警对象等有效属性。
规范化:对获取到的原始告警数据进行规范化处理如清除脏数据、分词等;对不同的告警事件进行编码,如将“XXX的CPU发生告警,CPU使用率达到90%”设为A1。
告警分段:将告警事件进行划分处理,把告警事件划分至一个时间窗口内;由于告警事件发生的告警关键内容具有较大相似性,需要在时间分段基础上计算本文相似度,对场景进行分段。
关联挖掘:采用告警上下文关联和告警内容关联两者结合挖掘告警事件的关联关系,此挖掘步骤可获得告警事件两两之间的拓扑关系。
社区划分:社区划分的算法有很多,常见的有LPA、Louvain、Infomap等算法。在告警场景中,相比其他两种算法, Louvain算法能更有效地对告警事件分组划分。
在线分析
在线分析是对实时告警事件进行分析,与离线学习的数据处理过程一致,也是根据时序和文本相似度进行分段,再对离线学习结果进行关联压缩,最后以关联规约后的压缩集合为单位,将得到的告警根因结果反馈给运维工程师。
数据处理:在线分析过程中,数据处理与离线学习一致,都是将实时告警数据进行规范化、按告警发生时间和告警内容分段等。
社区匹配:将处理后的告警事件与离线学习的结果进行社区匹配,若匹配成功,则将该告警事件划分至该社区内;若匹配失败,则将该告警事件与经过离线学习后的告警事件进行文本相似度计算,取文本相似度最大的告警所在的社区作为该告警事件的社区。
故障定位:对所有强关联的告警社区进行故障定位,本文根据告警事件的业务情况采用改进的PageRank算法故障定位。
结果反馈:运维工程师可获取经算法推荐的告警根因,对每次实时发生的告警事件,获取其根本原因。
模拟分析实验
获取嘉为蓝鲸统一告警中心的数据进行模拟分析,实现过程参考下图:
根据嘉为蓝鲸统一告警中心的数据分析,得到以下结论:
总体数据量约为20w,总告警数有148,独立告警数25,有效告警数123,有效告警被划分成13个小组,每小组内包含一个告警根因。
告警压缩率约为91.2%。
告警丢失率约为16.9%。
每秒可实时推断约1000条告警事件的根因故障。
总结
本文主要是探索了告警事件的压缩与定位的分析方案,它能提高运维工程师的工作效率、能压缩告警的数据量、能基本实现自动化的网络运维。方案中可能存在如告警关系不够全面、关键阈值的设定依赖专家经验等有待改进的点,欢迎大家一起探讨优化。