首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深度学习在基于日志分析的系统异常检测中的应用

深度学习在基于日志分析的系统异常检测中的应用

背景介绍

大规模分布式软件系统规模庞大,组成及运行逻辑复杂,因此大规模分布式软件系统中会出现各种各样的系统异常,这些系统异常可能会导致后续系统故障的出现,从而造成损失。为了保证大规模分布式软件系统的高可用性和可靠性,就需要对大规模分布式软件系统的状态进行监控,及时的发现系统的异常行为状态,进而避免可能导致的系统故障。

系统日志中记录了系统的运行状态和用户的行为,包含了大量重要且有价值的信息,因此基于日志数据来进行系统异常检测和诊断是保证大规模分布式软件系统可用性和可靠性的重要手段。在本公众号之前的一些文章中已经对一些基于日志分析的系统异常检测技术进行了探讨,这里不再赘述。

近年来,深度学习作为机器学习的新分支,其应用在多个领域都取得了巨大的成功,包括自然语言处理、计算机视觉、语音识别等,并且深度学习一直在快速发展,不断开创新的应用模式 [1]。本文主要关注如何将深度学习模型应用到基于日志分析的系统异常检测中,研究这个问题的工作有[2] [3]等,其中文献[3]是这些工作中集大成者,因此本文以文献[3]为例,对如何将深度学习模型应用到基于日志分析的系统异常检测进行介绍。

DeepLog:

将LSTM应用到基于日志分析的系统异常检测

在文献[3]中,作者把一个日志序列看做一个文本,日志序列中的每条日志对应的日志模板当做一个词。基于这样的想法,作者提出可以使用LSTM模型来对日志序列建模,即使用系统正常运行状态下产生的日志序列来训练LSTM模型,让LSTM模型学习到系统正常运行状态下产生的日志序列的pattern,从而进行在线的异常检测。作者将他提出的这个LSTM模型命名为DeepLog。DeepLog主要包括两个部分,分别是日志模板异常检测模型(Log Key Anomaly Detection Model)和日志变量异常检测模型(Parameter Value Anomaly Detection Model)。图1是DeepLog模型的架构图。DeepLog方法流程包括训练阶段和预测阶段。在训练阶段,该方法首先会对系统正常运行状态下产生的日志进行处理,从中提取出日志模板序列和日志变量向量(如表1所示),分别用于训练日志模板异常检测模型和日志变量异常检测模型,其中日志模板序列还用于训练工作流模型,用于后续的对异常的理解和诊断;在预测阶段,DeepLog会对系统新产生的每一条日志进行异常检测,将新产生的日志转换为日志模板和日志变量向量,随后用日志模板异常检测模型和日志变量异常检测模型进行检测。下面分别对DeepLog的两个主要组成部分进行详细介绍。

表1:日志、日志模板和日志变量向量

图1:DeepLog架构图

首先是日志模板异常检测模型(Log Key Anomaly Detection Model)。该模型的基本思想是把日志模板序列异常检测问题转化为一个多分类问题,即输入一个固定窗口大小的日志模板序列,输出是下一个日志模板的概率分布。举个例子,假设现在抽取得到的一个日志模板序列为,其中的每个值表示一个特定的日志模板,固定一个滑动窗口大小为3,则模型的训练数据为,,。当模型训练完成后,要对系统进行在线异常检测时,即要对新产生的一条日志m进行异常检测,模型的输入是在m之前的三条日志模板序列w,模型的输出是概率分布P(m|w)=。那么如何判断日志m是不是异常日志呢?一个简单直接的想法就是比较模型输出的概率最大的日志模板与实际产生的日志模板m是否一样,如果不一样则表示m是异常日志。但是这种做法存在的问题是在实际中日志模板m有多种可能且都是正常的。考虑一种情况,当一个组件要与另一个组件通信,这时m可能是 “Waiting for * to respond” 或者是 “Connected to *”,这两种可能的日志模板都是正常的,不属于异常日志。因此比较合理的做法是将模型的输出按照概率值的大小进行排序,取出概率值最大的g个日志模板,如果新产生的日志模板m在这g个日志模板中,就认为m是正常的日志,否则认为m是异常日志。图2是日志模板异常检测模型的示意图。

图2:日志模板异常检测模型示意图

接下来介绍日志变量异常检测模型(Parameter Value Anomaly Detection Model)。前面提到的日志模板异常检测模型只关注日志序列信息,忽略了日志变量信息,因此它只能检测出系统执行路径异常。然而在实际中还可能出现执行路径正常但是日志变量参数值异常的情况,这种情况通常反映出系统出现性能上的异常,因此还需要对日志中的变量信息进行处理建模。该文中同样使用了LSTM模型来学习日志变量的特征,从而实现对系统的性能监控和异常检测。日志变量异常检测模型是针对每一个日志模板来建立的,也就是说有多少个不同的日志模板,就有多少个不同的日志变量异常检测模型,每个日志变量异常检测模型只检测它对应的日志模板的日志变量异常。举个例子,表1中有三个不同的日志语句,分别属于三个不同的日志模板,它们的日志变量向量也不同,分别有三个不同的日志变量异常检测模型与之对应。以表1中的日志模板k2为例,假设一段时间内它对应的日志变量向量序列为{[t2-t1, 0.61], [t2’-t1’, 0.66], …, [t2’’-t1’’, 0.72]},与日志模板异常检测模型类似,也以固定窗口大小的日志变量向量序列作为与k2对应的日志变量异常检测模型的输入数据,模型的输出是下一个日志变量向量。模型的目标函数是真实的日志变量向量与预测值之间的均方误差(MSE)。那么如何判断一个日志变量向量是不是异常值呢?一个直接的做法是设置一个阈值,如果预测值与真实值之间的误差大于该阈值,则认为该日志变量向量是异常值。该文中没有使用这个做法,而是使用了另外一种更合理的方法,即在训练阶段,把训练数据分为两部分,一部分是模型训练数据集,另一部分是模型验证数据集,只使用模型训练数据来训练LSTM模型,然后使用训练得到的模型来对模型验证数据集进行预测,接着使用一个高斯分布来拟合模型预测值与模型验证数据集中的真实值之间的均方误差。如果在在线异常检测阶段预测得到日志变量向量与真实值之间的MSE能够位于该高斯分布的比较高的置信区间内(比如98%置信区间),则认为它是正常的,否则认为它是异常的。

由于训练数据可能不够全面,不能完整的涵盖所有可能的系统正常执行的pattern,并且系统状态可能会由于负载和不同任务的特性会产生一些变化,因此异常检测模型要能够适当的进行调整和更新来适应系统的变化。对DeepLog来说,就是要求DeepLog能增量的更新它的神经网络参数来适应系统的变化。DeepLog提供了一个机制,可以接受由专家提供的反馈信息,即假正例样本,随后DeepLog会重新学习这些假正例样本来调整网络参数,从而实现较为简单的在线增量更新。

作者使用DeepLog在HDFS和OpenStack日志数据上分别进行了日志模板异常实验和日志变量值异常的实验,实验结果表明,DeepLog的精确率和召回率都在95%以上,且都优于传统的PCA、IM、N-gram等模型。

结语

本文以文献[3]为例,介绍了深度学习模型(LSTM)在基于日志分析的系统异常检测中的应用,详细介绍了日志模板异常检测和日志变量异常检测这两个部分,希望能够带给大家一些启发。

参考文献

[1] Md Zahangir Alom, Tarek M. Taha. The History Began from AlexNet: A Comprehensive Survey on Deep Learning Approaches. arXiv:1803.01164 2018

[2] R, Vinayakumar, Kp, Soman, Poornachandran. Long short-term memory based operation log anomaly detection. 236-242. 10.1109/ICACCI.2017.8125846.

[3] M. Du, F. Li, G. Zheng, and V. Srikumar. Deeplog: Anomaly detection and diagnosis from system logs through deep learning. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, CCS ’17, pages 1285–1298. ACM, 2017

快,关注这个公众号,一起涨姿势~

转载请联系

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G0FFIC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券