一种基于社区检测的运维告警场景生成方法与流程

文档序号:21463260发布日期:2020-07-14 16:45阅读:395来源:国知局
一种基于社区检测的运维告警场景生成方法与流程

本发明属于计算机技术领域,具体涉及一种基于社区检测的运维告警场景生成方法



背景技术:

近年来,在运维领域数据驱动算法通过对告警事件分析来定位硬件、网络等系统故障的方法,得到了广泛的关注。在it基础设施中,告警事件的数量可能是无限多的,但是告警事件之间可能存在连锁反应,其他的告警事件都是由某一个关键告警事件引起的。比如,网络基础结构的核心组件(交换机)发生故障并断开连接,则它将影响许多其他与其互连的组件,这些组件会在相近的时间发送告警事件。

本发明利用矩阵和图之间的类别等价性,将时间相似性的聚类转化为图划分问题,运用社区检测louvain算法将具有因果关系的告警事件聚类到同一个场景中。在大规模日志或告警数据中,将相互关联具有因果关系的内容划分到一起生成场景,帮助运维人员快速诊断与排障。



技术实现要素:

本发明的目的在提供一种基于社区检测的运维告警场景生成方法,将具有因果关系的告警事件聚类到同一个场景中,运维人员可以观察该场景中的告警事件,定位导致该场景出现的根本原因。所述方法包括如下步骤:

第一步:设置前提

某个组件发生错误时,与其相连的组件同样也会报错,具有因果关系的告警事件总是相伴随发生;

第二步:定义基本参数

tolerance:时间间隔,两个告警事件发生的时间间隔在tolerance以内时,算是有相关联的告警事件,用于告警模板特征矩阵生成;

threshold:相似度阈值,计算两个告警模板下包含告警事件的相似度,大于阈值时两个告警模板相似,否则不相似,用于告警模板相似度矩阵生成;

numcontain:场景中包含的告警模板的最少数量,场景中包含的告警模板数量大于numcontain时保留该场景,否则丢弃,用于场景过滤;

support:支持度,告警模板中包含告警事件的个数,小于支持度时该告警模板不参与场景的生成;

第三步:数据预处理

对原始的告警事件利用日志聚类算法,进行提取模板,返回每个告警事件所属的模板id;

第四步:拓扑划分

用户提供主机拓扑关系图时,将处理后的告警事件根据拓扑关系划分数据集,进而在每个子数据集上利用场景生成方法生成场景,否则在整个数据集上进行场景生成;

第五步:生成两个告警模板之间的特征矩阵

将告警事件按照所属的模板id进行分组,利用滑动窗口机制构造每对告警模板之间特征矩阵;

第六步:构造告警模板相似度矩阵

构造告警模板相似度矩阵m|a|*|a|,|a|表示告警模板的数量,矩阵中的值mij用下面计算公式计算:

jaccard(ai,aj)为两个告警模板的特征矩阵的jaccard相似度;

此外,当mij=0时,进一步判断是否满足下列公式:

若满足则mij=1;其中maxlen代表大的告警模板中包含告警事件的个数;满足上式说明两个告警模板中的告警事件总是伴随着发生,但是有一个告警模板中的告警事件发生的次数多,导致两个模板之间的jaccard相似度达不到阈值;

第七步:将告警模板相似度矩阵转化为图结构

将告警模板相似度矩阵转化为图结构,图中的顶点为告警模板id,两个告警模板i与j,mij=1时,它们之间存在边相连;

第八步:运用社区检测louvain算法将相关联的告警聚类到同一场景

在图结构上利用louvain算法进行社区划分,引入模块度q的概念,用来评价社区结构划分的质量,模块度越大则表明社区划分效果越好,公式如下:

现在假设有x个节点,每个节点代表一个输入,并且已经将这些输入划分为n个社区,节点之间共有m个连接,v和w是x中的任意两个节点,a为邻接矩阵,当这两个节点直接相连时avw=1,否则avw=0;kv=∑wavw是节点v的度,从一个节点出发有几条边,这个节点的度是多少;cv表示节点v所在的社区,2m实际就是整个图中的度,δ(cvcw)用来判断节点v和w是否在同一个社区,在同一个社区δ(cvcw)=1,否则δ(cvcw)=0;运用社区检测louvain算法,将相关联的告警聚类到一起,形成同一场景;

第九步:场景过滤

将社区划分的结果进一步进行过滤,社区中包含的告警模板个数达到阈值numcontain时,该社区成为一个场景,否则丢弃该社区;

第十步:场景验证

在真实的告警数据集上验证生成场景捕获和聚集因果相关告警的效能。

优选的,在所述第三步中,日志聚类算法包括logclusters算法、基于倒排表的日志聚类算法等。

优选的,在所述第八步中,louvain算法流程包括如下步骤:

step1:将图中的每个节点看成一个独立的社区,社区的数目与节点个数相同;

step2:对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化δq,并记录δq最大的那个邻居节点,如果maxδq>0,则把节点i分配δq最大的那个邻居节点所在的社区,否则保持不变;

step3:重复step2,直到所有节点的所属社区不再变化;

step4:对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边权重转化为新节点间的边权重,是两个社区之间各边的权重总和;

step5:重复step1直到整个图的模块度不再发生变化。

附图说明

图1一种基于社区检测的运维告警场景生成方法示意图;

图2告警场景生成原理示例图;

图3社区检测louvain算法流程示意图。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步详细的说明。

参见附图1所示,一种基于社区检测的运维告警场景生成方法包括如下步骤:

第一步:设置前提

是当某个组件发生错误时,与其相连的组件同样也会报错,具有因果关系的告警事件总是相伴随发生。如图2中给出5种不同的告警模板,每个告警模板下包含个数不等的告警事件,如告警模板1下面包含4个告警事件,告警模板2下面包含3个告警事件。每一行中的符号表示告警事件以及告警事件的发生时间。从图中可以看出告警模板1、3、5下面包含的告警事件几乎总是同时发生;告警模板2、4下面的告警事件总是相伴发生。假设存在2个场景,场景1包含告警模板1、3、5;场景2包含告警模板2、4。

第二步:定义基本参数

tolerance:时间间隔,即两个告警事件发生的时间间隔在tolerance以内,算是有相关联的告警事件,用于告警模板特征矩阵生成;

threshold:相似度阈值,计算两个告警模板下包含告警事件的的相似度,若大于阈值则两个告警模板相似,否则不相似,用于告警模板相似度矩阵生成;

numcontain:场景中包含的告警模板的最少数量,若场景中包含的告警模板数量大于numcontain则保留该场景,否则丢弃,用于场景过滤;

support:支持度,告警模板中包含告警事件的个数,若小于支持度,则该告警模板不参与场景的生成;

第三步:数据预处理

首先对原始的告警事件,利用日志聚类算法,如logclusters算法、基于倒排表的日志聚类算法等,进行提取模板,返回每个告警事件所属的模板id。

第四步:拓扑划分

若用户有提供的主机拓扑关系图,则将处理后的告警事件根据拓扑关系划分数据集,进而在每个子数据集上利用场景生成方法生成场景,否则在整个数据集上进行场景生成。

第五步:生成两个告警模板之间的特征矩阵

将告警事件按照所属的模板id进行分组,利用滑动窗口机制构造每对告警模板之间特征矩阵。如:参数tolerance=2,假设告警模板1下包含的告警事件发生的时刻为[1,6,9],告警模板2下面包含的告警事件发生的时刻为[5,10,15],则这两个告警模板之间的特征矩阵为:

第六步:构造告警模板相似度矩阵

构造告警模板相似度矩阵m|a|*|a|,|a|表示告警模板的数量。矩阵中的值mij用下面计算公式计算:

jaccard(ai,aj)为两个告警模板的特征矩阵的jaccard相似度;

此外,当mij=0时,进一步判断是否满足下列公式:

若满足则mij=1。其中maxlen代表大的告警模板中包含告警事件的个数。满足上式说明两个告警模板中的告警事件总是伴随着发生,但是有一个告警模板中的告警事件发生的次数多,导致两个模板之间的jaccard相似度达不到阈值。

第七步:将告警模板相似度矩阵转化为图结构

将告警模板相似度矩阵转化为图结构,图中的顶点为告警模板id,两个告警模板i与j,若mij=1,则它们之间存在边相连;

第八步:在图结构上运用社区检测louvain算法,将相关联的告警聚类到同一场景

在图结构上利用louvain算法进行社区划分,引入了模块度q的概念,用来评价社区结构划分的质量,模块度越大则表明社区划分效果越好。形式如下:

现在假设有x个节点,每个节点代表一个输入,并且已经将这些输入划分为n个社区,节点之间共有m个连接,v和w是x中的任意两个节点,a为邻接矩阵,当这两个节点直接相连时avw=1,否则avw=0。kv=∑wavw是节点v的度,从一个节点出发有几条边,就说这个节点的度是多少;cv表示节点v所在的社区,2m实际就是整个图中的度,δ(cvcw,)用来判断节点v和w是否在同一个社区,在同一个社区δ(cvcw,)=1,否则δ(cvcw)=0。

如图3所示,louvain算法包括如下步骤:

step1:将图中的每个节点看成一个独立的社区,社区的数目与节点个数相同;

step2:对每个节点i,依次尝试把节点i分配到其每个邻居节点所在的社区,计算分配前与分配后的模块度变化δq,并记录δq最大的那个邻居节点,如果maxδq>0,则把节点i分配δq最大的那个邻居节点所在的社区,否则保持不变;

step3:重复step2,直到所有节点的所属社区不再变化;

step4:对图进行压缩,将所有在同一个社区的节点压缩成一个新节点,社区内节点之间的边的权重转化为新节点的环的权重,社区间的边权重转化为新节点间的边权重(两个社区之间各边的权重总和);

step5:重复step1直到整个图的模块度不再发生变化。

louvain算法能够产生层次性的社区结构,其中计算耗时较多的是最底一层的社区划分,节点按社区压缩后,将大大缩小边和节点数目,并且计算节点i分配到其邻居j时模块度的变化只与节点i、j的社区有关,与其他社区无关,因此计算很快。把节点i分配到邻居节点j所在的社区时模块度变化为:

其中ki,in是社区c内节点与节点i的边权重之和,注意对ki,in是对应边权重加起来再乘以2,因为对应两个节点。δq分了两部分,前面部分表示把节点i加入到社区c后的模块度,后一部分是节点i作为一个独立社区和社区c的模块度;

第九步:场景过滤

将社区划分的结果进一步进行过滤,如社区中包含的告警模板个数达到阈值numcontain,则该社区可以成为一个场景,否则丢弃该社区。

第十步:验证场景。

在真实告警数据集中,证明生成的场景能够有效地捕获和聚集因果相关的告警,相较于现有的场景生成方法,该方法的效率更高并且生成的场景更具合理性没有冗余场景,能够有效的帮助运维人员进行根因定位与排障,恢复设备的正常运行。

以上所述之实施例仅为本发明的较佳实施例,并非对本发明做任何形式上的限制。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,利用上述揭示的技术内容对本发明技术方案作出更多可能的变动和润饰,或修改均为本发明的等效实施例。故凡未脱离本发明技术方案的内容,依据本发明之思路所作的等同等效变化,均应涵盖于本发明的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1