0%

hgh 【ISSRE-2019】Unsupervised Detection of Microservice Trace Anomalies through Service-Level Deep Bayesian Networks

关键词:微服务; 异常检测; 根因分析

Abstract

本文旨在解决微服务调用跟踪异常

  • 挑战

    • 底层微服务数量众多
    • 它们之间的调用关系复杂
    • 响应时间和调用路径之间的相互依赖性
  • TraceAnomaly 核心理念

    • 在定期的离线训练中,使用机器学习来自动学习轨迹的整体正常模式

      • 新颖的痕迹表示和设计的深度贝叶斯网络后验流
    • 在线异常检测中,一个带有小异常分数(根据学习到的正态模式计算)的新轨迹被认为是异常

  • 效果

    • 某公司已在18个在线服务上部署了TraceAnomaly
    • 详细评估四大在线服务包含数百个microservices和实验包含41 microservices

      • 表明TraceAnomaly的查全率和查准率都高于0.97,优于现有的方法(硬编码规则)19.6%和7.1%
      • 和其他七个基线平均57.0%和41.6%。

Introduction

具有相同uuid的所有消息构成一个微服务调用跟踪

Figure1

解决挑战

  • 以一种可解释的方式统一跟踪的响应时间和调用路径,用于异常检测

    • 由于不同的调用路径会导致不同的响应时间,因此对响应时间的建模需要一定需要考虑调用路径
    • 由于调用的频繁程度,对于每个单个的path的响应时间进行单独的时序异常检测也是不现实的
    • 并且当异常路径被检测到,需要快速的定位到根因,因此需要这种统一表示的方式有一定的可解释性
    • 核心思想

      • 将每个服务的trace作为一个训练样本,并使用机器学习来捕捉服务跟踪的整体模式。因此,每个服务都有一个模型
      • 将调用路径和响应时间构建成一个向量 STV(service trace verctor),然后交给深度学习算法
      • 通过STV,也可以很轻松的帮助后续的根因的确定
  • 设计一个精确的、健壮的、无监督的学习体系结构,以捕获复杂的痕迹模式的特征,并有合理的训练开销

    • 正如挑战1中所描述的,微服务的响应时间与它本身和它的调用路径有关。因此需要在它们的调用路径上有条件地学习数百个响应时间分布。
    • 有了这样的复杂性,就需要一个大容量的模型,并且标签难以获得,就必须使用无监督算法
    • 符合上述条件的就是深度贝叶斯网络

      • 同时希望模型对超参数不敏感。应对这一挑战的核心思想是应用后验流(posterior flow),它可以使用非线性映射来增加贝叶斯网络中潜在变量的复杂性,允许模型以稳健、准确和无监督的方式捕捉复杂模式。

贡献点

  • 提出STV

    Fig4

    • 相信除了本文提出的算法外,STV还可以作为其他基于ml的跟踪异常检测和定位算法的跟踪表示。
    • 第一种被实际部署应用的基于机器学习的trace异常检测方法
    • 提出一种基于STV根源定位算法,该算法成功地对来自4个大型服务的所有73个异常跟踪进行了正确的根源定位,其定位精度比3个基线的测试结果高出55%。

TRACEANOMALY OVERVIEW, SERVICE TRACE VECTOR CONSTRUCTION AND LOCALIZATION ALGORITHM

异常检测

Fig3

  • VAE + Posterior Flow

    Fig8

    • 一个标准化流作用在一个简单分布上,经过 k个可逆的函数变换后得到一个复杂的分布,基于流的生成模型即用 pk(zk)来模拟训练数据的分布

      Flow

    • 进而得到训练数据在这个分布下的似然,然后按着最大似然准则对标准流进行优化

  • 使用KDE而不是简单阈值来判断某个样本是否是异常

    • 设定p-value的显著性水平为0.001,一个常用的值

根因定位

Fig7

  • 3-sigma原则

IMPLEMENTATION AND DEPLOYMENT

Fig9

Evaluation

Fig8

TraceAnomaly和Multimodal LSTM无法区分异常类型(响应时间异常或调用路径异常),因此无法计算响应时间异常和调用路径异常的精度。实际上,异常跟踪通常包含响应时间异常和调用路径异常。它在试验台的区别只是为了评价的目的。