LogAnomaly论文笔记
分类:
文章
•
2024-12-07 08:52:16
论文名称: LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs(IJCAI-19)
背景
- 现有的日志序列异常检测方法分类:
- 基于日志消息计数器的方法检测quantitative(定量)异常
- 如PCA、不变量挖掘和LogClustering等
- 基于深度学习的方法:从日志序列中学习序列模式
- 如DeepLog(DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning)
提出的问题:
- 现有的日志异常检测方法,没有利用语义和语法信息。
- 例如,两个不同的template在语义上可能是相似的,但是它们对应的索引却不同
- 如果只使用template,可能会丢失有价值的信息,因为它们无法揭示日志的语义关系。
- 现有的方法不能同时检测序列(sequential )异常和定量(quantitative )异常
- 对于系统新产生的日志类型,无法准确的预测,传统方法都需要重新微调后才能预测准确。
解决问题的方法
- 提出了一个统一的数据驱动的深度学习框架—LogAnomaly, 用于非结构话日志流的异常检测。
- 核心思想:大多数系统日志都是由系统中的某些程序打印出来的半结构化文本,可以改进或应用NLP中的方法来进行异常检测。
本文提出的方法详解
- 首先给出总的模型框架:
日志解析部分(基于template的)(论文3.2节)
- 受word embedding的启发,设计了一种模板的向量化表示方法template2Vec,分成如下几步:
- 使用FT-Tree从日志中提取templates,然后将历史日志与templates匹配,如Figure2所示。
- 根据templates构建一个正反义词的集合,对于专业领域的word则需要人工添加。
- 将templates中包含的word,生成词向量(使用dLCE)。
- 把每个template中的word对应的词向量加权平均,得到template的向量化表示。(2-4见Figure4)
异常检测部分(分为sequence和quantitative两种模式的异常)(论文3.3节)
- sequence pattern
- 使用滑动窗口方法,将日志序列划分为多个子序列。
- 将日志子序列,映射为template vector的子序列, 作为LSTM的输入,对应的输出应为下一个template vector(如Figure5(a)所示)。
- quantitative pattern
作者认为,一个正常的日志序列应该存在一种恒定的关系。比如,日志序列中存在open file,就一定存在close file,如果不存在则就是异常的。于是有了如下的方法检测这种异常:
- 同样使用滑动窗口,将日志序列划分为多个子序列,并映射为template vector的子序列
- 统计每个子序列中,每种template vector在子序列中出现的次数。假设有n个template vector,则构成Ci={ci(v1),ci(v2),...,ci(vn)},其中,Ci 为第i个子序列, 每个元素表示对应的template vector在该序列中出现的次数。如果有w个子序列,则形成了一个w*n的计数矩阵。(如Figure5(b)所示)
- 然后将得到的计数的子序列,作为LSTM的输入.例如输入[Cj,Cj+1,Cj+2], 对应输出应为Cj+3
- 预测
- 如果LSTM模型预测的下一个输出的k种可能包含了实际输出,则认为是正常的。
- 文中举了一个具体的例子如下图:
处理新生成日志类型(实时检测部分) (论文3.4节)
- 在实时的系统的种,系统会生成新的日志模板。现有的方法通过定时的重新微调模型来识别这种新的日志模板。
- 本文方法:
- 如果一个日志无法匹配现有的模板,则通过FT-tree从该日志提取一个临时的模板,并映射为template vector。
- 从现有的template vector中找一个与其最近似作为代替,从而预测新的日志类型。
一些问题
- quantitative pattern部分,滑动窗口大小是否影响了该部分的性能。如果窗口比较小,则形成的矩阵就比较稀疏,若窗口较大,则矩阵稀疏性降低。
- 文中的template2Vec使用了同义词和反义词来作为一种语义的信息。例如,Fig2中的T1和T3,只有一个单词不同,并且是反义词。在映射为template vector时应该令两者尽可能的不同。文中是在映射为template vector时通过加权的方式解决的,还是在映射为word vector解决的?
- 文中使用的是word2Vec方法的到词向量。对于具体的任务,使用其它的词向量方法是否效果更好