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和思维链,使能分析复杂的问题。
  • 使用大模型+本地知识库,实现故障处理案例推荐等。