NTP:微服务架构下的多源数据异常检测
论文标题 | Multi-Source Anomaly Detection in Distributed IT Systems
论文来源 | ICSOC/AIOps 2020
论文链接:https://arxiv.org/abs/2101.04977
源码链接:未公布
TL;DR
针对分布式系统服务的异常检测问题,文中提出了一种多模态的异常检测模型,联合了 trace 和 log 数据的特征表示来共同判定异常;对于异常检测任务将其形式化表示成 NTP next template prediction,同时适用于log和trace的异常检测;在实验中论文验证了融合多模态数据比单模态数据异常检测的效果更好。
Problem Statement
Logs
日志可以表示为一种非结构化的时序文本数据,由于log数据中包含很多噪声,因此采用 tokenized 字典 来表示日志模板,对于不同的 log token 使用 进行填充以保证日志具有相同的长度,日志模板可以表示为:
其中每个 是对应的索引 从日志中提取的字段;
Traces
Trace 是对于用户请求记录的一系列执行路径。一个 trace 由多个 spans/events 组成,每个 span 包含请求的一些信息,例如 (start time, end time, service name, HTTP path),因此一个 Trace 可以表示为
注:每个span 包含两种类型的调用: HTTP或者RPC;HTTP一般表示为 path, scheme, method. RPC 调用表示为执行的 functions;
由于Trace数据中也包含噪声,所有文中使用类似日志模板提取的方法来提取 Trace 中的 template spans,可以形式化的表示为
其中每个 是对于索引 提取的模板;
作者观察到Trace 中的每个函数调用都是一个字符序列,因此可以使用定义的字典 来表示;每个 span 可以表示为
每个 span 中包含的关键字段不同,所以文中使用 来填充缺失的字段。
NTP
基于上述的 trace 和 log 的序列化表示,log 和 trace 异常检测问题的可以形式化地表示为
其中 表历史数据中的 trace 和 log 模板, 代表历史时间窗口;因此异常检测的任务就都可以表示为 NTP (next template prediction);
Model / Algorithm
论文中模型的主要思路是根据单模态异常检测的模型进行扩充,同时输入 logs 序列和 traces 序列来判定异常,简单看下单模态的检测模型;
Single-modal
单模态的模型以 或者 作为输入,以固定长度的随机向量来初始化 words,Template embedding layer 以 words 来生成对应的模板序列,然后以这些序列输入 LSTM 来表示序列间的依赖关系,输出为预测模板与真实模板间的softmax概率,计算公式如下:
Multi-modal
基于以上单模态模型,为了融合 log 和 trace 两种数据源,论文改进的多模态模型如下所示:
整体架构类似,改进点在于融合了两种数据源输入然后进行特征融合,模型的损失函数考虑了log 和 trace 的联合损失:
其中 表示分类交叉熵损失函数, 表示真实的模板;
Anomaly Detection
对于 log 的异常检测,如果预测的模板在 之内则为正常;对于 trace 异常检测,如果预测的span 在 之内则为正常,否则为异常span,当异常span的比例超过定义的异常比例时trace才是异常的;
Experiments
文章在一个开源的数据集上进行测试;数据源 https://github.com/snedelkoski/multi-source-observability-dataset ,实验结果如下,仅和单模态模型进行对比;