l论文阅读:Robust Multimodal Failure Detection for Microservice Systems

AnoFusion是一种无监督的故障检测方法,它利用图变换网络学习多模态数据的相关性,并结合图注意力网络和门控循环单元处理动态多模态数据,以检测微服务实例故障。研究指出,单模态数据不足以全面捕捉故障模式,而多模态数据结合能更准确地检测异常。AnoFusion在两个微服务系统上的实验展示了其性能优势和鲁棒性。
摘要由CSDN通过智能技术生成

Robust Multimodal Failure Detection for Microservice Systems

微服务系统的鲁棒多模态故障检测

摘要:

实例(instance)的主动故障检测,多模态数据,多模态数据中的相关性

在这项工作中,我们提出了 AnoFusion,一种无监督的故障检测方法,通过微服务系统的多模态数据主动检测实例故障。它应用图变换网络(GTN)来学习异构多模态数据的相关性,并将图注意力网络(GAT)与门控循环单元(GRU)相集成,以解决动态变化多模态数据带来的挑战。

1 intro

微服务介绍:微服务系统通常是具有许多实例(例如虚拟机或容器)的大型系统。实例之间的相关性,例如服务调用和资源争用,通常是复杂和动态的。

三种类型的数据: metrics, logs, and traces这些指标包括系统级指标(例如,CPU 利用率、内存利用率和网络吞吐量)和用户感知指标(例如,平均响应时间、错误率和页面视图计数)。日志记录硬件或软件的运行时信息,包括状态变化、调试输出和系统警报。对于 API 请求,trace通过实例记录其调用链,其中每个服务调用称为一个span。

故障≠异常

1)异常是偏离正常系统状态(通常反映在监控数据中),

2)故障是由实例提供的服务发生的事件。实例出错,用户体验下降[23]

举例故障:例如,当出现“登录失败”时,用户无法成功登录系统。

当这种故障发生时,可以检测到日志和跟踪中的异常:日志中会打印许多“ERROR”,并且某些跟踪数据的响应时间(RT)会明显变大。

在服务故障期间观察到许多异常情况是很常见的。然而,(间歇性)异常并不一定会导致失败。

单模态为什么不好:

一方面,单模态数据无法揭示所有类型的故障,更不用说本身可能丢失或收集太慢[23]。例如,在表1中,当发生“生成二维码失败”的故障时,只有实例的指标(即内存利用率)急剧增加并表现出异常行为。如果仅进行日志或跟踪异常检测,此类故障将被错误地忽略。

另一方面,简单地结合单模态异常检测方法的异常检测结果可能会产生误报,这已在我们的实验中得到证实(见表3)。例如,单模态异常检测方法检测到的(瞬态)异常可能不代表任何实例故障。假设实例的网络吞吐量指标出现异常,由于指标突然增加,并在短时间内恢复到正常水平而上报告警。但系统仍然提供正常服务,没有任何痕迹数据出现异常,用户体验不受影响。因此,不应报告任何实例故障。

目标:关联多模态数据来检测微服务系统的实例故障

微服务系统面临以下两个挑战。

(1) 对多模态数据之间的复杂相关性进行建模。当发生故障时,一种、两种或三种数据模式可能会变得异常,并且它们彼此相关。忽略相关性会降低故障检测的准确性。

(2)处理异构且动态变化的多模态数据。具体来说,指标通常采用多元时间序列的形式,日志通常是半结构化文本。

此外,调用链由树结构中的span组成。集成此类异构多模式数据非常具有挑战性。实例的多模式数据通常会随着时间的推移而动态变化

为了解决第一个挑战,我们应用图变换网络(GTN)[16, 45],因为它可以将多模态数据嵌入到图中,并通过图节点和边的有效表示来学习异构数据的相关性[40, 43]。为了解决第二个挑战,我们首先根据模态的特征序列化每种模态的数据,并构造异构图的节点和边。之后,我们采用图注意力网络(GAT)[36],为邻居节点分配不同的权重并学习多模态数据的动态模式,以优化图并过滤重要节点信息。然后,我们使用门控循环单元(GRU)[19]来捕获时间信息并预测下一时刻的多模态数据。最后,观察值和预测值之间的相似性用于确定实例是否失败。

贡献:

• 据我们所知,我们是最先认识到探索多模态监测数据(即指标、日志和迹线)相关性的重要性,并将多模态关联起来的人之一。使用 GTN 进行数据实例故障检测。

• 我们的方法 AnoFusion 根据每种模式的特征对三种模式的数据进行序列化。它结合了 GTN 和 GAT 来稳健地检测动态多模态数据中的异常。此外,GRU 层用于捕获多模态数据的时间信息。

• 我们采用两个微服务系统,分别由10个和28个实例组成,来评估AnoFusion的性能。

2 背景和相关工作

2.1 单模态异常检测

metric:多元序列,无监督检测,JumpStarter [25] 应用压缩感知技术进行异常检测。 USAD [1] 通过对抗训练高效地检测异常。如果多个指标在故障后不久变得异常,指标异常检测方法可以轻松检测到实例故障。然而,由于指标异常检测方法**仅利用指标数据来检测系统中的异常和可能的故障,因此当故障未在指标上表现出来时,**它们将无法向操作员发出警报。

log:日志数据是应用程序或系统级别的实例输出的半结构化文本。它通常用于记录硬件或软件的运行状态。通常,日志是按照预定义的结构生成的。因此,提取日志模板及其参数是分析日志数据的标准步骤[7]。例如,图1(L部分)列出了一条日志。传统的日志异常检测方法通常旨在识别日志中的关键字,例如“错误”或“失败”。但由于网络抖动或操作员登录失败等原因,日志中可能会出现“fail”等否定关键词,并不代表实例出现故障。高级方法遵循类似的工作流程:日志解析、特征提取和异常检测[11]。基于深度学习的方法学习正常执行的日志模式(例如顺序特征、定量关系),并在日志序列的模式偏离学习的正常模式时确定异常[5,22,41]。例如,LogAnomaly [27]应用模板向量来提取日志模板中隐藏的语义信息,并同时检测连续和定量的日志异常。 Deeplog [5] 利用 LSTM 模型预测滑动窗口后可能出现的日志。在分析日志数据时,AnoFusion 既不需要标记工作,也不需要领域知识。

trace( span 跨度,调用时间):当服务处理用户的请求时,将调用多个实例。监控系统记录特定服务何时被调用以及何时响应,它们之间的差值就是响应时间(RT)。大多数跟踪异常检测方法根据每次调用的响应时间是否显着增加和/或调用路径是否表现异常来检测异常.TraceAnomaly [21] 学习痕迹的正常模式,当其模式偏离正常痕迹时,就会检测到异常。然而,一方面,单独的跟踪异常并不一定表示实例失败。另一方面,实例故障可能不会在跟踪数据中体现出来。因此,单独使用痕迹异常检测方法也可能导致漏报或误报。

2.2 多模态异常检测

最近的研究已经开始解决基于多模态数据的异常检测问题。 Vijayanand 等人[37]提出了一种使用多维数据的云服务器异常检测框架,包括不同的特征,如网络流量序列特征、CPU 使用情况和主机日志的内存使用情况。这些提取的多维特征被馈送到检测模型,该模型识别异常并最大化检测精度。 [6]对指标和日志进行相关性分析,以发现云操作中的异常模式。此外,SCWarn [46]通过**分别序列化指标和日志并采用 LSTM 来检测故障,将指标和日志结合起来进行异常检测。**然而,这些工作中缺少对实例至关重要的trace,因此,在我们的场景中检测异常时,它们无法实现最佳性能。

2.3 GNN

GTN。 GTN以异构图为输入,将其转换为元路径指定的新图结构。元路径是连接异构图中的对象对的关系序列,通常用于提取结构信息。通过将多个 GT 层与 GCN 相结合,GTN 以端到端的方式有效地学习图上的节点表示[43]。我们应用 GTN 来学习场景中多模态数据之间的相关性。

GAT:GCN 不擅长分析动态图,当训练集和测试集的图结构发生变化时,GCN 将不再适用。此外,GCN为每个邻居节点分配相同的权重,这达不到我们对未来图结构优化的期望。 GAT通过给不同节点分配不同的权重来解决GCN的问题。它使得各个节点能够根据重要性进行区分,从而使AnoFusion能够关注图结构中更重要的信息[36]。因此,GAT有望在处理动态变化的时间序列数据方面取得更好的性能,因此我们使用GAT代替GCN。

3 MOTIVATION

证明单模态数据不足以全面捕获实例的故障模式,

表1:使用单模态数据无法成功捕获许多实例故障。它还表明,当发生故障时,不同模态的数据可能同时显示异常模式。挖掘多模态数据之间的相关性可以为故障检测任务提供更全面、更准确的信息。

特别注意: JLT 直接聚合 JumpStarter、LogAnomaly 和 TraceAnomaly 的结果,形成多模式基线。聚合方法是多数投票,如果在某个时刻两个或多个模态出现异常,则判定失败。 忽略了多模态数据的相关性。一方面,一些故障仅以特定的数据模态表现出来,使得需要两种或多种模态存在异常的多数投票策略无法有效检测故障。

4 anofusion

为了捕获多模态数据之间的异质性和相关性,我们使用 GTN 来更新异质图。

为了提高AnoFusion的鲁棒性,我们在GTN之后应用了GAT,使其在训练集和测试集的数据模式不同时表现稳定。

为了实现无监督的故障检测并使AnoFusion更适合时间序列数据,我们使用GRU来预测下一时刻的多模态数据。

离线阶段:

• 多模式数据序列化。为了为未来的图结构构建做好准备,AnoFusion 使用预定义的流程将多模态数据(即指标、日志和轨迹)转换为时间序列并调整它们的时间。序列化后,AnoFusion 将每个时间序列视为一个“数据通道”。

• 图流构建。为了构建 GTN 的原始输入,AnoFusion 构建了一个异构图,其中包含基于每个时刻 𝑡 的连接的所有数据通道。

然后,所有异构图形成图流,该图流将输入到GTN中。

• 特征过滤。 GTN 通过学习异构图中节点的表示并捕获不同数据模态之间的相关性来更新图流。更新后的图流被视为原始数据通道的特征。然后,AnoFusion利用GAT对图流中的节点进行注意力评分,识别不同的模式并实现特征过滤。

• 故障检测。 GRU 应用于时间序列,根据先前的输入预测下一时刻的值。我们训练 GRU 网络根据给定的图流尽可能准确地预测下一个图。

在在线检测阶段,对于给定时间𝑡,多模态数据将根据[𝑡−𝜃,𝑡]中的观察结果进行序列化,其中𝜃是输入窗口大小。然后,我们使用序列化的数据通道来构造异构图流。该窗口的图流将被输入到训练好的模型中以获得下一个图的预测。 AnoFusion计算预测图和观察图之间的相似度作为失败分数,然后确定是否失败。请注意,AnoFusion 不限制任何模态数据的维度

4.2 多模数据序列化

**metric数据序列化:**常规归一化

**日志数据的序列化:**我们采用先进的日志解析算法Drain来提取AnoFusion中的日志模板,该算法已显示出其优越性和效率。日志序列化过程分为以下两个步骤:

(1) 聚类。为了处理实际微服务系统中不断更新代码、添加新日志、更改新日志而导致的日志变化,我们首先对日志模板使用聚类算法。通过将相似的日志模板分组成簇,一方面可以去除冗余信息,另一方面可以利用日志模板的类型来表征日志数据。一旦由于软件更新而出现新的日志模板,就可以计算新的日志模板与之前的聚类质心的相似度,并可以决定新的日志模板是属于现有的聚类还是应该被视为新的聚类。簇。此外,通过对大量在线服务系统的实证研究,我们得出结论,在现实场景中很少发生故障[25]。由于 AnoFusion 是一种基于所有训练样本都具有正常模式的假设的无监督学习方法,因此删除异常日志模板将提高模型的性能。基于上述分析,我们最终利用“bert-base-uncased”模型[4]获得句子嵌入向量,并应用DBSCAN[33]算法对这些向量进行聚类。

(2 )序列化

输入中每个日志条目的类别可以通过计算其句子嵌入向量与每个簇的质心之间的距离来确定。之后,AnoFusion使用滑动窗口将输入日志数据分割成窗口,每个窗口具有窗口长度𝜃和步长𝛿。我们统计每类日志的数量以及每个窗口中形成 𝑀 + 1 时间序列的日志总数,其中 𝑀 是日志模板簇的数量。横轴𝑇𝑖𝑚𝑒𝑠𝑡𝑎𝑚𝑝对应于输入日志的收集时间。

trace的序列化: AnoFusion 使用长度为 𝜃 和步长为 𝛿 的滑动窗口来分割跟踪数据。每个窗口都包含与实例相关的调用的跟踪数据(以 RT 的形式)。然后,对于每个窗口,AnoFusion 计算调用 RT 的均值、中值、范围和标准差,分别生成四个时间序列。如果状态代码可用,AnoFusion 可能会将其作为第五时间序列。我们将每个时间序列视为一个数据通道,类似于日志数据的序列化。

**时钟同步:**为了更方便地构建图结构,AnoFusion在序列化后同步了三种模态数据的时钟。 AnoFusion 的目标是单个实例的故障检测,并且获取的所有监控数据都在该实例内。因此,三种模态的监测数据时钟是相对同步的。每分钟收集一次指标数据。当实例中发生事件时,会生成日志条目。此外,处理请求时会记录跟踪。

因此,我们获得了场景中每分钟的指标、日志和跟踪的特征(例如出现次数)。

4.3 图流构建

数据输入:X(N)N是数据通道的数量,AnoFusion 使用提取的数据通道为每个时间戳𝑡构建异构图𝐺𝑡,每个节点是X:时间 𝑡 时每个数据通道的值组成,三种类型的节点:,metric,log,trace。6种类型的连边:metrics-metrics, metrics-logs, metrics-traces, logs-logs, log-traces, traces-traces)

AnoFusion 利用互信息 (MI) 来计算邻接矩阵。对于边类型为 𝑘 的每个数据通道对  x (𝑖) , x (𝑗) ,对应的邻接矩阵值可以计算如下:(2)

分别是联合概率密度函数和边界概率密度函数,k是窗长

4.4 特征筛选

AnoFusion 通过使用 GTN 更新异构图流𝐺并通过 GAT 学习故障模式来执行特征过滤。

图transformer(看不懂)。 GTN 使用邻接矩阵 𝐴 对多模态通道的异质性和相关性进行建模。 Graph Transformer 层(GT 层)是 GTN 的主要组成部分。他们学习边类型的软选择和复合关系以产生有用的多跳连接,也称为元路径[43]。具体来说,考虑邻接矩阵 𝐴 作为输入,GT 层有两个步骤:首先,它通过 1 × 1 卷积层从 𝐴 软构造多个图结构,可以表示为:

3)其中𝑄 (𝑘) 是边类型𝑘生成的图,𝜙表示1×1卷积,𝑊 (𝑘) ∈ R 1×1×𝐾 是𝜙的参数(对于边类型𝑘),𝐾 是边的数量类型。

公式(3)的含义是将所有异构图的边(参数)累加在一起

其次,它通过矩阵乘法组合每个 𝑄 (𝑘) 来生成新的图结构 𝐴 ′ ,又名元路径.(4)是度归一化,(3-4)本质就是把多张图叠加成一张图

图注意力:异构图流上采用GAT来区分多模态数据通道的重要性并完成特征过滤。还利用多头注意力机制来稳定该过程。

4.5 故障检测

经过特征过滤后,我们使用更新的图流来训练基于循环神经网络的故障检测模型。令 𝑋 ′ ∈ R 𝑁 ×𝜏 表示更新后的数据通道,我们可以使用 GRU 捕获其复杂的时间依赖性并预测数据通道在时间 𝜏 的值。(公式7都是GRU的公式)

4.6 在线监测

AnoFusion将首先使用其之前的历史观测值对数据进行序列化,即𝑋𝑡−𝜃+1:𝑡−1,并构造图流𝐺 = {𝐺𝑡−1 𝜃+1 , . 。 。 ,𝐺𝑡 },其中 𝜃 是窗口的长度。然后,将图流输入到经过训练的模型中,以获得 𝑋𝑡 的预测 𝑋ˆ 𝑡 。我们计算每个数据通道的观测值和预测值之间的差异 𝑛

AnoFusion 使用阈值来确定在特定时间𝑡是否发生故障。然而,使用静态阈值并不有效,因为数据分布随时间而变化。为了解决这个问题,我们采用极值理论(EVT)[34]来自动准确地确定阈值。 EVT 是一种统计理论,可识别极值的出现,并且不对数据分布做出任何假设。 EVT 可用于估计观察到异常检测极值的可能性。

5 实验

• RQ1:AnoFusion 在故障检测方面的表现如何? 效果

• RQ2:每个组件是否对 AnoFusion 都有贡献? 消融

• RQ3:AnoFusion 的主要超参数如何影响其性能?超参数

5.1.实验设置

数据集1:Generic AIOps Atlas (GAIA)

它包含从由 10 个实例组成的系统收集的多模式数据,该数据在两周内收集了超过 70 万个指标、8700 万条日志和 2800 万条跟踪。注入了现实世界的故障,

5.2 有效性

Anodusion在多个数据集上都是效果最好的。

鲁棒性:适应多种数据集和多种类型的实例

耗时:0.01s量级

5.3 组件性能

(1)拆GTN(GTN在多模式数据的异质性和相关性建模中的意义)

prec下降明显,结果表明,GTN可以在异构图中捕捉多模态数据之间的异构性和相关性,从而通过综合三种模态的信息来减少误报。

(2)GAT→GCN(相邻节点分配不同权重的重要性)

对于动态变化的时间序列,GAT比GCN更有效。异构图流中的每个节点的行为都不同。像GCN一样平等地处理所有节点会给图流引入噪声,这可能会干扰模型训练过程。

(3)拆GAT

精度和召回率显著下降,这表明GAT可以专注于图中最相关的信息。

5.4 超参数敏感性

滑动窗口的选择θ:如果𝜃太大,它将包含太多季节变化,并且将难以重建当前状态;如果𝜃太小,模型将无法从历史数据中全面学习信息,

多头注意力的头数H:如果𝐻太小,AnoFusion的性能会因模型尺寸的减小而略有下降;如果𝐻太大,可能会产生更多冗余信息,干扰AnoFusion的训练。

6 讨论

经验教训:

数据收集 普罗米修斯,ELK

评估指标的选择:结合业务场景,可能对精确度和召回率有不同的偏好。运营商普遍追求提供网购服务的核心服务的高召回率。他们不想错过任何可能对用户体验产生负面影响的潜在故障。数据分析服务中,精度通常更受青睐,他们希望准确地检测故障而不是收到大量误报。因此,仅关注 𝐹1 分并不适合所有情况。

有效性

无效故障标签:有手工打标引入的噪声

粒度效应:数据的颗粒度,一分钟/一刻钟/一小时

数据模式:在现实场景中,只要监测数据的模态不少于两种,算法就能正常运行。此外,如果故障仅出现在一种监控数据中,AnoFusion不仅会考虑历史多模态数据之间的相关性,还会考虑异常在所有监控数据中的比例来确定实例是否发生故障。

7 总结

在这项工作中,我们提出了 AnoFusion,这是最早使用多模式数据(即指标、日志和跟踪)来稳健地检测微服务系统中实例故障的研究之一

将三种模态的数据进行序列化并构建异构图结构。然后,GTN 用于更新异构图,GAT 用于捕获重要特征。最后,我们使用 GRU 来预测下一时刻的数据模式。预测值和观察值之间的偏差用作故障分数。我们在两个微服务系统上应用了 AnoFusion,应用多模态数据进行故障检测的解决方案将惠及微服务系统以外的更多领域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值