基于图神经网络的微服务系统调用链和日志融合异常检测方法

微服务系统运行时环境具有高度的复杂性和动态性,由此带来的各种问题导致微服务系统常常出现各种故障。为了尽早发现故障,快速准确的异常检测方法成为保证微服务系统可靠性的重要手段。为了提高微服务系统异常检测的准确率,复旦大学CodeWisdom团队提出一种基于图神经网络的微服务系统调用链和日志融合异常检测方法。该方法通过统一的图模型建模调用链及其相关日志的复杂关系,并使用图神经网络和Deep SVDD训练异常检测模型。基于该研究的论文“DeepTraLog: Trace-Log Combined Microservice Anomaly Detection through Graph-based Deep Learning” 发表于软件工程领域顶级国际会议ICSE 2022中。
论文作者包括复旦大学的张晨曦、彭鑫、沙朝锋、张可、傅震卿、吴茜雅,微软亚洲研究院的林庆维、张冬梅。
论文链接地址:https://cspengxin.github.io/publications/icse22-DeepTraLog.pdf

调用链与日志

  微服务架构已成为云原生的重要组成部分。微服务架构将应用程序分解为一组细粒度的服务,每个服务可以独立开发、独立部署、独立扩缩容。工业微服务系统往往包含数百至数千个微服务,每个微服务又有多个动态变化的服务实例。这使得微服务系统运行时环境具有高度的复杂性和动态性。为了观察微服务系统的运行状况、及时发现及定位系统运行时问题,可观测性技术在微服务系统得到了广泛应用。现有的可观测性技术专注于指标(Metrics)、日志(Logging)和调用链(Tracing)三种数据。其中日志、调用链作为反应软件细粒度执行行为的两种数据,大部分运维人员都会通过这两种数据分析系统故障。

图1 调用链与日志

  日志是由软件中的日志打印语句产生的半结构化数据,记录了软件执行时产生的离散事件。调用链描述了由外部请求触发的服务调用行为,一般由分布式追踪系统采集,每个调用链由一组span组成,每个span记录一次服务调用的相关信息。在传统的单体软件中,软件处理请求时会以日志序列的形式记录所有执行时产生日志。而微服务系统中每个服务会单独记录日志,且因为异步/多线程调用的广泛存在,分散在不同服务中的日志难以通过简单的时间关系进行关联。图1中给出了由一个请求产生的调用链和日志的示例。可以看出每个span分别记录了其执行期间产生的日志。

  为了关联调用链和其相关的日志,许多分布式追踪系统都支持通过在日志中打印traceId和spanId将调用链和日志关联。运维人员可以通过搜索traceId和spanId的方式关联分析调用链和日志,但这种方式仍需要运维人员人工操作。而工业系统中每天会产生海量的调用链和日志,仅依靠人工分析是不现实的,如何自动化的进行调用链和日志关联分析对微服务系统是十分重要的。

调用链与日志融合异常检测方法

  为了实现自动化的调用链和日志融合异常检测,我们提出了DeepTraLog。图2给出了DeepTraLog的总体框架,其主要有六个步骤:日志解析、调用链解析、事件向量化、调用链事件关系图构建、异常检测模型训练和在线异常检测。

图2 DeepTraLog方法流程

日志解析步骤将原始日志数据解析为日志模板,并使用日志模板代表不同的日志事件。同时保存每条日志对应的时间戳、traceId和spanId。

调用链解析步骤将原始调用链数据解析为不同类型的调用事件,并用“事件类型+操作名称”的方式代表每个span事件,并记录每个事件发生的时间。我们根据调用类型对原始调用链中的每个span进行解析。同步调用被解析为四个事件:客户端发出请求、服务端收到请求、服务端发出响应,客户端收到响应。异步调用被解析为两个事件:生产者生产消息、消费者消费消息。

事件向量化步骤将解析得到的日志事件和span事件转换为向量表示。我们将每个事件视为一个由英文单词组成的句子,并使用预训练的GloVe模型对每个单词进行向量化,然后使用TF-IDF计算得到每个事件的最终向量表示。

调用链事件关系图构建步骤根据不同span间的父子关系和事件发生时间关联日志和调用链事件,从而描述一个请求在微服务系统中的执行流程。我们首先根据发生时间将每个span对应的日志事件分别排序,为每个span生成一个日志序列。然后将属于该span的所有调用事件根据时间插入对应的日志序列中,最后根据调用事件的父子关系连接不同的span。图3给出了一个调用链事件关系图的示例,图中所示的调用链包含6个span,不同span之间通过同步/异步调用关系相连。

图3 调用链事件关系图示例

异常检测模型训练步骤训练了一个基于GGNN的Deep SVDD模型。Deep SVDD是一种单分类异常检测方法,该方法不需要每个训练样本的标签,而只需要保证绝大部分样本是正常样本,并通过学习一个超球体来描述正常数据的行为。对于调用链异常检测,我们可以很容易的收集到大量系统正常运行产生的数据并用来训练模型,使用该方法可以有效降低数据打标的开销。

在线异常检测步骤将训练完成的模型部署在系统中,每当有新调用链产生,我们依次执行前四个步骤,并将调用链事件关系图输入模型,若获得的图向量位于模型学习获得的超球体以外,则判断该调用链为异常。

实验评估

基于开源微服务基准系统TrainTicket,我们评估了DeepTraLog的有效性和效率。

有效性

表1 异常检测的准确率和召回率

  表1中展示了DeepTralog与多个已有的调用链/日志异常检测方法在实验中获得的准确率、召回率和F1分数。可以看出DeepTraLog获得了较高的准确率(0.930)、召回率(0.978)和F1分数(0.954),优于其他方法。

图4 t-SNE降维后的调用链表示

  为了说明使用图模型建模调用链及其相关日志之间关系的必要性,我们设计了一个变体模型GRU-based Deep SVDD,该模型将一个调用链中的所有事件根据发生时间排序,并基于该序列训练Deep SVDD模型。图4中给出了使用DeepTraLog和GRU-based Deep SVDD模型对测试集数据进行表示后使用t-SNE进行降维可视化的结果。可以看出,DeepTraLog可以学习到一个更好的超球体来描述正常的调用链行为。

效率

表2 模型训练和测试消耗的时间

  表2中展示了DeepTralog与多个已有的调用链/日志异常检测方法在实验中花费的训练时间和测试时间。可以看出,DeepTraLog训练时间略慢于已有的调用链异常检测方法,但快于已有的日志异常检测方法,且具有最快的测试速度。

图5 响应时间随调用链时间数量变化

  图5展示了不同方法处理不同大小的调用链所需的时间。可以看出DeepTraLog在调用链包含的事件数量大于100时处理速度明显快于基于序列的方法。在工业系统中,单个调用链经常包含超过几十到几百个事件,这说明基于图的表示方法可以加快线上异常检测的速度。

结束语

  微服务架构的广泛应用给系统运维带来了新的挑战。通过可观测性数据发现系统异常、定位故障根因、理解系统行问成为了运维人员的广泛需求。其中如何关联分析不同的可观测性数据困扰着运维人员。DeepTraLog提出了一种调用链和日志数据关联方法,可以有效描述调用链和日志的复杂关系,基于图神经网络的异常检测方法也可以有效提升微服务异常检测的准确率。我们相信DeepTraLog提出的调用链和日志关联方法也可以应用于系统行为理解、故障根因定位等问题,为微服务系统分析提供了可能的途径。

技术分享|基于图神经网络的微服务系统调用链和日志融合异常检测方法相关推荐

  1. 基于拓扑结构和属性信息深度结合的异常检测方法

    The deep fusion of topological structure and attribute information for anomaly detection in attribut ...

  2. 一张图,理清微服务架构路线(收藏)

    ​ ​- 我为什么选择微服务架构 - 众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法.如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始. 微服务架构是一种灵活的架构,可 ...

  3. 顶会CIKM‘21论文解读:基于图神经网络的人类行为轨迹恢复模型

    摘要:本文是由华为云数据库创新Lab联合电子科技大学数据与智能实验室发表在顶会CIKM'21的文章,该文章提出首个克服人类移动轨迹数据中普遍存在的多层次周期性.周期偏移现象以及数据稀疏问题的轨迹恢复模 ...

  4. dubbo k8s 服务发现_工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇

    作者 | 张远征来源|阿里巴巴云原生公众号 导读:Dubbo 作为分布式微服务框架,众多公司在实践中基于 Dubbo 进行分布式系统架构.重启开源后,我们不仅看到 Dubbo 3.0 最新的 Road ...

  5. WWW 2021|基于图神经网络的分级相关性匹配

    ©PaperWeekly 原创 · 作者|金金 单位|阿里巴巴研究实习生 研究方向|推荐系统 论文标题: Graph-based Hierarchical Relevance Matching Sig ...

  6. SIGIR 2019 开源论文 | 基于图神经网络的协同过滤算法

    作者丨纪厚业 单位丨北京邮电大学博士生 研究方向丨异质图神经网络,异质图表示学习和推荐系统 引言 协同过滤作为一种经典的推荐算法在推荐领域有举足轻重的地位.协同过滤(collaborative fil ...

  7. 基于Spring Cloud的微服务架构

    关于基于Spring Cloud的微服务应用架构,网上已经有很多文章了,但我还是觉得把自己的架构过程和经验写下来,对自己来说算是知识和技术的梳理,对于误打误撞进来看到这篇文章的读者来说,或许也能起到一 ...

  8. 论文阅读|基于图神经网络的配电网故障定位方法

    来源:北京交通大学硕士学位论文,2022 摘要 电网拓扑形态多样,重构场景频繁,,传统故障定位方法的单一阈值设定无法满足要求,基于人工智能的配电网故障定位技术具有很大的应用潜力,但仍存在着拓扑关联性差 ...

  9. [论文阅读] (27) AAAI20 Order Matters: 基于图神经网络的二进制代码相似性检测(腾讯科恩实验室)

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

最新文章

  1. html+js浏览器检测
  2. webpack学习资料
  3. JVM运行时数据区和各个区域的作用
  4. python自动卸载win程序_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序...
  5. datastage 重启 续
  6. 最佳Linux服务器发行版
  7. 【Java】函数式接口与Lambda表达式
  8. Hadoop框架:集群模式下分布式环境搭建
  9. js 读取excel 导入mysql_可以读取EXCEL文件的js代码
  10. 父、子、兄弟节点查找方法
  11. bzoj1997 [Hnoi2010]Planar——2-SAT
  12. mysql 批量插入 性能_MySQL批量插入数据性能比较
  13. Linux远程登录和多机操作
  14. python打开sql,Python打开Microsoft SQL Server MDF文件
  15. android 渠道 代码重复,Android Studio多渠道打包(示例代码)
  16. 英雄联盟一直连接不上服务器连接异常,lol服务器连接异常 英雄联盟老是与客户端失去连接...
  17. geekeyes kali安装edb
  18. python 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
  19. 摄像头实时视频网页播放
  20. 导入技能要素三大类_财务管理类专业(技能)课程体系

热门文章

  1. Java---给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
  2. [源码和文档分享]基于Cocos2d-x实现的疯狂打砖块游戏
  3. 有监督 无监督 自监督 半监督 弱监督
  4. 前端面试题---(css篇①)15道题
  5. spss多元非线性曲线拟合_都9102年了还在用SPSS做统计?Prism了解一下?
  6. 主成分分析(PCA),概率主成分分析(PPCA)和因子分析(FA)的区别?
  7. mysql千万级数据库插入速度和读取速度的调整记录。
  8. 关于对tp5框架中的命名空间的理解
  9. 可视化工具ECharts下载
  10. Overleaf能使用自己系统中的字体嘛?