Fork me on GitHub

[翻译]基于深度学习对系统日志进行异常检测和诊断

https://blog.csdn.net/ARPOSPF/article/details/103236241

https://zhuanlan.zhihu.com/p/76567213

摘要

异常检测是构建安全可靠系统的关键步骤。系统日志的主要目的是记录系统状态和重大事件在不同的临界点来帮助调试系统故障和执行根源分析。这样的日志数据在几乎所有的计算机系统中都是通用的。日志数据是了解系统状态和性能问题的重要和有价值的资源;因此,各种系统日志自然是在线监视和异常检测的良好信息来源。我们提出了一种利用长短时记忆(LSTM)的深度神经网络模型DeepLog,将系统日志建模为自然语言序列。这使DeepLog可以自动地从正常执行中学习日志模式并在正常执行情况下日志模式偏离日志数据训练的模型时检测异常。此外,我们演示了如何以在线方式增量更新DeepLog模型,以便其可以随着时间的推移适应新的日志模式。此外,Deeplog从底层系统构建工作流,以便一旦检测到异常,用户就可以诊断出检测到的异常并有效地进行根本原因分析。对于大型日志数据进行的广泛实验评估表明,Deeplog的性能优于基于传统数据挖掘方法的其他现有的日志异常检测方法。

关键词

异常检测;深度学习;日志数据分析

1 引言

异常检测是构建安全可靠的计算系统的一个重要任务。随着系统和应用程序比以往任何时候都变得越来越复杂,它们会遇到更多的错误和漏洞,攻击者可能利用这些错误和漏洞来发起攻击。这些攻击也越来越复杂。因此,异常检测变得更具挑战性,并且许多基于标准数据挖掘的传统方法不再有效。

系统日志在各个关键点记录系统状态和重大事件,以帮助调试性能问题和故障,并进行根本原因分析。这样的日志数据几乎在所有计算机系统中普遍存在,并且是了解系统状态的宝贵资源。此外,由于系统日志记录了活跃运行过程中发生的重要事件,因此它们是用于在线监视和异常检测的极佳信息源。

利用系统日志数据进行异常检测的现有方法可以大致分为三类:基于PCA的日志消息计数器方法,基于不变量挖掘的方法来捕获不同日志键之间的共现模式和基于工作流的方法以识别程序逻辑流程中的异常执行。尽管它们在某些情况下是成功的,但它们都不能作为一种有效的通用异常检测方法,即能够以在线的方式防御各种攻击。

这项工作提出了DeepLog,这是一种数据驱动的异常检测方法,可以利用大量系统日志。DeepLog设计背后的主要灵感来自自然语言处理:我们将日志条目视为遵循某些模式和语法规则的序列元素。确实,系统日志是由遵循严格的逻辑和控制流程集的程序生成的,并且非常类似于自然语言(尽管在词汇方面结构更严格,受约束)。为此,DeepLog是一个深层神经网络,它使用长短期记忆(LSTM)对日志条码的序列进行建模。这使DeepLog可以从正常执行中自动学习日志模式的模型,并将与正常系统执行的偏差标记为异常。此外,由于它是一种学习驱动的方法,因此,可以增量地更新DeepLog模型,以便它可以适应随着时间而出现的新日志模式。

挑战:日志数据是非结构化的,并且它们的格式和语言在系统之间可能会显著不同。即使知道发生了错误,使用非结构化日志来诊断问题也已经很困难。从大量日志数据中进行在线异常检测更具挑战性。一些现有的方法使用基于规则的方法来解决此问题,这需要特定的领域知识。例如,使用“IP地址”之类的功能来解析日志。但是,这对于一般用途的异常检测不起作用,在这种情况下,几乎不可能先验地了解不同类型的日志中有哪些有趣的功能(并防范不同类型的攻击)。

为了及时发现异常,必须及时进行检测,以便用户可以干预正在进行的攻击或系统性能问题[10]。 决策将以流方式进行。其结果是需要对整个日志数据进行多次传递的offine方法不适用于我们的设定[22,39]。我们还希望能够检测未知类型的异常,而不是针对特定类型的异常。 因此,以前的工作[44]使用正常和异常(对于特定类型的异常)日志数据条目来训练二分类器以进行异常检测在这种情况下是没有用的。

并发是另一个挑战。 显然,日志中日志消息的顺序为诊断和分析提供了重要信息(例如,确定程序的执行路径)。但是,在许多系统日志中,日志消息是由几个不同的线程或同时运行的任务产生的。 这种并发性使得难以应用基于工作流的异常检测方法[42],该方法将针对单个任务的工作流模型用作生成模型来与一系列日志消息进行匹配。

最后,每个日志消息都包含丰富的信息,例如日志键和一个或多个度量值,以及其时间戳。整合和利用这些不同信息的整体方法将更加有效。大多数现有方法[22、32、39、41、42、44]仅分析日志消息的一个特定部分(例如,日志key),这限制了它们可以检测到的异常的类型。

我们的贡献。循环神经网络(RNN)是一个人工神经网络,它使用循环将最后一个状态的输出转发到当前输入,从而跟踪历史以进行预测。长短期记忆(LSTM)网络[13、18、27]是RNN的一个实例,能够记住序列的长期依赖性。LSTM已证明在各种任务中都取得了成功,例如机器翻译[35],情感分析[8]和医学自我诊断[20]。

受到观察的启发,系统日志中的条目是由执行结构化源代码(因此可以视为结构化语言)产生的一系列事件,因此,我们使用LSTM神经网络设计DeepLog框架,以通过系统日志在线检测异常。 DeepLog不仅在日志条目中使用日志键,还使用度量值进行异常检测,因此,它能够捕获不同类型的异常。 DeepLog仅取决于小的训练数据集,该数据集由一系列“正常日志条目”组成。 在训练阶段之后,DeepLog可以识别正常的日志序列,并可以以流方式用于对传入日志条目进行在线异常检测。

直观上,DeepLog隐式地从与常规系统执行路径相对应的训练数据中捕获日志条目之间潜在的非线性和高维依赖性。为帮助用户在发现异常后诊断问题,DeepLog还在训练阶段从日志条目构建工作流模型。DeepLog将并发任务或线程产生的日志条目分为不同的顺序,以便可以为每个单独的任务构建工作流模型。

我们的评估表明,在以前的工作中探索的大型HDFS日志数据集[22,39]上,仅对很小一部分(少于1%)的日志条目进行了训练,这些日志条目对应于正常的系统执行,DeepLog在其余99%的日志条目上可以达到几乎100%的检测精度。来自大型OpenStack日志的结果有类似的趋势。此外,DeepLog还提供了通过合并实时用户反馈来在检测阶段逐步更新其权重的功能。更具体地说,如果正常日志条目被错误地分类为异常,DeepLog提供了一种用于用户反馈的机制。 然后,DeepLog可以使用此类反馈随着时间的推移在线动态调整其权重,以使其适应新的系统执行(因此为新的日志)模式。

2 预备知识

2.1 日志解析

我们首先将非结构化的、无格式文本的日志条目解析为结构化的表示,这样我们就可以基于结构化的数据学习一个序列模型。例如文献中前期工作[9, 22, 39, 42, 45],一种有效的方法是从每个日志条目中提取一个“日志键”(也称为“消息类型”)。日志条目$e$的日志键即为源码中打印语句中的字符串常量$k$,源码在执行后打印出$e$​。例如,对于日志条目e=”Took 10 seconds to build instance.”的日志键为k =Took * seconds to build instance,即打印语句printf(“Took %f seconds to build instance.)”, t)的字符串常量。注意到参数(s)在日志键中抽象为信号(s)。这些指标值反应了基础系统的状态和性能状态。某些参数的值可以作为特定的执行序列的标识符。例如HDFS日志中的block_id,OpenStack日志中的instance_id。这些标识符可以对日志条目进行聚类,也可以对多进程产生的日志条目进行拆解,以分离出单线程顺序序列[22, 39,42, 45]。目前最新的日志解析方法代码有Spell [9],这是一个无监督的流失解析器,基于LCS(最长公共子序列)原理在线解析输入的日志条目。

前期在日志分析上的工作[22, 39, 42, 44],已经丢弃了日志条目中时间字段和(或)参数值,仅适用日志键来检测异常。DeepLog会存储每个日志条目e的参数值,以及日志条目e和前项日志条目的时间间隔,表示成一个向量$v_{e}$。这个向量除了日志键,也被DeepLog适用。Table1中给了一个案例,该案例展示了OpenStack多伦执行删除虚拟机(VM)的任务产生的日志条目序列的解析结果。

image-20210920162705527

2.2 DeepLog结构和概述

DeepLog的系统结构如Figure1图展示,主要分为三个组件:日志键异常检测模型,参数值异常检测模型,诊断和检测异常的工作流模型。

image-20210920162705527

2.2.1 训练阶段

DeepLog的训练数据来源是正常系统执行路径的日志条目。每条日志条目被江西成日志键和参数值向量。日志键序列从训练日志文件中解析获取,DeepLog用其训练日志键异常检测模型,并且创建系统执行工作流模型用于诊断目的。对于每个不同的日志键k,DeepLog还会训练和维护模型用来检测系统的性能异常,这些度量值通过参数值向量k训练获得。

2.2.2 检测阶段

一个新的输入日志条目被解析成日志键和参数值向量。DeepLog首先使用日志键异常检测模型检测输入日志键是否正常。如果正常,DeepLog进一步使用该日志键的参数值异常检测模型,检查参数值向量。如果新的日志条目的日志键或参数值向量被预测为异常,则其标记为异常。最后,如果被标记为异常,DeepLog的工作流模型为用户提供语义信息诊断该异常。

2.3 威胁模型

3 异常检测

3.1 执行路径异常

3.2 参数值和性能异常

3.3 异常检测模型的在线更新

4 多任务执行的工作流构建

5 评估

DeepLog是使用Keras [6]和TensorFlow [2]作为后端实现的。 在本节中,我们将对DeepLog的每个组件和整体性能进行评估,以展示其在从大型系统日志数据中查找异常的有效性。

6 相关工作

系统事件日志主要用于记录重要事件以简化调试,它具有丰富的信息,并且实际上存在于每个计算机系统上,从而使它们成为跟踪和调查系统状态的宝贵资源。但是,由于系统日志主要由各种自由格式的文本组成,因此分析具有挑战性。

已经针对不同的系统设计了许多日志挖掘工具。 许多使用基于规则的方法[7、15、28、29、31、32、40、41],尽管准确,但仅限于特定的应用场景,并且还需要领域专业知识。 例如,Beehive [41]通过对数据特定特征进行无监督的聚类,然后手动标记异常值,从日志中识别出潜在的安全威胁。 Oprea [28]使用信念传播从DNS日志中检测早期企业感染。 PerfAugur [32]专门用于通过使用谓词组合等专门功能来挖掘服务日志来发现性能问题。 DeepLog是一种通用方法,不依赖于任何特定于域的知识。

使用系统日志进行异常检测的其他通用方法通常采用两步过程。首先,日志解析器[9、14、16、23、36、37]用于将日志条目解析为结构化形式,通常仅包含“日志键”(或“消息类型”)。除了用于分隔和分组日志条目的标识符外,参数值和时间戳都将被丢弃。然后,对日志键序列执行异常检测。一种典型的方法是通过计数唯一的日志键或使用更复杂的方法(例如TF-IDF)为每个会话或时间窗口生成数字矢量。然后,由这些向量组成的矩阵将适合基于矩阵的无监督异常检测方法,例如主成分分析(PCA)[38,39]和不变挖掘(IM)[22]。构造这样的矩阵通常是一个精妙的过程,并且这些方法不能提供日志条目级别的异常检测(相反,它们只能在会话级别运行)。我们向读者推荐[17],以对这些方法进行概述和比较。

有监督方法[17,44]使用正常和异常矢量来训练可检测未来异常的二进制分类器。这种方法的缺点是,可能无法检测到训练数据中未发现的未知异常。此外,很难获得异常数据进行训练。我们在评估中显示,仅使用一小部分正常数据进行训练,DeepLog可以实现具有更好性能的在线异常检测。此外,DeepLog还使用时间戳和参数值进行异常检测,这是先前工作中所缺少的。

人们已经大量使用从精细日志文件中提取的日志键来研究工作流的构建[4,11,21,42]。已经表明,工作流在异常检测方面提供了有限的优势[11,42]。相反,工作流的主要用途是辅助系统诊断[4,21]。但是,所有过去的工作都假定要建模的日志文件仅包含一个任务的重复执行。在本文中,我们提出了自动将不同任务与日志文件分离的方法,以便为不同任务构建工作流模型。

除了工作流之外,其他使用系统日志执行异常诊断的系统包括DISTALYZER [26],它通过将有问题的日志与正常日志进行比较来诊断系统性能问题; LogCluster [19],它聚类并组织历史日志以帮助将来的问题识别;以及Stitch [45]从系统日志中提取不同级别的标识符,并构建一个Web界面供用户直观地监视每个进程的进度会话并查找性能问题。请注意,一旦检测到异常,它们便用于诊断目的,并且本身不能用于异常检测。

7 结论

本文介绍了DeepLog,这是一种使用基于深度神经网络的方法进行在线日志异常检测和诊断的通用框架。 DeepLog学习并编码整个日志消息,包括时间戳,日志密钥和参数值。它在每个日志条目级别而不是在每个会话级别执行异常检测,因为许多以前的方法都受到限制。DeepLog可以从日志文件中分离出不同的任务,并使用深度学习(LSTM)和经典挖掘(密度聚类)方法为每个任务构建工作流模型。这样可以进行有效的异常诊断。通过整合用户反馈,DeepLog支持对其LSTM模型的在线更新/训练,因此能够整合并适应新的执行模式。对大型系统日志的广泛评估清楚地证明了DeepLog与以前的方法相比的优越性。

未来的工作包括但不限于将其他类型的RNN(递归神经网络)合并到DeepLog中以测试其效率,并集成来自不同应用程序和系统的日志数据以执行更全面的系统诊断(例如,MySQL数据库的故障可能是由磁盘故障引起,正如一个独立的系统日志中所示)。

8 致谢

9 文献

[1] VAST Challenge 2011. 2011. MC2 - Computer Networking Operations.
(2011). hŠp://hcil2.cs.umd.edu/newvarepository/VAST%20Challenge%202011/
challenges/MC2%20-%20Computer%20Networking%20Operations/ [Online; accessed
08-May-2017].
[2] Mart´ın Abadi, Paul Barham, Jianmin Chen, Zhifeng Chen, Andy Davis, Je‚rey
Dean, MaŠhieu Devin, Sanjay Ghemawat, Geo‚rey Irving, Michael Isard, and
others. 2016. TensorFlow: A system for large-scale machine learning. In Proc.
USENIX Symposium on Operating Systems Design and Implementation (OSDI).
264–285.
[3] Yoshua Bengio, R´ejean Ducharme, Pascal Vincent, and Christian Jauvin. 2003. A
neural probabilistic language model. Journal of machine learning research 3, Feb
(2003), 1137–1155.
[4] Ivan Beschastnikh, Yuriy Brun, Michael D Ernst, and Arvind Krishnamurthy.2014.Inferring models of concurrent systems from logs of their behavior with
CSight. In Proc. International Conference on So‡ware Engineering (ICSE ). 468–479.
[5] Andrea BiŠau, Adam Belay, Ali Mashtizadeh, David Mazi`eres, and Dan Boneh.Hacking blind. In Security and Privacy (SP), 2014 IEEE Symposium on. IEEE,
227–242.
[6] Franois Chollet. 2015. keras. hŠps://github.com/fchollet/keras. (2015). [Online;
accessed 08-May-2017].
[7] Marcello Cinque, Domenico Cotroneo, and Antonio Pecchia. 2013. Event logs
for the analysis of so‰ware failures: A rule-based approach. IEEE Transactions
on So‡ware Engineering (TSE) (2013), 806–821.

[8] Andrew M Dai and ‹oc V Le. 2015. Semi-supervised sequence learning. In Proc.
Neural Information Processing Systems Conference (NIPS). 3079–3087.
[9] Min Du and Feifei Li. 2016. Spell: Streaming Parsing of System Event Logs. In
Proc. IEEE International Conference on Data Mining (ICDM). 859–864.
[10] Min Du and Feifei Li. 2017. ATOM: Ecient Tracking, Monitoring, and Orchestration
of Cloud Resources. IEEE Transactions on Parallel and Distributed Systems
(2017).
[11] Qiang Fu, Jian-Guang Lou, Yi Wang, and Jiang Li. 2009. Execution anomaly
detection in distributed systems through unstructured log analysis. In Proc. IEEE
International Conference on Data Mining (ICDM). 149–158.
[12] Yoav Goldberg. 2016. A primer on neural network models for natural language
processing. Journal of Arti€cial Intelligence Research 57 (2016), 345–420.
[13] Ian Goodfellow, Yoshua Bengio, and Aaron Courville. 2016. Deep Learning. MIT
Press. hŠp://www.deeplearningbook.org.
[14] Hossein Hamooni, Biplob Debnath, Jianwu Xu, Hui Zhang, Guofei Jiang, and
Abdullah Mueen. 2016. LogMine: Fast PaŠern Recognition for Log Analytics. In
Proc. Conference on Information and Knowledge Management (CIKM). 1573–1582.
[15] Stephen E Hansen and E Todd Atkins. 1993. Automated System Monitoring
and Noti€cation with Swatch.. In Proc. Large Installation System Administration
Conference (LISA). 145–152.
[16] Pinjia He, Jieming Zhu, Shilin He, Jian Li, and Michael R Lyu. 2016. An evaluation
study on log parsing and its use in log mining. In Proc. International Conference
on Dependable Systems and Networks (DSN). 654–661.
[17] Shilin He, Jieming Zhu, Pinjia He, and Michael R Lyu. 2016. Experience Report:
System Log Analysis for Anomaly Detection. In Proc. International Symposium
on So‡ware Reliability Engineering (ISSRE). 207–218.
[18] Sepp Hochreiter and J¨urgen Schmidhuber. 1997. Long short-term memory. Neural
computation (1997), 1735–1780.
[19] Qingwei Lin, Hongyu Zhang, Jian-Guang Lou, Yu Zhang, and Xuewei Chen.

  1. Log clustering based problem identi€cation for online service systems. In
    Proc. International Conference on So‡ware Engineering (ICSE ). 102–111.
    [20] Chaochun Liu, Huan Sun, Nan Du, Shulong Tan, Hongliang Fei, Wei Fan, Tao
    Yang, Hao Wu, Yaliang Li, and Chenwei Zhang. 2016. Augmented LSTM Framework
    to Construct Medical Self-diagnosis Android. In Proc. IEEE International
    Conference on Data Mining (ICDM). 251–260.
    [21] Jian-Guang Lou, Qiang Fu, Shengqi Yang, Jiang Li, and Bin Wu. 2010. Mining
    program workƒow from interleaved traces. In Proc. ACM SIGKDD International
    Conference on Knowledge Discovery and Data Mining (SIGKDD).
    [22] Jian-Guang Lou, Qiang Fu, Shengqi Yang, Ye Xu, and Jiang Li. 2010. Mining
    Invariants from Console Logs for System Problem Detection.. In Proc. USENIX
    Annual Technical Conference (ATC). 231–244.
    [23] Adetokunbo AO Makanju, A Nur Zincir-Heywood, and Evangelos E Milios.
  2. Clustering event logs using iterative partitioning. In Proc. ACM SIGKDD
    International Conference on Knowledge Discovery and Data Mining (SIGKDD).
    1255–1264.
    [24] Christopher D Manning and Hinrich Sch¨utze. 1999. Foundations of statistical
    natural language processing. MIT Press.
    [25] Tomas Mikolov, Martin Kara€´at, Lukas Burget, Jan Cernock`y, and Sanjeev Khudanpur.
  3. Recurrent neural network based language model.. In Interspeech,
    Vol. 2. 3.
    [26] Karthik Nagaraj, Charles Killian, and Jennifer Neville. 2012. Structured comparative
    analysis of systems logs to diagnose performance problems. In Proc. USENIX
    Symposium on Networked Systems Design and Implementation (NSDI). 26–26.
    [27] Christopher Olah. 2015. Understanding LSTM Networks. (2015). hŠp://colah.
    github.io/posts/2015-08-Understanding-LSTMs [Online; accessed 16-May-2017].
    [28] Alina Oprea, Zhou Li, Ting-Fang Yen, Sang H Chin, and Sumayah Alrwais. 2015.
    Detection of early-stage enterprise infection by mining large-scale log data. In Proc. International Conference on Dependable Systems and Networks (DSN). 45–56.
    [29] James E PreweŠ. 2003. Analyzing cluster log €les using Logsurfer. In Proc. Annual
    Conference on Linux Clusters.
    [30] Robert Ricci, Eric Eide, and Œe CloudLab Team. 2014. Introducing CloudLab:
    Scienti€c Infrastructure for Advancing Cloud Architectures and Applications.
    USENIX ;login: 39, 6 (Dec. 2014). hŠps://www.usenix.org/publications/login/
    dec14/ricci
    [31] John P Rouillard. 2004. Real-time Log File Analysis Using the Simple Event
    Correlator (SEC).. In Proc. Large Installation System Administration Conference
    (LISA). 133–150.
    [32] Sudip Roy, Arnd Christian K¨onig, Igor Dvorkin, and Manish Kumar. 2015. Perfaugur:
    Robust diagnostics for performance anomalies in cloud services. In Proc.
    IEEE International Conference on Data Engineering (ICDE). IEEE, 1167–1178.
    [33] Elastic Stack. 2017. Œe Open Source Elastic Stack. (2017). hŠps://www.elastic.
    co/products [Online; accessed 16-May-2017].
    [34] Martin Sundermeyer, Ralf Schl¨uter, and Hermann Ney. 2012. LSTM Neural
    Networks for Language Modeling.. In Interspeech. 194–197.
    [35] Ilya Sutskever, Oriol Vinyals, and‹oc V Le. 2014. Sequence to sequence learning
    with neural networks. In Proc. Neural Information Processing Systems Conference
    (NIPS). 3104–3112.
    [36] Liang Tang and Tao Li. 2010. LogTree: A framework for generating system
    events from raw textual logs. In Proc. IEEE International Conference on Data
    Mining (ICDM). 491–500.
    [37] Liang Tang, Tao Li, and Chang-Shing Perng. 2011. LogSig: Generating system
    events from raw textual logs. In Proc. Conference on Information and Knowledge
    Management (CIKM). 785–794.
    [38] Wei Xu, Ling Huang, Armando Fox, David PaŠerson, and Michael Jordan. 2009.
    Online system problem detection by mining paŠerns of console logs. In Proc.
    IEEE International Conference on Data Mining (ICDM). 588–597.
    [39] Wei Xu, Ling Huang, Armando Fox, David PaŠerson, and Michael I Jordan. 2009.
    Detecting large-scale system problems by mining console logs. In Proc. ACM
    Symposium on Operating Systems Principles (SOSP). 117–132.
    [40] Kenji Yamanishi and Yuko Maruyama. 2015. Dynamic syslog mining for network
    failure monitoring. In Proc. ACM SIGKDD International Conference on Knowledge
    Discovery and Data Mining (SIGKDD). 499–508.
    [41] Ting-Fang Yen, Alina Oprea, Kaan Onarlioglu, Todd Leetham, William Robertson,
    Ari Juels, and Engin Kirda. 2013. Beehive: Large-scale log analysis for detecting
    suspicious activity in enterprise networks. In Proc. International Conference on
    Dependable Systems and Networks (ACSAC). 199–208.
    [42] Xiao Yu, Pallavi Joshi, Jianwu Xu, Guoliang Jin, Hui Zhang, and Guofei Jiang. 2016.
    CloudSeer: Workƒow Monitoring of Cloud Infrastructures via Interleaved Logs.
    In Proc. ACM International Conference on Architectural Support for Programming
    Languages and Operating Systems (ASPLOS). 489–502.
    [43] Ding Yuan, Haohui Mai, Weiwei Xiong, Lin Tan, Yuanyuan Zhou, and Shankar
    Pasupathy. 2010. SherLog: error diagnosis by connecting clues from run-time
    logs. In ACM SIGARCH computer architecture news. ACM, 143–154.
    [44] Ke Zhang, Jianwu Xu, Martin Renqiang Min, Guofei Jiang, Konstantinos Pelechrinis,
    and Hui Zhang. 2016. Automated IT system failure prediction: A deep learning
    approach. In Proc. IEEE International Conference on Big Data (IEEE BigData).
    1291–1300.
    [45] Xu Zhao, Kirk Rodrigues, Yu Luo, Ding Yuan, and Michael Stumm. 2016. Nonintrusive
    performance pro€ling for entire so‰ware stacks based on the ƒow
    reconstruction principle. In Proc. USENIX Symposium on Operating Systems Design
    and Implementation (OSDI). 603–618.
0%