本届挑战赛季军方案:构建由大模型辅助的基于多模态数据融合的异常检测、根因诊断和故障报告生成系统

news2024/9/24 17:55:52

DDopS团队荣获本届挑战赛季军。该团队来自中山大学计算机学院Intelligent DDS 实验室。实验室主要方向为云计算、智能运维(AIOps)、软件定义网络、分布式软件资源管理与优化、eBPF 性能监控与优化等。

选题分析

基于对竞赛数据的洞察和对时代趋势的考量,我们尝试应对两大主要挑战:融合多模态数据以及结合大模型辅助分析,并将选题确定为:构建由大模型辅助的基于多模态数据融合的异常检测、根因诊断和故障报告生成系统。

图片

小组拟定的赛题及解决方案达到以下运维能力,力求在解决热点问题的同时做出创新,且贴合赛题场景:

  • 故障检测能力。从多模态数据源中检测系统是否存在异常
  • 故障分类能力。在异常检测能力的基础上,分析出大致的异常类型。本次方案中能识别到的异常类型包括:耗时异常、流量异常(某事件触发次数增加)、业务逻辑异常(表现为断链)
  • 根因定位能力。即在众多异常中,找到问题根本原因 故障报告生成能力。即根据分析结果生成故障报告和恢复建议
  • 识别用户自然语言提问的能力。用户可以使用自然语言进行提问,模型会理解用户语义并分析出用户给出的任务

整体方案介绍

在这里插入图片描述
上图显示了我们所设计方案的整体架构,我们的方案主要包括以下四部分:

  • LLM-based交互层:此模块用于理解用户的query instruction,提取出用户给出的基础任务和参数。我们使用ChatGLM2作为base model,在源文件代码中加入self-consistency 、CoT 和 in-context learning的逻辑,使模型更能理解我们的场景并能更好地做出回答。
  • Multi-agent异常检测:由于涉及多种模态的数据源,采用单一检测模块难以获得高准确率且容易产生假阳性,因此我们采用multi-agent的检测方案。我们针对trace、log、metric三种模态数据均设计了异常检测agent。
  • 基于多模态数据融合的根因分析模型:算法将调用链、日志和指标等多模态数据转换成统一的事件表达,利用无监督的频繁项集挖掘的方法找出故障模式,在资源和代码块级别定位细粒度根因。同时该方法还能通过对比故障前后的模式变化对故障进行解释。
  • LLM-based故障分析器:采用多LLM Agent轮询问答的方式,不同的LLM Session作为不同角色,生成故障报告工单。

模块介绍与效果

接下来分别介绍各个模块的方案原理及效果。

LLM-Based交互层

在这里插入图片描述

LLM-based交互层模块的设计动机主要是期望用户能聊天式地用自然语言与系统交互,而不需要很高的学习成本来使用本系统。

对应方法论的主要流程图如上,我们将理解用户指令拆解为任务分类和参数分析两个阶段,每个阶段都与注入了思维链、ICL和自我集成逻辑的本地化大模型进行交互,最终输出结构化指令。

考虑到没有相关的benchmark进行评估,我们在确保指令质量和多样性的前提下,手动设计并打标了50个测试数据进行评估。结果显示我们在分类任务上达到92%的准确率,在解析任务上达到了90%的准确率。

我们认为这种较好的表现是因为LLM本身具有较强的语义理解能力,也因为分类任务和解析任务都不涉及复杂的推理过程:分类任务实质是一个二分类任务,而解析任务实质是文本摘要提取任务。我们通过majority vote的方式进行自我集成,即self-consistency,进而更加避免了错误结果的产生。下图是一个推理例子。

在这里插入图片描述

基于统计的指标异常检测

对于指标的异常检测,为了更全面地进行分析,我们分别设计了基于统计和基于神经网络两种指标异常检测器。对于基于统计的指标异常检测,我们采用类似计算同环比的思想。对于某一待检测值,我们首先找到正常数据中同一时间段的与之最相近的数据,做差计算余项,再进行esd检验,判断是否出现异常。

图片

检验结果如下,可以看到发生漂移的异常点均被成功检测。

图片

图片

基于神经网络的指标异常检测

然而基于统计的方法存在缺点,无法学习指标时序波形或趋势,因此我们引入基于神经网络的异常检测模块。我们选择了ltsf-linear模型,该模型仅采用两个单层线性感知机,就能达到比较好的检测效果。我们通过模型估计待检测时段的正常模式,并用实际模式与正常模式进行比较,来检测异常。

图片

检测结果如下,可以看到我们的方法能较好地检测出异常点,且对正常模式的误报率低。

图片

日志异常检测

对于日志异常检测模块。我们观察到本次比赛日志数据数量较大,但格式较简单,因此不需要做很复杂的日志解析工作。我们引入llm生成解析正则表达式和异常词,在检测阶段进行解析并校验是否存在异常词,以检测异常。

图片

调用链异常检测

对于调用链异常检测模块。我们首先进行预处理和采样,预处理首先将span拼接成链,并去掉不完整trace,防止污染数据。

由于全量分析时空耗时太大,我们会根据trace时延和是否存在错误码进行采样,再进行分析。

分析过程主要包括:首先对正常时间段内的调用链数据进行汇聚,构建包括接口——服务——事件的多层正常模版。在检测阶段,对于每一条待检测调用链,我们首先找到与之最相近的正常模版链,再对二者的结构、状态信息进行详细匹配比较,以定位和分析根因。

图片

检测结果如上,可以看到我们能识别出不同的异常类型如时延异常、断链等,并输出详细的告警事件单。

基于多模态数据融合的根因诊断

接下来是多模态融合根因分析模块。前面各个模态对应的异常检测器生成metric、log、trace告警后,多模态根因分析模块首先会对他们进行融合。我们会将metric告警单和log告警单根据发生时间和位置嵌入到trace中,形成统一的事件表征。然后进入根因分析算法逻辑,大致流程如下:我们在构建阶段和生产阶段分别构建事件图,分别挖掘无故障时的期望模式和有故障时的实际模式,并根据支持度计算得分,对根因进行排序,最终输出根因列表。

图片

LLM-based 故障报告生成

最后是LLM-based故障报告生成模块,我们主要使用多LLM agent轮询问答来实现这个模块。

图片

我们同时开启四个LLM sessions,作为四个具有不同角色的agent。

第一个agent的角色是receiver,其接收上游输入的根因列表并拆解成多个自然语言描述的根因。

第二个agent是summarizer,根据拆解得到的多个根因描述,汇聚形成根因摘要。

第三个agent是advisor,对每个单独的根因进行分析,并给出对应的故障恢复方案。

第四个agent是scorer,对方案进行评价,如果不满足预期,则重复进行新的一轮pipeline。

图片

最终输出一个报告单,报告单会包括根因摘要和恢复方案。

总结与思考

最后是我们的一些总结和思考。在我们本次的方案中,我们并非仅用LLM去搭建一个完整的端到端大模型,而是采用大小模型的思路,让LLM去做一些不太涉及具体系统本身但是需要按人类思维分析的任务,对垂向问题的专业任务交给小模型,这样更能利用大模型的general知识,减轻LLM幻觉带来的危害。同时也注意到LLM在Ops中应用的一些挑战。一个是很容易会面临冷启动问题,另一个是生产微服务系统是高速迭代和不断变化的,用于训练的知识可能很快会过时甚至成为噪声,我们认为这些挑战都是在运维领域用好大模型需要去认真思考和回应的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv9改进|增加SPD-Conv无卷积步长或池化:用于低分辨率图像和小物体的新 CNN 模块

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、文章摘要 卷积神经网络(CNNs)在计算即使觉任务中如图像分类和目标检测等取得了显著的成功。然而,当图像分辨率较低或物体较小时&…

02-设计概述

上一篇:01-导言 本章重点讨论 JNI 中的主要设计问题。本节中的大多数设计问题都与本地方法有关。调用 API 的设计将在第 5 章:调用 API 中介绍。 2.1 JNI 接口函数和指针 本地代码通过调用 JNI 函数来访问 Java 虚拟机功能。JNI 函数可通过接口指针使用…

基于SpringBoot的企业头条管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

springBoot整合Redis(二、RedisTemplate操作Redis)

Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅&…

4.6.CVAT——带点的注释详细操作

文章目录 1.形状模式下的点2.单点线性插值 使用单个点或包含多个点的形状对任务进行标注的指南。 1.形状模式下的点 它用于面部、地标注释等。 在开始之前,您需要选择 Points .如有必要,您可以在 Number of points 字段中设置固定数量的点,…

并查集(Disjoint Set)

目录 1.定义 2.初始化 3.查找 4.合并 4.1.按秩合并(启发式合并) 5.例题 题目描述 输入格式 输出格式 输入输出样例 说明/提示 1.定义 并查集,也称为不相交集合数据结构,是一种用于管理元素分组以及查找元素所属组的数…

Julia语言中的元编程

在 Julia 语言中,元编程(Metaprogramming)可以生成或操作其他代码。这种技术允许程序员在编译时或运行时动态地创建、修改或分析代码,从而增强语言的功能和灵活性,以宏(Macros)、表达式和符号&a…

【python报错】Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.

python报错&#xff1a; Intel MKL FATAL ERROR: Cannot load mkl/../../../libmkl_rt.so.2.在切换旧版numpy版本的时候&#xff0c;出现了这个报错&#xff0c;表现就是将numpy切换到<1.24的版本的时候&#xff0c;只要import numpy就弹出以上报错。 尝试了网上的各种方法…

【Go语言】Go语言中的流程控制

Go语言中的流程控制 流程控制主要用于设定计算执行的顺序&#xff0c;简历程序的逻辑结果&#xff0c;Go语言的流程控制语句与其他语言类似&#xff0c;支持如下几种流程控制语句&#xff1a; 条件语句&#xff1a;用于条件判断&#xff0c;对应的关键字有if、else和else if&a…

STM32-ADC一步到位学习手册

1.按部就班陈述概念 ADC 是 Analog-to-Digital Converter 的缩写&#xff0c;指的是模拟/数字转换器。它将连续变量的模拟信号转换为离散的数字信号。在 STM32 中&#xff0c;ADC 具有高达 12 位的转换精度&#xff0c;有多达 18 个测量通道&#xff0c;其中 16 个为外部通道&…

搜索算法(算法竞赛、蓝桥杯)--DFS单词接龙

1、B站视频链接&#xff1a;B20 DFS 单词接龙_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2000 提高组] 单词接龙 - 洛谷 #include <bits/stdc.h> using namespace std; const int N25; int n,ans; int used[N];//每个单词的使用次数 string word[N];void dfs(string…

姓名若有孤寡数,极不利婚姻!

易经云“同声相应&#xff0c;同气相求”&#xff0c;一个人的名字会形成一个磁场&#xff0c;在个人的生活当中会影响到自己的方方面面&#xff0c;如运势、事业工作、桃花运等&#xff0c;同时也会影响自己的感情婚姻哦。 峰民曾经在办公室接待了一位女士&#xff0c;看了她…

备战蓝桥杯---状态压缩DP进阶题1

我们来看一看一道比较难的问题&#xff08;十分十分的巧妙&#xff09;&#xff1a; 显然我们应该一行一行放&#xff0c;又竖的会对下一行产生影响&#xff0c;我们令横着放为0&#xff0c;竖着放的上方为1. 对于下一行&#xff0c;前一行放1的下面为0&#xff0c;但是会出现…

C++:内存管理|new和delete

创作不易&#xff0c;感谢三连支持&#xff01; 一、内存分布 为什么需要内存管理呢&#xff1f;&#xff1f;因为我们在程序的运行过程中会需要各种各样的数据&#xff0c;而我们根据数据的不同存储在不同的区域里面&#xff0c;是为了更高效地处理数据。而C语言相比Java来说…

知识图谱1——neo4j

2024年要搞知识图谱&#xff0c;因此没有办法&#xff0c;只能将我之前固守的JDK1.8&#xff0c;升级到JDK21&#xff0c;因为JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此没有办法&#xff0c;只有升级了。写这篇只是一个搭建笔记&#xff0c;我的初…

【Qt学习】QSpinBox 与 QDateTimeEdit 控件 的介绍与实例()

文章目录 QSpinBox1.1 介绍1.2 实例使用 - &#xff08;模拟点餐-功能扩充&#xff09;1.3 资源文件 2. QDateTimeEdit2.1 介绍2.2 使用&#xff08;计算时间差值 / 间隔&#xff09;daysTo() 与 secsTo() 2.3 资源文件 QSpinBox 1.1 介绍 对于QSpinBox&#xff0c;我们可以查…

OSI七层模型/TCP四层模型

协议&#xff1a; 协议是双方共同指定的一组规则&#xff0c;在网络通信中表示通信双方传递数据和解释数据的一组规则。 从A上传文件到服务器B,需要在A和B之间制定一个双方都认可的规则&#xff0c;这个规则就叫文件传输协议&#xff0c;该协议是ftp协议的一个初级版本&#…

JavaScript练手小技巧:一文看懂<script>标签的 ansyc 和 defer

<script>标签的 ansyc 和 defer 属性。只对外部加载 JS 文件有效。 <script src"js/app.js" async></script> <script src"js/app.js" defer></script> 普通加载 js&#xff08;同步加载&#xff09;&#xff1a;会打断 …

uview2中上传文件和若依前后端分离配合的代码

uview2中的上传文件需要配合着自己后端的上传的代码 uview2 代码&#xff1a; uploadFilePromise(url) {return new Promise((resolve, reject) > {// 后续自己封装let a uni.uploadFile({//自己的请求路径url: that.$baseURL /uploadAvater, //上传的文件filePath: tha…

leetcode hot100 每日温度

在本题中&#xff0c;我们是通过单调栈来解决的&#xff0c;因为我们采用了栈的数据结构&#xff0c;并且&#xff0c;栈内存储的元素是单调的。 本题我们考虑&#xff0c;将气温数组元素的下标存入栈中&#xff0c;首先初始化要把0放入&#xff0c;0是下标的意思。然后我们拿…