ICSE 2021丨TraceLingo:云服务中基于 Trace 表示学习的性能故障诊断模型
论文标题 | TraceLingo: Trace representation and learning for performance issue diagnosis in cloud services
论文来源 | ICSE 2021
论文链接 | https://www.computer.org/csdl/proceedings-article/cloudintelligence/2021/456300a037/1wHKxtXXPrO
源码链接 | https://github.com/serina-hku/TraceLingo
TL;DR
对于服务间调用链 trace 异常检测任务,当前很多方法都忽略了 trace 的上下文特征和图结构特征,因此论文提出一种 trace 的表示学习模型 TraceLingo,采用 tree-based RNN 模型来捕捉不同 trace 中 span 的特征及其依赖关系,可以有效地进行性能诊断。实验部分非常简单只采用一个 case 说明 TraceLingo 的有效性。
Algorithm/Model
需要解决的问题是:给定告警时间和一定时间范围的 traces 序列,检测异常的 traces 集合 和故障 spans 集合。
论文中提出 TraceLingo 模型架构如下图所示
第一步:首先使用 TreeLstm 来编码 span 特征,包含两类特征:
- Contextual features:包含 span 名称、软硬件设置等。
- Temporal features:包含 span 延迟、平均延迟和标准差延迟。
论文中使用 Child-Sum Tree-LSTM 来编码 span 特征,计算方式如下所示
Tree-LSTM 模型可以参考论文:【2019/ICSC】Improving tree-lstm with tree attention。这篇论文中根本没有讲清楚。
第二步:得到节点 span 编码特征 后,采用自注意机制来学习不同 spans 的权重
基于权重选择 top-k spans 来保留,论文中写的是保留 个 spans ,好像不太正确而是直接选择 top-k 。这样就算每个 trace 中 spans 数量不同也可以得到固定维度的特征 👏
第三步:由于是无监督的,所以得到每个 trace 的 embedding 后论文基于编码器来训练,以此获得更高层的 trace 特征表示,这一步比较简单就不再细述。
第四步:基于 trace 特征的异常检测和定位,这一步和想象的不一样,不是基于重构误差的。
论文中对训练的正常 trace 集合得到编码后的向量 , 测试集中一条 trace 编码向量 ,计算 间的余弦相似度。如果和所有正常 trace 间的余弦相似度平均值小于 0.5,那么 trace 就是异常 trace。
得到异常 trace 后,论文中根据第二步学习到的 span 注意力权重,选择 10% 的最高权重作为异常 span,以此来推荐根因。
Experiments
实验部分说明采用 10000 正常 trace 和异常后 1 小时内 4000 条 trace 作为训练和测试数据,其它就是讲了个故事没什么价值。
Thoughts
- 这篇 workshop 短文整体想法与现在做的差不多,只是使用的模型不同。
- 异常检测部分需要优化,可以基于模型直接异常检测,论文中基于特征再计算余弦相似度性能不太行。
- 实验部分缺少对比实验,缺少说服力。