AiPaper
论文状态:已完成

Cross-System Categorization of Abnormal Traces in Microservice-Based Systems via Meta-Learning

发表:2024/03/28
原文链接PDF 下载
价格:0.10
价格:0.10
已有 2 人读过
本分析由 AI 生成,可能不完全准确,请以原文为准。

TL;DR 精炼摘要

本文提出TraFaultDia框架,利用元学习在微服务系统中实现异常调用链的少样本自动分类,准确识别故障类别及根因。该方法在两个开源微服务数据集上验证,提升了跨系统故障诊断的自动化和适应性。

摘要

Microservice-based systems (MSS) may fail with various fault types. While existing AIOps methods excel at detecting abnormal traces and locating the responsible service(s), human efforts are still required for diagnosing specific fault types and failure causes.This paper presents TraFaultDia, a novel AIOps framework to automatically classify abnormal traces into fault categories for MSS. We treat the classification process as a series of multi-class classification tasks, where each task represents an attempt to classify abnormal traces into specific fault categories for a MSS. TraFaultDia leverages meta-learning to train on several abnormal trace classification tasks with a few labeled instances from a MSS, enabling quick adaptation to new, unseen abnormal trace classification tasks with a few labeled instances across MSS. TraFaultDia's use cases are scalable depending on how fault categories are built from anomalies within MSS. We evaluated TraFaultDia on two MSS, TrainTicket and OnlineBoutique, with open datasets where each fault category is linked to faulty system components (service/pod) and a root cause. TraFaultDia automatically classifies abnormal traces into these fault categories, thus enabling the automatic identification of faulty system components and root causes without manual analysis. TraFaultDia achieves 93.26% and 85.20% accuracy on 50 new classification tasks for TrainTicket and OnlineBoutique, respectively, when trained within the same MSS with 10 labeled instances per category. In the cross-system context, when TraFaultDia is applied to a MSS different from the one it is trained on, TraFaultDia gets an average accuracy of 92.19% and 84.77% for the same set of 50 new, unseen abnormal trace classification tasks of the respective systems, also with 10 labeled instances provided for each fault category per task in each system.

思维导图

论文精读

中文精读

1. 论文基本信息

1.1. 标题

跨微服务系统异常调用链的元学习分类 (Cross-System Categorization of Abnormal Traces in Microservice-Based Systems via Meta-Learning)

1.2. 作者

  • YUQING WANG (University of Helsinki, Finland)
  • MIKA V. MANTYLA (University of Helsinki, Finland and University of Oulu, Finland)
  • SERGE DEMEYER (University of Antwerp, Belgium)
  • MUTLU BEYAZIT (University of Antwerp, Belgium)
  • JOANNA KISAAKYE (University of Antwerp, Belgium)
  • JESSE NYSSOLA (University of Helsinki, Finland)

1.3. 发表期刊/会议

该论文在 Proc. ACM Softw. Eng. 2, FSE, Article FSE027 (July 2025) 发表,并于 2024 年 3 月 27 日作为预印本在 arXiv 发布。ACM FSE (ACM SIGSOFT Symposium on the Foundations of Software Engineering) 是软件工程领域顶级的会议之一,享有极高的声誉和影响力,专注于软件工程的基础研究、工具和应用。

1.4. 发表年份

2025年 (正式发表年份),预印本发布于 2024年。

1.5. 摘要

微服务系统 (MSS) 可能会因其复杂和动态的特性而出现各种故障类型。尽管现有的 AIOps (Artificial Intelligence for IT Operations) 方法在检测异常调用链 (abnormal traces) 和定位负责的服务方面表现出色,但诊断具体故障类型和故障原因仍需要人工干预。本文提出了 TraFaultDia,一种新颖的 AIOps 框架,用于自动将微服务系统中的异常调用链分类到具体的故障类别 (fault categories)。作者将分类过程视为一系列多类分类任务,其中每个任务代表着尝试将微服务系统中的异常调用链分类到特定故障类别。TraFaultDia 利用元学习 (meta-learning) 在微服务系统中的少量带标签实例的多个异常调用链分类任务上进行训练,从而能够快速适应新的、未见的跨微服务系统的少量带标签实例的异常调用链分类任务。TraFaultDia 的使用场景可以根据微服务系统内异常构建故障类别的方式进行扩展。作者在两个微服务系统 TrainTicketOnlineBoutique 的开放数据集上评估了 TraFaultDia,这些数据集中每个故障类别都与故障系统组件(服务/Pod)和根本原因相关联。TraFaultDia 自动将异常调用链分类到这些故障类别中,从而无需手动分析即可自动识别故障系统组件和根本原因。在同一微服务系统内,当每个类别提供 10 个带标签实例时,TraFaultDiaTrainTicketOnlineBoutique 的 50 个新分类任务上分别达到了 93.26% 和 85.20% 的准确率。在跨系统场景中,当 TraFaultDia 应用于与训练时不同的微服务系统时,对于相同的 50 个新的、未见的异常调用链分类任务,TraFaultDia 在每个系统中每个故障类别提供 10 个带标签实例的情况下,分别获得了 92.19% 和 84.77% 的平均准确率。

1.6. 原文链接

https://arxiv.org/abs/2403.18998

1.7. PDF 链接

https://arxiv.org/pdf/2403.18998v4.pdf

2. 整体概括

2.1. 研究背景与动机

2.1.1. 论文试图解决的核心问题

微服务系统 (MSS) 因其固有的复杂性和动态性,使得故障诊断成为一项艰巨的任务。尽管现有的 AIOps (Artificial Intelligence for IT Operations) 方法在自动化检测异常调用链 (abnormal traces) 和定位可能存在故障的服务方面已取得显著进展,但要进一步诊断出具体的故障类型 (specific fault types)根本原因 (failure causes),仍然需要大量的人工介入。尤其当异常并非直接来源于特定服务时,AIOps 工具提供的潜在故障服务列表不足以直接 pinpoint 根本原因。这导致了手动 RCA (Root Cause Analysis) 成为瓶颈,耗费大量人力,并可能延误故障解决,增加停机时间和运营成本。

2.1.2. 为什么这个问题在当前领域是重要的?现有研究存在哪些具体的挑战或空白?

随着微服务系统规模和复杂性的不断增长,调用链数据量和故障案例急剧膨胀,使得运维人员难以高效地对大量检测到的异常调用链进行 RCA。缺乏自动化的故障类型分类机制,导致:

  • 效率低下: 运维人员需深入理解系统架构、操作行为和故障模式,才能分析和分类异常。

  • 诊断不精确: 现有方法通常只能定位到“服务”或“代码区域”,但无法直接指出“是什么类型的故障”以及“为什么会发生”。例如,配置错误、第三方库故障或高负载可能导致一系列服务故障,但仅凭服务定位难以诊断。

  • 扩展性差: 针对每个新出现的故障类型进行手动分析和分类,随着系统演进,成本迅速增加。

    本文指出了异常调用链分类在跨微服务系统场景中面临的三个具体挑战:

  • C1. 微服务系统异构性 (MSS heterogeneity): 不同的微服务系统由不同的服务组成,具有独特的行为模式,这使得开发一个适用于所有微服务系统的通用调用链表示和分类方法变得困难。

  • C2. 高维、多模态的调用链相关数据 (High dimensional, multi-modal trace-related data): 调用链数据包含文本(如调用组件、路径、日志消息)、时间(如 Span 起止时间)和身份信息(如 Trace ID、Span ID)等多种模态,且维度高、数量庞大。如何有效地融合和压缩这些数据以进行高效分析是一个难题。

  • C3. 故障类别中异常调用链分布不均衡 (Imbalanced abnormal trace distribution in fault categories): 某些故障类别可能只有极少数的异常调用链样本,而另一些则有数千个。这种数据不平衡性对分类模型的训练和评估构成了挑战,需要模型具备从少量样本中学习的能力。

2.1.3. 这篇论文的切入点或创新思路是什么?

论文的创新思路在于将异常调用链的故障诊断问题转化为多类分类任务,并采用元学习 (meta-learning) 策略来解决上述挑战。具体切入点包括:

  1. 自动化故障类别分类: 提出 TraFaultDia 框架,直接将异常调用链分类到预定义的故障类别,从而自动识别故障组件和根本原因,取代人工分析。
  2. 多模态数据融合: 设计 AttenAE (Multi-Head Attention Autoencoder) 来无监督地融合高维、多模态的调用链数据(包括 Span 和 Log 的各种属性),生成压缩且有效的调用链表示。
  3. 元学习实现快速适应: 采用 TEMAML (Transformer-Encoder based Model-Agnostic Meta-Learning) 模型,使其具备少样本学习 (few-shot learning) 能力,以处理不平衡数据(C3),并实现跨系统适应性 (cross-system adaptability),以应对微服务系统异构性(C1)。这意味着模型可以在一个微服务系统上训练后,仅用少量标签数据就能快速适应另一个新系统或新故障类别。

2.2. 核心贡献/主要发现

2.2.1. 论文最主要的贡献

  1. 提出了 TraFaultDia 框架: 一个新颖的 AIOps 框架,能够自动将微服务系统中的异常调用链分类到特定的故障类别,从而实现无需人工分析的自动故障组件和根本原因识别。该框架只需目标微服务系统中的少量带标签异常调用链实例即可高效工作。
  2. 创新的多模态数据融合机制: 提出了一种无监督方法,通过 AttenAE 模型将高维、多模态的调用链相关数据(包括 Span 和 Log 的文本、时间、身份属性)融合为统一、压缩且有效的调用链表示,从而促进高效的调用链分析。
  3. 强大的元学习能力: TraFaultDia 采用 TEMAML,使其具备在少样本 (few-shot) 条件下进行跨系统 (cross-system)系统内 (within-system) 故障分类的强大适应性,有效解决了微服务系统异构性、数据高维多模态以及故障类别样本不均衡等关键挑战。
  4. 全面的实验评估: 在两个具有代表性的基准微服务系统 TrainTicketOnlineBoutique 的开放数据集上进行了广泛评估,验证了该方法的有效性和效率。

2.2.2. 论文得出了哪些关键的结论或发现?

  1. 出色的系统内适应性 (Within-system adaptability): 在 50 个新的、未见的分类任务上,TraFaultDiaTrainTicketOnlineBoutique 系统内训练并分别以 10 个带标签实例进行适应后,平均准确率分别达到 93.26% 和 85.20%。
  2. 显著的跨系统适应性 (Cross-system adaptability): 即使在与训练系统不同的微服务系统上应用,TraFaultDia 仍能保持高准确率。在跨系统场景中,提供 10 个带标签实例后,TraFaultDiaTrainTicketOnlineBoutique 上分别实现了 92.19% 和 84.77% 的平均准确率。
  3. 多模态数据融合的重要性: AttenAE 在构建有效调用链表示方面贡献最大,其性能显著优于仅使用 Span 数据的方法(OnlySpan+TEMAMLOnlySpan+TEMAML 的准确率通常低约 10%)。这表明融合 Log 数据对于全面的故障分类至关重要。
  4. 元学习的效率优势: TEMAML 及其相关的 MAML 方法在测试阶段(适应新任务)比传统的 K-Nearest Neighbor 方法(AttenAE+NNeighborAttenAE+NNeighbor)快 4-11 倍,凸显了元学习在动态微服务环境中快速适应新故障的效率优势。
  5. 元训练任务数量的影响: 消融研究表明,增加元训练任务的数量(从 2 到 4)可以提高模型的鲁棒性和在新任务上的平均准确率,符合 MAML 作为多任务学习算法的特性。

3. 预备知识与相关工作

3.1. 基础概念

为了帮助初学者理解 TraFaultDia 框架及其工作原理,本节将详细介绍论文中涉及的关键技术概念和术语。

3.1.1. 微服务系统 (Microservice-Based Systems, MSS)

微服务系统是一种软件架构风格,其中应用程序被构建为一组松耦合、可独立部署的服务。每个服务都专注于一个特定的业务功能,并通过轻量级机制(如 HTTP API)进行通信。

  • 特点: 独立性、自治性、分布式、弹性、可扩展性。
  • 挑战: 由于服务数量众多、交互复杂、动态性高,故障定位和根本原因分析变得非常困难。

3.1.2. 调用链 (Traces)、Span (Span) 和日志 (Logs)

这些是理解微服务系统运行时行为的关键观测数据。

  • 调用链 (Traces): 在分布式系统中,一个用户请求可能横跨多个服务,产生一系列的交互。调用链就是对这个请求端到端执行路径的记录,它展示了请求在不同服务间流动的完整过程。一个调用链通常由一个或多个 Span 组成,形成一个有向无环图 (DAG) 或树形结构。
  • Span (Span): 调用链中的一个基本单元,代表了请求在某个服务内执行的单个操作。每个 Span 都有一个唯一的 Span ID,并记录了该操作的名称、开始时间、结束时间、服务名称、操作持续时间、以及指向父 SpanSpan ID (除了根 Span) 等信息。Span 之间通过父子关系构建出调用链的层级结构。
    • 属性:
      • 文本属性: call component (调用组件,表示系统涉及的部分) 和 path (调用路径,请求经过的路由)。
      • 时间属性: span start time (Span 开始时间) 和 span end time (Span 结束时间),反映操作的持续时间。
      • 身份属性: trace ID (调用链 ID,标识所属调用链) 和 span ID (Span ID,标识自身)。Span ID 具有层级结构,反映父子关系。
  • 日志 (Logs): 在服务执行过程中,为了记录系统状态、事件或错误而生成的消息。日志通常包含时间戳、消息内容、服务名、严重级别等信息。在微服务环境中,日志是诊断问题的重要信息来源。
    • 属性:
      • 文本属性: log component (日志组件,生成日志消息的系统部分),log message (日志消息内容),severity level (严重级别,如 INFOWARNERROR)。
      • 身份属性: trace ID (调用链 ID,关联到相应的调用链) 和 span ID (Span ID,关联到生成该日志的 Span)。

3.1.3. AIOps (Artificial Intelligence for IT Operations)

AIOps 是一种结合人工智能(尤其是机器学习)和大数据技术来自动化和优化 IT 运营管理的方法。它旨在通过分析大量的运维数据(如日志、指标、调用链)来自动检测异常、预测故障、定位根本原因并提供解决方案,从而减少人工干预,提高运维效率和系统可靠性。

3.1.4. 根本原因分析 (Root Cause Analysis, RCA)

RCA 是一个系统性过程,旨在识别导致问题或故障的根本原因,而不仅仅是处理其症状。在微服务系统中,RCA 意味着不仅要发现哪个服务出错了,还要找出为什么出错,例如是配置问题、代码缺陷、资源瓶颈还是外部依赖失败。

3.1.5. 元学习 (Meta-Learning) 与少样本学习 (Few-Shot Learning)

  • 元学习 (Meta-Learning),又称“学会学习 (Learning to Learn)”: 一种机器学习范式,其目标是训练模型能够快速适应新任务,而不是直接解决某个特定任务。元学习模型通过在大量不同的“训练任务”上学习,来掌握如何学习的规律,从而在新任务出现时,即使只有少量数据也能快速学习和泛化。
  • 少样本学习 (Few-Shot Learning): 元学习的一个重要应用场景。指模型在只有极少数(例如 K 个)带标签样本的情况下,仍然能够对新类别进行有效分类或回归的能力。这对于数据稀缺或类别不平衡的场景(如微服务故障诊断中罕见故障类别)非常重要。
  • N-Way K-Shot 设置: 元学习任务的一种标准设置。其中 N-Way 表示在新任务中需要区分 NN 个不同的类别,K-Shot 表示每个类别只提供 KK 个带标签的样本作为模型的“支持集 (support set)”用于适应新任务。

3.1.6. Transformer (Transformer) 与自注意力机制 (Self-Attention)

  • Transformer: 一种主要基于自注意力机制的深度学习模型架构,最初为处理序列数据(如自然语言)而设计。它彻底改变了序列建模领域,成为许多最先进模型(如 BERTGPT)的基础。
  • 自注意力机制 (Self-Attention): Transformer 的核心组件。它允许模型在处理序列中的每个元素时,都能考虑到序列中所有其他元素的重要性。通过计算查询 (Query, Q)、键 (Key, K) 和值 (Value, V) 之间的相似性,自注意力机制能够为序列中的每个元素分配一个权重,这些权重表示了其他元素对当前元素的重要性。
    • 多头注意力 (Multi-Head Attention): 将自注意力机制并行地运行多次,每个“头”学习不同的注意力表示,然后将这些表示拼接起来。这有助于模型从不同的角度捕捉信息。
    • 公式: 多头注意力机制的计算如论文中公式 (2) 所示: {Attention(Q,K,V)=softmax(QKTdk)Vheadi=Attention(QWQ,KWK,VWV)MultiHead(Q,K,V)=Concatenate(head1,,headh)WO \left\{ \begin{array}{l} \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \\ \mathrm{head}_i = \mathrm{Attention}(QW^Q, KW^K, VW^V) \\ \mathrm{MultiHead}(Q, K, V) = \mathrm{Concatenate}(\mathrm{head}_1, \dots, \mathrm{head}_h)W^O \end{array} \right. 其中:
      • QQ (Query)、KK (Key)、VV (Value) 分别是查询、键和值矩阵。它们是输入序列的线性变换。
      • dkd_k 是键向量的维度,dk\sqrt{d_k} 用于缩放点积,防止梯度过小。
      • softmax\mathrm{softmax} 函数将注意力分数归一化为概率分布。
      • headi\mathrm{head}_i 是第 ii 个注意力头的输出,通过对 Q, K, V 进行不同的线性变换(由 WQ,WK,WVW^Q, W^K, W^V 参数化)后,再应用注意力函数计算得到。
      • MultiHead\mathrm{MultiHead} 函数将所有 hh 个注意力头的输出拼接 (Concatenate) 起来,然后通过一个线性变换(由 WOW^O 参数化)得到最终的多头注意力输出。

3.1.7. 自动编码器 (Autoencoder, AE)

一种无监督神经网络模型,用于学习输入数据的有效编码(即表示)。它由两部分组成:

  • 编码器 (Encoder): 将输入数据压缩成一个低维的隐空间表示 (latent representation)。
  • 解码器 (Decoder): 尝试从隐空间表示中重建原始输入数据。 Autoencoder 通过最小化输入数据和重建数据之间的差异来训练。在本文中,AttenAE 利用注意力机制来增强编码器的特征融合能力。

3.1.8. MAML (Model-Agnostic Meta-Learning)

MAML 是一种模型无关的元学习算法,这意味着它几乎可以应用于任何使用梯度下降进行训练的模型。MAML 的核心思想是学习一组良好的模型初始参数,使得这个模型只需通过少量梯度更新就能在新任务上快速适应并表现良好。

  • 内循环 (Inner Loop): 在每个特定任务上,使用少量的支持集 (support set) 数据对模型参数进行少量梯度更新,以适应当前任务。
  • 外循环 (Outer Loop): 根据模型在所有任务的查询集 (query set) 上的表现,更新模型的初始参数,使得模型在所有任务上都能通过内循环快速适应。

3.2. 前人工作

论文在“相关工作 (Related work)”部分讨论了现有的调用链表示和分类方法,并指出了它们的局限性。

3.2.1. 调用链表示 (Trace Representation)

  • 基于图神经网络 (GNN) 的方法: 许多研究 (例如 [Chen et al. 2023, 2022; Raeiszadeh et al. 2023; Zhang et al. 2022a,b]) 利用 GNN 构建调用链图。这些图将 Span 建模为节点,将 Span 之间的交互建模为边,以反映请求在调用链中的流动。节点通常使用 Span 属性(如调用路径、响应时间)或 Span 关联的日志文本属性来详细描述。
    • 优点: 在检测异常调用链和定位潜在故障服务方面有效。
    • 局限性:
      • 计算开销大和可伸缩性问题: 对于包含数百个 Span 的调用链,构建和更新 GNN 的计算成本非常高。在动态变化的微服务环境中,频繁更新调用链图以反映新的或变化的 Span 和依赖关系是计算上的负担。
      • 不适用于本文场景: 论文的目标是高效适应,而 GNN 的计算负担不符合这一需求。
  • 基于序列模型的方法: 另一些异常检测研究 (例如 [Du et al. 2023; Kohyarnejadfard et al. 2022; Nedelkoski et al. 2019b]) 将调用链视为 Span 序列,并使用 Span 属性来构建调用链表示。
    • 局限性: 它们完全忽略了日志 (logs) 作为调用链一部分的重要性。正如论文在 2.2 节所讨论的,日志包含关键的上下文事件信息,对于识别某些故障类别至关重要。仅仅依靠 Span 序列可能导致对特定故障类型的识别无效。

3.2.2. 调用链分类 (Trace Classification)

  • 二分类 (Binary Classification): 大多数微服务异常检测研究 (例如 [Kohyarnejadfard et al. 2019; Kong et al. 2024; Zhang et al. 2022b]) 侧重于二分类任务,即判断调用链是“异常”还是“正常”。
    • 局限性: 这与本文的目标不同。本文的目标是在已检测到的异常调用链中进行多类分类 (multi-class classification),将每个异常调用链关联到具体的故障类别,这需要更细致的方法。
  • 多类分类 (Multi-Class Classification): 在微服务或类似云系统中,直接进行异常调用链多类分类的研究非常罕见。
    • 相关工作: Nedelkoski et al. [2019a] 是一项相关工作。它使用卷积神经网络 (CNN) 将异常调用链分类为四种基于时间序列的故障类别(增量、均值漂移、逐渐增加、柱状)。该方法将调用链表征为 Span 序列,并使用 Span 属性“调用路径 (call path)”的时间序列数据进行分类。
    • 局限性:
      • 故障类别范围有限: 该方法关注的故障类别范围较窄,无法覆盖本文故障数据集中更广泛的故障类型。
      • 未解决 MSS 异构性 (C1): CNN 模型难以有效应对不同微服务系统之间的异构性。
      • 未充分利用多模态数据 (C2): 该方法仅考虑“调用路径”的时间序列数据,忽略了其他重要的调用链相关数据模态(如日志信息),而这些模态对于识别某些故障类别至关重要。

3.3. 技术演进

在微服务系统监控和故障诊断领域,技术演进大致经历了以下阶段:

  1. 早期阶段:基于日志和指标的传统监控。 主要依靠人工配置告警规则和阈值,通过查看日志和聚合指标来判断系统健康状况。故障诊断高度依赖专家经验。
  2. AIOps 1.0:异常检测与定位。 引入机器学习技术,实现日志异常检测、指标异常检测、以及基于调用链图的异常 Span 或服务定位。这一阶段的目标是自动化“发现异常”和“找出异常可能在哪里”。
  3. AIOps 2.0:从定位到诊断。 随着系统复杂性增加,仅仅知道“哪里”有问题不足以高效解决问题。需要更精确地诊断“是什么”问题以及“为什么”会发生。这催生了对故障分类和根本原因分析自动化方法的需求。本文 TraFaultDia 正是这一阶段的代表,旨在弥补从“定位”到“诊断”之间的鸿沟。
  4. 未来趋势:可解释性与自主修复。 未来的 AIOps 将不仅能诊断故障,还能提供可解释的诊断结果,并进一步自动化故障的修复过程。

3.4. 差异化分析

TraFaultDia 与现有研究的主要区别和创新点体现在以下几个方面:

  1. 从二分类到多类分类的演进:

    • 现有工作: 大多数 AIOps 方法侧重于将调用链分类为“正常”或“异常”的二分类问题。
    • TraFaultDia 专注于对已检测到的异常调用链进行多类分类,将其归类到具体的故障类别,从而直接识别故障组件和根本原因。这提供了一个更深层次的诊断结果。
  2. 全面的多模态数据融合:

    • 现有工作: GNN 方法虽然考虑 SpanLog,但存在计算开销和可伸缩性问题。基于序列模型的方法常忽略 Log 数据。
    • TraFaultDia 通过 AttenAE 无监督地融合了 SpanLog 的所有关键属性(文本、时间、身份),创建了统一且压缩的调用链表示。这种方法比 GNN 更具可伸缩性,并避免了 Span 序列方法的数据模态缺失问题。
  3. 强大的跨系统和少样本适应性:

    • 现有工作: 现有的多类分类方法(如 Nedelkoski et al. [2019a]CNN)通常针对特定系统或有限的故障类型进行训练,难以应对微服务系统的异构性,且不具备少样本学习能力。
    • TraFaultDia 引入元学习 (meta-learning) 中的 MAML 算法,使其具备模型无关 (model-agnostic) 的快速适应能力。这意味着 TraFaultDia 可以在一个系统上训练后,仅用少量标签数据就能快速适应另一个不同的微服务系统(跨系统适应性)或新的故障类别(少样本适应性),显著降低了实际应用中的数据标注和模型再训练成本。
  4. 高效的调用链表示:

    • 现有工作: GNN 构建调用链图的计算复杂性高,且在动态微服务环境中更新成本大。

    • TraFaultDia AttenAE 生成的压缩表示避免了 GNN 的复杂性,无需频繁更新 Span 之间的依赖关系,使其在动态和复杂环境中更具可伸缩性和计算效率。

      综上所述,TraFaultDia 在故障诊断的精细化程度、数据利用的全面性、模型的适应性和计算效率方面,都展现出与现有方法显著的差异和创新。

4. 方法论

本节将详细阐述 TraFaultDia 框架的工作流程、设计理念以及其核心组件 AttenAETEMAML 的具体实现。

4.1. 方法原理

TraFaultDia 的核心思想是利用元学习 (meta-learning) 范式,使模型能够快速适应微服务系统 (MSS) 中新的或现有故障类别的少样本分类任务。为了实现这一点,框架首先通过一个特制的自动编码器 AttenAE (Multi-Head Attention Autoencoder) 将高维、多模态的调用链数据压缩成统一且有效的低维表示。随后,将这些表示作为输入,送入一个基于 Transformer 编码器的元学习模型 TEMAML (Transformer-Encoder based Model-Agnostic Meta-Learning) 进行分类。

其直觉在于:

  1. 有效表示: 微服务调用链数据复杂且多模态,直接使用原始数据进行分类效率低下且可能丢失关键信息。AttenAE 能够无监督地学习如何将 SpanLog 的多种属性(文本、时间、身份)融合并压缩到低维向量中,从而捕捉调用链的本质特征,为后续分类提供高质量输入。
  2. 快速适应: 实际微服务系统故障类别可能多样且样本不平衡,传统分类模型在新故障类型出现时需要大量标签数据进行重新训练。元学习允许模型学习一种“如何学习”的能力,即通过在多个分类任务上训练,模型能够学习到一套良好的初始参数。当遇到新的分类任务时,即使只有少量带标签样本,模型也能通过快速微调(少量梯度更新)来快速适应并表现出色,解决了数据稀缺和系统异构性问题。
  3. 泛化能力: TEMAML 结合了 Transformer 编码器的强大表征能力和 MAML 的快速适应特性,使其不仅能在训练过的系统内泛化,还能将学习到的知识迁移到不同的微服务系统上,实现跨系统分类。

4.2. 核心方法详解

TraFaultDia 框架包含两个主要组件:Multi-Head Attention Autoencoder (AttenAE)Transformer-Encoder based Model-Agnostic Meta-Learning (TEMAML) 模型。整个框架的概览如下图 (原文 Figure 3) 所示:

Fig. 3. Overview of our framework 该图像是图3,展示了TraFaultDia框架中AttenAE与TEMAML的交互流程。包括利用AttenAE对微服务系统异常调用链进行编码与解码,构建调用链表示,再通过TEMAML进行基于元学习的异常调用链分类,分为元训练和元测试阶段。

4.2.1. TraFaultDia 工作流与设计原理

TraFaultDia 框架的工作流程分为两个主要阶段:

  1. 调用链表示学习 (Phase 1: Trace Representation Learning):

    • 给定一个微服务系统,AttenAE 在足够多的无标签调用链上进行无监督训练。
    • AttenAE 的目标是学习如何将原始的调用链相关数据融合并压缩成有效表示。
    • AttenAE 由一个编码器 (encoder) 和一个解码器 (decoder) 组成:编码器负责从原始数据生成调用链表示;解码器负责从这些表示重建原始数据。
    • AttenAE 的训练目标是最小化原始数据与重建数据之间的差异(损失)。
    • 一旦训练完成,仅使用编码器来为该微服务系统中的新调用链生成表示。
  2. 元学习分类 (Phase 2: Meta-Learning Classification):

    • TEMAML 训练基础模型 Transformer-Encoder (TE) 来执行异常调用链分类任务。
    • 元训练阶段 (Meta-training phase): TEMAML 在来自一个微服务系统的多个异常调用链分类任务(称为元训练任务)上进行训练。这些任务也是 N-Way K-Shot 设置,即每个任务包含 NN 个故障类别,每个类别有 KK 个带标签的实例。
    • 元测试阶段 (Meta-testing phase): 训练后的 TEMAML 在来自任何微服务系统的新的、未见的异常调用链分类任务(称为元测试任务)上进行评估。同样是 N-Way K-Shot 设置。
    • TEMAML 使用在阶段 1 优化后的 AttenAE 编码器来为这些任务中的异常调用链构建表示。

设计原理 (Design Rationale):

  • 选择 AttenAE 的原因:
    • 数据融合与压缩: 解决挑战 C2 (高维、多模态调用链相关数据)。AttenAE 作为一个自动编码器,能够将原始的高维多模态数据融合并压缩成统一、低维的表示。
    • 特征集成: AttenAE 中的多头注意力机制能够识别并整合调用链相关数据中最相关的特征来构建表示。
    • 无监督学习: AttenAE 支持无监督训练,这非常适合微服务系统,因为无标签的调用链数据易于获取。
  • 选择 TEMAML 的原因:
    • TE (Transformer-Encoder) 作为基础模型: 异常调用链表示是潜在表示,是多模态数据的融合而非真正的序列。TE 擅长通过自注意力机制识别和整合这些潜在表示中的重要特征,使其成为合适的分类器。
    • MAML 实现少样本和迁移学习: 解决挑战 C1 (MSS 异构性) 和 C3 (不平衡异常调用链分布)。MAML 提供少样本学习 (few-shot learning) 能力,使模型能够仅用少量标签实例识别频繁和罕见的故障类别。同时,它还提供迁移学习 (transfer learning) 能力,支持系统内和跨系统的适应性,即使面对异构的微服务系统也能有效工作。

4.2.2. AttenAE 用于构建调用链表示

AttenAE 的架构如下图 (原文 Figure 4) 所示:

Fig. 4. AttenAE architecture 该图像是图4,AttenAE架构的示意图,展示了从一条跟踪的spans和日志中提取属性,并通过多头注意力机制的编码器-解码器结构进行特征投影和重构的过程。

给定一个微服务系统,AttenAE 的目标是为该系统中的调用链 Tr={Tr1,Tr2,...,Trn}Tr = \{Tr_1, Tr_2, ..., Tr_n\} 构建表示,其中每个 TriTr_i 包含一系列的 SpanLogTr=(Span,Log)Tr = (\mathrm{Span}, \mathrm{Log}) 表示所有调用链中 SpanLog 的组合。

4.2.2.1. Span 预处理和向量生成

对于每个 Span,论文提取了在 2.2 节中讨论的所有文本属性 (call componentpath)、时间属性 (span startend time) 以及身份属性 (trace IDspan ID)。

  1. 时间属性处理:
    • UNIX 格式的时间属性在每个 Span 的上下文中进行归一化 (normalize),考虑到每个 Span 的独特特征和时间尺度。
    • 将归一化后的时间属性连接起来,形成一个针对 TrSpan 的单一数值向量 VnumericV_{\mathrm{numeric}}
  2. Span ID 处理:
    • 抽象掉 Span ID 中共享的公共前缀,仅保留层级数字 (hierarchical-level digits)
    • 例如,将 a480f2.0, a480f2.1, a480f2.2, a343mc.0, a987gq.0 重新分配为 1.0, 1.1, 1.2, 2.0, 3.0
    • 在调用链上下文内对 Span ID 进行归一化,生成一个针对 TrSpan 的向量 Vspan_idV_{\mathrm{span\_id}}
  3. 文本属性处理 (call componentpath):
    • 将文本属性 call componentpath 连接起来,形成一个单一属性,称为“服务操作 (service operation)”。

    • 采用神经表示方法 (neural representation method),而不是基于模板的方法,以更好地处理微服务系统中不断变化的、包含大量 O0V (Out-Of-Vocabulary) 词汇的“服务操作”。

    • 具体步骤如下:

      • 步骤 1. 预处理: 将所有大写字母转换为小写,将特定变量(如 "Prod1234")替换为标准标识符 ("ProductID"),并移除所有非字母字符。
      • 步骤 2. 分词 (Tokenization): 使用 WordPiece 分词技术将“服务操作”分词为子词 (subwords)
      • 步骤 3. 神经表示: 将子词输入到预训练的 BERT 基础模型中,生成每个子词的词嵌入 (word embeddings)。使用模型最后一个编码层生成的词嵌入,并通过对所有子词嵌入求平均值来计算每个“服务操作”的句嵌入 (sentence embedding)
    • 这个过程产生了一个针对 TrSpan 的服务操作的向量表示 VoperationV_{\mathrm{operation}}

      最终,对于 Tr,将上述阶段获得的向量表示连接 (concatenate) 起来,从而建立一个针对 Span 的复合向量 VspanRdspanV_{\mathrm{span}} \in \mathbb{R}^{d_{\mathrm{span}}},其中 dspand_{\mathrm{span}} 表示 VspanV_{\mathrm{span}} 的向量空间维度。

4.2.2.2. Log 预处理和向量生成

提取日志中的文本属性 (log component, message, severity level) 和身份属性 (trace ID)。

  1. Log 事件处理:
    • 使用 trace ID 将日志收集到其所属的调用链中。
    • 将文本属性连接起来,形成一个单一属性,称为“日志事件 (log event)”。
    • 与“服务操作”类似,采用神经表示方法来构建“日志事件”的神经表示,跳过日志解析步骤,因为日志解析在动态变化的日志系统中可能效果有限。
    • 神经表示的构建过程与 Span 中的服务操作相同(预处理、分词、神经表示)。
  2. 这个过程产生了一个针对 TrLog 的向量表示 VlogRdlogV_{\mathrm{log}} \in \mathbb{R}^{d_{\mathrm{log}}},其中 dlogd_{\mathrm{log}} 表示 VlogV_{\mathrm{log}} 的向量空间维度。

4.2.2.3. 调用链表示构建

对于给定微服务系统,AttenAE 的编码器通过以下步骤为调用链 Tr 构建调用链表示。

  1. 特征空间投影: 编码器首先将输入的 Span 向量 VspanV_{\mathrm{span}}Log 向量 VlogV_{\mathrm{log}} 投影到一个公共特征空间 Rd\mathbb{R}^{d'}Vspan=g(WspanVspan+bspan) V'_{\mathrm{span}} = g(W_{\mathrm{span}}V_{\mathrm{span}} + b_{\mathrm{span}}) Vlog=g(WlogVlog+blog) V'_{\mathrm{log}} = g(W_{\mathrm{log}}V_{\mathrm{log}} + b_{\mathrm{log}}) 其中:

    • gg 表示激活函数 (activation function)。
    • WspanW_{\mathrm{span}}WlogW_{\mathrm{log}} 分别是 SpanLog 的权重矩阵。
    • bspanb_{\mathrm{span}}blogb_{\mathrm{log}} 是对应的偏置向量。
    • 通过线性变换和非线性激活,将原始输入向量映射到统一的特征表示 VspanV'_{\mathrm{span}}VlogV'_{\mathrm{log}}
  2. 多头注意力融合: AttenAE 的编码器整合了多头注意力机制(如前文 3.1.6 节中公式 (2) 所示),将 VspanV'_{\mathrm{span}}VlogV'_{\mathrm{log}} 融合为调用链表示 ZZZ=MultiHead(Vspan,Vlog,Vlog) Z = \mathrm{MultiHead}(V'_{\mathrm{span}}, V'_{\mathrm{log}}, V'_{\mathrm{log}}) 这里,将 VspanV'_{\mathrm{span}} 设置为查询 (Query, QQ),将 VlogV'_{\mathrm{log}} 同时设置为键 (Key, KK) 和值 (Value, VV)。这种设置反映了 Span 结构和服务通信作为查询,而日志提供详细的上下文事件信息作为被查询和提取的对象。

通过以上过程,对于一组调用链 Tr={Tr1,Tr2,...,Trn}Tr = \{Tr_1, Tr_2, ..., Tr_n\},可以生成对应的调用链表示 Z={Z1,Z2,...,Zn}Z = \{Z_1, Z_2, ..., Z_n\},其中 ZiZ_i 对应于 TriTr_i

  1. 解码器重建与损失函数: AttenAE 的解码器负责将调用链表示 ZZ 重建回原始的 SpanLog 向量,有效地反转编码器的过程: V^span=g(WspanZ+bspan) \hat{V}_{\mathrm{span}} = g(W'_{\mathrm{span}}Z + b'_{\mathrm{span}}) V^log=g(WlogZ+blog) \hat{V}_{\mathrm{log}} = g(W'_{\mathrm{log}}Z + b'_{\mathrm{log}}) 其中:
    • V^spanRdspan\hat{V}_{\mathrm{span}} \in \mathbb{R}^{d_{\mathrm{span}}}V^logRdlog\hat{V}_{\mathrm{log}} \in \mathbb{R}^{d_{\mathrm{log}}} 是重建的 SpanLog 向量。

    • gg 是激活函数。

    • WspanW'_{\mathrm{span}}WlogW'_{\mathrm{log}} 是对应的权重矩阵。

    • bspanb'_{\mathrm{span}}blogb'_{\mathrm{log}} 是偏置向量。

      AttenAE 的训练目标是优化其参数 Ψ\Psi (包括编码器和解码器中的所有权重和偏置),以最小化原始向量 (Vspan,Vlog)(V_{\mathrm{span}}, V_{\mathrm{log}}) 与其重建向量 (V^span,V^log)(\hat{V}_{\mathrm{span}}, \hat{V}_{\mathrm{log}}) 之间的总损失 L\mathcal{L}minΨL=V^spanVspan2+V^logVlog2 \min_{\Psi} \mathcal{L} = \| \hat{V}_{\mathrm{span}} - V_{\mathrm{span}} \|^2 + \| \hat{V}_{\mathrm{log}} - V_{\mathrm{log}} \|^2 这个损失函数是均方误差 (Mean Squared Error, MSE),最小化它意味着模型能够尽可能准确地从压缩表示中恢复原始信息。

4.2.3. TEMAML 用于跨微服务系统少样本异常调用链分类

TEMAML 的基本架构如下图 (原文 Figure 5) 所示:

Fig. 5. TEMAML learning process 该图像是图 5,展示了TEMAML(基于任务的元学习)学习过程的示意图,包含内循环和外循环两个阶段,通过迭代优化参数heta以实现对异常跟踪的分类。

TEMAML 训练基础模型 Transformer-Encoder (TE) (表示为 ff) 来执行多类异常调用链分类。它通过两个阶段进行:元训练 (meta-training) 和元测试 (meta-testing)。

4.2.3.1. 异常调用链分类的基础模型

TEMAML 使用 TE 作为基础模型 ff 来对异常调用链进行多类分类。其工作流如下:

  1. 输入: TE 接收由 AttenAE 构建的调用链表示 ZZ 作为输入,其中 ZZ 代表任务中所有异常调用链 Tr 的集合。
  2. 自注意力机制: 输入 ZZ 经过 TE 的自注意力机制处理。这个机制通过加权最相关的部分来捕捉每个调用链表示 ZiZ_i 内部的依赖关系,以识别每个调用链 TriTr_i 的故障类型。该机制遵循多头注意力机制(如前文 3.1.6 节中公式 (2) 所示)。由于使用相同的输入 ZZ 作为 Q, K, V,因此称为“自注意力 (self-attention)”。 output=MultiHead(Z,Z,Z) \mathrm{output} = \mathrm{MultiHead}(Z, Z, Z)
  3. 后续层: 自注意力机制的输出进一步通过一个池化层 (pooling layer) 来突出关键特征,一个Dropout 层 (dropout layer) 来防止过拟合,以及一个全连接层 (fully connected layer) 将精炼后的输出整形为适合分类的格式。
  4. 分类器: 最后,一个 Softmax 分类器处理全连接层的输出,计算每个故障类别的概率。

4.2.3.2. 元训练 (Meta-training)

此阶段旨在训练 TE 找到鲁棒的参数,使其能够快速适应来自任何微服务系统的异常调用链分类任务。

  1. 任务定义: TE 在从一个微服务系统(例如 TrainTicketOnlineBoutique)中采样的多个异常调用链分类任务(元训练任务)上进行训练,记为 T=(S,Q)T = (S, Q)

    • 每个元训练任务 TiT_i 包含一个支持集 (support set) Si={(zijspt,yijspt)}j=1N×KS_i = \{(z_{ij}^{\mathrm{spt}}, y_{ij}^{\mathrm{spt}})\}_{j=1}^{N \times K},其中有 NN 个不同的故障类别,每个类别有 KK 个带标签的调用链实例。
    • 每个元训练任务 TiT_i 还包含一个查询集 (query set) Qi={(zigqry,yigqry)}g=1N×MQ_i = \{(z_{ig}^{\mathrm{qry}}, y_{ig}^{\mathrm{qry}})\}_{g=1}^{N \times M},其中有 NN 个不同的故障类别,每个类别有 MM 个带标签的调用链实例。通常 M>KM > K,以确保在查询集上进行更稳健的优化。
    • zijsptz_{ij}^{\mathrm{spt}}zigqryz_{ig}^{\mathrm{qry}} 是通过给定微服务系统的优化 AttenAE 编码器构建的调用链表示。
  2. 双循环优化: 元训练阶段采用双循环优化过程:

    • 内循环 (Inner Loop):任务级别学习

      • 首先随机初始化 ff 的参数,表示为带有参数 θ\thetafθf_\theta
      • 在适应每个元训练任务 TiT_i 时,ff 的参数 θ\theta 会被转换为任务特定的参数 θi\theta'_i,对应于更新后的模型 fθif_{\theta'_i}
      • θi\theta'_i 是通过在 TiT_i 的支持集 SiS_i 上执行梯度下降更新计算得到的: θi=θαθLTi(fθ(Si)) \theta'_i = \theta - \alpha \nabla_\theta \mathcal{L}_{T_i}(f_\theta(S_i)) 其中:
        • α\alpha 是内循环更新的学习率。
        • LTi\mathcal{L}_{T_i} 是在任务 TiT_i 的支持集 SiS_i 上的损失函数。
        • 这一步的目标是使模型 fθif_{\theta'_i} 在当前任务 TiT_i 的支持集上表现良好。
    • 外循环 (Outer Loop):元学习级别优化

      • 外循环通过优化 ff 的初始参数 θ\theta 来确保 θi\theta'_i 在所有任务 TT 上都能获得最佳性能。
      • 它通过最小化在所有元训练任务 TT 的查询集 QQ 上的总损失 L(θ)\mathcal{L}(\theta) 来更新 θ\thetaminθL(θ)=TiTLTi(fθi(Qi)) \min_{\theta} \mathcal{L}(\theta) = \sum_{T_i \in T} \mathcal{L}_{T_i}(f_{\theta'_i}(Q_i)) 其中 LTi\mathcal{L}_{T_i} 是在任务 TiT_i 的查询集 QiQ_i 上的损失函数。
      • MAML 标准的外循环更新涉及计算梯度的梯度(即二阶导数),计算量很大。为了简化,论文使用一阶近似 (first-order approximation)θθβθTiTLTi(fθi(Qi)) \theta \gets \theta - \beta \nabla_\theta \sum_{T_i \in T} \mathcal{L}_{T_i}(f_{\theta'_i}(Q_i)) 其中:
        • β\beta 是外循环更新的学习率。
        • 这一步的目标是找到一个初始参数 θ\theta,使得从该 θ\theta 开始,经过内循环的少量更新后,模型在所有任务的查询集上都能有良好的表现。
  3. 结果: 外循环的最终结果是得到最优参数 θ\theta^*。然后,基础模型 TE 用这些最优参数 θ\theta^* 进行初始化,得到优化后的基础模型 fθf_{\theta^*}。这个优化后的模型具有增强的适应性,能够快速适应来自任何微服务系统的新任务。

4.2.3.3. 元测试 (Meta-testing)

此阶段使用优化后的 TE (fθf_{\theta^*}) 来适应新的、未见的异常调用链分类任务(元测试任务),这些任务可以来自任何微服务系统

  1. 任务配置: 每个元测试任务的配置与元训练任务相同,记为 Tts=(Sts,Qts)T_{\mathrm{ts}} = (S_{\mathrm{ts}}, Q_{\mathrm{ts}})
  2. 适应: 为了适应某个特定的元测试任务 TtsT_{\mathrm{ts}},将 fθf_{\theta^*} 应用到其支持集 StsS_{\mathrm{ts}} 上进行微调,从而得到针对 TtsT_{\mathrm{ts}} 的特定参数 θts\theta'_{\mathrm{ts}},模型变为 fθtsf_{\theta'_{\mathrm{ts}}}
  3. 评估: 使用 fθtsf_{\theta'_{\mathrm{ts}}} 对查询集 QtsQ_{\mathrm{ts}} 中的异常调用链进行分类,从而评估 TraFaultDia 框架的性能。

5. 实验设置

本节将详细介绍 TraFaultDia 框架的实验设计,包括使用的数据集、评估指标、对比基线以及具体的实验配置。

5.1. 数据集

为了训练和评估 TraFaultDia 框架,论文使用了两个开放数据集:DeepTraLog [FudanSELab 2024] 和 Nezha [IntelligentDDS 2024]。这两个数据集包含了两个代表性的基准微服务系统 TrainTicketOnlineBoutique 的调用链数据。

5.1.1. 数据集描述

  • DeepTraLog 包含 TrainTicket 系统的正常调用链和跨 14 种故障类别的异常调用链。这些故障类别涵盖异步交互、多实例、配置和单体维度,旨在模拟真实世界的异常场景。
  • Nezha 包含 TrainTicketOnlineBoutique 系统的正常调用链和异常调用链。异常调用链是由五种故障类型(CPU 争用、CPU 消耗、网络延迟、错误返回、异常代码缺陷)引起的,每种故障类型应用于系统内的不同服务 Pod。在这种情况下,每个与故障类型关联的 Pod 都代表一个独特的故障类别。

5.1.2. 故障数据集构建与特点

论文基于 DeepTraLogNezha 构建了故障数据集

  • TrainTicket: 包含 30 个故障类别 (F1-F30) 的异常调用链。

  • OnlineBoutique: 包含 32 个故障类别 (B1-B32) 的异常调用链。

    以下是原文 Table 1 总结的故障类别:

    TrainTicket DeepTraLog: Asynchronous service invocations related faults (F1.Asynchronous message sequence error, F2.Unexpected order of data requests, F13.Unexpected order of price optimization steps); Multiple service instances related faults (F8.Key passing issues in requests, F11.BOM data is updated in an unexpected sequence, F12.Price status query ignores expected service outputs); Configuration faults (F3.JVM and Docker configuration mismatch, F4.SSL offloading issue, F5. High request load, F7. Overload of requests to a third-party service); Monolithic faults (F6.SQL error of a dependent service, F9.Bi-directional CSS display error, F10.API errors in BOM update, F14.Locked product incorrectly included in CPI calculation) Nezha: CPU contention on F23.travel, F25.contact, F26.food service pods; Network delay on F28.basic, F29.travel, F30.route, F27.security, F24.verification-code service pods; Message return errors on F16.basic, F15.contact, F18.food, F19.verification-code service pods; Exception code defects on F17.basic, F21.route, F22.price, F20.travel service pods.
    OnlineBoutique Nezha: CPU contention on B4.shipping, B14.cart, B18.currency, B19.email, B26.recommendation, B31.adservice, B9.payment, B11.frontend service pods; CPU consumption on B8.recommendation, B12.frontend, B24.productcatalog, B28.shipping, B17.checkout, B20.email, B32.adservice service pods; Network delay on B10.currency, B1.cart, B15.checkout, B22.productcatalog, B27.shipping, B21.payment, B25.recommendation, B29.adservice, B7.email service pods; Message return errors on B6.frontend, B23.productcatalog, B2.checkout, B30.adservice service pods; Exception code defects on B5.adservic, B13.frontend, B3.productcatalog, B16.checkout service pods

数据特点(原文 Table 2): 论文在故障数据集中观察到以下统计数据,揭示了调用链数据的复杂性和挑战:

以下是原文 Table 2 的结果:

TrainTicketMeanMinMax
Unique traces per
fault category:1196262546
Spans per trace:791345
Logs per trace:441340
OnlineBoutiqueMeanMinMax
Unique traces per
fault category:443321018
Spans per trace:531190
Logs per trace:514184
  • 挑战 C1 (MSS 异构性): TrainTicket 包含 45 个服务,而 OnlineBoutique 有 12 个服务。它们不同的系统性质和服务组成导致了不同的系统行为。
  • 挑战 C2 (高维、多模态数据): 每个调用链的 SpanLog 数量差异很大(1 到数百个)。Span 包含文本、时间、身份属性;Log 包含文本、身份属性。缺失任何模态都会影响识别某些故障类别。
  • 挑战 C3 (不平衡分布): 某些故障类别只有约 30 个实例,而另一些则有数千个,这导致了严重的类别不平衡。

5.1.3. 训练与评估数据划分

  • AttenAE 训练数据: 从每个微服务系统 (TrainTicket/OnlineBoutique) 中随机选择 3960 个无标签调用链 (3360 用于训练,570 用于验证) 来训练 AttenAE,用于构建调用链表示。这些数据不与故障数据集重叠,且正常调用链数量远多于异常调用链,以反映实际情况。
  • TEMAML 训练与评估数据:
    • 故障类别划分:
      • TrainTicket 的 30 个故障类别被划分为 20 个基础故障类别 (base fault categories) 和 10 个新颖故障类别 (novel fault categories)
      • OnlineBoutique 的 32 个故障类别被划分为 22 个基础故障类别和 10 个新颖故障类别
      • 基础和新颖故障类别的组成包含随机混合的故障类型,确保不同 SpanLog 数量的调用链都能被代表。
    • 元学习任务设置 (N-Way K-Shot):
      • 元训练任务: 每个系统随机生成 4 个元训练任务,使用其基础故障类别。配置为 5-way 5-shot。即每个任务包含 5 个故障类别,每个类别有 5 个带标签实例作为支持集。
      • 元测试任务: 每个系统随机生成 50 个元测试任务,使用其新颖故障类别。配置为 5-way 10-shot。即每个任务包含 5 个故障类别,每个类别有 10 个带标签实例作为支持集。
      • 查询集: 对于每个元训练/元测试任务,查询集包含每个故障类别 15 个调用链实例。

5.1.4. 实验设计 (E1-E4)

四个实验旨在评估系统内和跨系统的适应性:

  • E1 (TrainTicket → TrainTicket):TrainTicket 的 4 个元训练任务上训练 TEMAML,并在 TrainTicket 的 50 个元测试任务上评估。
  • E2 (OnlineBoutique → OnlineBoutique):OnlineBoutique 的 4 个元训练任务上训练 TEMAML,并在 OnlineBoutique 的 50 个元测试任务上评估。
  • E3 (OnlineBoutique → TrainTicket):OnlineBoutique 的 4 个元训练任务上训练 TEMAML,并在 TrainTicket 的 50 个元测试任务上评估。
  • E4 (TrainTicket → OnlineBoutique):TrainTicket 的 4 个元训练任务上训练 TEMAML,并在 OnlineBoutique 的 50 个元测试任务上评估。

5.2. 评估指标

为了评估 TraFaultDia 及其基线的有效性,论文选择了准确率 (Accuracy) 作为主要评估指标。同时,也报告了置信区间和范围,并进行了统计学检验。

5.2.1. 准确率 (Accuracy)

  • 概念定义: 准确率衡量的是模型正确预测的样本数量占总样本数量的比例。在分类任务中,它表示所有预测中,模型做出正确预测的频率。

  • 数学公式: Accuracy=Number of Correct PredictionsTotal Number of Predictions=TP+TNTP+TN+FP+FN \mathrm{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}} = \frac{TP + TN}{TP + TN + FP + FN} 对于多类分类任务,通常简化为: Accuracy=i=1CCorrect PredictionsiTotal Predictions \mathrm{Accuracy} = \frac{\sum_{i=1}^{C} \text{Correct Predictions}_i}{\text{Total Predictions}} 其中 CC 是类别总数,Correct Predictionsi\text{Correct Predictions}_i 是第 ii 类中正确预测的样本数。

  • 符号解释:

    • TP (True Positives):真正例,实际为正类且被正确预测为正类的样本数。
    • TN (True Negatives):真负例,实际为负类且被正确预测为负类的样本数。
    • FP (False Positives):假正例,实际为负类但被错误预测为正类的样本数。
    • FN (False Negatives):假负例,实际为正类但被错误预测为负类的样本数。
    • Number of Correct Predictions\text{Number of Correct Predictions}:模型正确分类的样本总数。
    • Total Number of Predictions\text{Total Number of Predictions}:所有预测的样本总数。
  • 适用性说明: 尽管在类别分布不均衡时,准确率可能不是最佳指标(例如,在二分类异常检测中,预测多数类即可获得高准确率),但在本文的 5-way 元学习设置中,准确率是合适的。因为在这种设置下,简单地预测单一类别最多只能达到 20% 的准确率,从而确保了准确率能够有效反映模型性能。

  • 报告方式: 在每个实验中,对每个元测试任务进行五次试验,选择最高的准确率。报告结果时,给出 50 个元测试任务的平均准确率 (average accuracy)95% 置信区间 (95% confidence interval, CI) 以及任务准确率的范围(最小和最大值)

5.2.2. 统计学检验 (Statistical Tests)

  • t-检验 (t-tests [Fisher 1992]): 用于统计学比较 TraFaultDia 与有效基线在 50 个元测试任务上的准确率差异。
    • 显著性水平: 报告 pp 值,通常 p<0.05p < 0.05 (或更严格的 p<0.001p < 0.001) 表示统计学上的显著差异。
  • Cohen's D 值: 用于量化效应大小 (effect size)。
    • 概念定义: Cohen's D 衡量两个均值之间标准差单位的差异,提供了一种标准化的方式来判断差异的实际重要性。
    • 解释:
      • 0.2:小效应 (small effect size)
      • 0.5:中效应 (medium effect size)
      • 0.8 或更高:大效应 (large effect size)

5.2.3. 效率指标 (Efficiency Metrics)

  • 训练时间 (Training Time): 衡量模型在元训练任务上所需的时间。
  • 测试时间 (Testing Time): 衡量模型在元测试任务上所需的时间(即适应新任务所需的时间)。
  • AttenAE 训练时间: 衡量 AttenAE 在无标签调用链上训练所需的时间。
  • AttenAE 调用链表示构建时间: 衡量优化后的 AttenAE 为元测试任务构建调用链表示所需的时间。

5.3. 对比基线 (Baselines)

鉴于缺乏直接可比的 AIOps 方法,论文通过结合不同的调用链表示和分类方法构建了多种基线,并辅以消融研究,以系统地评估 TraFaultDia 的性能及其组件的影响。所有基线均使用与 TraFaultDia 相同的神经表示方法来处理文本 SpanLog 属性,以确保公平比较。

5.3.1. AttenAE 替代方案 (AttenAE alternatives)

这些基线探索了不同的调用链表示构建方法。

  • OnlySpan+TEMAMLOnlySpan+TEMAML:仅将 Span(遵循相关工作,将调用链视为 Span 序列)作为输入送入 TEMAML 进行分类,忽略 Log 数据。
  • LinearAE+TEMAMLLinearAE+TEMAML:使用线性投影进行融合的简化版自动编码器 (LinearAE),取代 AttenAE,然后与 TEMAML 结合。
  • GluAE+TEMAMLGluAE+TEMAML:使用门控线性单元 (Gated Linear Unit, GLU) 进行融合的自动编码器 (GluAE),取代 AttenAE,然后与 TEMAML 结合。GluAE 修改自 Lee et al. [2023] 的模态融合方法。

5.3.2. Transformer 编码器替代方案 (Transformer Encoder alternatives)

这些基线探索了 MAML 中基础模型(TE)的不同选择。

  • AttenAE+LinearMAMLAttenAE+LinearMAML:使用简单的线性模型作为 MAML 的基础模型。
  • AttenAE+RnnMAMLAttenAE+RnnMAML:使用循环神经网络 (RNN) 作为 MAML 的基础模型。
  • AttenAE+LstmMAMLAttenAE+LstmMAML:使用长短期记忆网络 (LSTM) 作为 MAML 的基础模型。
  • AttenAE+CnnMAMLAttenAE+CnnMAML:使用卷积神经网络 (CNN) 作为 MAML 的基础模型。

5.3.3. TEMAML 替代方案 (TEMAML alternatives)

这些基线探索了不同的元学习方法或传统分类模型来处理少样本分类任务。这些替代方案完全取代了 TEMAML仅在 E1 和 E2 实验中进行评估,因为它们主要关注少样本学习而非跨系统迁移。

  • AttenAE+TEMatchNetAttenAE+TEMatchNet:使用 Matching Network [Vinyals et al. 2016] 作为元学习方法。
  • AttenAE+ProtoNetAttenAE+ProtoNet:使用 Prototypical Network [Snell et al. 2017] 作为元学习方法。
  • AttenAE+NNeighborAttenAE+NNeighbor:使用 K-Nearest Neighbor (KNN) 模型进行分类。这是一个传统的机器学习模型,用于评估在少样本情况下是否需要元学习。
  • AttenAE+DTreeAttenAE+DTree:使用决策树 (Decision Tree) 模型进行分类。同样是传统的机器学习模型。

5.4. 实施细节

  • 硬件环境: 在一台配备 32 核 CPU 和一块 NVIDIA Ampere A100 GPU (40 GB 显存) 的 Linux 服务器上进行。
  • 软件环境: 使用 Python 3.10.6
  • 优化器: AttenAETEMAML 均使用 AdamW 优化器进行训练。
  • 超参数: 具体的超参数设置在论文的复制包中提供。

6. 实验结果与分析

本节将深入探讨 TraFaultDia 框架在各项实验中的表现,并与基线模型进行对比分析。实验结果将从有效性、效率和消融研究三个方面进行呈现和解读。

6.1. 核心结果分析

6.1.1. 有效性 (Effectiveness)

TraFaultDia 在系统内和跨系统的所有实验设置中均展现出高平均准确率,证明了其在故障分类方面的有效性。

以下是原文 Table 3 的结果:

ModelE1 (TrainTicket→TrainTicket)E3 (OnlineBoutique→TrainTicket)
5-shot10-shot5-shot10-shot
Our TraFaultDia92.91±2.10 (74.67-100.0)93.26±1.40 (76.00-100.0)86.35±2.00 (70.67-100.0)92.19±1.99 (74.67-100.0)
AttenAE alternative:
OnlySpan+TEMAML80.64±2.84 (57.33-97.33)78.77±2.80 (60.00-97.33)79.25±2.89 (57.33-97.33)80.19±3.10 (56.00-97.33)
Multihead attention fusion alternatives:
LinearAE+TEMAML89.15±2.29 (73.33-100.0)90.59±2.43 (70.67-100.0)83.09±2.55 (62.67-97.33)90.61±2.01 (72.00-100.0)
GluAE+TEMAML92.21±1.73 (77.33-100.0)93.07±1.64 (77.33-100.0)85.07±2.38 (66.67-100.0)94.40±2.19 (72.00-100.0)
Transformer encoder alternatives:
AttenAE+LinearMAML45.84±2.21 (25.33-61.33)45.36±2.16 (30.67-60.00)43.81±1.99 (28.00-58.67)43.87±1.93 (29.33-60.00)
AttenAE+RnnMAML49.65±2.09 (37.33-64.00)42.88±1.93 (24.00-58.67)48.45±1.75 (38.67-65.33)47.07±1.88 (34.67-58.67)
AttenAE+LstmMAML41.39±2.20 (21.33-56.00)42.67±1.91 (29.33-56.00)40.32±1.68 (22.67-52.00)42.29±1.79 (25.33-56.00)
AttenAE+CnnMAML TEMAML alternatives:57.06±2.85 (41.33-81.00)69.20±2.19 (56.00-88.00)49.04±1.80 (38.67-64.00)69.47±2.65 (48.00-89.33)
AttenAE+TEMatchNet76.56±2.80 (49.33-93.33)76.05±2.37 (50.67-94.67)
AttenAE+ProtoNet57.25±0.03 (40.00-74.67)59.68±0.03 (44.00-76.00)
AttenAE+NNeighbor88.19±0.02 (74.67-98.67)92.56±0.02 (78.00-100.0)
AttenAE+DTree66.80±0.03 (46.67-88.00)77.09±0.03 (54.67-96.00)

以下是原文 Table 4 的结果:

ModelE2 (OnlineBoutique→OnlineBoutique)E4 (TrainTicket→OnlineBoutique)
5-shot10-shot5-shot10-shot
Our TraFaultDia82.50±2.35 (65.33-98.67)85.20±2.33 (66.67-98.67)82.37±2.07 (64.00-97.33)84.77±2.28 (68.00-98.67)
AttenAE alternative:
OnlySpan+TEMAML72.83±2.40 (57.33-88.00)73.15±2.81 (46.67-92.00)71.81±2.25 (56.00-85.33)73.60±2.21 (57.33-85.33)
Multihead attention fusion alternatives:
LinearAE+TEMAML76.15±2.59 (60.00-95.00)78.21±2.50 (64.00-96.00)75.81±2.45 (52.0# 1. 论文基本信息

1.1. 标题

Cross-System Categorization of Abnormal Traces in Microservice-Based Systems via Meta-Learning (通过元学习对微服务系统中异常调用链进行跨系统分类)

1.2. 作者

  • YUQING WANG (王雨晴), 赫尔辛基大学, 芬兰
  • MIKA V. MANTYLA, 赫尔辛基大学, 芬兰 和 奥卢大学, 芬兰
  • SERGE DEMEYER, 安特卫普大学, 比利时
  • MUTLU BEYAZIT, 安特卫普大学, 比利时
  • JOANNA KISAAKYE, 安特卫普大学, 比利时
  • JESSE NYSSOLA, 赫尔辛基大学, 芬兰

1.3. 发表期刊/会议

发表于 ACM软件工程学报 (Proc. ACM Softw. Eng.) 卷2, FSE (软件工程基础), 文章FSE027 (2025年7月)。 FSE (Foundations of Software Engineering) 是软件工程领域顶级的国际会议之一,享有极高的学术声誉和影响力。

1.4. 发表年份

2025年 (根据ACM参考格式,尽管预印本发布于2024年3月)。

1.5. 摘要

微服务系统 (Microservice-based Systems, MSS) 可能因各种故障类型而失效。尽管现有的 AIOps (AI for IT Operations) 方法在检测异常调用链并定位责任服务方面表现出色,但仍需要人工诊断具体的故障类型和故障原因。本文提出了 TraFaultDia,一种新颖的 AIOps 框架,用于自动将 MSS 中的异常调用链分类到故障类别中。我们将分类过程视为一系列多分类任务,其中每个任务代表尝试将 MSS 中的异常调用链分类到特定故障类别中。TraFaultDia 利用 元学习 (meta-learning) 在几个异常调用链分类任务上进行训练,每个任务仅使用 MSS 中的少量标注实例,从而能够快速适应跨 MSS 的新的、未见的异常调用链分类任务,每个任务也仅需少量标注实例。TraFaultDia 的用例可扩展,具体取决于如何从 MSS 内部的异常中构建故障类别。我们在两个 MSS (TrainTicket 和 OnlineBoutique) 上对 TraFaultDia 进行了评估,这些系统使用开放数据集,其中每个故障类别都与故障系统组件 (服务/Pod) 和根本原因相关联。TraFaultDia 自动将异常调用链分类到这些故障类别中,从而无需人工分析即可自动识别故障系统组件和根本原因。TraFaultDia 在 TrainTicket 和 OnlineBoutique 上的50个新分类任务中,当在同一 MSS 内训练且每个类别提供10个标注实例时,分别达到了 93.26% 和 85.20% 的准确率。在跨系统环境中,当 TraFaultDia 应用于与训练它的 MSS 不同的系统时,对于相同的一组50个新的、未见的异常调用链分类任务,且每个系统每个故障类别也提供10个标注实例,TraFaultDia 分别获得了 92.19% 和 84.77% 的平均准确率。

1.6. 原文链接

2. 整体概括

2.1. 研究背景与动机

微服务系统 (MSS) 因其固有的复杂性和动态性,常常面临各种故障类型。目前的 AIOps (AI for IT Operations) 方法在自动化运维领域取得了显著进展,特别是在检测系统中的异常调用链 (abnormal traces) 和定位可能导致问题的服务 (responsible service(s)) 方面。然而,这些方法通常止步于此。当检测到异常后,仍然需要运维人员投入大量精力进行进一步的 根本原因分析 (Root Cause Analysis, RCA),以诊断具体的故障类型 (fault types) 和分析故障原因 (failure causes)。这种人工诊断的需求在以下几个方面构成了显著的挑战和空白:

  1. 诊断特定故障类型和原因的缺失 (Lack of Specific Fault Type Diagnosis): 现有的 AIOps 工具虽然能指出“哪里”出现了异常或“哪个服务”可能出了问题,但它们无法直接回答“为什么”或“具体是什么类型的故障”。例如,一个服务响应变慢,可能是由于 CPU 争用、网络延迟、数据库连接池耗尽,或者是第三方服务故障。这些不同的原因需要不同的诊断路径和解决方案。

  2. 人工分析效率低下 (Inefficiency of Manual Analysis): 随着 MSS 规模的扩大和复杂性的增加,产生的调用链数据量呈指数级增长。人工审查和分类大量异常调用链变得不切实际且耗时。这导致故障解决延迟、系统停机时间增加和运营成本上升。

  3. 异构性挑战 (Heterogeneity Challenge): 不同的 MSS 在服务数量、架构设计和业务逻辑上存在显著差异。这使得开发一个通用的调用链表示和分类方法变得困难。一个在某个系统上表现良好的模型,可能无法直接迁移到另一个系统。

  4. 数据高维多模态 (High-dimensional, Multi-modal Data): 调用链数据通常包含来自不同来源(如 Span 和 Log)的多模态信息,且维度高、结构复杂。有效地融合和压缩这些信息对于高效的分析至关重要。

  5. 故障类别分布不平衡 (Imbalanced Fault Category Distribution): 在实际的 MSS 运维中,某些故障类型可能比其他类型更常见,导致不同故障类别下的异常调用链样本数量严重不平衡。这给机器学习模型的训练带来了挑战,尤其是对于那些罕见的故障类型。

    针对这些挑战,本文的切入点是提出一个新颖的 AIOps 框架 TraFaultDia,旨在通过自动化将异常调用链分类到其具体的故障类别中,从而实现对故障组件和根本原因的自动识别,显著减少对人工分析的依赖。

2.2. 核心贡献/主要发现

本文通过 TraFaultDia 框架做出了以下核心贡献和主要发现:

  1. 提出了 TraFaultDia 框架,实现异常调用链的跨系统故障分类: TraFaultDia 能够自动将异常调用链分类到特定的故障类别,这超越了现有 AIOps 方法通常只进行异常检测和定位的范畴。它为 MSS 提供了更深层次的故障诊断能力,而无需人工分析。
  2. 引入元学习实现少样本学习和跨系统适应性: TraFaultDia 采用 元学习 (Meta-Learning) 方法,特别是基于 Transformer Encoder (TE)Model-Agnostic Meta-Learning (MAML) (缩写为 TEMAML)。这种方法使得框架能够在只有少量标注实例的情况下,快速适应新的、未见的异常调用链分类任务,并具备在不同 MSS 之间迁移学习的能力,有效解决了 MSS 异构性 (C1) 和故障类别数据不平衡 (C3) 的挑战。
  3. 设计了 AttenAE 进行高维多模态调用链数据融合: 框架包含一个 Multi-Head Attention Autoencoder (AttenAE),用于无监督地将高维、多模态的调用链相关数据(包括 Span 和 Log 的文本、时间、身份属性)融合为统一、压缩但有效的调用链表示。这解决了数据高维多模态 (C2) 的挑战,并确保了后续分类的效率和有效性。
  4. 在基准 MSS 上进行了广泛评估并展示了优异性能: TraFaultDia 在两个代表性的基准 MSS (TrainTicket 和 OnlineBoutique) 的开放数据集上进行了评估。
    • 系统内适应性 (Within-system adaptability) 方面,当在同一 MSS 内训练,并为每个类别提供10个标注实例时,TraFaultDia 在 TrainTicket 和 OnlineBoutique 上分别达到了 93.26% 和 85.20% 的平均准确率。
    • 跨系统适应性 (Cross-system adaptability) 方面,当应用于与训练系统不同的 MSS 时,TraFaultDia 对于相同的任务集,在 TrainTicket 和 OnlineBoutique 上分别获得了 92.19% 和 84.77% 的平均准确率。
  5. 实现故障系统组件和根本原因的自动识别: 通过将异常调用链分类到预定义的故障类别中(这些类别与故障系统组件和根本原因相关联),TraFaultDia 能够自动识别故障组件和根本原因,从而简化运维人员的工作流程,提高故障处理效率。

3. 预备知识与相关工作

3.1. 基础概念

为了更好地理解本文提出的 TraFaultDia 框架,我们需要首先掌握以下几个核心概念:

3.1.1. 微服务系统 (Microservice-based Systems, MSS)

  • 概念定义: 微服务系统是一种软件架构风格,其中一个复杂的应用程序被构建为一系列小型、独立的服务集合。每个服务都运行在其独立的进程中,并通过轻量级的机制(通常是 HTTP API)相互通信。
  • 特点: 这种架构带来了高度的灵活性、可扩展性和韧性,但也增加了系统整体的复杂性、部署和运维的挑战。

3.1.2. 调用链 (Trace)

  • 概念定义: 在 MSS 中,一个用户请求可能涉及多个微服务之间的协作。调用链是一个逻辑单元,用于记录和跟踪一个完整的端到端请求在不同服务间的所有操作。它提供了一个请求从开始到结束的完整路径视图,是理解和监控 MSS 行为的基础。
  • 结构: 通常由一系列嵌套的 Span 组成,形成一个树状或有向无环图结构。

3.1.3. Span (操作段)

  • 概念定义: Span 是调用链中的一个独立操作单元,代表了请求处理过程中的一个步骤或一段工作。例如,一次数据库查询、一次 HTTP 调用、一个服务内部的函数执行都可以是一个 Span。
  • 属性: 每个 Span 都包含时间戳(开始和结束时间)、操作名称、服务名称、父 Span ID、子 Span ID、以及其他与操作相关的元数据(如错误信息、标签)。它们通常具有层级关系,一个 Span 可以有多个子 Span。

3.1.4. 日志 (Log)

  • 概念定义: 日志是软件系统在运行时自动生成的事件记录。它们包含了关于系统状态、操作执行、错误信息以及其他诊断数据的文本消息。
  • 作用: 在调用链的上下文中,日志与特定的 Span 相关联,提供更详细的服务实例行为和潜在问题的上下文信息。例如,一个 Span 内部可能产生多个日志条目,记录该操作的详细步骤或遇到的问题。

3.1.5. AIOps (AI for IT Operations)

  • 概念定义: AIOps 是指利用人工智能(AI)和机器学习(ML)技术来自动化和增强 IT 运维(IT Operations)任务的领域。
  • 目标: 旨在通过分析大量的运维数据(如日志、指标、调用链)来自动检测异常、定位故障、预测问题和优化系统性能,从而减少对人工干预的需求,提高运维效率和系统可靠性。

3.1.6. 元学习 (Meta-Learning)

  • 概念定义: 元学习,又称“学会学习 (Learning to Learn)”,是一种机器学习范式,其目标是训练模型去学习如何学习新任务,而不是直接学习一个特定任务。它通过在多个相关任务上进行训练,使模型能够快速适应(通常只需少量数据)新的、未见的任务。
  • 核心思想: 学习一个适用于不同任务的“通用学习策略”或“初始化参数”,使得在新任务上只需少量梯度更新即可达到良好性能。

3.1.7. 少样本学习 (Few-Shot Learning)

  • 概念定义: 少样本学习是元学习的一个具体应用场景,指在每个类别只有极少量(通常少于10个)标注样本的情况下,训练模型进行有效分类的能力。
  • 挑战: 传统机器学习模型在缺乏大量标注数据时表现不佳,而少样本学习旨在解决这一数据稀缺问题,使其在实际应用中更具实用性。

3.1.8. 自编码器 (Autoencoder, AE)

  • 概念定义: 自编码器是一种无监督学习的神经网络模型,旨在学习输入数据的有效编码(即表示)。它由两部分组成:一个编码器(Encoder)和一个解码器(Decoder)。编码器将输入数据映射到一个低维的潜在空间(latent space),生成数据的“表示”;解码器则尝试从这个潜在表示中重建原始输入数据。
  • 作用: 通过最小化重建误差,自编码器学习到能够捕获数据主要特征的压缩表示,常用于特征提取、降维和去噪。

3.1.9. Transformer 模型

  • 概念定义: Transformer 是一种于2017年由 Google 提出的深度学习模型架构,最初用于自然语言处理(NLP)任务。其核心创新是完全放弃了传统的循环神经网络(RNN)和卷积神经网络(CNN)结构,而完全依赖于 自注意力机制 (Self-Attention Mechanism)
  • 自注意力机制 (Self-Attention Mechanism): 允许模型在处理序列数据时,评估序列中不同位置的元素之间的相关性,并根据这些相关性来加权其表示。
  • 多头注意力机制 (Multi-Head Attention): 是自注意力机制的扩展,通过并行运行多个注意力机制(即“头”),并将其结果拼接起来,使模型能够从不同角度或在不同表示子空间中共同关注信息。
  • 应用: Transformer 模型因其强大的并行计算能力和捕获长距离依赖关系的能力,已广泛应用于 NLP、计算机视觉等多个领域。

3.2. 前人工作

本文在总结相关工作时,主要聚焦于调用链的表示方法和分类任务:

3.2.1. 调用链表示 (Trace Representation)

  • 图神经网络 (Graph Neural Networks, GNNs): 许多研究(例如 [Chen et al. 2023, 2022; Raeiszadeh et al. 2023; Zhang et al. 2022a,b])利用 GNNs 来构建调用链图。这些方法将 Span 建模为节点,Span 之间的交互建模为边,以反映请求在调用链中的流向。节点信息通过 Span 属性(如调用路径、响应时间)或关联日志的文本属性进行丰富。
    • 优点: GNNs 在检测异常调用链和定位潜在故障服务方面表现出色。
    • 局限性 (本文观点): GNNs 的计算成本高昂,且存在可扩展性问题。对于包含数百个 Span 的复杂调用链,建模 Span 间的依赖关系会指数级增加计算复杂度。在 MSS 的动态环境中,频繁更新图结构以反映新的或变更的 Span 和依赖关系,计算开销巨大,不适合高效适应动态 MSS 的需求。
  • 序列模型 (Sequence Models): 另一些异常检测研究(例如 [Du et al. 2023; Kohyarnejadfard et al. 2022; Nedelkoski et al. 2019b])将调用链视为 Span 序列,并使用 Span 属性来构建调用链表示,常结合 LSTM 等模型。
    • 局限性 (本文观点): 这类方法完全忽略了日志信息。而本文通过经验研究发现,日志对于识别特定故障类别(如代码错误、消息返回错误、配置错误)至关重要。缺失日志信息会影响模型的性能。

3.2.2. 调用链分类 (Trace Classification)

  • 二分类 (Binary Classification): 大多数 MSS 异常检测研究(例如 [Kohyarnejadfard et al. 2019; Kong et al. 2024; Zhang et al. 2022b])采用二分类方法,判断调用链是异常的还是正常的。
    • 局限性 (本文观点): 这与本文的目标不同。本文的目标是在已检测到异常调用链的基础上,进一步进行 多分类 (multi-class classification),将其归类到具体的故障类别,从而实现更精细的故障诊断。
  • 多分类 (Multi-class Classification): 针对 MSS 或类似云系统的异常调用链多分类研究非常稀少。
    • Nedelkoski 等人 (2019a) 的工作: 是唯一相关的研究。该工作使用卷积神经网络 (CNN) 将异常调用链分类为四种基于时间序列的故障类别(增量、均值漂移、逐渐增加、圆柱形)。它将调用链表征为 Span 序列,并使用 Span 属性“调用路径”的时间序列数据进行分类。
    • 局限性 (本文观点): 这种方法不足以解决本文研究中更广泛的故障类别(如表1所示),也未能解决本文识别出的 C1 (MSS 异构性) 和 C2 (高维多模态数据) 挑战。具体来说,单一的 CNN 模型难以有效应对不同 MSS 之间的异构性。此外,它只考虑了 Span 属性“调用路径”的时间序列数据,忽略了其他关键的调用链相关数据模态(如日志信息),而这些模态对于识别某些故障类别至关重要。

3.3. 技术演进

该领域的技术演进可以概括为从简单的异常检测向精细故障诊断的转变,以及从单一数据源分析向多模态数据融合的演变:

  • 从检测到诊断: 早期 AIOps 专注于“有没有异常”,随后发展到“异常在哪里”。现在正向“异常是什么类型,为什么会发生”的诊断阶段迈进。
  • 从单一模态到多模态: 过去的研究可能只关注日志或指标。随着分布式系统调用链的普及,将 Span、Log 等多源异构数据结合起来进行分析成为趋势。
  • 从特定模型到通用适应性: 传统的机器学习模型在训练时需要大量标注数据,且难以迁移到新的系统或新的故障类型。元学习的引入旨在解决这一问题,使模型能够快速适应动态变化的 MSS 环境。

3.4. 差异化分析

本文提出的 TraFaultDia 框架与上述相关工作相比,其核心区别和创新点在于:

  1. 全面的调用链表示: TraFaultDia 克服了现有方法对日志信息的忽视或 GNNs 的计算复杂性。它通过 AttenAE 融合了所有必需的 Span 和 Log 属性(包括文本、时间、身份属性),创建统一、压缩且有效的调用链表示。这使得它能够捕获更全面的故障信号,而 GNNs 的计算效率和动态适应性问题也得到了规避。
  2. 细粒度的多分类诊断: 与大多数专注于二分类(异常/正常)的 AIOps 研究不同,TraFaultDia 专注于对已检测到的异常调用链进行多类别分类,将其精确地归类到具体的故障类别。这直接填补了从异常检测到故障诊断之间的鸿沟。
  3. 强大的跨系统和少样本适应性: 现有工作通常难以在不同 MSS 之间迁移或在数据稀缺的故障类别上表现良好。TraFaultDia 通过元学习(TEMAML)赋予了模型快速适应新任务、处理 MSS 异构性 (C1) 和解决数据不平衡 (C3) 的能力,这在实际运维场景中具有极高的实用价值。

4. 方法论

4.1. 方法原理

TraFaultDia 框架的核心思想是利用 元学习 (meta-learning) 来解决微服务系统 (MSS) 中异常调用链分类的挑战。它将分类过程看作一系列多分类任务,其中每个任务都是将特定 MSS 中的异常调用链分类到预定义的故障类别中。

框架的原理体现在以下几个方面:

  • 高效表示: 面对高维、多模态的调用链数据(挑战 C2),TraFaultDia 采用 Multi-Head Attention Autoencoder (AttenAE) 进行无监督学习,将原始数据融合成紧凑、有效的低维表示。这确保了后续分析的效率和准确性。
  • 少样本学习: 针对故障类别分布不平衡,某些类别样本稀少的问题(挑战 C3),TraFaultDia 利用 Model-Agnostic Meta-Learning (MAML) 训练一个基于 Transformer Encoder 的模型 (TEMAML)。MAML 使得模型能够通过少量标注实例快速适应新的分类任务。
  • 跨系统适应性: 针对 MSS 之间固有的异构性问题(挑战 C1),元学习范式赋予了模型从一个 MSS 学习到的知识能够有效地迁移到另一个未见的 MSS 的能力,从而实现跨系统适应。

4.2. 核心方法详解

TraFaultDia 框架由两个主要组件构成:Multi-Head Attention Autoencoder (AttenAE)Transformer-Encoder based Model-Agnostic Meta-Learning (TEMAML) 模型。图 3 概述了其工作流程。

4.2.1. TraFaultDia 工作流概述

如图 3 所示,TraFaultDia 的工作流分为两个主要阶段:

  1. AttenAE 训练与表示构建:

    • 目标: 为给定 MSS 生成高质量、压缩的调用链表示。
    • 过程: AttenAE 在大量无标签的调用链上进行无监督训练。编码器负责将原始调用链相关数据(Span 和 Log 属性)融合为低维的表示,解码器负责从这些表示中重建原始数据。通过最小化重建误差,AttenAE 学习到有效的特征提取方式。
    • 输出: 训练完成后,只有编码器被独立用于为该 MSS 中的新调用链生成其表示。
  2. TEMAML 训练与分类:

    • 目标: 训练一个基础模型(Transformer Encoder),使其能够执行异常调用链的多分类任务,并具备少样本和跨系统适应能力。

    • 过程: TEMAML 在元训练阶段,使用来自一个 MSS 的多个异常调用链分类任务进行训练。每个任务都采用 N-Way K-Shot 设置(即 N 个故障类别,每个类别 K 个标注实例)。在元测试阶段,TEMAML 能够快速适应来自任意 MSS 的新的、未见的异常调用链分类任务,也仅需少量标注实例。

    • 输入: TEMAML 使用在相应 MSS 上优化过的 AttenAE 编码器所构建的调用链表示作为输入来训练和评估。

      下图(原文 Figure 3)展示了 TraFaultDia 框架的整体工作流:

      Fig. 3. Overview of our framework 该图像是图3,展示了TraFaultDia框架中AttenAE与TEMAML的交互流程。包括利用AttenAE对微服务系统异常调用链进行编码与解码,构建调用链表示,再通过TEMAML进行基于元学习的异常调用链分类,分为元训练和元测试阶段。

4.2.2. AttenAE 用于构建调用链表示

AttenAE 负责将原始的高维、多模态调用链数据转化为统一、压缩且有效的表示。图 4 展示了 AttenAE 的架构。

给定一个 MSS,我们用 Tr={Tr1,Tr2,...,Trn}Tr = \{ Tr_1, Tr_2, ..., Tr_n \} 表示一个调用链集合,其中每个 TriTr_i 代表一个由 Span 和 Log 组成的独立调用链。我们将 Tr=(Span,Log)Tr = (Span, Log) 视为所有调用链中 Span 和 Log 的组合。

下图(原文 Figure 4)展示了 AttenAE 的架构:

Fig. 4. AttenAE architecture 该图像是图4,AttenAE架构的示意图,展示了从一条跟踪的spans和日志中提取属性,并通过多头注意力机制的编码器-解码器结构进行特征投影和重构的过程。

4.2.2.1. Span 预处理和向量生成

对于每个 Span,我们提取其文本属性(call componentpath)、时间属性(span start timespan end time)以及身份属性(trace IDspan ID)。

  • 身份属性处理: trace ID 用于将 Span 归集到其所属的调用链。
  • 时间属性处理: 时间属性(UNIX 格式)在每个 Span 的上下文中进行归一化。这些属性连接成一个向量 VnumericV_{\mathrm{numeric}}
  • Span ID 层级抽象: 对于 span ID,我们抽象掉共享的通用前缀,只保留层级数字。例如,将 a480f2.0, a480f2.1, a480f2.2, a343mc.0, a987gq.0 重新分配为 1.0, 1.1, 1.2, 2.0, 3.0。在调用链内对 span ID 进行归一化,得到向量 Vspan_idV_{\mathrm{span\_id}}
  • 文本属性处理 ("Service Operation"): call componentpath 连接形成一个单一属性“service operation”。为了处理服务操作中不断变化和包含 OOV (out-of-vocabulary) 词的特性,我们采用神经表示方法。
    1. 预处理: 将所有大写字母转换为小写,用标准标识符替换特定变量(例如,Prod1234 替换为 ProductID),并移除所有非字母字符。
    2. 分词 (Tokenization): 使用 WordPiece 分词 (WordPiece tokenization) [Wu et al. 2016] 将服务操作分词为子词。
    3. 神经表示: 将子词输入到预训练的 BERT base 模型 (BERT base model) [Google Research 2018] 中,生成每个子词的词嵌入 (word embeddings)。我们使用模型最后一个编码层生成的词嵌入,并通过对词嵌入求平均来计算每个服务操作的句子嵌入 (sentence embedding)。这将生成一个向量表示 VoperationV_{\mathrm{operation}}
  • 最终 Span 向量: 对于 Tr,将上述获得的向量表示连接起来,形成一个复合向量 VspanRdspanV_{\mathrm{span}} \in \mathbb{R}^{d_{\mathrm{span}}},其中 dspand_{\mathrm{span}}VspanV_{\mathrm{span}} 的向量空间维度。虽然原文只写了 Vspan=Concatenate()V_{\mathrm{span}} = \mathrm{Concatenate}(\dots) 但未列出具体连接项,根据上文推断,它应为时间属性、Span ID 和文本属性的组合: Vspan=Concatenate(Vnumeric,Vspan_id,Voperation) V_{\mathrm{span}} = \mathrm{Concatenate}(V_{\mathrm{numeric}}, V_{\mathrm{span\_id}}, V_{\mathrm{operation}})

4.2.2.2. Log 预处理和向量生成

我们从 Log 中提取文本属性(log componentmessageseverity level)以及身份属性(trace ID)。

  • 身份属性处理: trace ID 用于将 Log 归集到其所属的调用链。
  • 文本属性处理 ("Log Event"): 这些属性连接形成一个单一属性“log event”。同样采用神经表示方法来捕获 Log 事件的语义。其处理流程与 Span 文本属性的处理相同:预处理、WordPiece 分词、通过 BERT base 模型生成词嵌入并求平均。这将生成一个向量表示 VlogRdlogV_{\mathrm{log}} \in \mathbb{R}^{d_{\mathrm{log}}},其中 dlogd_{\mathrm{log}}VlogV_{\mathrm{log}} 的向量空间维度。

4.2.2.3. 调用链表示构建

对于给定的 MSS,我们利用 AttenAE 的编码器为调用链 Tr 构建调用链表示。

  • 特征空间投影: 编码器首先将输入的向量 VspanV_{\mathrm{span}}VlogV_{\mathrm{log}} 投影到一个公共特征空间 Rd\mathbb{R}^{d'}Vspan=g(WspanVspan+bspan);Vlog=g(WlogVlog+blog) V_{\mathrm{span}}' = g ( W_{\mathrm{span}} V_{\mathrm{span}} + b_{\mathrm{span}} ); \quad V_{\mathrm{log}}' = g ( W_{\mathrm{log}} V_{\mathrm{log}} + b_{\mathrm{log}} ) 其中,gg 表示激活函数,WspanW_{\mathrm{span}}WlogW_{\mathrm{log}} 分别是对应的权重矩阵,bspanb_{\mathrm{span}}blogb_{\mathrm{log}} 是偏置向量。

  • 多头注意力融合: AttenAE 的编码器结合了 多头注意力机制 (Multi-Head Attention mechanism) [Vaswani 2017],其计算公式如下: \left\{ \begin{array} { l } { \mathrm { Attention } ( Q , K , V ) = \mathrm { softmax } \left( \frac { Q K ^ { T } } { \sqrt { d _ { k } } } \right) V , } \\ { \mathrm { head } _ { i } = \mathrm { Attention } ( Q W ^ { Q } , K W ^ ^ { K } , V W ^ { V } ) , } \\ { \mathrm { MultiHead } ( Q , K , V ) = \mathrm { Concatenate } ( \mathrm { head } _ { 1 } , \dots , \mathrm { head } _ { h } ) W ^ { O } } \end{array} \right.

    • Attention 函数: 计算 Query (QQ) 和 Key (KK) 的点积以获得注意力分数,通过 dk\sqrt{d_k} 进行缩放以保持数值稳定性,然后应用 Softmax 函数得到注意力分布,该分布用于加权 Value (VV) 中的元素。

    • head_i: 每个注意力头 (headihead_i) 通过对 Q, K, V 进行单独的学习投影(使用权重矩阵 WQ,WK,WVW^Q, W^K, W^V)来计算。

    • MultiHead 函数: 最终的多头注意力输出是将所有单独注意力头的输出拼接在一起,并通过线性变换 WOW^O 得到。

      我们将 VspanV_{\mathrm{span}}' 作为 QQ,将 VlogV_{\mathrm{log}}' 同时作为 KKVV,输入到上述机制中,以将它们融合为调用链 Tr 的表示 ZZZ=MultiHead(Vspan,Vlog,Vlog) \begin{array} { r } { Z = \mathrm { MultiHead } ( V _ { \mathrm { span } } ^ { \prime } , V _ { \mathrm { log } } ^ { \prime } , V _ { \mathrm { log } } ^ { \prime } ) } \end{array} 这里,VspanV_{\mathrm{span}}' 作为查询(Query)是因为 Span 提供了结构和通信信息,而 VlogV_{\mathrm{log}}' 作为键(Key)和值(Value)则是因为 Log 提供了详细的上下文事件信息。

  • 解码器 (Decoder): 对于一组调用链 Tr={Tr1,Tr2,...,Trn}Tr = \{ Tr_1, Tr_2, ..., Tr_n \},我们生成对应的调用链表示 Z={Z1,Z2,...,Zn}Z = \{ Z_1, Z_2, ..., Z_n \},其中 ZiZ_i 对应于 TriTr_i。AttenAE 的解码器将调用链表示 ZZ 重建为原始的 Span 和 Log 向量,有效地反转了编码器的过程: V^span=g(WspanZ+bspan);V^log=g(WlogZ+blog) \hat { V } _ { \mathrm { span } } = g ( W _ { \mathrm { span } } ^ { \prime } Z + b _ { \mathrm { span } } ^ { \prime } ); \quad \hat { V } _ { \mathrm { log } } = g ( W _ { \mathrm { log } } ^ { \prime } Z + b _ { \mathrm { log } } ^ { \prime } ) 其中,V^spanRdspan\hat{V}_{\mathrm{span}} \in \mathbb{R}^{d_{\mathrm{span}}}V^logRdlog\hat{V}_{\mathrm{log}} \in \mathbb{R}^{d_{\mathrm{log}}} 是重建的向量,gg 是激活函数,WspanW_{\mathrm{span}}'WlogW_{\mathrm{log}}' 是对应的权重矩阵,bspanb_{\mathrm{span}}'blogb_{\mathrm{log}}' 是偏置向量。

  • 损失函数 (Loss Function): AttenAE 通过优化其参数 Ψ\Psi 来最小化原始向量 (Vspan,Vlog)(V_{\mathrm{span}}, V_{\mathrm{log}}) 与其各自重建向量 (V^span,V^log)(\hat{V}_{\mathrm{span}}, \hat{V}_{\mathrm{log}}) 之间的总损失 L\mathcal{L}minΨL=V^spanVspan2+V^logVlogˉ2 \operatorname* { m i n } _ { \Psi } \mathcal { L } = \| \hat { V } _ { \mathrm { span } } - V _ { \mathrm { span } } \| ^ { 2 } + \| \hat { V } _ { \mathrm { log } } - \bar { V _ { \mathrm { log } } } \| ^ { 2 } 其中 2\| \cdot \|^2 表示平方欧几里得距离,用于度量原始向量和重建向量之间的差异。

4.2.3. TEMAML 用于少样本异常调用链分类

TEMAML 的目标是训练一个基础模型 Transformer Encoder (TE),使其能够对异常调用链进行多类别分类,并具备少样本学习能力以及跨系统迁移能力。图 5 描绘了 TEMAML 的学习过程。

TEMAML 包含两个阶段:元训练 (meta-training) 和元测试 (meta-testing)。

下图(原文 Figure 5)展示了 TEMAML 的学习过程:

Fig. 5. TEMAML learning process 该图像是图 5,展示了TEMAML(基于任务的元学习)学习过程的示意图,包含内循环和外循环两个阶段,通过迭代优化参数heta以实现对异常跟踪的分类。

4.2.3.1. 异常调用链分类的基础模型

TEMAML 训练的基础模型 TE(表示为 ff)执行异常调用链的多类别分类。对于来自一个 MSS 的异常调用链分类任务,TE 的工作流程如下:

  1. 输入处理: TE 接收由 AttenAE 构建的调用链表示 ZZ 作为输入,其中 ZZ 代表该任务中的所有异常调用链 Tr
  2. 自注意力机制: 输入 ZZ 通过 TE 的自注意力机制进行处理。此机制(遵循公式 2 中的多头注意力机制)权衡最相关的部分,并捕获每个调用链表示 ZiZ_i 中的依赖关系,以识别每个调用链 TriTr_i 的故障类型。由于 Q, K, V 都使用相同的输入 ZZ,因此称之为“自注意力”。输出表示为: output=MultiHead(Z,Z,Z) \mathrm{output} = \mathrm{MultiHead}(Z, Z, Z)
  3. 后续层: 自注意力机制的输出进一步通过一个池化层 (pooling layer) 来突出关键特征,一个 Dropout 层 (dropout layer) 来防止过拟合,以及一个全连接层 (fully connected layer) 来将精炼后的输出重塑为适合分类的格式。
  4. 分类器: 最后,一个 Softmax 分类器处理全连接层的输出,计算每个故障类别的概率。

4.2.3.2. 元训练 (Meta-training)

此阶段旨在训练 TE 找到鲁棒的参数,使其能够快速适应来自任何 MSS 的异常调用链分类任务。

我们在一系列异常调用链分类任务(元训练任务),表示为 T=(S,Q)T = (S, Q),上训练 TE。这些任务从一个 MSS 中采样。每个元训练任务 Ti=(Si,Qi)T_i = (S_i, Q_i) 包含一个支持集 (support set) SiS_i 和一个查询集 (query set) QiQ_i

  • Si={(zijspt,yijspt)}j=1N×KS_i = \{ (z_{ij}^{\mathrm{spt}}, y_{ij}^{\mathrm{spt}}) \}_{j=1}^{N \times K},其中 N×KN \times K 表示有 NN 个不同的故障类别,每个类别有 KK 个标注调用链实例。

  • Qi={(zigqry,yigqry)}g=1N×MQ_i = \{ (z_{ig}^{\mathrm{qry}}, y_{ig}^{\mathrm{qry}}) \}_{g=1}^{N \times M},其中 N×MN \times M 表示有 NN 个不同的故障类别,每个类别有 MM 个标注调用链实例。通常 M>KM > K,以实现对查询集的鲁棒优化。

  • 支持集 SiS_i 和查询集 QiQ_i 中的异常调用链都使用给定 MSS 的优化过的 AttenAE 编码器来构建其表示。

    如图 5 所示,在元训练阶段,基础模型 TE (ff) 在两个循环中进行训练:内循环 (inner loop) 和外循环 (outer loop)。

  • 内循环 (Inner Loop): 负责任务级别的学习。

    • 首先,随机初始化 ff 的参数,表示为带有参数 θ\thetafθf_\theta
    • 当适应每个元训练任务 TiT_i 时,ff 的参数 θ\theta 被转换为任务特定的参数 θi\theta_i',对应于更新后的模型 fθif_{\theta_i'}
    • θi\theta_i' 通过在 TiT_i 的支持集 SiS_i 上进行梯度下降更新来计算: θi=θαθLTi(fθ(Si)) \theta _ { i } ^ { \prime } = \theta - \alpha \nabla _ { \theta } \mathcal { L } _ { T _ { i } } ( f _ { \theta } ( S _ { i } ) ) 其中,α\alpha 是内循环更新的学习率,LTi\mathcal{L}_{T_i} 是在 SiS_i 上的损失。
  • 外循环 (Outer Loop): 优化 ff 的参数,以确保少量梯度步长能在所有任务 TT 上产生最佳性能。

    • 它通过优化 θi\theta_i' 相对于 θ\theta 在所有元训练任务 TT 上的性能来训练 ff 的参数。
    • 它最小化所有元训练任务 TT 的查询集 QQ 上的总损失 L\mathcal{L}minθL(θ)=TiTLTi(fθi(Qi)) \operatorname* { m i n } _ { \theta } { \mathcal { L } } ( \theta ) = \sum _ { T _ { i } \in T } { \mathcal { L } } _ { T _ { i } } ( f _ { \theta _ { i } ^ { \prime } } ( Q _ { i } ) ) 其中,LTi\mathcal{L}_{T_i} 是在 TiT_iQiQ_i 上的损失。
    • ff 的参数 θ\theta 被更新 pp 次,pp 是预定的优化步数。每次更新都会得到更新后的参数 θc\theta_c。例如,当使用一次梯度更新(即 p=1p=1)时: θθβθTiTLTi(fθi(Qi)) \theta \gets \theta - \beta \nabla _ { \theta } \sum _ { T _ { i } \in T } \mathcal { L } _ { T _ { i } } ( f _ { \theta _ { i } ^ { \prime } } ( Q _ { i } ) ) 其中,β\beta 是外循环更新的学习率。
    • 为了简化外循环更新(标准 MAML 需要计算梯度的梯度,涉及计算 Hessian-vector 乘积,计算量大),本文使用了一阶近似 (first-order approximation) [Finn et al. 2017],这消除了对二阶导数的需求。
    • 外循环的最终结果是获得最优参数 θ\theta^*。然后,基础模型 TE 用这些最优参数 θ\theta^* 进行初始化,得到优化后的基础模型 fθf_{\theta^*}。这个优化后的基础模型 TE (fθf_{\theta^*}) 现在具有增强的适应性,能够快速适应来自任何 MSS 的新的、未见的异常调用链分类任务。

4.2.3.3. 元测试 (Meta-testing)

在此阶段,我们使用优化后的 TE (fθf_{\theta^*}) 来适应新的、未见的异常调用链分类任务(元测试任务),这些任务可以来自任何 MSS。

  • 任务配置: 每个元测试任务使用与元训练任务相同的设置,表示为 Tts=(Sts,Qts)T_{ts} = (S_{ts}, Q_{ts})
  • 适应与评估: 为了适应某个元测试任务 TtsT_{ts},我们将 fθf_{\theta^*} 应用到其支持集 StsS_{ts} 上进行微调,以获得专门针对 TtsT_{ts} 的参数 θts\theta_{ts}'。这会生成一个更新后的模型 fθtsf_{\theta_{ts}'}。最后,我们使用 fθtsf_{\theta_{ts}'} 来分类 QtsQ_{ts} 中的异常调用链,以评估 TraFaultDia 框架的性能。

5. 实验设置

5.1. 数据集

为了训练和评估 TraFaultDia 框架,研究使用了两个开放数据集中的调用链数据:DeepTraLog 和 Nezha。这些数据集包含了来自两个代表性微服务系统 TrainTicketOnlineBoutique 的调用链。

  • DeepTraLog [FudanSELab 2024]: 包含 TrainTicket 系统的正常调用链和跨14种故障类别的异常调用链。这些故障类别涵盖了异步交互、多实例、配置和单体维度,旨在复制现实世界的异常场景。
  • Nezha [IntelligentDDS 2024]: 包含 TrainTicket 和 OnlineBoutique 系统的正常调用链和异常调用链。它涵盖了由五种故障类型(CPU 争用、CPU 消耗、网络延迟、错误返回、异常代码缺陷)引起的异常调用链,每种故障类型都应用于每个系统内的各种服务 Pod。在这种背景下,每个与故障类型关联的 Pod 代表一个独特的故障类别。

我们的故障数据集: 研究结合 DeepTraLog 和 Nezha 构建了故障数据集:

  • TrainTicket: 包含来自30个故障类别 (F1-F30) 的异常调用链。

  • OnlineBoutique: 包含来自32个故障类别 (B1-B32) 的异常调用链。

    为了实验,这些故障类别被进一步划分:

  • TrainTicket: 20个基础故障类别 (base fault categories) 和 10个新颖故障类别 (novel fault categories)。

  • OnlineBoutique: 22个基础故障类别和 10个新颖故障类别。 这种划分旨在提供一致的比较基础,并确保基础类别和新颖类别中都包含不同 Span 和 Log 数量的调用链混合。

TrainTicket 和 OnlineBoutique 的故障类别概览 (来自原文 Table 1):

  • TrainTicket DeepTraLog:
    • 异步服务调用相关故障: F1.Asynchronous message sequence error (异步消息序列错误), F2.Unexpected order of data requests (数据请求顺序异常), F13.Unexpected order of price optimization steps (价格优化步骤顺序异常)。
    • 多服务实例相关故障: F8.Key passing issues in requests (请求中的键传递问题), F11.BOM data is updated in an unexpected sequence (BOM数据以异常顺序更新), F12.Price status query ignores expected service outputs (价格状态查询忽略预期服务输出)。
    • 配置故障: F3.JVM and Docker configuration mismatch (JVM和Docker配置不匹配), F4.SSL offloading issue (SSL卸载问题), F5.High request load (高请求负载), F7.Overload of requests to a third-party service (第三方服务请求过载)。
    • 单体故障: F6.SQL error of a dependent service (依赖服务的SQL错误), F9.Bi-directional CSS display error (双向CSS显示错误), F10.API errors in BOM update (BOM更新中的API错误), F14.Locked product incorrectly included in CPI calculation (锁定产品错误地包含在CPI计算中)。
  • Nezha 中的 TrainTicket 故障:
    • CPU 争用: F23.travel, F25.contact, F26.food service pods。
    • 网络延迟: F28.basic, F29.travel, F30.route, F27.security, F24.verification-code service pods。
    • 消息返回错误: F16.basic, F15.contact, F18.food, F19.verification-code service pods。
    • 异常代码缺陷: F17.basic, F21.route, F22.price, F20.travel service pods。
  • Nezha 中的 OnlineBoutique 故障:
    • CPU 争用: B4.shipping, B14.cart, B18.currency, B19.email, B26.recommendation, B31.adservice, B9.payment, B11.frontend service pods。
    • CPU 消耗: B8.recommendation, B12.frontend, B24.productcatalog, B28.shipping, B17.checkout, B20.email, B32.adservice service pods。
    • 网络延迟: B10.currency, B1.cart, B15.checkout, B22.productcatalog, B27.shipping, B21.payment, B25.recommendation, B29.adservice, B7.email service pods。
    • 消息返回错误: B6.frontend, B23.productcatalog, B2.checkout, B30.adservice service pods。
    • 异常代码缺陷: B5.adservice, B13.frontend, B3.productcatalog, B16.checkout service pods。

调用链描述性统计 (来自原文 Table 2): 以下是原文 Table 2 的结果:

TrainTicket Mean Min Max
Unique traces per fault category: 1196 26 2546
Spans per trace: 79 1 345
Logs per trace: 44 1 340
OnlineBoutique Mean Min Max
Unique traces per fault category: 443 32 1018
Spans per trace: 53 1 190
Logs per trace: 51 4 184

数据样本示例: 本文未直接提供具体的数据样本,如某条调用链的原始 Span 或 Log 文本。但通过描述,我们可以直观理解数据形态:

  • Span 数据: 包含如 "用户服务调用了订单服务" (call component and path), "开始时间1678886400, 结束时间1678886450" (span start and end time), "trace ID: abcdef, span ID: abcdef.1.2" (trace ID, span ID)。
  • Log 数据: 包含如 "用户服务" (log component), "数据库连接失败: timeout" (log message), "ERROR" (severity level)。 这些数据点共同描绘了一个请求在微服务系统中流转和执行的详细情况。

5.2. 评估指标

为了评估 TraFaultDia 框架和基线方法在故障分类方面的有效性,研究选择了 准确率 (Accuracy) 作为评估指标。

5.2.1. 准确率 (Accuracy)

  • 概念定义: 准确率是分类任务中最常用和最直观的评估指标之一。它衡量的是模型正确预测样本类别的比例。在多分类任务中,准确率表示所有被正确分类的样本数占总样本数的百分比。尽管在类别分布不均衡时准确率可能不是最佳指标(因为它可能被多数类的高预测准确率所迷惑),但在本文的 N-Way K-Shot 元学习设置中,每个任务都是一个平衡的 N 分类问题(5-Way),其中每个类别的预测都同等重要,因此准确率是合适的。
  • 数学公式: Accuracy=Number of Correct PredictionsTotal Number of Predictions \text{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}}
  • 符号解释:
    • Number of Correct Predictions\text{Number of Correct Predictions}: 模型在给定数据集上正确分类的样本数量。

    • Total Number of Predictions\text{Total Number of Predictions}: 给定数据集上所有样本的总数量。

      此外,为了提供更全面的评估,研究还报告了95%的置信区间 (Confidence Interval, CI) 和任务准确率的范围(最小值和最大值),并使用 t-test (t检验) 进行统计比较,使用 Cohen's D (科恩'd) 值来评估效应量。

5.2.2. t-test (t检验)

  • 概念定义: t 检验是一种统计假设检验,用于比较两个样本均值之间是否存在显著差异。在本文中,它用于比较 TraFaultDia 与基线方法在50个元测试任务上的平均准确率是否存在统计学上的显著差异。
  • 数学公式: (此处原文未给出具体公式,但 t 检验的常见形式为独立样本 t 检验或配对样本 t 检验。考虑到比较50个任务的平均准确率,通常会使用配对样本 t 检验来比较两个模型在相同任务集上的表现。) 配对样本 t 检验的统计量 tt 计算公式为: t=dˉsdˉ=dˉsd/n t = \frac{\bar{d}}{s_{\bar{d}}} = \frac{\bar{d}}{s_d / \sqrt{n}}
  • 符号解释:
    • dˉ\bar{d}: 两个模型在每个任务上的性能差异的平均值。
    • sdˉs_{\bar{d}}: 差异平均值的标准误差。
    • sds_d: 性能差异的标准差。
    • nn: 任务的数量(即配对观测的数量)。
  • 显著性水平 (p值): t 检验会产生一个 p 值。通常,当 p 值小于 0.05 或 0.001 时,认为差异具有统计学显著性。

5.2.3. Cohen's D (科恩'd)

  • 概念定义: Cohen's D 是一种标准化效应量 (standardized effect size),用于衡量两个样本均值之间差异的大小。它不依赖于样本量,因此可以提供比 p 值更直观的差异程度信息。
  • 数学公式: (此处原文未给出具体公式,Cohen's D 的常见计算方式是两个均值之差除以合并标准差。) d=Xˉ1Xˉ2sp d = \frac{\bar{X}_1 - \bar{X}_2}{s_p} 其中,合并标准差 sps_p 的计算公式为: sp=(n11)s12+(n21)s22n1+n22 s_p = \sqrt{\frac{(n_1 - 1)s_1^2 + (n_2 - 1)s_2^2}{n_1 + n_2 - 2}}
  • 符号解释:
    • Xˉ1,Xˉ2\bar{X}_1, \bar{X}_2: 两个样本(例如,TraFaultDia 和一个基线模型)的平均准确率。
    • s1,s2s_1, s_2: 两个样本的标准差。
    • n1,n2n_1, n_2: 两个样本的样本量。
    • sps_p: 合并标准差。
  • 效应量解释:
    • d=0.2d = 0.2: 小效应量 (small effect size)。
    • d=0.5d = 0.5: 中等效应量 (medium effect size)。
    • d=0.8d = 0.8 或更高: 大效应量 (large effect size)。

5.3. 对比基线

考虑到缺乏直接可比较的 AIOps 方法,研究通过结合基线和消融研究来评估 TraFaultDia 的性能及其组件的影响。

5.3.1. AttenAE 及其替代方案

这些基线探索了与 TraFaultDia 不同的调用链表示构建方法。

  • OnlySpan+TEMAMLOnlySpan+TEMAML: 仅将 Span 数据输入 TEMAML 进行分类。遵循相关工作 [Nedelkoski et al. 2019a],将每个调用链视为 Span 序列,并仅使用识别出的 Span 属性构建表示。此基线旨在评估 Log 信息对性能的影响。
  • LinearAE+TEMAMLLinearAE+TEMAML: 使用基于线性投影的自编码器 (Linear Autoencoder) 进行 Span 和 Log 属性融合。这是 GluAE 的简化版本,不使用门控机制。
  • GluAE+TEMAMLGluAE+TEMAML: 使用基于门控线性单元 (Gated Linear Unit, GLU) 的自编码器进行 Span 和 Log 属性融合。修改自 MSS 模态融合方法 [Lee et al. 2023]。

5.3.2. Transformer Encoder (TE) 替代方案

这些基线将 TraFaultDia 中的 TE 替换为其他基础模型,以执行多类别分类。

  • AttenAE+LinearMAMLAttenAE+LinearMAML: 将 TE 替换为基本线性模型。
  • AttenAE+RnnMAMLAttenAE+RnnMAML: 将 TE 替换为循环神经网络 (RNN)。包含此基线是因为 RNN 在异常检测中表现出有效性。
  • AttenAE+LstmMAMLAttenAE+LstmMAML: 将 TE 替换为长短期记忆网络 (LSTM)。类似 RNN,LSTM 也常用于序列数据的异常检测。
  • AttenAE+CnnMAMLAttenAE+CnnMAML: 将 TE 替换为卷积神经网络 (CNN)。CNN 在相关工作中 [Nedelkoski et al. 2019a] 被用于多类别异常调用链分类。

5.3.3. TEMAML 替代方案

这些基线探索了其他元学习方法或传统模型来替代 TEMAML 进行异常调用链分类。

  • AttenAE+TEMatchNetAttenAE+TEMatchNet: 将 TEMAML 替换为基于 Transformer Encoder 的 Matching Network [Vinyals et al. 2016]。
  • AttenAE+ProtoNetAttenAE+ProtoNet: 将 TEMAML 替换为 Prototypical Network [Snell et al. 2017]。
  • AttenAE+NNeighborAttenAE+NNeighbor (Nearest Neighbor): 最近邻分类器。
  • AttenAE+DTreeAttenAE+DTree (Decision Tree): 决策树分类器。

基线评估范围:

  • AttenAE+NNeighborAttenAE+NNeighborAttenAE+DTreeAttenAE+DTree 仅在系统内任务 (E1 和 E2) 上进行评估,因为它们作为基本的机器学习模型,难以有效适应新的未见过的跨系统分类任务(即不具备迁移学习能力)。
  • 所有基线中,文本 Span 和 Log 属性的处理都使用了与 TraFaultDia 相同的神经表示方法 [Le and Zhang 2021],以确保公平比较。

5.4. 实验设计

研究设计了四个实验 (E1-E4) 来评估 TraFaultDia:

  • AttenAE 训练: 对于每个 MSS (TrainTicket/OnlineBoutique),随机选择 3960 条无标签调用链(3360 条用于训练 / 570 条用于验证)来训练 AttenAE,以构建调用链表示。这些调用链不与故障数据集重叠。

  • TEMAML 训练与评估: 使用构建好的故障数据集进行。

    • 任务设置: 每个元训练任务 TiT_i 和元测试任务 TtsT_{ts} 都配置为 5-way 5-shot5-way 10-shot:包含5个故障类别,每个类别有 5 或 10 个标注实例作为支持集 (Si,StsS_i, S_{ts})。
    • 评估: 对查询集 (Qi,QtsQ_i, Q_{ts}) 进行评估,每个查询集包含每个故障类别 15 个调用链实例。
    • 任务生成:
      • 对于每个 MSS,从其基础故障类别中随机生成 4 个元训练任务(通过 4 次选择 5 个故障类别的唯一排列)。
      • 对于每个 MSS,从其新颖故障类别中随机生成 50 个元测试任务(通过 50 次选择 5 个故障类别的唯一排列)。
  • 具体实验:

    • E1 (TrainTicket → TrainTicket): 在 TrainTicket 的 4 个元训练任务上训练 TEMAML,并在 TrainTicket 的 50 个元测试任务上评估。
    • E2 (OnlineBoutique → OnlineBoutique): 在 OnlineBoutique 的 4 个元训练任务上训练 TEMAML,并在 OnlineBoutique 的 50 个元测试任务上评估。
    • E3 (OnlineBoutique → TrainTicket): 在 OnlineBoutique 的 4 个元训练任务上训练 TEMAML,并在 TrainTicket 的 50 个元测试任务上评估。
    • E4 (TrainTicket → OnlineBoutique): 在 TrainTicket 的 4 个元训练任务上训练 TEMAML,并在 OnlineBoutique 的 50 个元测试任务上评估。

5.5. 实施细节

所有实验都在一台配备 32 核 CPU 和 NVIDIA Ampere A100 GPU (40 GB 显存) 的 Linux 服务器上进行,使用 Python 3.10.6。AttenAE 和 TEMAML 均使用 AdamW 优化器进行训练。详细的实现和超参数设置可在复制包 [Wang et al. 2025] 中找到。

6. 实验结果与分析

6.1. 核心结果分析

TraFaultDia 在各项实验中均表现出色,验证了其在系统内和跨系统背景下的有效性。

6.1.1. 有效性 (Effectiveness)

以下是原文 Table 3 的结果: 表3. TraFaultDia 和基线在 TrainTicket 的50个元测试任务上的比较:平均准确率 (95% CI) 和最小-最大范围。

  • E1 (TrainTicket→TrainTicket): 在 TrainTicket 的 4 个元训练任务上训练。

  • E3 (OnlineBoutique→TrainTicket): 在 OnlineBoutique 的 4 个元训练任务上训练。

    Model E1 (TrainTicket→TrainTicket) 5-shot E1 (TrainTicket→TrainTicket) 10-shot E3 (OnlineBoutique→TrainTicket) 5-shot E3 (OnlineBoutique→TrainTicket) 10-shot
    Our TraFaultDia 92.91±2.10 (74.67-100.0) 93.26±1.40 (76.00-100.0) 86.35±2.00 (70.67-100.0) 92.19±1.99 (74.67-100.0)
    AttenAE alternative:
    OnlySpan+TEMAML 80.64±2.84 (57.33-97.33) 78.77±2.80 (60.00-97.33) 79.25±2.89 (57.33-97.33) 80.19±3.10 (56.00-97.33)
    Multihead attention fusion alternatives:
    LinearAE+TEMAML 89.15±2.29 (73.33-100.0) 90.59±2.43 (70.67-100.0) 83.09±2.55 (62.67-97.33) 90.61±2.01 (72.00-100.0)
    GluAE+TEMAML 92.21±1.73 (77.33-100.0) 93.07±1.64 (77.33-100.0) 85.07±2.38 (66.67-100.0) 94.40±2.19 (72.00-100.0)
    Transformer encoder alternatives:
    AttenAE+LinearMAML 45.84±2.21 (25.33-61.33) 45.36±2.16 (30.67-60.00) 43.81±1.99 (28.00-58.67) 43.87±1.93 (29.33-60.00)
    AttenAE+RnnMAML 49.65±2.09 (37.33-64.00) 42.88±1.93 (24.00-58.67) 48.45±1.75 (38.67-65.33) 47.07±1.88 (34.67-58.67)
    AttenAE+LstmMAML 41.39±2.20 (21.33-56.00) 42.67±1.91 (29.33-56.00) 40.32±1.68 (22.67-52.00) 42.29±1.79 (25.33-56.00)
    AttenAE+CnnMAML 57.06±2.85 (41.33-81.00) 69.20±2.19 (56.00-88.00) 49.04±1.80 (38.67-64.00) 69.47±2.65 (48.00-89.33)
    TEMAML alternatives:
    AttenAE+TEMatchNet 76.56±2.80 (49.33-93.33) 76.05±2.37 (50.67-94.67)
    AttenAE+ProtoNet 57.25±0.03 (40.00-74.67) 59.68±0.03 (44.00-76.00)
    AttenAE+NNeighbor 88.19±0.02 (74.67-98.67) 92.56±0.02 (78.00-100.0)
    AttenAE+DTree 66.80±0.03 (46.67-88.00) 77.09±0.03 (54.67-96.00)

以下是原文 Table 4 的结果: 表4. TraFaultDia 和基线在 OnlineBoutique 的50个元测试任务上的比较:平均准确率 (95% CI) 和最小-最大范围。

  • E2 (OnlineBoutique→OnlineBoutique): 在 OnlineBoutique 的 4 个元训练任务上训练。

  • E4 (TrainTicket→OnlineBoutique): 在 TrainTicket 的 4 个元训练任务上训练。

    Model E2 (OnlineBoutique→OnlineBoutique) 5-shot E2 (OnlineBoutique→OnlineBoutique) 10-shot E4 (TrainTicket→OnlineBoutique) 5-shot E4 (TrainTicket→OnlineBoutique) 10-shot
    Our TraFaultDia 82.50±2.35 (65.33-98.67) 85.20±2.33 (66.67-98.67) 82.37±2.07 (64.00-97.33) 84.77±2.28 (68.00-98.67)
    AttenAE alternative:
    OnlySpan+TEMAML 72.83±2.40 (57.33-88.00) 73.15±2.81 (46.67-92.00) 71.81±2.25 (56.00-85.33) 73.60±2.21 (57.33-85.33)
    Multihead attention fusion alternatives:
    LinearAE+TEMAML 76.15±2.59 (60.00-95.00) 78.21±2.50 (64.00-96.00) 75.81±2.45 (52.00-89.33) 74.32±2.44 (53.33-88.00)
    GluAE+TEMAML 80.61±2.96 (58.67-98.67) 77.49±2.67 (48.00-94.67) 74.96±2.76 (54.67-94.67) 77.57±2.70 (56.00-94.67)
    Transformer encoder alternatives:
    AttenAE+LinearMAML 42.59±3.63 (20.00-77.33) 40.75±3.53 (21.33-68.00) 47.01±3.59 (25.33-74.67) 44.35±4.10 (20.00-89.33)
    AttenAE+RnnMAML 72.59±2.50 (54.67-94.67) 64.75±2.53 (46.67-80.00) 72.58±2.58 (54.70-94.70) 71.01±2.80 (56.00-89.33)
    AttenAE+LstmMAML 54.80±2.11 (40.00-70.67) 55.97±2.25 (41.33-69.33) 56.19±1.92 (38.67-72.00) 59.71±2.05 (42.67-77.33)
    AttenAE+CnnMAML 80.10±2.16 (60.00-94.67) 83.07±3.29 (68.00-97.33) 79.01±2.63 (56.00-97.33) 84.08±2.76 (65.33-100.0)
    TEMAML alternatives:
    AttenAE+TEMatchNet 76.29±3.00 (54.67-96.00) 73.11±2.94 (50.67-94.67)
    AttenAE+ProtoNet 74.51±0.03 (53.33-92.00) 76.59±0.04 (58.66-94.67)
    AttenAE+NNeighbor 80.96±0.03 (64.00-98.67) 84.75±0.03 (62.80-98.67)
    AttenAE+DTree 66.99±0.02 (54.67-80.00) 73.79±0.03 (58.67-82.67)

从表3和表4可以看出:

  • TraFaultDia 的卓越性能: TraFaultDia 在所有实验设置(5-shot 和 10-shot)中都展示了高平均准确率,表明其在系统内和跨系统上下文中的有效性。在 TrainTicket (E1) 10-shot 设置下达到了 93.26%,在 OnlineBoutique (E2) 10-shot 设置下达到了 85.20%。跨系统方面 (E3, E4),性能也保持在 84% 到 92% 的高水平。

  • 与其他有效基线的比较:

    • GluAE+TEMAMLGluAE+TEMAMLLinearAE+TEMAMLLinearAE+TEMAML 在某些设置(如 E1 和 E3)中达到了与 TraFaultDia 相似的高准确率,但在 E2 和 E4 设置中分别比 TraFaultDia 低约 2%-8% 和 7%-10%。这表明 TraFaultDia 在不同系统上的鲁棒性更强。

    • AttenAE+CnnMAMLAttenAE+CnnMAML 在 E2 和 E4 设置中获得了约 79.01%-84.08% 的平均准确率,但在 E1 和 E3 设置中仅获得 49.04%-69.47% 的平均准确率,表现不够稳定。

    • AttenAE+NNeighborAttenAE+NNeighbor 在系统内适应性方面 (E1 和 E2) 与 TraFaultDia 的平均准确率差距不大(约 1%-4%),但在跨系统适应性方面存在限制(未评估)。

      以下是原文 Table 5 的结果: 表5. 50个元测试任务准确率的 t-test 结果,比较 TraFaultDia 与实验中有效的基线。

  • ***p < 0.001; **p < 0.01; *p < 0.05

    Our TraFaultDia v.s. E1 5-shot 10-shot E3 5-shot 10-shot
    GluAE+TEMAML 0.0719 0.5347 0.0045*** 7.74e-07***
    LinearAE+TEMAML 1.62e-13*** 1.14e-09*** 1.87e-10*** 0.0005***
    AttenAE+NNeighbor 7.10e-29*** 0.0006***
    Our TraFaultDia v.s. E2 5-shot 10-shot E4 5-shot 10-shot
    GluAE+TEMAML 0.0006*** 6.95e-28*** 1.70e-27*** 9.15e-27***
    AttenAE+CnnMAML 6.65e-07*** 0.0003*** 2.01e-10*** 0.176
    AttenAE+NNeighbor 1.11e-05*** 0.1752

以下是原文 Table 6 的结果: 表6. 效应量:Cohen's d 值比较 TraFaultDia 与有效基线。

Our TraFaultDia v.s. E1 5-shot 10-shot E3 5-shot 10-shot
GluAE+TEMAML 0.36 0.13 0.58 -1.06
LinearAE+TEMAML 1.71 1.35 1.42 0.79
AttenAE+NNeighbor 3.18 0.71
Our TraFaultDia v.s. E2 5-shot 10-shot E4 5-shot 10-shot
GluAE+TEMAML 0.71 3.07 3.04 2.88
AttenAE+CnnMAML 1.06 0.75 1.42 0.27
AttenAE+NNeighbor 0.93 0.27
  • 统计显著性与效应量:

    • 除了在 E1 设置中 GluAE+TEMAMLGluAE+TEMAML 和 E2 10-shot 设置中 AttenAE+NNeighborAttenAE+NNeighbor 以及 E4 10-shot 设置中 AttenAE+CnnMAMLAttenAE+CnnMAML 之外,TraFaultDia 在所有其他 E1-E4 设置中都与基线存在显著差异 (p<0.001\text{p} < 0.001)。
    • TraFaultDia 对 GluAE+TEMAMLGluAE+TEMAML 主要在 E2 和 E4 中以及对 LinearAE+TEMAMLLinearAE+TEMAMLAttenAE+NNeighborAttenAE+NNeighbor 在所有实验的 5-shot 设置中,都显示出大的正效应量 (Cohen's d > 0.8)。这提供了强有力的证据,表明 TraFaultDia 在大多数实验设置中优于这些基线。
  • 探索结果:

    • 在 OnlineBoutique 的 E2 和 E4 元测试任务中,TraFaultDia 和三个最有效基线的最低准确率(48%-68%)出现在对由性能问题(CPU contentionCPU consumptionnetwork delay)引起的异常调用链进行分类时。
    • 这表明,将 CPU、内存和网络流量等性能指标纳入调用链表示的构建,可能会提高 TraFaultDia 和基线在分类此类故障时的准确率。

6.1.2. 效率 (Efficiency)

以下是原文 Table 7 的结果: 表7. TraFaultDia 和有效基线的训练时间(秒)。

  • * 此基线的训练时间仅计算其在元训练任务的支持集上的训练时间,以避免因不同调用链表示方法引起的差异。

    E1 5-shot E1 10-shot E3 5-shot E3 10-shot
    Our TraFaultDia 36.3394 25.8387 46.0045 62.7578
    GluAE+TEMAML 19.9185 20.6976 42.3725 78.0125
    LinearAE+TEMAML 17.7576 45.1150 119.6440 30.5474
    AttenAE+NNeighbor*
    E2 5-shot E2 10-shot E4 5-shot E4 10-shot
    Our TraFaultDia 40.9426 65.3120 32.4136 53.3256
    GluAE+TEMAML 20.1432 58.8608 21.6602 47.0818
    AttenAE+CnnMAML 23.9832 36.7725 15.6358 23.6530
    AttenAE+NNeighbor*
  • 训练时间: 表7显示,与基线相比,TraFaultDia 在某些 E3 设置中训练时间减少了约 6-73 秒,但在 E1、E2、E4 中,训练时间增加了约 4-29 秒。这表明 TraFaultDia 的训练开销在某些情况下可能略高,但在整体上处于可接受范围。

    以下是原文 Table 8 的结果: 表8. 每元测试任务的测试时间(秒),TraFaultDia 和有效基线。

  • 测试时间指的是在每个实验的50个元测试任务的查询集 QtsQ_{ts} 上评估每个方法所花费的时间。

    E1 5-shot E1 10-shot E3 5-shot E3 10-shot
    Our TraFaultDia 0.0460 0.0680 0.0651 0.0953
    GluAE+TEMAML 0.0640 0.0942 0.0651 0.0954
    LinearAE+TEMAML 0.0748 0.0946 0.0640 0.0944
    AttenAE+NNeighbor 0.1860 0.1890
    E2 5-shot E2 10-shot E4 5-shot E4 10-shot
    Our TraFaultDia 0.0848 0.0977 0.0875 0.0974
    GluAE+TEMAML 0.0801 0.0978 0.0731 0.0969
    AttenAE+CnnMAML 0.0470 0.0472 0.0417 0.0490
    AttenAE+NNeighbor 0.5140 0.5307
  • 测试时间: 表8显示,包括 TraFaultDia 在内的 MAML 相关方法,其测试时间比 AttenAE+NNeighborAttenAE+NNeighbor 少约 4-11 倍。这是因为 AttenAE+NNeighborAttenAE+NNeighbor 需要将每个新调用链与所有现有标注实例进行比较,随着数据集的扩展,这会导致显著增加的测试时间。在实际运维场景中,元学习方法在适应新任务时的快速性是其显著优势。

    以下是原文 Table 9 的结果: 表9. 各 MSS 调用链构建方法的训练时间(分钟)。

TrainTicket OnlineBoutique
Our AttenAE 22.4112 18.7502
GluAE 20.1517 18.6413
LinearAE 20.5443 15.5549
OnlySpan 13.4135 10.3123

以下是原文 Table 10 的结果: 表10. 每元测试任务的平均调用链构建时间(秒)。

Trainticket 5-shot Trainticket 10-shot OnlineBoutique 5-shot OnlineBoutique 10-shot
Our AttenAE 1.8436 2.1524 4.1426 5.0189
GluAE 1.8395 2.1541 4.3121 5.1921
LinearAE 1.8286 2.1486 4.1223 5.2066
OnlySpan 1.1671 1.1818 1.9065 2.1822
  • 调用链表示构建时间: 表9和表10显示,AttenAE、GluAE、LinearAE 的训练时间和调用链构建时间相似。OnlySpan 的训练和构建时间大约减半,因为它完全忽略了日志。然而,OnlySpan+TEMAMLOnlySpan+TEMAML 基线在 E1-E4 设置中平均准确率比其他方法低约 10%(见表3-4),这表明在构建表示时只考虑 Span 数据是不够的。

6.2. 消融实验/参数分析

以下是原文 Table 11 的结果: 表11. 每个实验中元训练任务数量的消融研究。

Number of tasks E1 5-shot E1 10-shot E2 5-shot E2 10-shot E3 5-shot E3 10-shot E4 5-shot E4 10-shot
Current: 4 92.91 93.26 82.50 85.20 86.35 92.19 82.37 84.77
3 87.67 90.00 80.53 82.13 85.03 89.07 81.92 82.67
2 88.17 89.33 78.67 78.10 83.11 85.78 74.67 77.33
  • AttenAE 的贡献: 如表3和表4所示,TraFaultDia 始终比 OnlySpan+TEMAMLOnlySpan+TEMAML(AttenAE 的替代方案,即不使用日志信息)高出约 10% 的准确率,这明确表明 AttenAE 在融合多模态数据方面对整体有效性做出了重要贡献。
  • 元训练任务数量的消融研究: 研究还对训练 TEMAML 所需的元学习任务数量进行了消融研究。目前的实验使用了 4 个元训练任务。通过测试 2-4 个元训练任务,结果显示使用 4 个元训练任务在每个实验的 50 个元测试任务中产生了最佳的平均准确率(见表11)。这与 MAML 作为多任务学习算法的性质相符:包含更多样化的元训练任务可以增强算法的鲁棒性,提高其在不同上下文中适应新任务的能力。

6.3. 对研究问题的回答

根据实验结果,研究者对提出的两个研究问题给出以下回答:

  • RQ1: 系统内适应性 (Within-system adaptability): TraFaultDia 在系统内(TrainTicket → TrainTicket 和 OnlineBoutique → OnlineBoutique)的 50 个新任务上,分别实现了 93.26% 和 85.20% 的高平均准确率(10-shot 设置),并且适应速度快。这表明 TraFaultDia 一旦在 MSS 内部的任务上训练充分,可以有效且高效地适应同一 MSS 内部的新异常调用链分类任务。

  • RQ2: 跨系统适应性 (Cross-system adaptability): TraFaultDia 在跨系统(OnlineBoutique → TrainTicket 和 TrainTicket → OnlineBoutique)的 50 个新任务上,分别实现了 92.19% 和 84.77% 的高平均准确率(10-shot 设置),并且适应速度快。这表明 TraFaultDia 训练在一个 MSS 上后,可以有效且高效地适应不同 MSS 的新异常调用链分类任务。

    结论: 综合来看,TraFaultDia 在分类 MSS 中的异常调用链到精确故障类别方面,展示了有效且快速的系统内和跨系统适应性。

7. 总结与思考

7.1. 结论总结

本文提出了 TraFaultDia,一个新颖的 AIOps 框架,旨在自动将微服务系统 (MSS) 中的异常调用链分类到具体的故障类别中。该框架通过两个核心组件实现其目标:

  1. AttenAE (Multi-Head Attention Autoencoder): 负责无监督地构建统一且压缩的调用链表示。它通过融合高维、多模态的 Span 和 Log 数据,有效地捕捉了调用链的关键特征,解决了数据复杂性的挑战。

  2. TEMAML (Transformer-Encoder based Model-Agnostic Meta-Learning): 利用元学习范式,使得模型能够在仅有少量标注实例的情况下,快速适应新的、未见的异常调用链分类任务,并具备强大的跨系统适应性。这解决了 MSS 异构性和故障类别数据稀缺的问题。

    在两个代表性的基准 MSS (TrainTicket 和 OnlineBoutique) 的开放数据集上进行的评估显示,TraFaultDia 展现出卓越的性能。它不仅在系统内分类任务中实现了高准确率(TrainTicket 93.26%,OnlineBoutique 85.20%),而且在跨系统场景下也保持了相似的有效性(TrainTicket 92.19%,OnlineBoutique 84.77%),同时保持了快速的适应时间。通过自动将异常调用链分类到与故障组件和根本原因关联的故障类别,TraFaultDia 大幅减少了人工分析的需求,提高了故障诊断的效率。

7.2. 局限性与未来工作

论文作者指出了 TraFaultDia 存在的以下局限性,并提出了相应的未来研究方向:

  1. 数据集限制:

    • 非真实世界数据: 研究使用了来自基准系统(DeepTraLog 和 Nezha)的开放数据集,而非真实世界的生产系统数据。真实世界的系统具有更高的复杂性、规模和多样性,可能影响框架的普遍适用性。
    • 缺失性能指标: 尽管 AttenAE 融合了 Span 和 Log 属性,但未包含 CPU、内存使用率、网络流量等性能指标。实验结果的探索性分析表明,对于性能相关的故障(如 CPU 争用、网络延迟),这种缺失可能导致分类准确率较低。
    • 故障类型覆盖有限: 研究使用了 TrainTicket 的 30 个故障类别和 OnlineBoutique 的 32 个故障类别。为了确保实验设置中的任务分布,采用了 5-way 设置。但现实世界中故障类型可能更广泛、更复杂。
    • 未来工作: 作者正在选择和部署真实的工业 MSS,并生成新的数据集,以解决这些数据集相关的局限性。
  2. 可扩展性、通用性和可解释性:

    • 通用性提升: 现有局限性可能导致框架的通用化能力未得到充分利用。未来工作将致力于进一步提高 TraFaultDia 的通用性。
    • 可扩展性: 需要验证框架在更大规模、更复杂的真实世界 MSS 中的可扩展性。
    • 可解释性: 增强模型的诊断结果可解释性,帮助运维人员更好地理解分类依据。

7.3. 个人启发与批判

7.3.1. 个人启发

  1. 元学习在 AIOps 领域的巨大潜力: 本文成功地将元学习引入微服务系统的故障诊断,解决了数据稀缺和系统异构性两大实际挑战。这为 AIOps 领域提供了一个非常有前景的方向,即如何构建能够“学会学习”的系统,从而在不断变化的生产环境中快速适应新问题。
  2. 多模态数据融合的重要性: 通过 AttenAE 融合 Span 和 Log 数据,表明了在复杂分布式系统中,单一视角的观测数据往往不足以进行精确诊断。有效整合不同模态的信息是提升诊断准确率的关键。这一点对于其他依赖多源异构数据的 AIOps 任务也具有借鉴意义。
  3. 从“检测”到“诊断”的进步: 大多数 AIOps 研究停留在异常检测和定位层面,而本文迈向了更深层次的故障分类和根本原因识别。这对于提高故障处理效率、减少人工干预具有直接的实用价值,真正将 AI 从“报警器”变成了“诊断医生”。
  4. Transformer 架构的灵活性: Transformer Encoder 在处理由 AttenAE 生成的潜在表示而非传统序列数据时仍能表现出色,这凸显了其自注意力机制的强大特征捕获能力和架构的通用性,不仅限于 NLP 领域。

7.3.2. 批判与潜在改进

  1. AttenAE 训练的实际开销与依赖: 尽管 AttenAE 的训练是无监督的,但在每个新的 MSS 上都需要“足够多”的无标签调用链进行训练。对于刚刚部署的新系统,或者数据收集基础设施不完善的系统,获取“足够多”的无标签调用链本身可能也是一个挑战。此外,如果 MSS 频繁迭代,AttenAE 是否需要频繁重新训练以适应新的服务行为?这可能是一个隐藏的维护成本。
  2. 故障类别定义的粒度与动态性: 论文将故障类别与故障组件和根本原因关联,但实际生产环境中,故障类别可能更加复杂且动态演变。如何将新的故障类型自动纳入 TraFaultDia 的识别范畴,或者如何动态更新故障类别定义,是需要进一步探讨的问题。目前的 N-Way K-Shot 设置依赖于预定义的 N 个类别。
  3. “少样本”标签获取的挑战: 尽管 10 个标注实例已经很“少”,但在实际运维中,为每个新的故障类别获取这 10 个高质量的标注实例本身仍需人工介入。特别是在新故障出现时,可能需要专家进行初步诊断和标注,这仍然是一个瓶颈。如何进一步减少 K 值,甚至实现零样本学习,将是未来的重要方向。
  4. 未纳入性能指标的影响: 论文指出了未纳入性能指标(CPU、内存等)是导致某些性能相关故障分类准确率较低的原因。这说明当前基于 Span 和 Log 的特征表示,即使融合,也可能无法完全捕获所有类型的故障信息。未来的工作应考虑如何无缝地整合这些多源、异构的性能指标,同时不增加模型和数据的复杂性。
  5. 统计显著性结果的进一步讨论: 在表5中,E4 10-shot 设置下 AttenAE+CnnMAMLAttenAE+CnnMAML 的 p 值为 0.176,E2 10-shot 设置下 AttenAE+NNeighborAttenAE+NNeighbor 的 p 值为 0.1752,这些 p 值高于通常的 0.05 显著性水平,表明 TraFaultDia 在这些特定场景下与这些基线的性能差异不具有统计学显著性。尽管 Cohen's d 值相对较小(0.27),说明效应量不大,但仍值得关注。这提示 TraFaultDia 并非在所有具体场景和所有基线面前都绝对领先。其真正的优势在于其鲁棒性跨系统适应性,而非在每个单一设置下都超越所有可能的简单基线。未来的工作可以针对这些特定场景进行更深入的分析,以进一步提升模型的普遍优越性。
  6. 可解释性不足: 尽管 TraFaultDia 能够分类,但其内部的 AttenAE 和 Transformer Encoder 都是深度学习模型,其决策过程相对“黑盒”。在故障诊断中,除了知道“是什么故障”,运维人员往往还需要知道“为什么是这个故障”,以及提供具体的证据。增强模型的可解释性,例如通过注意力权重可视化,将是其在实际应用中被广泛接受的关键。

相似论文推荐

基于向量语义检索推荐的相关论文。

暂时没有找到相似论文。