赞
踩
相关:
论文名称:Actionable and Interpretable Fault Localization for Recurring Failures in Online Service Systems
会议名称:ESEC-FSE 2022
下载地址:netman
源码地址:github
数据集:https://www.dropbox.com/sh/ist4ojr03e2oeuw/AAD5NkpAFg1nOI2Ttug3h2qja?dl=0
https://doi.org/10.5281/zenodo.6955909
在线服务系统中重复故障的可操作和可解释故障定位
本节主要回答三个问题,论文想解决什么问题,使用什么方法,从理论上回答为什么能解决问题。
论文旨在解决 在线服务系统中 1 ^1 1 重复故障的可操作和可解释故障 2 ^2 2 定位问题 3 ^3 3,通过自动化和机器学习方法改进现有的依赖于人工经验和知识的工业实践,克服现有方法在处理大量多样监控数据与复杂组件依赖时的局限性,以及无法满足工程师对定位结果操作性和解释性的需求。
从论文标题中已经给出这个问题的答案,但结合摘要内容可以概述如上。主要可以分为三个模块,即在某场景中,出现的某类型的故障,现在我们需要定位这个故障。(分别对应前面的右上角表示 1 2 3
)。
论文提出了名为DejaVu的方法来解决在线服务系统中反复出现故障的自动化和可解释性定位问题。DejaVu通过以下步骤实现:
更多明细我们在后面内容中介绍(主要是基于图5中的 workflow 而展开)。
论文通过以下几个方面来解释DejaVu方法的有效性:
实验验证:研究人员在四个数据集上对DejaVu进行了广泛的测试,其中包括基于真实世界的系统数据集,涵盖了总共601个故障案例,其中有99个真实的生产环境故障。实验结果显示,DejaVu在定位故障单元方面的平均排序成绩(MAR)达到了1.66至5.03之间,显著超越了基准方法,提高幅度在54.52%至97.92%之间。
模型组件贡献分析:实验表明DejaVu中诸如特征提取器和基于图注意力网络(GAT)的聚合模块等主要部分确实发挥了积极作用,对整体性能有所贡献。
可操作性评估:DejaVu能够在接收到故障时迅速推荐故障发生的位置以及故障的具体类型,使得工程师能够及时识别潜在的故障原因,并立即采取措施减轻故障影响,从而保障软件服务的质量。
可解释性展示:针对模型预测结果的可解释性,论文提出了两种解释方法。一种是在故障依赖图(FDG)上找到代表性的历史故障案例,揭示模型可能从中学习到做出当前故障推荐的原因。另一种则是模仿决策树的形式将训练好的模型转化为人类可读的规则,全局解读模型的工作机制。
性能稳定性与通用性:DejaVu不仅在已知故障上有优秀表现,对未曾遇到过的故障也能取得类似的效果,这体现了模型的良好泛化能力。同时,考虑到在线服务系统频繁的变化和更新,论文提到DejaVu支持周期性重新训练以适应变化,并能在新的故障场景下使用新的故障单元定义。
有效性衡量指标:采用了如前 k 准确率(A@k)和平均平均排名(MAR)等广泛使用的评价指标,量化地证实了DejaVu在故障定位任务上的有效性。其中A@k测量的是在前k个推荐中包含正确故障答案的比例,而MAR则反映了诊断一个故障平均需要检查多少个推荐项,数值越小说明定位效率越高。
章节编号 | 章节标题 | 简要内容 |
---|---|---|
摘要 | 概述了在线服务系统中故障定位的挑战,提出DejaVu方法,旨在自动化并增强对重复故障的定位效果,使之既可操作又可解释。 | |
1. 引言 | 描述了故障定位的重要性,尤其是针对频繁重现的故障,并引出当前业界手动实践的问题和改进目标。 | |
2. 背景与问题定义 | ||
2.1 | 问题背景 | 描述了在线服务系统中故障的重复性质及其普遍性,强调从历史故障中学习诊断价值。 |
2.2 | 故障单元与故障依赖图(FDG)定义 | 定义了故障单元的概念,以及FDG如何描绘组件间的依赖关系和故障传播途径。 |
2.3 | 问题陈述 | 明确了本研究的目标:给定最新的FDG和对应指标值时,推荐出故障所在的故障单元。 |
3. DejaVu模型设计 | ||
3.1 | 概览 | 展示DejaVu模型的整体架构,输入为故障时间点的度量指标和FDG,输出为每个故障单元的可疑评分。 |
3.2 | 特征提取器 | 解释如何通过一维卷积神经网络和GELU激活函数处理时间窗口内的度量矩阵,生成固定维度的单元级特征向量。 |
3.3 | 特征聚合器 | 描述了如何利用图注意力网络(GAT)动态计算关联故障单元的聚合权重,模拟多跳故障传播,形成聚合特征。 |
3.4 | 分类器 | 讲述如何基于聚合特征对故障单元进行打分,以此判断故障的可能性。 |
3.5 | 损失函数与优化 | 介绍模型训练时采用的修订损失函数以及为应对类别不平衡问题采取的类平衡策略。 |
4. 实验与结果 | 报告了DejaVu在不同数据集上的性能对比、效率分析以及对模型参数影响的研究。 | |
5. 结论与未来工作 | 总结DejaVu在各种情况下的优秀性能,讨论其实效性和可解释性,并展望未来改进方向。 |
先看一下图2,这里介绍了各个部分之间的关系。
如下图所示,监听指标过程从上往下可以概述为:
整个流程中将会产生非常多的指标,并且这些指标之间存在一定的拓扑关系。也就是我们接下来要将的故障依赖图(FDG)
Recurring Failures 指的是在线服务系统中重复发生的同类故障,这些故障并非偶然事件,而是具有一定规律性地在不同时间、不同地点以相似的方式反复出现。
论文分析了一个生产银行信息系统的576张故障单,时间跨度为一年。
前面有提到各个组件、各个服务、服务与组件之间存在依赖关系,这里定义的FDG图与此有关,具体定义如下:
大概可以理解为
FDG
\text{FDG}
FDG 是一个无向图,记作
G
=
(
V
,
E
)
G=(V,E)
G=(V,E),其中
V
V
V 是在线服务系统的所有定义的候选故障单元的集合。其中相互依赖的边
(
v
i
,
v
j
)
(v_i, v_j)
(vi,vj) 组成集合
E
E
E。
比如论文提到的例子如 图3 所示:
例如,系统 A 仅包括27个组件,这是复杂的(见表1)。在图3中,由于服务部署在 Docker6上,Docker上CPU耗尽导致的故障传播到服务请求。它进一步传播到服务1请求、服务2请求和OSB1请求,因为服务1和服务2依赖于服务,而osbi依赖于这两个服务。
论文采用自动构建 FDGs 方法,因为 FDGs 是复杂和动态的(例如,在微服务系统中,pod 是动态创建和删除的),基于调用和部署组件关系。例如,在 sysA 。我们通过跟踪工具(图4中最左边的图)收集OSBS、服务和数据库之间的调用关系,并通过配置管理数据库收集服务、容器和服务器之间的部署关系。通过组合组件关系和故障单元,我们自动构建 FDG。例如,当Service 1部署在Docker1 上时(见图4),Service1 请求连接到 Docker1 CPU / Memory(见图3)。此外,工程师可以根据自己的领域知识和现有的诊断知识手动添加或删除FDG上的边。例如,当两个服务依赖于一个有状态的第三方服务(无法通过跟踪捕获)时,工程师可以在 FDGs 上手动连接它们。
在这项工作中,我们的目标是在故障发生时,在给定最新FDG和相应度量值的情况下,推荐故障单元。故障故障单元精确定位故障发生的位置(部件)和发生的故障类型(由指标指示),从而帮助工程师迅速采取正确的缓解措施。寻找故障单元或 FDG 的最有用的规范和故障发现不在本文的范围内。
从论文图5 中可以大致看一下 DejaVu 的大致流程。
Dejavu的流程主要包括以下几个步骤:
数据准备:收集在线服务系统的历史故障数据,包括过去发生的故障实例及其相关的监控指标、日志、调用链等信息。同时,构建系统的故障依赖图(FDG),该图描绘了系统中各组件之间的依赖关系,以及故障如何在这些组件间传播。
模型训练:利用历史故障数据和FDG作为输入,进行离线训练。训练过程中,Dejavu模型学习如何从故障单元的度量指标和其在FDG中的相对结构信息中识别出故障的模式和特征。
采用修订的损失函数进行模型优化,并考虑到故障类别间的不平衡性,采用类平衡策略确保模型对各类故障的识别能力。
在线故障诊断:当在线服务系统中出现新的故障时,Dejavu模型接收当前故障时刻的度量指标数据和最新FDG,快速做出如下决策:
这些诊断结果为工程师提供了直接的行动指南,即应关注哪些组件以及应检查哪些指标以确认和解决问题。
结果解释与反馈:为了增强模型预测的可解释性和可信度,Dejavu提供了两种解释方法:
工程师根据模型推荐和解释,采取相应措施进行故障排查和修复。在故障得到解决后,将人工确认的故障真相保存下来,用于未来模型的再训练和持续优化。
通过以上流程,Dejavu实现了对在线服务系统中重复故障的自动化、可执行且可解释的定位,极大地提高了故障诊断的效率和准确性,减轻了工程师的工作负担,促进了系统故障的快速响应和有效管理。
各个章节的概述前面表格中已经罗列,这里我们只含论文翻译。
如图 6 所示,DejaVu 模型以故障时间前后的度量值和FDG作为输入,并使用二进制分类器输出每个故障单元的可疑分数。请注意,不同的故障可能具有不同的相应FDG
更具体地说,首先,为了解决统一表示故障单元的挑战,我们引入了一个特征提取器模块,该模块可以掌握度量的时间信息和度量之间的相关性(原论文 §3.2)。训练特征提取器以将相同故障类别的任何故障单元的度量映射到固定宽度向量(单元级特征)中。我们为每个故障类别训练一个故障提取器,因为不同故障类别的故障单元包含不同的度量。其次,为了能够对故障传播进行建模,我们使用特征聚合器将FDG上的结构信息编码为聚合特征(原论文 3.3)。特征聚合器利用注意力机制来更多地关注相关的故障单元。最后,我们引入了一个分类器,根据其聚合特征对每个故障单元进行评分(原论文 3.4)。为了通用性,同一故障类中的故障单元共享一个特征提取器,所有故障单元共享特征聚合器和分类器。对于不同的故障类,除了输入大小之外,它们的特征提取器都是相同的。这样,故障单元(例如,图3中的 Docker6 CPU)的得分主要由其度量值及其相关故障单元(如服务6请求、服务2请求、OSB1请求)的度量值决定,而不是由其位置决定。
我们的模型是通过最小化修正的损失函数(§3.5)来训练的。此外,我们采用类平衡进行训练,因为训练数据中每个失败类的频率各不相同(§3.6)。
故障单元的每个度量都具有时间信息,并且度量之间存在相关性。为了更好地提取有意义的特征,我们使用了三阶段特征提取方法。具体来说,第一阶段学习时间信息,而后两阶段学习更高层次的特征。
在第一阶段,使用门控递归单元(GRU)递归神经网络提取故障单元的时间特征。GRU是一种具有门控机制的递归神经网络,但与LSTM相比,其结构更简单,参数更少。故障单元的输入度量被编码为维度的数字矩阵 W × M v W \times M_v W×Mv , 其中 W W W 是我们在故障时划分的时间窗口的长度,以及 M v M_v Mv 是失败单元 v v v 的度量数。在本文中,我们根据经验设置 W W W 为 20分钟来捕捉度量的近历史。
在第二阶段,我们将一维卷积神经网络(1-D-CNN)和 GELU(高斯误差线性单元)激活函数应用于第一阶段获得的时间特征矩阵。通过应用一维CNN,我们得到了多个特征图,提取了不同时间点和度量之间的相关性。GELU通过在正激活中保持线性并抑制负激活来提供非线性,同时缓解消失梯度问题。
在第三阶段中,应用全连通层来学习在第二阶段中获得的不同特征图之间的关系,并输出维数为的数值单位级特征向量 Z Z Z.
第二个模块,即特征聚合器,负责聚合故障单元的相关故障单元的单元级特征 v v v 并且基于 FDG G G G 将结构信息合并为一个聚合特征 f ^ ( v ) \hat{f}^{(v)} f^(v)。为了便于推广,特征聚合器应该是独立于结构的。因此,图卷积网络(GCN)是不合适的。由于任何一对故障单元之间的关系各不相同,因此也不适合像GraphSAGE 那样简单地将连接的故障单元的特征平均在一起。因此,对于每个故障单元,我们通过图注意力网络(GAT)基于其单元级特征动态计算其相关故障单元的聚合权重。
然而,单个 GAT 仅聚合故障单元的邻居的特征,而故障沿着 FDG 传播不止一跳(路径长度大于 1)。因此,我们将多个GAT依次堆叠在一起,最后一个GAT的输出被作为下一个GAT的输入。通过这种方式,我们聚合了进一步相关的故障单元的特征,从而对多跳故障传播进行建模。尽管多层图神经网络可能会受到过度平滑(over-smoothing)的影响,但我们应用残差连接来缓解这个问题[32]。另一方面,我们还引入了多头注意力,以提高能力并稳定训练过程。具体来说,我们并行应用多个GAT,并将它们的输出连接在一起。我们将顺序堆叠的GAT的数量表示为
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。