本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法

本文主要是介绍本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

aiboco团队荣获本届挑战赛季军。该团队来自亿阳信通。

方案介绍

本届挑战赛采用开放式赛题,基于建行云龙舟运维平台的稳定性工具和多维监控系统,模拟大型的生活服务APP的生产环境,提供端到端的全链路的日志、指标和调用链数据。参赛队伍在组织者分配的云环境中,运用了大模型技术,对调用链数据、KPI指标和业务指标进行故障检测和根因定位。

首先分析赛题信息,获取到了如下困难:

1、微服务系统复杂

微服务系统架构复杂,当异常出现时,不能快速发现并且给出根因。
各类数据(业务指标、性能指标、调用链、日志等)特征多种多样,如何能实现统一化处理。

2、数据复杂

数据量比较大,每天大约30G以上的数据量。
微服务化后,调用关系不固定。
需要快速给出异常检测结果。
需要快速给出根因定位结果。

3、与已有工具的关系

现在已有skywalking等调用链跟踪工具,还要进行异常检测和根因定位的意义。
节点运行状态,可以通过业务拨测、skywalking设备监测获得。
哪些是上述工具无法实现的?

4、大模型应用

如何借助大模型提升AIOps能力:

Agent
思维链
生成报告
故障分类

5、资源限制

前期竞赛服务器资源紧张(CPU、内存、磁盘)。
GPU等资源紧张,给部署大模型,带来难题。
针对以上问题,亿阳信通OSS数智部团队提出了如下思路:

a、通过正常数据训练模型

通过正常数据进行学习和训练,得到各类数据的特征指标。
对异常数据进行检测和根因定位。
b、异常检测和根因定位依据

以TC为主,Metric、Trace、日志为辅,进行异常检测。
以Metric、Trace和日志为主,进行异常根因定位。
c、大模型辅助应用

在资源有限的情况下部署大模型应用。
大模型辅助根因定位。

然后根据以上思路提出了基于图网络和LLM Agent的微服务异常检测和根因定位方法。这种提出了4大创新:时序异常检测、六元组动态建模、图网络根因定位和大模型Agent辅助应用。创新方法如下图所示:

图片

并基于LLM Agent的应用,将LLM Agent智能体应用到智能运维领域。

图片

本方案大体如下:通过对指标数据的异常检测模块获取异常检测结果,通过trace数据的异常检测模块获取异常检测结果,通过将结果结合并进行根因定位,然后通过大模型系统总agent进行结果处理。该流程遵循着异常检测-根因定位的流程进行展示。

具体流程如下所示:

图片

接下来详细介绍这些流程的具体方法实现。

异常检测

时序异常检测是一种通过分析时间序列数据来识别与正常模式不符的异常行为的方法。在TC(时间序列数据)业务中,对业务指标进行时序异常检测可以帮助及时发现异常情况,并采取相应的措施。以下是对TC业务指标进行时序异常检测的步骤:

TC业务指标获取

竞赛方使用专门的数据采集工具收集与业务指标相关的数据,包含CPU、内存等指标的各时间段具体值信息,并将其整理成json文件发送给选手。该数据包含异常数据和无异常数据两种,异常数据包含一个或多个异常,无异常数据则指的是当天无异常发生。

1.模型训练
模型训练部分使用的是VAE算法。VAE模型由两部分组成:编码器和解码器。

编码器:编码器将输入数据映射到潜在空间中的概率分布,即学习到输入数据的潜在表示。编码器的输出包括潜在空间中的均值(μ)和方差(σ),这些参数用于生成潜在变量。

解码器:解码器将潜在变量重新映射到输入空间,生成与原始数据相似的重构数据。

损失函数:定义VAE的损失函数,它由两部分组成:重构损失和KL散度损失。

重构损失:衡量重构数据与原始数据之间的差异,通常使用均方误差(MSE)或交叉熵损失。

KL散度损失:衡量学到的潜在分布与标准正态分布之间的差异,促使潜在变量在潜在空间中均匀分布。

使用正常数据训练VAE模型。在训练过程中,优化损失函数,使得模型学到正常数据的潜在表示。训练过程中,随机从正常数据中采样,将其输入编码器,然后生成重构数据,最小化损失函数。

VAE计算公式为:

图片

2.时序异常检测

定义阈值:在异常分类方案中,阈值具有关键作用。阈值是根据重建损失或其他相关指标设置的关键数值。仔细的阈值选择至关重要,因为它直接影响到误报(将正常数据错误地标记为异常)和漏报(未能正确标记异常数据)之间的权衡。我们设置了适当的阈值用于并针对异常数据和非异常数据进行适当修改。

评估异常:在完成 VAE的训练和阈值定义后,使用VAE进行了时序异常检测。该过程包括将输入数据编码到潜在空间中,通过解码器进行重建,然后将重建的数据与原始输入进行比较。然后将重建误差超过预先定义的阈值的数据点标记为异常,并进行输出。VAE识别出了那些在潜在空间中无法很好表示的、与正常模式差异较大的异常情况,在异常数据中识别到了异常。

同时我们使用数据可视化来对比展示出异常情况是否符合预期分布。

通过可视化可以直观看出异常点的具体情况。

除了VAE之外我们也使用了趋势和历史特征来进行辅助查找异常,并最终使用人工进行确认来获得异常的实际输出。具体流程如下:

图片

根因分析

根因分析需要各类数据的结合进行混合计算。

图片

具体流程如下:

图片

这里我们将资源数据和Trace数据进行拓扑还原,作为资源拓扑辅助进行异常信息诊断。异常信息检索关联网元并联合资源拓扑进行故障定界。故障定界结果又反过来辅助异常信息进行的性能根因定位和调用链根因定位,然后将性能根因定位结果和调用链根因定位结果返回到总agent里,总agent调用大模型进行最终的根因定位并将根因定位结果输出。

大模型应用

本次部署采用使用CPP+GPU方案,降低部署成本,部署推理效率提升10倍以上。并且使用ReAct加CoT加Agent的方式,成功完成比赛的完整输出任务。

具体使用例子如下:

问:案例库中的指标分析发现的异常数据为{data1},调用链分析发现的数据为{data2},观察指标异常值数据的v_err、v_pre、v_pst和trend列,可以根据指标异常值数据的指标突变值情况看出异常指标为outlier={result},该数据包含kpi_names和cmdb_ids两列。再将outlier在调用链数据中进行查询,并结合调用链数据的指标v_err、v_pre、v_pst和trend进行判断,确定出调用链数据的异常值组合为outlier2= {result2},该组合包含cmdb_ids和ext_net_peer_name两列。

现在指标分析发现的异常数据为{data_now1},调用链分析发现的数据为{data_now2} ,请根据以上案例进行分析并输出outlier1和outlier2。

上述问题中红色的数据由案例库给出,黄色的数据由指标分析结果和调用链分析结果给出。同时我们使用Agent加ReAct加CoT进行网元状态工具和故障根因分析工具进行调用。调用方法为ReAct加CoT进行模式输出,得到工具的输出结果。

总结展望

总结

  • 通过时序异常检测算法,完成异常检测
  • 使用图网络完成故障根因定位
  • 使用大模型辅助故障根因定位

后续工作

  • 探索大模型Agent的深度应用,完成更多运维工作。
  • 深入研究ReAct和思维链,使能分析复杂的问题。
  • 使用大模型+本地知识库,实现故障处理案例推荐等。

这篇关于本届挑战赛季军方案:基于图网络及LLM AGENT的微服务系统异常检测和根因定位方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip