AIOps探索 | 如何实现相似事件识别

2024-01-26 09:52

本文主要是介绍AIOps探索 | 如何实现相似事件识别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是事件

关联引擎将一组相关的告警聚集到一起生成的事件(incident)。其目的是在逻辑上将告警工作台上杂乱无章的告警按不同的使用场景分为多个分组,以便将描述同一个问题的相关告警或有关联关系的告警分组到一起进行集中处置,而不需要将无关的噪音放到同一工作台上对事件管理员造成过多的干扰。

有了事件之后,可以按不同的目标将告警关联到一起生成事件,如:

1.应用管理员:希望将同一应用系统所产生的业务层、应用层、数据库层的告警分组到一起,以便更好地感知事件的详细上下文信息,加速排障过程。

2.数据库管理员:希望将不同业务系统的数据库集群所产生的告警,按应用系统分组成不同的告警,以集中处理集群的问题,而非一个个独立主机的不同告警。

3.devops工程师:希望将endpoints的不同告警分组到一起,如cusLogin1.0、cusLogin1.1,都属于用户登录服务,分属于不同的版本,但都是由同一队人共同开发和运维的,希望能够分组到一起共同进行分析处理。

二、事件同告警的主要区别

从运营数据中心提高效率和降低噪音干扰的角度来看,事件与告警存在以下主要区别:

1.Event 管理阶段:早期阶段处理来自监控系统(如apm、zabbix、prometheus)产生的各种异常信号。这些异常信号数量庞大,其中包含大量重复的内容。在处理这些信息时,面临着大量噪音和难以高效处理的问题。

2.Alert 管理阶段:集中处理各个监控系统产生的事件,进行有效去重和压缩处理。告警数量迅速减少,但仍需要处理大量告警。随着数字化转型,监控的内容越来越多,相互之间的影响和关联越来越难以管理。这导致事件管理员通常需要在告警工作台上面对大量杂乱无章的告警,花费大量精力才能手动整理这些信息。

3.Incident 管理阶段:使用告警关联的方法将涉及时间和空间关联关系的告警分组,为事件管理员提供更丰富的故障上下文。这样可以避免被太多无关的告警干扰,专注于解决具体问题。

三、为什么要识别相似事件

通过识别相似事件,可以查看过去事件管理员或运维领域专家在处理类似事件时采取的方法和步骤。参考过去相似事件的解决方案可以节省解决当前事件所需的时间。

同时,相似事件还可以揭示一些模式,这些模式表明设备、服务、应用或其他组件导致事件发生的长期问题。提供的信息可以帮助有效追踪这些事件的根源并防止将来再次发生。

四、Jaccard算法简介

Jaccard系数是一种用于衡量两个集合相似性的统计方法。计算Jaccard系数的方法是通过计算两个集合的交集元素数量除以并集元素数量来衡量它们的相似程度。Jaccard系数的取值范围是0到1,越接近于1表示两个集合越相似,越接近于0表示两个集合越不相似。

1.计算公式

J(A, B) = |A ∩ B| / |A ∪ B|

其中,A和B分别表示两个集合,|A|表示集合A的元素数量,|B|表示集合B的元素数量,|A ∩ B|表示A和B的交集元素数量,|A ∪ B|表示A和B的并集元素数量。

2.计算示例说明

假设有两个集合A和B,分别包含以下元素:

A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8}

首先计算交集元素数量:A ∩ B = {4, 5} 交集元素数量为2。

然后计算并集元素数量:A ∪ B = {1, 2, 3, 4, 5, 6, 7, 8} 并集元素数量为8。

最后,计算Jaccard系数:J(A, B) = |A ∩ B| / |A ∪ B| = 2 / 8 = 0.25

因此,集合A和集合B的Jaccard系数为0.25,表示它们的相似程度较低。

3.Jaccard算法在通用领域主要应用场景

·文本挖掘:可以用来衡量两个文档之间的相似性,本例中即是将两个事件的相关特性文本化之后,评估不同事件的特征文档相似性。

·图像分析:用于稳定两幅图像之间的相似度。

·推荐系统:可以用于衡量两个购物栏之间的相似性,然后以此信息向用户提出建议。

4.Jaccard算法在智能运维领域应用场景

相似事件识别

事件根因定位

基于事件的已知故障识别:针对已知故障,可以直接定位故障根因,并推荐自动化处置策略,可以进行手工或自动化问题解决。

告警关联生成事件:通过相似性识别来完成对告警的关联生成事件。

五.如何实现相似事件的识别

1.如何表征事件

在进行相似事件识别之前,我们先来看一下如何表征事件,只有了解事件的特征之后,才可以通过不同的方案完成事件的相似性判断。

一个事件通知由一组告警组成,以某大型国有银行“资产证券化系统”的告警关联为例,其应用架构如下所示:

应用系统通常做了如下的监控内容:

①业务层监控,应用系统可能支持一个或多个业务,或包括多个子系统,监控业务成功率、系统成功率等:

②技术组件 -服务器监控,如cpu、内存、服务器网络性能、服务器磁盘忙等

③技术组件 - 数据库,如数据库cpu、表空间不足、磁盘使用率等

④技术组件 - 应用中间件,如weblogic 的fullgc异常、jvm使用的堆栈空间百分比等

⑤技术组件 - 存储,如响应时间超时等。

⑥应用日志,如特定的数据库服务器日志、应用日志等

当该系统发生告警时,将业务层及技术组件层相关的告警按20分钟的滑动时间窗口,都会关联成为一个事件,不同的时间窗口,我们可以看到如下事件:

事件1

针对事件1,我们在进行故障处理时,通常会这样来描述该事件:

业务系统资产证券化系统出现 交易总览视图 业务成功率异常,同时 数据库 出现了cpu和磁盘忙现象,应用服务器weblogic 出现 服务器日志文件匹配错误关键字。

我们通过非常简短的一段话把整个事件中所包含5条告警的特征描述清楚了。

事件2

针对事件2,我们在进行故障处理时,通常会这样来描述该事件:

业务系统资产证券化系统 未出现业务层的告警,数据库出现了cpu和磁盘忙现象,同时 存储 出现 响应时间超时 问题。

通过对事件的描述,我们可以知道在以应用系统的视角进行关联时,alertObjectType和alertKPI两个字段是非常容易描述事件特征的,针对这些理解,我们可以将上述两个事件的特征表征如下:

  • 事件1的特征描述:db_oracle:磁盘忙 db_oracle:cpu ap_weblogic:服务器日志文件匹配到错误关键字 交易总览视图:业务成功率

  • 事件2的特征描述:db_oracle:磁盘忙 db_oracle:cpu 存储:响应时间

通过上面章节jaccard的介绍,我们可以计算:

两个事件的交集共2项,为:db_oracle:磁盘忙 db_oracle:cpu

两个事件的并集共5项,为:db_oracle:磁盘忙 db_oracle:cpu ap_weblogic:服务器日志文件匹配到错误关键字 交易总览视图:业务成功率 db_oracle:cpu 存储:响应时间

jaccard相似度计算结果为:0.4

注意:在进行生产时要注意,不要将alertObject作为特征内容。一般应用系统会以集群方式部署,我们只需要关注是否发生了数据库类的告警,而不需要知道具体是哪台服务器发生了告警。也许现在是192.168.1.1发生了告警,而下次可能是集群中的192.168.1.2发生了告警,但是对于特征来说,它们都是数据库发生的告警。

六、示例及代码实现

# jaccard相似度计算函数
def jaccard_similarity(str1, str2):
    list1 = str1.split()  # 按空格分割并转换为列表
    list2 = str2.split()  # 按空格分割并转换为列表
    # 取得两个list的交集
    intersection_list =set(list1) & set(list2)
    print(len(intersection_list))
    # 取得两个list的并集
    union_list =set(list1) | set(list2)
    print(len(union_list))

    # 计算相似度
    similarity = len(intersection_list) / len(union_list)

    return similarity

# 针对单一字符串计算相似度的方法,本例暂时用不到,后续的其它场景会用到
# 将字符串按不同的长度进行切分,字符串中出现空格时以下划线进行替换
# 示例:“Hello World”切分后为,“Hel ell llo lo_ o_W _Wo Wor orl rld"
def process_string(input_string,split_num = 3):
    result = ""
    for i in range(len(input_string)-split_num+1):
        chunk = input_string[i:i+split_num]
        chunk = chunk.replace(" ", "_")
        result += chunk
        if i + split_num < len(input_string):
            result += " "
    return result

# 示例 :
# 在这里我们仅将两个事件的特征串直接用于验证
incident_1 = 'db_oracle:磁盘忙 db_oracle:cpu ap_weblogic:服务器日志文件匹配到错误关键字 交易总览视图:业务成功率'
incident_2 = 'db_oracle:磁盘忙 db_oracle:cpu 存储:响应时间'
#str1 = process_string(str1)
#str2 = process_string(str2)

print("Jaccard相似度:", jaccard_similarity(incident_1,incident_2))

输出结果为

2 5 Jaccard相似度: 0.4

在实际的生产上进行应用时,需要实时将进入事件的告警确认其alertObjectType和alertKPI两个字段组合生成的串是否已经存在,如果不存在则加入,如果存在表明同样的问题已经发生了,不需要再重复记录。

本次分享到这里就告一段落了,如果大家对jaccard算法原理感兴趣,可以直接点击以下网址,阅读文章。

jaccard - wiki :https://en.wikipedia.org/wiki/Jaccard_index

感谢大家支持,我们下次见~

擎创科技,Gartner连续推荐的AIOps领域标杆供应商。公司专注于通过提升企业客户对运维数据的洞见能力,为运维降本增效,充分体现科技运维对业务运营的影响力。

行业龙头客户的共同选择

了解更多运维干货与行业前沿动态

可以右上角一键关注

我们是深耕智能运维领域近十年的

连续多年获Gartner推荐的AIOps标杆供应商

下期我们不见不散~

这篇关于AIOps探索 | 如何实现相似事件识别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646433

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求