论文标题 | Unsupervised Detection of Microservice Trace Anomalies through Service-Level Deep Bayesian Networks
论文来源 | ISSRE(B) 2020
论文链接:https://ieeexplore.ieee.org/document/9251058
源码链接:https://github.com/NetManAIOps/TraceAnomaly

TL;DR

论文中基于深度贝叶斯网络提出了一种 Trace 调用链异常检测模型 TraceAnomaly,主要想法是利用正常数据来离线训练深度模型学习正常的行为模式,上线测试模型时如果新的 Trace 具有较小的异常分数(似然值)则为异常的;在实验中模型测试的准确率和召回率均超过 0.97 ,性能远优于当前的 baselines 方法;

Algorithm/Model

论文中提出的 TraceAnomaly 模型的架构如下图所示:

TraceAnomaly 模型架构图

以一个服务的调用 Trace 为例,调用信息如下所示:

Trace 示例

整体流程可以分为以下几步:

  • Trace 特征提取

    论文中考虑了 Trace 响应时间和调用路径两种特征。

    • 响应时间:根据发送时间和接收时间差来计算的。
    • 调用路径的提取方式如下图所示:
    调用路径提取
  • 构建 STV(Service Trace Vector)

    直接根据调用路径中每一步的维度 ID 来构建向量,向量的值为对应的响应时间;

    STV 向量构建
  • 根因定位

    根据异常的 Trace 在训练集中寻找所有同质的 Trace 来计算 3-sigma 判定 STV 中哪个维度是异常的,然后再选择调用最长的微服务为根因;如果没有在训练集中找到与异常 Trace 同构的,那么直接找异常 Trace 中公共字串为可能的根因;

    根因定位流程
  • 异常检测模型

    论文中使用变分自编码器 VAE 来检测 STV 是否为异常的,详细介绍可以参考另一篇文章 https://dreamhomes.top/posts/202012131804,在这篇文章中就不仔细介绍了。

    模型架构如下图所示:

    异常检测模型

Experiments

异常检测性能对比结果如下所示

Testbed 异常检测性能

真实数据异常检测性能

根因定位性能对比结果如下所示

根因定位性能对比

Thoughts

  1. 根因定位方法可以借鉴;
  2. Handcraft 构建 Trace STV 特征这一步可以优化,例如向量大小等;
  3. 异常检测模型 VAE 可以简化;

联系作者