智能运维之告警聚合技术介绍

网络运维的告警风暴挑战

随着云计算、大数据、物联网等技术的快速发展,IT基础设施开始云化、应用运行环境容器化、系统架构开始微服务化,新的IT系统规模不断扩大升级,每天都可能产生海量的数据,这使得运维工作量越来越大,运维管理难度也越来越高。
告警,是运维人员了解系统运行状况的重要途径,是一种常见的信息来源,运维人员通过分析告警消息能及时准确的定位故障,但是在当下大型复杂的IT系统下,设备数量动辄成千上万、应用系统紧密相连,任何一个小小的IT问题都有可能引发一场告警风暴(告警风暴是指短时间内系统产生大量告警),这些告警有的是由于某种共同因素引发,互相之间存在一定关联。大量同一事故源引发的告警信息会极大地干扰运维人员的工作,导致运维人员疲于应付大量的告警消息,耗费更多时间排查和处理问题,大大降低了运维效率。更为严重的是,真正关键的告警信息可能淹没其中,运维人员无法第一时间发现根源问题,延误了故障处理时间。研究调查表明,85%的运维团队都曾错失过极为严重的告警事件,并且99%的人都承认,遗漏掉的告警对他们的业务发展有着潜在且巨大的风险。丢失掉的告警往往会引发一系列的问题,处理不掉就会很容易造成停工懈怠,而此类问题会急速地降低用户体验,大幅度缩减企业收益,甚至导致企业面对更大的商业威胁。所以,如何处理告警风暴,是当前运维工作中的一大挑战。
处理告警风暴,要解决的问题主要有两大类。第一类问题就是告警触发条件不同,故障通知准确度低。通常情况下,监控系统会设置不同的告警触发条件,比如设置一个较低的CPU利用率告警阈值,告警的产生并不一定代表系统已经出现故障,也可能是对故障的预警。尽管这种预警机制有其存在的必要性,但不合理的告警触发条件很容易使系统产生大量的无用信息;另外一类问题是告警原因不明确,故障分析难度大,绝大部分告警只有对应故障的设备名称、告警产生时间、故障现象等信息,并没有产生故障根本原因的明确说明,甚至可能隐藏在告警风暴中,这加剧了分析故障的难度,所以需要一种方法对告警进行有效的梳理。
使用告警聚合技术就能有效解决上述面临的问题。告警聚合可以简单地理解为对系统中的原始告警进行分析,并将具有相关性的告警聚合合并的这样一个过程,聚合后的告警通常称为Incident。告警聚合可采用的方法有很多,实际运用中,即使使用同一个聚合方法,实现方式也是可以各种各样的,比如使用不同的算法、算法输入使用不同的告警特征等。 下面就业界常用的几种聚合方法作如下介绍。

告警聚合技术介绍

去重聚合

去重是一种最简单的告警聚合方式,将大量重复的告警合并为一条。去重的关键措施是定义重复判断的关键属性,结合时间窗的范围限定来做计算。比如监控系统对网络中的设备轮询,如果设备通讯异常,那么监控系统每次轮询都可能会产生一条告警,长时间累积的话,系统中就会产生大量重复告警,如果每收到一条告警都对其进行转发和处理,会有大量的重复工作,所以去重聚合是最基础的也是必备的一种聚合方式。

基于规则的告警聚合

不同的告警之间或者同一种告警但所含信息不同的告警之间可能是存在一定关联的,比如,由于设备故障导致监控系统检测不到该设备时,系统会发出设备不可达的告警,同时会导致设备上的应用出现可达性的故障告警,这两个看似完全不同的告警,却属于同一种应用场景,具备一定的相关性。所以基于告警之间的这种相关性,可以将不同的告警聚合在一起。
基于规则的聚合比较适合故障特征明显、聚合需求明确或者是故障场景明确的情况,被聚合的告警或是由于业务之间的相互依赖、相互影响,或者是物理空间上的相互关联,他们之间的故障关系是确定的,那么就可以通过当前这种方式。基于规则的告警聚合实现方式是先建立告警之间的关联规则,然后系统根据规则在每个时间窗内去进行分析和聚合。如图1所示,设备板卡故障/拔出会产生板卡故障告警,这个故障可能会导致产生设备Underlay链路下线告警、设备Overlay链路下线告警、子卡对应告警等,那么就可以通过告警源或者设备IP相等的关系来创建这种几种告警之间的聚合规则,规则建立之后,系统一旦出现满足此规则的告警,系统就会对这些告警聚合。
智能运维之告警聚合技术介绍_第1张图片

图1 告警关系图

告警关联规则的建立主要依赖告警信息,可用的告警信息分为两种:一种是告警直接属性,另一种是渲染属性。直接属性一般是指告警的原生属性,比如告警源、告警名称、告警级别、告警描述、产生时间、持续时间、告警类型、告警参数等;渲染属性一般是经过再计算的属性,目的是为了丰富告警信息,比如从CMDB拉取关联的属性、对告警某个属性提取转换、计算告警的信息熵等。
基于规则的告警聚合的优点是配置足够灵活,运维人员可根据自己的实际需求配制出特定的规则,同时这种方法更易于理解和实现,规则的建立可以理解为故障场景用新的“语义”去直译表达,同时基于规则的聚合结果准确度高,因为这种规则配置更偏向于是一种以结果为导向的配置。当然,优点也可能成为缺点,基于规则的聚合由于足够灵活,所以配置复杂,同时不同的故障场景可能需要配置不同的规则,并且需要一定的运维知识来提炼和构建故障场景,聚合规则多不易维护,新增故障场景需要新增规则适配,所以适应性差。

基于文本相似度的告警聚合

不同的告警信息之间可能存在一定的相似性,这种相似性一方面可能表现在文本描述中,即来自于同一系统的告警消息往往遵循几个特定的模板格式,这使得同一模板下的不同告警信息可能存在一定的文本相似性。另一方面也可能表现在所包含的信息中,比如某些告警信息可能都在描述某个特定程序或机器的运行情况,这些不同告警之间也存在一定的信息相似性。基于这种相似性,我们可以将海量的告警消息合并为多个集合,再分别处理。
基于文本相似度的告警聚合主要使用一些数据挖掘技术,通过聚类算法进行聚合。类似这样的聚类算法有:DBCAN、K-MEAN等。基于相似度的告警聚合主要通过比较告警之间某个特征属性的相似度来进行聚合,相似度一般用[0,1]区间的小数来表示。文本相似度计算方法有2个关键步骤,即文本表示模型和相似度度量方法。文本表示模型负责将文本表示为计算机可以计算的数值向量,也就是提供特征,这一步其实就是从告警实体提取特征。相似度度量方法负责基于从文本表示模型得到的数值向量计算文本之间的相似度。从文本表示模型和相似度度量方法中选择合适的方法,就可以组合出一个文本相似度计算方案。首先文本表示模型需要考虑文本切分粒度和特征构建方法,文本切分可使用原始字符串、n-gram模型、分词、句法分析、主题模型、词袋模型等,特征构建方法有TF、TF-IDF、句向量、词向量、Simhash等,相似度计算方法有:最小编辑距离、欧氏距离、余弦距离、杰卡德相似系数(Jaccard Index)、海明距离、分类器等。
基于文本相似度告警聚合方式的优点是无需针对不同的场景和条件配置不同的规则,对运维领域知识要求低,能降低聚合规则条数,同时它适应新场景能力强,新增故障实例不需要额外再配置新的聚合规则,属于智能聚合。缺点是算法配置有难度,比如相似度聚类的条件配置一般要配置相似度阈值,阈值的设置需要持续的测试调整和经验积累。

基于时序的告警聚合

基于时序的告警聚合是站在时间维度来分析告警之间的相关性。由于来源于同一故障的告警通常在时序上是相邻的,会在同一个时间窗内同时出现,那么,就可以通过基于多个告警的时序关联性,来对告警进行聚合,反映出不同的告警在时间维度上的相关性,若两个告警的时序关联性越大,表明两个告警关联程度越强,它们同时出现或几乎同时出现的概率越大。实现方式上,比如在设定时间窗口内,找出各个告警发生时间的时间差关系,并利用这种关系构造任一告警与其他告警之间新的关系向量,找出向量之间的相似度进行有效聚类。效果如图2所示:
智能运维之告警聚合技术介绍_第2张图片

图2 基于时序的告警聚合效果图

基于拓扑的告警聚合

基于拓扑的告警聚合是以空间维度来分析告警的,通过结合拓扑的相关性来分析告警之间的相关性,进而聚合相关性较高的告警。

基于知识库的告警聚合

基于知识库的告警聚合主要依赖专家知识,通过领域专家整理、总结场景,系统再把这些知识预定义到系统的分析模块中,从而作为系统的知识库。此种方式无需用户配置、聚合准确度高,根因告警明确,难点就是知识本身的提取。

总结

以上介绍了当前业内会用到的一些告警聚合方法,每种方法都有自己的特点,方法选型时应该以需求为出发点,选择最适合的才是最好的。不管使用哪种方式,告警聚合最终目的是对告警进行降噪、使运维人员快速聚焦问题、快速排障,提高系统的故障响应度。目前新华三AD-NET产品中也采用了告警聚合技术,同样达到了预期的效果,同时新华三一直持续对产品进行演进升级,致力于提供更好的网络智能运维解决方案,给企业带来更好的体验和价值。

你可能感兴趣的:(网络,运维,运维)