基于多源数据的微服务系统失败测试用例诊断

简介

本文介绍由南开大学、华为云及清华大学共同合作的论文:基于多源数据的微服务系统失败测试用例诊断。该论文已被FSE 2024(The ACM International Conference on the Foundations of Software Engineering) 会议录用,论文标题为: Fault Diagnosis for Test Alarms in Microservices Through Multi-source Data。

作者:张圣林,朱俊,郝博文,孙永谦,聂晓辉,朱静雯,刘喜临,李小倩,马宇驰,裴丹


随着微服务系统规模的扩张,保障微服务系统的稳定性愈发重要,大量的测试用例被设计用于检测微服务系统相关功能的可靠性,随之而来的是测试用例失败产生的大量测试告警。手动诊断这些告警对测试人员来说非常耗时耗力,因此自动化的测试告警故障诊断应运而生。测试告警中的故障诊断包括测试失败的故障分类和根因定位,能够帮助测试人员更加高效地处理日益增多的失败测试用例。然而,由于微服务系统的复杂性,已有的诊断测试告警的方法无法满足测试人员对于诊断准确度和精度的要求。

因此,文章提出了一种针对微服务测试告警的新型故障诊断框架 SynthoDiag ,通过知识图谱联合分析微服务系统测试过程中产生的多源日志(执行机日志、Trace日志和测试用例信息等)进行故障诊断。同时提出了根因关联和位置价值(EFA-PV)算法,用于定位与测试告警相关的日志行,减少测试人员的分析量。此外,文章采用一种高效的基于日志块的过滤方法,筛除测试过程中与故障无关的日志内容,显著提升了故障诊断的整体性能。SynthoDiag在来自华为云的大规模数据集上进行了系统评估。结果显示,SynthoDiag在故障分类的Micro-F1和Macro-F1评分上分别比基线方法提高了21%和30%,并且在故障定位的Top-5准确率达到了81.9%,显著超过了之前的方法。

背 景

系统集成测试(SIT)阶段的测试用例,包括一系列操作及其相应的检查点,每个测试用例用于测试系统的特定功能或面对特定情况的处理能力。在SIT中,当测试操作的结果与预期不符时,测试用例视为失败并会触发告警。测试失败可能是由于不同的因素导致的,包括但不限于:网络环境不稳定、测试步骤设计错误或系统故 障等。而针对不同的失败原因,存在相应的处理方案,因此将失败的测试用例按照失败的原因进行分类, 能够帮助测试人员快速确定处理优先级和选择解决方案。

按照失败原因可以将失败测试用例分为四个类别:环境问题、脚本缺陷、工具缺陷和服务问题。环境问题涉及外部环境因素导致的故障,而脚本缺陷是由测试脚本设计的不合理引起的,而工具缺陷主要是由于测试工具的故障,这里三类问题并不会暴露系统自身的潜在问题,通常需要调试测试环境、更正测试脚本、更新测试工具等方式进行处理。服务问题是最关键的类别,主要是由于微服务系统本身的缺陷所导致的,深入分析这类失败测试用例,有助于发现潜在的服务问题并采取预防措施以避免严重事件。

微服务系统中的多源日志在诊断过程中起着关键作用,因为它们提供了有关服务和操作的信息。每个测试用例会生成三种来源的日志,如图1所示:位于用户侧的执行机日志、位于服务器侧的 Trace 日志和测试人员预先编写的测试用例信息。有效地对这三种来源的日志进行联合分析,将能够更加全面有效地对失败测试用例进行建模,并在此基础上实现更加精准的故障诊断。本文的故障诊断包含对失败测试用例进行故障分类和定位,其中故障分类是确定新用例属于哪一个现有的故障类别,而故障定位是识别和突出显示最有可能与根本原因相关的特定日志内容,从而帮助测试人员快速识别和解决故障。

图1:多源日志样例
图1:多源日志样例

研究挑战

挑战1:日志格式不统一

不同格式的多源日志使得之前的方法在利用这些日志上效果不佳,尤其是在整合半结构化的执行机日志与具有跨度的树结构化的 Trace日志时。

挑战2:失败无关日志内容的干扰

在失败的测试用例的日志中,并非所有日志内容都与测试失败相关。这些与测试失败无关的日志内容占了很大比例,会干扰提取故障特征。而现有方法不能有效地过滤掉这些无关的日志内容的同时保留相关的日志内容。

挑战3:失败相关日志内容定位不准确

由于微服务系统及其测试脚本频繁的软件升级和配置变更,即使是同一故障类别的测试用例,其故障日志的内容也可能不同。因此,历史测试用例中的故障日志内容可能与新失败的测试用例中的不同,导致现有方法无法提供足够的参考信息,以便在新失败的测试用例中定位故障日志。

结构设计

SynthoDiag框架包括三个主要组成部分:日志过滤、用例嵌入和故障诊断,如图2所示。在解析失败测试用例的日志时,SynthoDiag首先基于日志块过滤掉与测试失败无关的日志内容(解决挑战2)。然后,基于过滤后与测试失败相关的日志内容构建失败测试用例的知识图谱,有效整合不同来源的日志内容(解决挑战1)。接下来,SynthoDiag利用语义信息通过知识图嵌入技术将每个失败的测试用例嵌入到一个向量中,并将历史失败的测试用例的向量和标签将存储在用例分类库中。当需要诊断新的失败测试用例时,SynthoDiag使用相同的步骤获取该测试用例的用例向量和知识图谱,然后输出故障类别并定位测试用例中指示故障的日志内容(解决挑战3)。

在这里插入图片描述

图2:SynthoDiag整体工作流程

实验评估

文章将提出的 SynthoDiag 与四种基线方法在华为云某产品数据集上的应用进行比较分析,以评估方法的有效性。图3展示了 SynthoDiag与基线方法在F1分数、Top-5准确率方面的差异。总体来说,SynthoDiag 在所有基线方法中表现最佳,Micro-F1分数为 0.872,Macro-F1分数为0.891。这些分数比最佳基线方法分别高出21%的Micro-F1分数和30%的Macro-F1分数。具体而言,尽管 CAM 的 Micro-F1 分 数为 0.761,其Macro-F1分数为 0.587 较低,其他三个基线方法在 Macro-F1 分数上的表现也较 差,这显示了SynthoDiag在故障分类工作上的优越性。同时,SynthoDiag 在故障定位上也展示出最佳性能,Top-5 准确率为0.819,说明基于模板或基于字符串的定位方法不适合在微服务系统的失败测试用例中定位故障日志内容。

图片

图3:实验结果

总 结

为了提高针对微服务系统测试的测试用例失败告警故障诊断能力,文章提出的新型故障诊断框架SynthoDiag,利用测试过程中产生的多源日志进行故障分类和定位。SynthoDiag利用知识图谱整合执行机日志、Trace日志和测试用例信息,通过根因关联和位置价值(EFA-PV)来精确定位故障指示日志内容。该框架还采用了基于日志块的过滤策略来过滤掉与故障无关的日志内容,显著提升了故障诊断的整体性能。在华为云的一个大规模实际数据集上进行的系统评估显示,SynthoDiag在故障分类上的Micro-F1和 Macro-F1分数分别比基线方法提高了21%和30%,并且在故障定位的Top-5准确率达到了81.9%,显著优于以前的方法。总体而言,SynthoDiag通过创新地使用知识图谱技术联合分析测试过程中产生的多源日志,为微服务系统中的测试用例故障诊断提供了有效的解决方案。

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

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

相关文章

【MySQL】库的操作+表的操作

库的操作表的操作 1.库的操作1.1创建数据库1.2删除数据库1.3查找数据库1.4修改数据库1.5数据库备份和恢复1.6查看连接情况 2.库的操作2.1创建表2.2查看表结构2.3修改表2.4删除表 点赞👍👍收藏🌟🌟关注💖💖 …

[数据集][目标检测]红外车辆检测数据集VOC+YOLO格式13979张类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):13979 标注数量(xml文件个数):13979 标注数量(txt文件个数):13979 标…

网络流量探针与流量分析系统:全面指南

目录 什么是网络流量探针? 流量分析系统的功能与重要性 流量分析系统的主要功能 流量分析系统的重要性 AnaTraf 网络流量分析仪 如何选择合适的网络流量探针与流量分析系统? 1. 性能与扩展性 2. 易用性与部署 3. 数据可视化与报告 4. 安全性与…

LayaAir3.2来了:性能大幅提升、一键发布安装包、支持WebGPU、3D导航寻路、升级为真正的全平台引擎...

LayaAir3的每一个分支版本都是一次较大的提升,在3.1彻底完善了引擎生态结构之后,本次的3.2会重点完善全平台发布相关的种种能力,例如,除原有的安卓与iOS系统外,还支持Windows系统、Linux系统、鸿蒙Next系统&#xff0c…

暑期社会实践即将强势来袭,投稿三下乡文章最强攻略

以热爱充实自我 以笃行丰盈青春 这个盛夏“乡”约 纷纷迈出了社会实践的有力步伐 在展开社会实践的同时 也不要忘记投稿宣传的重要性哦 快快收藏住这份投稿攻略 助力团队展现更多精彩的实践故事! No.1 感悟思想伟力,守好“红色根脉” No.2 循迹“八八战略…

二叉树顺序结构的实现(堆)

二叉树的基本概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根结…

How to record real IP of user on nginx?

应用(Docker)使用WAF接入internet,nginx log 查不到用户的真实IP地址,于是修改nginx 设置,以下都是在linux下操作: 由于没有WAF权限,所以在 docker上启动了两个container,一个模拟WAF(r-proxy)&#xff0c…

软考 系统架构设计师系列知识点之SOME/IP与DDS(2)

接前一篇文章:软考 系统架构设计师系列知识点之SOME/IP与DDS(1) 本文内容参考: 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…

基础—SQL—DML(数据操作语言)插入数据

一、介绍 分类全称说明DMLData Manipulation Language数据操作语言。用来对数据库表中的数据进行增删改(插入、删除、修改) 则增、删、改是三个操作也就对应着三个关键字,分别是: 添加数据:( INSERT )修改数据&#…

521源码-免费音乐源码-最新流媒体在线音乐系统网站源码| 英文版源码| 音乐社区 | 多语言 | 开心版

免费音乐源码 一键自动安装:安装用翻译看提示操作即可 本源码下载地址:最新流媒体在线音乐系统网站源码| 英文版源码| 音乐社区 | 多语言 | 开心版 - 521源码 更多网站源码学习教程,请点击👉-521源码-👈获取最新资源…

Shell脚本学习笔记(更新中...)

一、什么是shell shell的作用是: 解释执行用户输入的命令程序等。 用户输入一条命令,shell就解释一条。 键盘输入命令,LInux给与响应的方式,称之为交互式。 shell是一块包裹着系统核心的壳,处于操作系统的最外层&a…

Java从坚持到精通-SpringBoot项目-多来米云客(持续更新中)

1.项目介绍 该项目模仿动力云客制作,是一款商业的集营销销售为一体的客户关系管理系统,其采用信息化、数字化方式来进行营销销售及客户管理。 云客指的是海量客户,通过技术方式实现的这一套系统,可用于自动化分析销售、市场营销…

饮料添加剂新型褪色光照试验仪器太阳光模拟器

太阳光模拟器的定义和功能 太阳光模拟器是一种高科技设备,它可以模拟太阳光的光谱、光强和光照条件,用于实验室环境中对太阳能电池、光电器件以及其他需要太阳光条件的设备和材料进行评估。太阳光模拟器的主要功能包括模拟太阳光的光谱分布、辐照度、光…

阿里云获取nginx头部

k8s 配置 可以修改kube-system/nginx-configuration configmap的方式, compute-full-forwarded-for: “true” forwarded-for-header: “X-Forwarded-For” use-forwarded-headers: “true” https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-g…

ubuntu 22.04 appearance设置没有dock选项

1、问题描述 解决办法可以直接跳到后面见2 下图是我同学电脑的appearance界面选项,她有Dock的界面显示。 下面是我的界面, 没有Dock: 然后各种app的界面都在最底下,而且每次只能点击左上角的activities才能显示。 但是如果不打开某…

使用 Django 与 Redis 实现缓存优化

文章目录 什么是Redis?为什么选择Django与Redis?如何在Django中使用Redis?总结与拓展 在Web开发中,性能优化是一个至关重要的方面。而使用缓存是提高Web应用性能的常见方法之一。在这篇文章中,我们将探讨如何结合Djang…

[JDK工具-10] jvisualvm 多合一故障处理工具

文章目录 1. 介绍2. 查看堆的变化3. 查看堆快照4. 导出堆快照文件5. 查看class对象加载信息6. CPU分析:发现cpu使用率最高的方法7. 查看线程快照:发现死锁问题 1. 介绍 VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具&#xf…

Chrome谷歌浏览器如何打开不安全页面的禁止权限?

目录 一、背景二、如何打开不安全页面被禁止的权限?2.1 第一步,添加信任站点2.2 第二步,打开不安全页面的权限2.3 结果展示 一、背景 在开发过程中,由于测试环境没有配置 HTTPS 请求,所以谷歌浏览器的地址栏会有这样一…

很耐看的Go快速开发后台系统框架

序言 秉承Go语言设计思路,我们集成框架简单易用、扩展性好、性能优异、兼顾安全稳定,适合企业及初学者用来开发项目、学习。我们框架和市面上其他家设计的不同,简单一步做到的我们不会两步,框架能自动处理,绝不手动处…

Android LAME原生音频

前言 我想大家都做过录音的功能吧,首先想到的是不是MediaRecorder?今天我们不用MediaRecorder,而是使用LAME库自己编译音频编码模块,很明显,这个需要用到NDK。凡是涉及到音视频编解码这块的,都需要用到And…