ISSRE 2020丨TraceAnomaly:基于深度贝叶斯网络的微服务调用链异常检测模型
论文标题 | 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 模型的架构如下图所示:
以一个服务的调用 Trace 为例,调用信息如下所示:
整体流程可以分为以下几步:
Trace 特征提取
论文中考虑了 Trace 响应时间和调用路径两种特征。
- 响应时间:根据发送时间和接收时间差来计算的。
- 调用路径的提取方式如下图所示:
构建 STV(Service Trace Vector)
直接根据调用路径中每一步的维度 ID 来构建向量,向量的值为对应的响应时间;
根因定位
根据异常的 Trace 在训练集中寻找所有同质的 Trace 来计算 3-sigma 判定 STV 中哪个维度是异常的,然后再选择调用最长的微服务为根因;如果没有在训练集中找到与异常 Trace 同构的,那么直接找异常 Trace 中公共字串为可能的根因;
异常检测模型
论文中使用变分自编码器 VAE 来检测 STV 是否为异常的,详细介绍可以参考另一篇文章 https://dreamhomes.top/posts/202012131804,在这篇文章中就不仔细介绍了。
模型架构如下图所示:
Experiments
异常检测性能对比结果如下所示
根因定位性能对比结果如下所示
Thoughts
- 根因定位方法可以借鉴;
- Handcraft 构建 Trace STV 特征这一步可以优化,例如向量大小等;
- 异常检测模型 VAE 可以简化;