01-论文阅读-Deep learning for anomaly detection in log data: a survey

01-论文阅读-Deep learning for anomaly detection in log data: a survey



文章目录

  • 01-论文阅读-Deep learning for anomaly detection in log data: a survey
    • 摘要
    • I 介绍
    • II 背景
      • A 初步定义
      • B 挑战
    • III 调查方法
      • A 搜索策略
      • B 审查的功能
    • IV 调查结果
      • A 文献计量学
      • B 深度学习技术
      • C 日志数据准备
      • D 异常检测技术
      • E 评价与再现性
    • V 讨论
    • VI 结论


摘要

自动日志文件分析能够及早发现系统故障等相关事件。特别是,自学习异常检测技术能够捕捉日志数据中的模式,然后向系统操作员报告意外的日志发生,而无需提前提供或手动建模异常场景。最近,越来越多的利用深度学习方法来实现此目的的方法被提出。与传统的机器学习技术相比,这些方法表现出了卓越的检测性能,同时解决了数据格式不稳定的问题。然而,深度学习存在不同的架构,对原始和非结构化的日志数据进行编码以供神经网络分析是非常有意义的。我们因此进行了一个系统的文献综述,提供了模型部署,数据预处理机制,异常检测技术以及评估的概述。这项调查没有量化比较现有方法,而是旨在帮助读者理解相关领域的不同模型结构并强调未来工作的开放性问题。

I 介绍

在检测计算机系统时,日志文件提供了丰富的信息源。因此,大多数日志事件通常是作为正常的系统操作的结果而产生的,例如启动和停止进程,重启虚拟机、用户访问资源等。然而,当出现错误或不希望出现的系统状况发生时(例如失败的进程,可用性问题或者安全事件)应用也会产生日志。这些意外的和可能的不安全系统活动对于操作者是重要的,他们需要及时的采取行动阻止或减少系统损坏,避免不利的级联效应。

对于这类日志文件分析的主要问题是,在标准系统使用的大量不太有趣的跟踪中识别这些相关日志事件并非易事。特别是,现代应用程序产生的大量日志使得手动分析变得不可行,并且需要自动机制。不幸的是,手动编码的签名和在日志中搜索特定关键字的规则仅具有有限的适用性,并且不适合事先未知的场景。因此,有必要部署异常检测技术,自动学习代表系统行为正常基线的模型,并随后将与这些模型的任何偏差作为可能需要人类操作员注意的不良活动进行披露。

机器学习为日志文件中的异常检测提供了许多可行的技术,并且过去已经提出了许多不同的方法,包括聚类和工作流挖掘、时间参数的统计分析、时间序列分析以识别事件频率的变化等。最近,研究人员开始使用深度神经网络进行基于日志的异常检测,试图复制图像和语音识别深度学习的成功,其性能优于传统的机器学习方法。然而,由于系统日志事件通常是非结构化的并且涉及复杂的依赖关系,因此以某种方式准备数据以允许神经网络摄取并提取与检测相关的特征很重要。而且,现有的深度学习架构(例如循环神经网络或卷积神经网络)种类繁多,因此很难为当前的特定用例选择合适的模型,也很难理解它们对输入数据的格式和属性的各自要求。

据我们所知,目前对基于深度学习的日志异常检测的最新技术只有有限的综述。因此,很难理解哪些特征适合从原始日志数据中提取,如何将这些特征转换为足以被神经网络提取的格式,以及哪些模型架构适合检测日志数据中的特定模型。现有的调查仅比较少数异常检测方法,主要关注日志数据中的顺序模式,目前对系统日志数据分析的广泛研究并未充分涵盖深度学习模型和挑战,或者关注网络流量而不是系统日志数据。

因此,我们对用于日志数据异常检测的深度学习技术进行了系统的文献综述。因此,我们的主要重点是调查有关已部署模型架构的科学出版物、处理非结构化输入日志数据的各自要求和转换、用于区分正常和异常数据样本的方法以及所提出的评估。这项研究的结果对研究人员和行业都有好处,因为更好地了解了不同深度学习算法的挑战和特性,避免了开发异常检测技术时的陷阱,并简化了针对学术和现实用例中现有检测系统的选择。此外,对预处理策略的详细研究对于在进行异常检测时利用日志中的所有可用信息并了解数据表示对检测能力的影响至关重要,特别是在什么情况下可以检测到哪些类型的异常情况。在科学评估方面,我们特别关注实验设计的相关方面,包括数据集、指标和再现性,以指出普遍评估策略的缺陷并提出补救措施。最后,我们的研究还旨在创造一部参考著作,并为未来的研究奠定一个起点。我们指出,这项调查没有定量比较所审查方法的检测性能,因为只有少数开源实现可用,并且这些方法的比较已经在其它调查中进行了。根据上述目标,我们指定本次调查的研究问题如下:

RQ1:基于日志的深度学习异常检测的主要挑战是什么?

RQ2:通常应用哪些最先进的深度学习算法?

RQ3:如何预处理日志数据以供深度学习模型摄取?

RQ4:检测到哪些类型的异常以及如何识别它们?

RQ5:如何评估所提出的模型?

RQ6:这些方法在多大程度上依赖标记数据并支持增量学习?

RQ7:就源代码和所用数据的可用性而言,所呈现的结果在多大程度上可重复?

本文的其余部分的结构如下。第2节首先解释了深度学习、日志数据和异常检测等术语,然后概述了常见的挑战。我们在第3节中解释了我们选择出版物和进行调查的方法。第4节详细展示了我们所调查的所有结果。在第5节我们讨论了这些结果,并回答了我们的研究问题。最后,第6节为结束语。

II 背景

在本节中,我们首先阐明与深度学习的日志数据异常检测相关的一些一般概念和术语。然后,我们概述了该研究领域特有的科学挑战。

A 初步定义

本文进行的研究取决于对三个主要概念的理解:深度学习、日志数据和异常检测。然而,各个领域的确切特征和相应要求可能在不同的研究领域和现有文献中有所不同。因此,下面我们将描述这三个概念的基本属性。

  1. 深度学习:人工神经网络(ANN)的开发试图以连接通信节点的形式重建生物信息处理系统。为此,不同数量的节点按层的顺序排列,特别是读取数据的输入层、用加权边连接相邻层的几个隐藏层以及输入层、用加权边连接相邻层的几个隐藏层以及输出层。ANN可以实现监督训练,其中所有类别的标签都可用(即数据样本标记有正常或异常等标签),半监督训练(某些类别的标签可用)以及无监督学习(无标签可用)。一般来说,深度学习算法被理解为具有多个隐藏层的神经网络。过去已经提出了几种不同的神经网络架构,例如用于顺序输入数据的循环神经网络(RNN)。深度学习已被证明在许多应用领域(例如图像分类、语音识别等)优于传统的机器学习方法(例如支持向量机或决策树)甚至人类专家。
    1. **日志数据:**日志数据是由应用程序生成的按时间顺序排列的单行或多行事件,用于永久捕获特定的系统状态,特别是在发生故障或其他意外事件时用于手动取证分析。日志事件通常以文本形式提供,范围从半结构化对象(例如键值对)上的结构化向量(例如,逗号分隔值)到具有异构事件类型的非结构化人类可读消息。尽管不存在统一的日志格式,但日志事件通常包含其生成时间戳作为其事件参数之一。有时出现在不同类型的日志数据中的其他参数是日志记录级别(例如,INFO或ERROR)或链接相关事件序列的进程标识符。
    2. 虽然单个日志事件描述了一个特定时间点的系统状态(部分),但日志事件组代表了底层程序逻辑的动态工作流程。原因是日志事件是由软件开发人员在其代码中有意放置的打印语句生成的,以支持对程序活动和调试的理解。这些语句由静态部分(即硬编码字符串)和可变部分(即在程序运行时动态确定的参数)组成。过去,大量研究针对自动提取所谓的日志键(也成为日志签名、日志模板或者简单日志事件),这些日志键表示原始打印语句的模板并能够解析日志。这些解析器允许从日志中导出比非结构化日志消息更适合用于后续分析的值,特别是,通过(1)为日志事件分配事件类型标识符;(2)提取日志消息中的参数。
  2. **异常检测:**异常是数据集中表现出罕见或意外特征的实例,因此从其他数据中脱颖而出。为了检测的目的,这些数据实例的符合性通常通过与每个实例相关联的一个或多个连续或分类属性来测量,并且能够计算相似性度量。对于独立数据,只需将其与所有其他数据点具有高度差异性的单个或一小组实例声明为异常值,也称为点异常。对于实例彼此不独立的所有数据,例如包括日志数据在内的各种有序数据,会出现两种额外类型的异常。首先,上下文异常是仅相对于它们发生的上下文(而不是其他)而言异常的实例,例如发生时间。例如,考虑每天执行数据备份过程突然在计划时间之外开始。其次,集体异常是仅由于组合出现(而非单独出现)而出现异常的实例组,例如特定的日志事件序列。

大多数异常检测技术的隐含假设是,分析的数据包含的异常数据远少于正常实例。这使得检测能够以完全无监督的方式进行,即不需要标记数据来训练模型。然而,许多科学方法转而追求半监督检测,其中仅包含正常实例的训练数据可用,然后对包含正常实例和异常实例的测试数据集进行评估。半监督操作的主要优点是模型不会学习异常实例,并且收集正常数据通常相对简单,而建模和标记异常则不太简单。因此,监督异常检测方法的适用性较低且相对较少。

B 挑战

几十年来,基于日志的异常检测一直是一个活跃的研究领域。因此,大多数提出的方法都依赖于传统的机器学习技术。然而,在过去几年中,利用深度学习来披露与意外系统行为相关的异常日志事件的方法大幅增加。下面,我们总结了有效且适用的检测需要克服的主要挑战。

  • 数据表示。深度学习系统通常使用结构化和数字输入数据。将日志数据输入神经网络并非易事,因为它们经常涉及异构事件类型、非结构化信息和分类参数的混合。

  • 数据不稳定。随着应用程序的发展,可能会出现与训练数据中的日志事件类型不同的新日志事件类型。此外,观察到的系统行为模式可能会随着技术环境及其利用率随时间的变化而变化。深度学习系统因此需要逐步更新并调整正常系统行为的基线,以实现实时检测。

  • 类别失衡。异常检测本质上假设正常事件多于异常事件。众所周知,许多基于神经网络的方法对于不平衡的数据集表现不佳。

  • 异常类别的多样性。异常的表现以各种方式影响日志事件及其参数,包括顺序模式、频率、相关性、到达间隔时间等的变化。检测技术通常仅针对特定异常类型的属性而设计,因此并不普遍适用。

  • 标签可用性。由于异常代表意外的系统行为,因此通常没有可用于训练的标记异常实例。这限制了半监督和无监督深度学习系统的应用,众所周知,这些系统的检测性能低于监督方法

  • 流处理。日志作为连续的数据流生成。为了实现动态监控而不是取证分析,深度学习系统需要设计用于检测和模型更新时的单通道数据处理。

  • 数据量。日志数据会大量生成,一些系统每天会生成数百万个甚至数十亿个事件。实际应用中需要高效的算法来确保实时处理,特别是在边缘设备等计算资源很少的机器上运行时。

  • 交错日志。当许多进程同时运行或集中收集分布式日志时,相关日志事件的序列可能会相互交错。当事件缺少会话标志符时,检测原始时间序列并非易事。

    我觉的HDFS里的任务ID划分就是对不同的进程分别进行的提取。

  • 数据质量。数据质量低可能是由于日志收集不当或日志生成过程中的技术问题造成的,并对机器学习有效性造成负面影响。常见问题包括不正确的时间戳信息、时间排序、丢失事件、重复记录、错误标记事件等。

  • 模型可解释性。基于神经网络的方法通常比传统的机器学习方法具有较低的可解释性。在针对关键系统行为或安全事件做出合理决策时,难以理解正确和错误分类背后的原因尤其成问题。

III 调查方法

本节概述了用于进行系统文献综述的方法。我们首先描述我们收集相关文献的策略,然后提出我们用来分析检索到的论文的评估标准。

在这里插入图片描述

A 搜索策略

在本节中,我们将描述收集纳入调查的相关出版物的过程。首先,使用网络搜索收集初始文献集。随后,使用纳入、排除和质量标准选择相关论文。

  1. 带搜索字符串的初始文献收集:为了从最先进的技术中获得一组处事方法,我们组装了一个搜索字符串来查询科学出版物的公共数据集库。特别适合,我们设计了搜索字符串,以便仅检索包含与本次调查相关的三个主要概念的出版物:日志数据(log data)、异常检测和深度学习。由于某些出版物使用不同的术语,为了减少遗漏相关出版物的可能性,我们还使用术语 “system log(s)”, “event log(s)”, “log file(s)”, “log event(s)” 作为 “log data” 的替代,"神经网络"作为"深度学习"的替代。我们省略术语 “log” 而没有任何其他词,因为它产生许多包含日志但与我们的研究无关的结果。图1显示了最终的搜索字符窜。

    然后,我们使用此搜索字符串从以下数据库收集出版物:Science Direct, Scopus, Springer-Link, ACM Digital Library, IEEE Xplore, Google Scholar, 和 Web of Science。该检索于2022年1月进行,共返回2925篇出版物。在下一节中,我们将描述从该集中选择相关出版物的方法。

  2. 相关出版物的选择:为了筛选出与本次调查无关的出版物并将出版物集减少到可管理的规模,我们定义了多个选择标准并将其应用于我们的初始集合。我们将出版物纳入调查的主要标准如下:出版物中提出的模型对异构和非结构化的日志数据中的异常检测应用深度学习技术(如:多层神经网络)。此外,我们还定义了几个排除标准,用于忽略相关性较低或格式不适当的出版物。排除标准列表如下:

    • 本文中没有表明所提出的方法适用于或设计用于日志数据的应用。我们的调查并不试图采用其他领域的方法进行日志数据分析。
    • 最近有一份出版物提出了相同或类似的研究。该标准的目的是缺包分析特定方法的最新版本。
    • 该出版物进应用现有方法,没有对原始概念进行新的修改。
    • 该出版物以英语以外的任何语言出版。
    • 该出版物不提供电子版本。
    • 该出版物是书籍、技术报告、讲稿、演示文稿、评论或论文(此处指大论文)。在这些情况下,如果可能的话,会审查相应的会议或期刊出版物。

    请注意,我们不会讲出版物限定在特定时间范围内,以避免遗漏任何于本次调查相关的较旧出版物。然而,我们的目标是忽略不符合最低科学标准的质量普遍较低的出版物。因此,除了我们的主要纳入标准外,我们只选择符合以下质量标准的出版物。

    • 明确阐述了研究的目的及其发现,例如,将用于异常检测的深度学习系统设计作为论文的主要贡献。
    • 对所应用的深度学习模型及其参数进行了严格的描述,即读者清楚选择了什么类型的深度学习模型以及其布局是如何设计的,例如它包含多少层。
    • 该出版物包括对所提出方法的合理评估,包括进行实验设计的令人信服的动机、评估过程和总体设置的全面描述、选择捕获指标的解释以及对收集结果的详细讨论及其影响。
    • 引用或描述了用于评估该方法的数据集。这一标准确保我们的调查不包括那些可能存在误导性发现的出版物,这些发现来自不足以进行异常检测的数据集。
    • 可视化清晰易读。结果的难以理解的表述具有误导性,缺乏科学价值。

    我们的选择程序分为两个阶段。首先,我们根据每篇论文的标题和摘要使用纳入和排除标准来减少出版物的初始集合。此阶段后,剩下331份出版物,在第二阶段,我们根据每篇论文的内容使用上述所有标准进行选择。我们最终获得了62篇论文纳入本次调查。以下部分概述了我们分析这些出版物的方法。

B 审查的功能

为了确保我们按照共同的方案分析所选出版物并解决我们的研究问题,我们制定了针对每篇论文评估的特征列表。以下一组问题涉及应用的深度学习(DL)模型和操作模式。

  • DL-1:使用了那些深度学习模型?

  • DL-2:应用了哪些训练损失函数?

  • DL-3:该方法是否支持在线或增量学习?

  • DL-4:训练是否已无监督、半监督或监督方式进行?

然后,我们分析所审查的方法如何将原始日志数据输入深度学习模型的不同方式。因此,以下问题涉及预处理(PP)以及将日志转换为数值向量或矩阵表示。

  • PP-1:原始日志是如何预处理的?
  • PP-2:从预处理的日志中提取那些特征?
  • PP-3:提取的特征如何表示为向量?

下一组问题涉及异常检测(AD)。特别是,我们对不同类型的异常感兴趣,以了解它们是否与从原始日志中提取的特征及其如何作为向量的表示有关。

  • AD-1:该方法检测到哪些类型的异常?
  • AD-2:深度神经网络的输出如何用于异常检测?
  • AD-3:如何区分异常数据样本和正常数据样本?

利用可公开访问的数据集进行评估以及与论文一起发布的源代码不仅是良好的科学标准,而且对于其他人验证所呈现的结果进行比较也至关重要。因此,最后一组问题涉及评估和再现性(ER),特别是所采用的评估指标以及数据集和源代码的可用性。

  • ER-1:使用哪些日志数据集来评估该方法?
  • ER-2:使用哪些评估指标?
  • ER-3:评估是否考虑运行时的性能测量?
  • ER-4:使用哪些方法作为基准?
  • ER-5:所使用的数据集是否公开可用?
  • ER-6:该方法的源代码是否公开?

所有上述问题军针对每份出版物进行了单独评估。由此产生的特征矩阵显示在下一节的表2中,并作为我们分析和讨论的基础。

IV 调查结果

本节提供了对所有已审阅的出版物相对于上一节中概述的功能的评估。再详细介绍每个已审查的功能之前,我们首先提供有关出版物元数据的一些一般信息。

A 文献计量学

在这里插入图片描述

本节概述了每年出版物的分布及其引用次数。

  1. 每年发表的论文:用于日志异常检测的深度学习是一个相对较新的研究领域,在过去几年中越来越受到关注。因此,该研究领域的大多数出版物都是在最近两三年内发表的。图2显示了本次调查所审查的所有出版物的出版年份概览。正如预期的那样,在62篇考虑的出版物中,有58篇是在2019年或之后出版的。由于相关文献的检索是在2022年初进行的,因此仅收录了当年的2篇出版物。然而,按照图中可见的整体趋势,我们预计2022年及以后的出版物数量将会更高。

  2. 引用:引用计数是评估出版物相关性和影响力的常用指标。因此,我们在表一中列出了引用次数最高的前6名出版物(根据谷歌学术)。截至2023年1月,Du等人于2017年发表的介绍 DeepLog 的论文被引用次数最高,可以说是所有审阅出版物中最具有影响力的,因为它们是第一个提出基于深度学习的方法,能够检测日志数据中的异常事件序列。随后发表的几篇论文都依赖于 DeepLog 的基础,因此可以公平地假设这篇论文至少在某种程度上对2019年及以后相关出版物的增加负责,如图2所示。

    请注意,杨等人的出版物早于 DeepLog,但引用计数明显较低。主要原因是本文主要关于单个日志时间中的token分析,而该主题在后续研究中受到的关注远远少于事件序列分析。这种区别以及对第III-B节中所述的其它特征的评估见表2。

    在这里插入图片描述

B 深度学习技术

本节概述了已评论出版物中应用的深度学习模型的属性。

  1. 深度学习模型:有许多不同类型的深度学习模型适用于日志数据中的异常检测。深度学习神经网络最基本的形式是多层感知机(MLP),其中网络中的所有层都是完全连接的。由于其简单性,它们的分类精度通常优于其它专门设计用于捕获序列数据中存在的共同特征的深度学习模型。因此,在文献综述中很少考虑它们,并且仅与其它深度学习模型结合使用或作为补充注意机制。

    卷积神经网络(CNN)通过在隐藏层中插入卷积层和最大池化层来扩展MLP的架构。这些层使神经网络能够捕获输入数据的更抽象特征,同时减少输入维度。事实证明,这在对图像中的二维输入数据进行分类时特别有效,其中线条等特征的学习与它们在图像中的确切位置无关。通过在矩阵内排列日志键,将此功能转移到日志数据,以便网络捕获事件之间的关系,即它们的时间依赖性。还有几种依赖于特定类型CNN的方法啊,例如专门设计用于处理时间序列并通过扩张因果卷积捕获其短期和长期依赖性的事件卷积网络(TCN)。

    如表2所示,循环神经网络(RNN)时调查文献中最常用的神经网络架构,在62种经过审查的方法中,有36中利用RNN进行异常检测。主要原因是RNN的架构利用反馈机制,随着时间的推移保留其状态,从而直接能够学习输入数据中的顺序事件执行模式,这些模式时日志数据集中异常的关键标识符,常用于日志数据集中。几种不同类型的RNN已成功应用于此目的。最广泛使用的架构之一是长短期记忆(LSTM)RNN,它的开发是为了实现状态的长期存储,并包含具有以下功能的单元:输入门、输出门和遗忘门。大多数利用LSTM RNN的方法都使用事件发生序列(或其修改和丰富版本)来训练网络,并随后将测试数据中不寻常的序列模式公开为异常。一些方法利用Bi-LSTM RNN,它们基本上是两个独立的LSTM-RNN,它们并行工作并以相反的方向处理序列,即,一个LSTM RNN像往常一样处理从第一个到最后一个元素的输入序列,而另一个 LSTM RNN 从最后一个条目开始处理序列元素,并预测按时间书匈奴位于它们之前的元素。实验表明 Bi-LSTM RNN 优于 LSTM RNN。RNN 的另一个流行选择是门控循环单元 (GRU),它简化了单元架构,因为它们仅依赖于更新和重置门。GRU 的主要优点之一是它们在计算上比 LSTM RNN 更高效,这是关注边缘设备的用例的一个相关方面。

    虽然上述深度学习模型主要用于不同研究领域的分类问题,但也有专门设计用于以无关监督方式运行的模型,因此是异常检测的自然选择。其中之一是自动编码器(AE),它首先使用编码器从输入数据创建代码,然后尝试使用解码器近似来自代码的输入,从而避免需要标记的输入数据。主要思想是,通过这个过程,神经网络从输入中学习主要特征,但忽略数据中的噪声,类似于主成分分析(PCA)等降维计数。任何输入到已训练网络并产生高重建误差的输入数据都被视为异常。除了自动编码器的标准模型之外,还有几种相关类型,例如对统计分布进行操作的变分自动编码器(VAE)、在训练中添加事件类型等条件信息的条件变分自动编码器(CVAE)以及卷积自动编码器(CAE)利用CNN在学习与位置无关的特征方面的优势。

    生成对抗网络(GAN)是另一种无监督深度学习方法。它们实际上由两个相互竞争的独立组件组成:一个生成器,生成类似输入数据的新数据。鉴别器估计某些数据源自输入数据的概率,用于改进生成器。现有的方法使用不同的模型来构建GAN,包括LSTM RNN、CNN于GRU的结合以及Transformer。

    在这里插入图片描述

    在这里插入图片描述

    Transformers(TF)利用所谓的自注意力机制将数据实例嵌入到向量空间中,其中相似的实例应该比不相似的实例彼此更接近。Transformer的目标是根据特定输入出现的上下文(例如句子中的单词)为其分配权重。因此,Transformers 在自然语言处理(NLP)领域特别成功。注意力机制(AT)不仅出现在Transformer中,还经常用于通过提高相关输入的权重来改进其他深度神经网络(例如RNN)的分类和检测。当RNN摄取长序列时,这种效应尤为强烈。注意力机制通常被实现为可训练的网络,例如MLP。为了避免于Transformer模型混淆,我们在表2中明确说明了这些额外的注意机制。

    Wan 等人是唯一使用图神经网络(GNN)的作者。虽然神经网络通常摄取有序数据,例如CNN依赖于二维输入数据,而RNN需要观察序列,但GNN被设计为摄取图输入,即顶点和边集。将日志数据转换为图的一种可能性是生成会话图,其中顶点表示事件,边表示其顺序执行。另一种不太常用的深度学习模型类型是进化颗粒神经网络(EGNN),这是一种从在线数据里路逐渐构建额模糊推理系统。

    我们的调查显示,许多经过审查的方法仅依赖于一种类型的深度学习模型。然而,一些作者也使用不同模型的组合。例如,Wang 等人建议使用 MLP 将 VAE 的输出与经过对抗性学习训练的 Transformer 的输出相结合。

  2. 训练损失函数:损失函数(DL-2)对于深度神经网络的训练至关重要,因为它们量化了神经网络输出于预期结果之间的差异。所审查的出版物中最常见的损失函数是交叉熵(CE),特别是用于多类预测的分类交叉熵或仅区分正常和异常的二元交叉熵。其他常见损失函数包括超球体目标函数(HS),其中到超球体中心的距离代表异常得分、均方误差(MSE)用于回归,以及KL散度及其扩展边际似然(ML)可用于测量概率分布中的损失。

    所提出的一些方法是使用自定义损失函数(CF)进行训练的,包括CE和HS的组合。一些作者还专门为GAN的对抗训练(AT)定义了目标函数。表3总结了主要的损失函数。在所有出版物中,有14篇没有说明损失函数,因此被标记为不可用(NA)。

  3. 运行模式:在现实场景中应用异常检测时,并非所有日志数据都随时可用;相反,事件作为连续流生成,并且仅应在事件发生时进行分析,以便实现(接近)实时检测。因此,生成的日志的结构完整性和统计特性随着时间的推移而变化,例如由于用户交互和技术环境可能会发生变化,整个系统的利用率并不是固定的。此外,当生成这些日志的应用程序被修改时,日志模板会发生更改或有新的日志事件发生。

    为了以自动化方式跟上这些变化,算法需要采用在线或增量学习(DL-3),即以线性事件复杂度摄取输入数据,以便单次处理数据集,其中每个数据实例仅处理过一次。虽然当经过训练的模型被认为是静态的,通常总是可能以在线方式进行检测,但开发支持在线学习的算法并通过将其纳入检测 baseline 中来动态更新其模型以适应新的事件或者模式更具挑战性。由于持续学习仍然是一个悬而未决的问题,我们在表2中将所有至少在某种程度上启用动态模型更新的方法标记为在线(ON),将所有其它具有离线训练阶段的方法标记为离线(OFF)。

    所审查的方法以多种方式解决动态模型适应问题。Du 等人建议在检测过程中发现误报时更新神经网络的权重,以反映正确的事件概率分布,而无需从头开始重新训练。Meng 等人认为这种手动反馈循环在实践中是不可行的,因此需要重新训练,将新的事件类型映射到现有的事件类型。Yen 等人在误报率超过一定阈值时,会自动在成批的新日志数据上重新训练他们的神经网络。然而,计算误报率依赖于标记数据,因此不会将人类从循环中删除。Decker 等人提出了一种解决上述问题的有希望的解决方案。他们采用了一种不断发展的分类器,专门设计用于处理不稳定的数据流,从而可以实现持续学习。

    一般来说,在线和离线模型都可以在有监督(SUP)和无监督(UN)方式(DL-4)下工作。然而,我们注意到,所审查的出版物几乎所有监督学习方法都选择离线训练阶段。这是合理的,因为监督学习所需要的标签信息依赖于手动分析或验证,因此只能为分隔的数据集以取证方式生成,而不能为数据流生成。

    我们还观察到,许多经过审查的方法声称可以实现无监督学习,但实际上是以半监督(SEMI)方式操作的,因为他们通常假设训练仅在没有异常的正常数据上进行。主要问题是训练数据中存在的异常会错误地改变神经网络的权重,从而恶化后续检测阶段的检测。因此,只有为无监督学习而设计的深度学习模型才能够处理训练数据中的异常,例如 Otomo 等人提出的基于 CVAE 模型的方法。请注意,支持无监督学习的神经网络架构也可以应用于半监督检测,因此不一定标记为无监督。

C 日志数据准备

本节概述了为深度学习准备原始和文本日志数据所需要的所有步骤。这包括将事件分组到窗口或会话中、token化和日志解析、从日志中提取特征,以及将这些特征转换为适合作为神经网络输入的向量表示。图3概述了所审查文献中使用的这些数据准备方法,并在示例日志行 L1-L8 上说明了它们。在以下各节中,我们讲详细讨论所有所述方法。

在这里插入图片描述

  1. 预处理:由于日志数据通常是非结构化的,因此有必要在将其输入深度学习系统(PP-1)之前以某种方式对其进行预处理。我们的调查显示,处理非结构化数据有两种主要方式。最常见的方式是利用解析器,通常称为日志键(KEY)来提取每一行的唯一事件标识符以及事件参数值,如 II-A2 节中所述。因此,作者通常会重复使用众所周知的数据集的现有日志键,或使用最先进的解析器生成方法创建键,例如 Drain 或者 Spell。通常,每一行恰好匹配一个键;因此,在事件映射期间可以轻松地为每个日志键行分配唯一的事件类型标识符。例如,在图3中,行L1映射到事件类型标识符E1因为它匹配对应的日志键。此外,该图还显示,解析可以从日志事件中提取所有参数,特别是从L1中提取时间戳、数据包响应者的标识符、以及文件 block 并将其存储在列表中。

    解析的替代方法是基于 token(TOK)的策略,该策略将日志消息拆分为单词列表,例如,通过在空格处拆分它们。然后,在获得最终的词向量之前,通常会通过将所有字母转换为小写并删除特殊字符和停止词来清理数据。虽然此类方法从单个标记中获取较少的语义信息,但它们具有更灵活的有点,因为它们依赖于普遍使用的启发式方法而不是预定义的解析器,因此具有广泛的适用性。一些方法利用解析和基于标记的预处理策略的组合(COM),特别是通过从解析的事件而不是原始日志行生成 token 向量。

  2. 事件分组:如第II-A3节中所述。简单的异常值检测不需要对日志进行任何分组,因为单个异常事件被视为独立于它们发生的上下文的异常。然而,深度学习最常应用于揭示多个日志事件的异常模式,例如作为事件序列或事件日志相关性的变化。对于这些情况,有必要将事件逻辑地组织成组,然后单独进行分析或相互关联进行分析。

    我们在图3的右上角说明了常见的事件分组策略。分组到时间窗口几乎总是可行的,因为日志事件通常是用记录其生成时间的时间戳生成的。由于时间戳通常出现在日志行的开头,因此相对容易提取,因此没有必要解析通常更复杂的日志消息的其余部分。基于事件的分组有两种主要策略。首先,滑动时间窗口是具有特定持续时间的窗口,这些窗口以固定的步长(通常较小)和窗口大小的整数除数。对于移动时间窗口的每一步,在窗口的当前开始和结束时间内具有时间戳的所有日志被分配到同一组,其中每个日志行可能出现在多个组中,因为时间窗口重叠。对于图3中的示例日志,我们假设从20:00:00开始的时间窗口为2小时,步长为30分钟。如图所示,线L5、L6和L7都包含在Tb和Tc中。其次,固定时间窗口是滑动时间窗口的特殊情况,其中步长设置为与窗口大小相同的值。虽然这一策略会导致数据视图的粒度不太细,但优点是每个日志事件只会分配到一个时间窗口,这使得后续计算(例如时间序列分析)变得更加容易。图3中的日志事件被示例性地分组为2小时的固定时间窗口,产生包含第一组四行的T1和包含后续组四行的T2。需要说明的是,基于滑动或固定窗口的分组也可以按照行数而不是时间进行分组(这里是我想的等长度分组法),使得每组行具有相同的大小。虽然这避免了处理时间戳的需要并确保组大小是固定的(例如,不能有任何空的组),但将在时间序列中考虑事件频率更加困难,因为结果窗口表示不同的时间跨度。

    完全不同的分组策略是依赖于事件参数的会话窗口,该事件参数充当事件源自的特定任务或进程的标识符。通过这些会话标志符对日志事件进行分组,即使在受监控系统上并行执行多个会话时,也可以提取正确描述底层程序工作流程的事件序列。不幸的是,并非所有类型的日志数据都带有这样的会话标识符(例如blk_388)充当会话标志符,因此允许我们示例性地提取三个事件序列。

  3. 特征提取:第IV-C1节中描述的基于解析和标记的与处理策略能够从非结构化日志中提取结构化特征(PP-2)。其中一些特征是直接从预处理日志中导出的,例如,可以使用 token 序列(TS)而不需要任何进一步的修改,即可将每个日志行作为一个句子进行分析。另一方面,token计数(TC)需要额外的计算步骤,其中对每行中的token的高级加权技术,如术语频率-反向文档频率(TF-IDF),它根据所有观察到的日志行的token出现情况估计token相关性。

    考虑到事件映射步骤的结果,提取事件序列(ES)很简单,即通常由固定、滑动或会话窗口分隔的事件类型标志符序列(参见第IV-C2节)。例如,图3显示文件块 blk_388 的事件序列为 [E1, E1, E2, E1],对应于匹配行 L1-L4 的日志键的事件标识符。事件计数(EC)是长度为d的向量,其中向量的第i个元素描述了第i个日志键的出现次数,d是可用日志键的总数。图3中的示例将时间窗T1的事件计数向量显示为 [3, 1, 0, 0],表示T1中出现了第一条日志键 E1 对应的三条日志行,特别是 L1、L2、L4行。除了频率之外,还可以从事件发生中计算初许多其它统计属性(STAT),例如季节性日志的百分比,日志消息的长度,日志活动频率,日支行块的基于熵的分数,或者事件发生中突然爆发的存在。

    日志事件的参数(PA)被提取为值列表。由于每个参数的语义在解析后已知,因此可以使用适合各自值类型(例如数字或分类)的方法来分析每个向量中的值。日志事件的一个特殊参数是时间戳,因为它允许将事件发生按时间顺序排列并推断动态依赖性。因此,事件间隔时间(EI),即属于同一事件类型的日志行的间隔时间,是异常检测中经常提取的特征。

  4. 特征表示:上一节中描述的提取特征包括数字或分类向量,适合神经网络使用。例如,事件序列被表示为事件ID序列向量(ID),即按时间顺序排列的日志键标识符序列,并被馈送到RNN中以学习事件发生的依赖性并将不寻常的序列模式揭示为异常。事件计数表示为有序计数向量(CV),并且也类似地用作RNN的输入。时间统计是另一种类型的输入,除了将它们表示在统计特征向量(FV)中之外,不需要任何特定处理,其中限量中每个元素的位置对应于一个特定特征。

    虽然可以直接使用提取的特征,但所审查的出版物中提出的大多数方法实际上依赖于原始特征向量的组合或者以其他方式转换的向量表示(PP-3)。因此,最常见的表示是语义向量(SV)。在NLP理念关于,常见的做法是将句子的单词转换为所谓的语义向量,这些向量编码基于上下文的语义(例如Word2Vec, BERT 或 GloVe)或语言统计数据(例如 TF-IDF)。由于每个日志行都包含类似于句子中单词的token序列,因此有理由对token序列应用自然语言处理的方法。类似地,多个后续事件的序列可以被视为一个句子,其中每个唯一的日志键代表一个单词。语义编码通常通过在特定日志文件上训练深度神经方法或依赖预训练模型来实现。语义向量有时与位置嵌入(PE)结合使用,其中元素(通常是tokens)根据它们在序列中的相对位置进行编码。为了将位置信息添加到编码的日志消息中,作者通常分别使用使用正弦和余弦函数对偶数和奇数标记索引。

    **One-Hot 编码(OH)**是处理分类数据的最常用技术之一,因此经常应用于事件类型(因为在解析其中定义了有限数量的日志键)或token值。形式上,对d个值的有序列表中的值i进行独热编码是一个长度为d的向量,其中第i个元素为1,所有其他元素为0。虽然大多数作者直接使用one-hot编码数据作为神经网络的输入,但也可以将其与计数向量等其他特征相结合,以便应用的神经网络能够识别输入并针对不同的日志键学习单独的模型。

    **编码层/矩阵(EL)**通常用于解决高位输入数据的稀疏性问题,例如当需要大量日志键来解析日志时,例如one-hot编码事件类型。它们通常是随机初始化的参数,与分类模型一起训练,以为日志消息创建最佳向量编码。向量编码通常排列在矩阵中,以便通过将该矩阵与独热编码的日志键向量相乘来获得日志键的相应向量。与语义向量的主要区别在于 嵌入层/矩阵 通常不是针对NLP目标进行训练的,即它们的目的不是学习 Word2Vec 等单词的语义;相反,嵌入层/矩阵 仅经过训练以最小化分类网络的损失函数。一些作者使用基于深度学习的自定义嵌入模型;我们将它们的输出称为深度编码嵌入(DE)。这包括基于字符、事件和序列的嵌入的组合、使用MLP和CNN的注意机制,以及将标签信息输入VAE的标记计数。

    与上述的方法不同,这些方法操作事件类型,并且主要使用token来以向量格式编码这些事件,而依赖于参数向量(PV)的方法直接使用从解析的日志消息中提取实际值。因此,提取的数值参数可以用于RNN的多变量事件序列分析,而类别值可以用词嵌入方法进行一次性编码和矢量化。无论如何,由于不同的日志事件具有不同数量的且语义不同的参数,通常需要对每种事件类型的参数进行各自的分析。日志事件的时间戳是一个特殊的参数,因为它允许将其他参数放在时间上下文中,这是事件序列分析所必需的。然而,时间戳本身可用于时间嵌入(TE)并用作神经网络的输入。为此,Li等人通过应用软独热编码为事件发生之间的时间差序列生成向量。

    虽然在几个出版物的不同变体中使用了上述表示法,但Graph(G)是一种完全不同的方法,仅由Wan等人使用。其关键思想是将事件序列转换为会话图,然后应用专门为这些数据结构设计的神经网络。另一种不太常用的对日志消息之间的相关性进行编码的策略是所谓的Transfer Matrix(TM)。具体地说,dxd维矩阵对d个日志键中的任何一个跟随另一个键的概率进行编码。

D 异常检测技术

前面的几节描述了准备输入日志数据以供神经网络摄取的方法。然而,在许多情况下,检索呈现给神经网络的数据样本是否异常的信息是非常重要的,因为没有针对事先未知的异常的专用输出节点。因此,本节概述了所审查的方法所应用的异常检测技术。首先,我们陈述了方法通常针对的不同类型的异常。其次,我们研究如何从网络输出中检索检测或分类结果。最后,我们陈述了不同的判定标准,用于根据这些结果测量来区分正常和异常样本。

  1. 异常类型:审查的方法处理了章节II-A3(AD-1)中概述的不同类型的异常。异常值(OUT)是不适合数据集整体结构的的单个日志事件。最常见的是,根据异常参数值、标记序列、或出现次数来检测异常事件。相对而言,很少有方法考虑异常值,因为大多数已审查的方法侧重于集体异常,特别是涉及事件序列。

    顺序(SEQ)异常是在执行路径改变时检测到的,也就是说,生成日志的应用程序执行事件的方式与以前不同。这可能导致在正常时间序列中出现额外的、缺失的或者不同顺序的事件,以及甚至可能涉及以前未见过的事件类型的全新序列。检测这些异常的一种常用方法是,根据之前或之后发生的所有事件,检查事件序列中的特定事件类型是否预计会发生。

    顺序异常的检测本质上假定事件以有序序列的形式发生,而频率(FREQ)异常只考虑事件发生的次数。尽管如此,事件频率可以用来推断事件之间的依赖关系,例如,与打开和关闭文件相关的事件数量应该相同,因为每个文件最终将被关闭,并且在此之前需要打开。检测频率异常的主要思想是,系统行为的变化会影响在时间窗口内最常计数的通常事件发生的数量。

    一些方法还考虑基于超出事件计数的多个日志事件的某些定量表达属性的异常,如达到间隔时间或季节发生模式。我们将其称为统计(STAT)异常,因为它们的检测通常假设时间发生遵循特定的稳定分布。下面的部分描述如何使用神经网络的输出来确定上述类型的异常。

  2. 网络输出:一般来说,神经网络的输出由其最后一层(AD-2)的单个节点或多个节点组成。因此,从网络中提取的结果值是一个标量或数值向量。一种可能性是将这些结果视为异常评分,该评分表示呈现给网络的日志事件在多大程度上代表异常。由于这些分数通常很难单独解释,因此通常有必要将它们与一些阈值进行比较。在二值分类(BIN)中,这个思想被用来估计神经网络的输入是正常的还是异常的。对于监督方法,数字输出可以解释为输入对应于任何一类的概率。另一方面,由半监督或无监督方法生成的异常分数通常不归一化,例如,输入和超球聚类中心的距离可以变得任意大,因此需要与经验确定的阈值进行比较。同样,输入向量变换(TRA)将输入转换为新的向量空间并为正常数据生成聚类,能够通过距离聚类中心很远的距离来检测异常值。另一种相关方法是利用 Autoencoders 的重构误差(RE),该方法首先在较低维空间中编码输入数据,然后尝试将其重构为原始形式。在这种情况下,如果输入样本难以重建,即产生很大的重建误差,则认为它们是异常的,因为它们不对应于网络所训练的正常数据。

    虽然上述方法追求区分正常和异常输入的二元分类但也有能够区分两个以上类别的概念。多分类(MC)为特定类型的异常分配不同的标签,但需要监督学习,以便在训练阶段捕获特定于这些类的模式。为了解决这个问题,还可以将事件类型作为分类的目标。最常见的方法是训练模型,使其在观察到的日志事件序列之后预测下一个日志键。当使softmax函数作为输出的激活时,该预测将产生一个概率分布(PRD),其中包含每个日志键的单独概率。当时间被视为数字向量(VEC),特别是语义或参数向量时,预测序列中的下一个日志事件的问题也可以被表述为回归任务。因此,神经网络输出表示预测事件向量的向量,而不是各自的事件类型。

  3. 检测方法:在前一节中描述的获取网络输出的不同策略已经大致了解了用于区分正常和异常行为并最终报告异常的(AD-3)的方法。当网络输出直接对应于特定的标签(LAB)时,例如,通过二元分类完成,很容易为所有标记为异常的样本生成异常。对于输出某种数值或异常分数的所有方法,使用阈值(THR)进行区分是很直接的。该阈值也有助于调整方法的检测性能,并通过经验实验在TPR和FPR之间找到可接受的权衡。另一种方法是将从网络中获得的异常分数建模为统计分布。特别是,Du等人和Xie等人使用高斯分布检测误差超出特定置信区间的参数向量为异常。Otomo等人提出了一种不同的方法,它们对重建误差应用聚类,并将距离正常聚类足够远的所有样本检测为异常。

    当神经网络的输出是已知日志键的多概率分布时,通常考虑具有最高概率(top)的前n个日志键作为分类的候选者。因此,只有当日志事件的实际类型不在候选事件集中时,才会检测到异常。考虑的候选数n调节TPR和FPR之间的权衡,类似于上述阈值。图4显示了网络输出与应用的监测技术之间的关系。BIN和MC都依赖于监督学习,因此能够直接为新的输入样本分配标签。所有其他技术都可以进行半监督或无监督的训练。特别是RE,TRA和VEC产生的异常分数与阈值进行比较,而PRD通常与具有最高概率的顶级日志键进行比较。请注意,这个整体模式有一些例外。例如,Yang等人的方法通过使用概率标签支持半监督训练,Zhang等人的方法尽管依赖于误差重构,但仍是由监督的。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

E 评价与再现性

本节概述在审查的出版物中进行的评价。我们提供了一个公开可用的数据集列表,这些数据集对评估有用,并说明了常用的评估指标和基准。我们还讨论了与开源实现的可用性相关的评估和再现性。

  1. 数据集:数据集在科学出版物中时必不可少的,以验证方法并显示由于最先进的检测率(ER-1)的改进。我们的文献综述表明,在使用深度学习评估日志数据异常检测方法时,只有很少的数据集是常用的。表4概述了所审查的出版物中使用的所有数据集。从表中可以看出,绝大多数的评估只依赖于四个数据集(HDFS、BGL、Thunderbird和OpenStack)。下面,我们将简要介绍每个数据集。

    HDF 日志数据集来源于Hadoop Distributed File System(HDFS),HDFS运行在203个节点的高性能计算集群上,该集群计算了大量的标准MapReduce作业。两天内收集的日志超过2400万条。该数据集包括作为会话标志符的特定文件块的异构日志事件序列。一些事件序列对应于异常执行路径,这些异常执行路径主要与写入异常等性能问题相关,这些问题是手动标记的。图3中所示的示例日志是HDFS数据集日志的简化版本。

    BGL数据集包括400多万个日志事件,这些事件是从Lawrence Livermore National Labs运行的BlueGene/L (BGL) 超级计算机上收集的,历时200多天。日志事件是使用严重性字段生成的,该字段允许将它们分成不同的类别;但是,系统管理员还手动标记了日志。日志中出现的异常及对应于硬件问题,也对应于软件问题。Oliner等人也在研究中提供了来自同一系列的其他日志数据集,包括Thunderbird和Spirit。这些数据集包括系统日志(syslog),同样也包括与磁盘故障等系统问题的相关的警报。两个数据集中的事件都包括自动生成的警报标记,可以用作标签。HPC RAS数据集来自同一超级计算机的另一个日志数据集。可靠性、可用性和可服务性(RAS)日志通常用于了解系统故障的原因。但是,该日志数据及不包含异常标签。

    OpenStack数据集采集自OpenStack平台,自动脚本连续、随机地执行虚拟机处理相关任务,包括创建、暂停、删除等。除了上述数据集主要包含随机发生的故障之外,OpenStack数据集的作者有目的地在特定时间点注入异常,包括超时和错误。事件包括可用于标志会话额实例标识符。

    与HDFS数据类似,Hadoop数据集包含运行MapReduce任务WordCount和PageRank的计算集群的日志。在初始训练阶段之后,作者有目的地出发节点上的故障,特别是通过关闭机器、断开网络连接和填充一台服务器的硬盘。日志根据应用程序标识符被分成不同的文件,这些标识符的作用类似于会话标识符,也被作者用来为异常的程序执行分配标签。

    Loghub包含几个用于评估的数据集,包括来自高性能计算机系统的日志。Spark数据集包含运行在32台机器上的分布式数据处理引擎Apache Spark日志。日志包括正常和异常执行,但没有标签。ZooKeeper是Apache另一个用于分布式计算和配置管理的服务。Loghub还包含来自传统操作系统的日志。Windows日志数据集是通过监视CBS(基于组件的服务)在一台实验室Windows7机器上手机的,CBS在包和更新的级别上运行。同样,Android的数据集是在实验室环境下从手机上手机的。这两个数据集都没有标记,也不涉及任何故意注入的异常。数字语料库的磁盘映像中提供了来自Linux操作系统的日志,其中数据中出现了诸如无效身份验证之类的故障。

    当涉及到异常行为的检测时,上述所有数据集主要提供作为合法系统使用的一部分而生成的故障事件。但是,也有一些数据集涉及由恶意活动产生的事件,从而能够对基于异常的入侵检测系统进行评估。例如,DFRWS 2009数据集包含来自 Linux 设备的系统日志,设计数据泄露,未经授权的访问以及使用后门软件。Honeynet 2010和Honeynet 2011数据集包含来自被非法访问的受感染Linux计算机的常见日志文件。公共安全日志共享站点提供来自不同来源的Linux安全日志,这些日志受到不同的现实入侵(如暴力攻击)的影响。不幸的是,这些安全日志文件中没有一个带有恶意事件的标签,因此作者需要生成他们自己的基本事实来评估他们在这些数据集上的方法。

    在这里插入图片描述

  2. 评价指标:异常检测方法的定量评估(ER-2)通常围绕将正确检测到的异常样本计数为真阳性(TP),将错误检测到的非异常样本计数为假阳性(FP),将错误未检测到的异常样本计数为假阴性(FN),将正确未检测到的非异常样本计数为真阴性(TN)。在最基本的设置中,事件被单独标记,样本代表单个事件(例如,在BGL数据集中),使用二元分类评估检测到的事件相对简单。一些经过评论的论文还考虑了数据集的多分类问题,其中不同类型的故障通过计算所有类型的评估指标的平均值或绘制混淆矩阵来具有不同给的标签。

    鉴于日志事件在检测之前有时会使用不同的方法进行聚合,因此有不同的方法来确定样本是否异常,以及它是否算作正确的检测。例如,window中日志的聚合可能需要将检测到的事件计数为真阳性,只要它们与事件序列中的实际异常足够接近。由于大多数被审查的论文依赖于HDFS数据集,其中标签仅适用于整个时间绘画而不是单个事件,因此计算上述指标最常用方法依赖于 对/正确 识别 非/异常 会话的计数。

    无论正样本和负样本如何计数,几乎所有作者最终都会使用众所周知的指标 Precision,recall或真阳性率,假阳性率和F1-score。不太常见的评估指标时15篇出版物中使用的 precision-recall-curves 和 receiver operator characteristic (ROC) 曲线。其它更特定于深度学习应用的指标时模型参数的数量、以及训练模型或运行检测的时间(ER-3)。一些作者还评估了他们的方法的特征,这些特征超出了标准异常检测评估的范围,例如对多个数据集的组合进行训练是否可以提高分类的整体性能,或者他们的方法是否对日志模式随时间的变化具有鲁棒性。

  3. 基准方法:大多数出版物将上一节中所述的评估指标与基准方法进行比较,以显示它们相对于最先进技术(ER-4)的改进。图5显示了所审查出版物中最常用的基准。请注意,对于此可视化,我们只考虑了至少两个不同出版物中出现的方法。

    在这里插入图片描述

    如图所示,DeepLog是最常用的基准,在62篇经过审查的出版物中出现过38篇。DeepLog依靠LSTM RNN来预测序列中即将发生的日志事件,从而将观察到的事件披露为异常(如果预计这些事件发生的概率较低)。DeepLog之所以受欢迎,是因为DeepLog是第一个使用深度学习检测日志数据中的序列异常(参见第IV-A2节),并且可以在线获得开源重新实现。

    第二个最常用的基准利用主成分分析(PCA),依赖于事件计数而不是序列。特别是,Xu等人为事件类型标识符创建消息计数向量,并使用PCA将其转换为子空间,其中异常表现为与所有其他样本具有高距离的离群值。Lou等人也生成消息计数向量,但使用不变挖掘来发现表示执行工作流的日志事件之间的线性关系。违反先前确定的不变量的事件序列被声明为异常。

    LogCluster生成日志序列的向量,然后使用相似性度量对它们进行聚类。该方法主要用于日志过滤,但也可用于检测异常日志模式。支持向量机(SVM)是另一种依赖事件计数向量的方法。然而,除了PCA和不变挖掘之外,SVM通常以监督的方式运行。为了缓解这一问题并使其能够在半监督或无监督的情况下应用,作者因此求助于独类SVM或支持向量机数据描述(SVDD)。

    与DeepLog类似,与上述传统机器学习方法相反,LogAnomaly利用LSTM RNN来分析日志事件序列。为此,他们提出了所谓的template2Vec嵌入方法,从组成事件的token中提取语义向量,LogRobust也利用了语义向量,但是专门设计用于处理作为软件发展的一部分出现的未知日志事件。

    孤立森林是一种异常检测技术,其中分析的数据被递归分割,指导单个数据实例与所有其它点隔离;因此,异常点被识别,因为他们在被孤立之前需要更少的分割。逻辑回归是一种用于数字输入数据的分类器,在线性分类情况下效果最好。另一方面,决策树是一种监督分类方法,其中实例遍历二叉搜索树。因此,每个内部节点通过一个特定的谓词分割数据,树的每个叶子决定实例的类。

    另一个依赖深度学习的基准是CNN。特别是Lu等人的方法在语义上对事件标识符序列进行编码,并将它们嵌入到一个矩阵中进行卷积。最后,nLSAlog利用LSTM RNN,因此与DeepLog类似。在所有审查的出版物中,只有八份不涉及任何比较基准方法。

  4. 在现性:出于多种原因,科学出版物的作者应该追求其所呈现结果的再现性,包括其他人验证方法正确性的可能性、使用附加功能扩展算法、在其他数据集上进行自己的实验的可能性,并使用该方法作为新出版物的基准。当评估中使用的数据(ER-5)以及原始代码(ER-6)都是公开可用时,我们认为该方法是可重复的。

    正如第IV-E1节中所概述的那样。大多数审查过的出版物对公开提供的相同少数数据集进行了评估。一些作者还评估了他们在测试平台中综合生成的私人数据集的方法,这些数据集从学术机构收集,或从工业实际应用中获得。总体而言,在62份经过审查的出版物中,有55份涉及对表IV中至少一组公开数据的评估。

    虽然在公共数据集上评估方法相对常见,但不幸的是,只有少数作者与论文一起发布其方法的实现。在我们的审查过程中,我们只能从8种出版物中找到所提出方法的原始源代码。然而,我们也指出,Chen等人提供的Deep-loglizer工具箱中存在一些科学方法的重新实现。在表IV中,我们将原始作者实现的方法标记为(YES),将其他作者的重新实现标记为(RE),将所有其他方法标记为(NO)。我们鼓励作者发布他们的代码以提高结果的可重复性,并希望将来看到更多的开源实现。

V 讨论

前面的部分详细介绍了我们的调查结果。下面我们总结这些结果,讨论使用深度学习进行基于日志的异常检测研究领域中开放问题,并在回答第I节的研究问题的过程中提出了未来研究的思路。

RQ1:基于日志的深度学习异常检测的主要挑战是什么?在进行系统文献综述时,我们评估了当前最先进的技术是否以及在多大程度上解决了第II-B节中列举的研究挑战。事实证明,数据不稳定性,即以前未知事件的出现,是所审查的方法解决的主要问题之一。目前解决这一问题的关键思路是将日志表示为语义向量,通过测量其相似性,让然可以将新的或改变的事件与已知事件进行比较。有许多技术可以生成数字向量来表示日志事件(参见第IV-C4节),从而解决将非结构化和文本输入数据馈送到神经网络的问题。不平衡的数据集是一些方法专门解决的另一个挑战。特别是,作者建议使用采样技术以及上下文嵌入方法作为可能的解决方案。

一些方法是专门设计的,以便在需要高效和轻量级算法的场景中适用(例如,部署在边缘设备上)。这是通过利用低维向量表示以及比循环神经网络更有效的卷积神经网络来实现的。同样,一些方法支持日志流处理,并通过适用手动识别和标记的假阳性样本逐步重新训练模型来实现自适应学习(即动态改变异常检测基线)。必须注意的是,目前还没有解决方案如何在没有标签信息或人工干预的情况下自动确定是否需要重新训练。交错日志的挑战通常是通过直接利用解析的日志数据的会话标识符来解决的;然而,也有一些方法完全不需要哦序列,例如,依靠情感分析。

迁移学习提供了一种解决可用标记数据很少这一挑战的方法,其中模型在一个系统上进行训练并在另一个系统上进行测试。主要思想是神经网络学习的日志事件模式在不同领域是相似的,并且可以识别和分类已经看到的异常。Guo等人是唯一考虑联邦学习的作者,其中学习以分布式方式跨多个系统进行。Hashemi等人也进入了这个方向,因为他们结合了多个数据集来评估这是否会影响他们模型的性能。我们相信联邦学习可能是未来出版物的一个有趣主题,因为存在许多现实世界的场景,其中日志数据在分布式机器中监控,但部署的检测器的编排是集中进行的。

由于绝大多数方法关注的是日志序列和频率,但只有少数方法考虑事件参数或检测的间隔到达时间,因此只能部分地解决面对各种异常工件的挑战。我们还建议考虑处理在正常系统行为中出现的其他模式的技术,这些模式可能有助于检测特定的异常,例如参数值的相关性的变化、周期行为、统计分布等。此外,我们观察到所提出的深度学习模型的可解释性相对较低,即理解分类标准并不简单,因此模型偏差的检测以及误报和漏报的解释通常很困难。这阻碍了对检测到的异常进行根本原因分析,并给系统操作员带来了额外的开销。特别是在安全关键系统(例如,入侵检测)中了解已部署的异常检测器的功能及其限制是至关重要的。因此,我们建议将基于日志的异常检测的未来研究转向可解释的人工智能。

RQ2:通常应用哪些最先进的深度学习算法?我们的回顾表明,科学出版物中使用了多种类型的深度学习算法,并且将集中方法结合起来是很常见的。因此,RNN显然是应用最广泛的模型,因为它们是捕获日志数据中的顺序模式的自然选择。CNN被用作RNN的有效替代,因为他们也能够获取事件依赖关系。另一方面,自动编码器和Transformer由于支持无监督学习而经常被应用。虽然GAN、MLP和EGNN仅被少数几种方法使用,但他们具有有益的特性(参见第IV-B1节),使这些模型值得考虑。同样地,我们相信在文献综述中为探索的其他深度学习架构也可以产生有趣的见解,例如,深度信念网络或深度强化学习。

我们认为,特定技术的应用主要是由要分析的日志数据和要检测的异常所驱动。事实上,所常用的日志数据集都涉及表现为连续发生的事件的异常(参见第IV-E1节),从而解释了RNN的趋势。然而,由于异常也可能表现为点异常或上下文异常(参见第II-A3节),我们建议考虑具有不同类型异常的替代日志数据集,并为这些情况开发方法。例如,在我们早期的工作中,我们发布了日志数据集,其中异常除了影响日志事件的频率和序列之外,还影响事件参数的组合、组成和分布。

RQ3:如何预处理日志数据以供深度学习模型摄取?我们的调查表明,从原始日志数据中提取特征的主要有三种方法。首先,通过对日志消息进行标记,这是一种简单的方法,不需要任何解析器,但缺乏对标记的予以解释。第二,解析消息并从日志事件集合中提取信息,如序列、计数或统计信息。第三、通过从解析的日志事件中提取包括时间戳在内的参数。有许多方法可以将这些特征表示为深度学习模型所摄取的数值向量。

虽然SVM或PCA等传统机器学习方法最适合事件计数向量,但大多数方法利用深度学习神经网络使用语义向量来产生最佳结果。因此,组成日志消息的token被表示为数字向量,并在事件发生序列的上下文中进行考虑。大多数方法都采用这些顺序特征,而频率、独热编码数据和嵌入层则较少使用,或者仅作为贡献特征使用。

RQ4:检测到哪些类型的异常以及如何识别它们?几乎所有审查的方法都集中在顺序异常上,这些异常要么表现在事件序列中,要么表现在事件中的标记序列中,要么表现在两者的组合中。只有少数方法使用事件计数或检测单个日志行作为异常值,而不需要它们发生的上下文。检测技术一般由神经网络的输出驱动。虽然二元或多元分类直接用于报告异常,但所有数值输出(如异常分数或重建错误)都与预定义的阈值进行比较,并且使用日志事件的概率分布来检查实际事件是否在最佳候选范围内。通常根据经验对特定日志文件确定这些阈值。

RQ5:如何评估所提出的模型?我们对第IV-E1节中常用的日志数据集进行调查,发现只有四种数据集被大多数方法使用:HDFS、BGL、Thunderbird和OpenStack。所有这些数据集都是从涉及高性能计算和受随机故障影响的虚拟机的场景中收集的。很明显,异常标签的可用性使这些数据集对科学评估特别有吸引力。如前所述,我们认为更大和更多样化的输入数据集将有助于评估所提出的方法是否能够检测异常序列以外的异常工件。特别是,网络攻击的后果而不是故障可能导致适合检测的日志工件和适合异常检测的用例。

我们手动分析了HDFS数据集,因为它是最受欢迎的数据集,发现实现有竞争力的检测率远非难事。原因是许多异常事件序列很容易被识别,因为它们涉及的事件类型从未在训练数据中出现过,或者涉及的元素少于最短的正常序列。使用这两种启发式方法,我们可以在测试数据集上实现F1=90.41%,ACC=99.48%、P=98.37%、R=83.65%、FPR=0.04%。此外,当使用窗口大小为2时,将这些启发式方法与简单的Stide算法结合使用,该算法。。。

我们注意到的另一个问题是,评估通常是在异常序列的基础上进行的,即整个序列被认为是正常或异常的,而不是其元素。然而,长序列的部分实际上可能代表正常的系统行为,而只有少数元素应被视为异常。评估检测方法能否能够准确第查明序列的哪部分是异常的将是很有趣的,这对于系统操作员对报告的异常进行手动调查也很实用。显然,这要求数据集以单个事件的粒度而不是会话的粒度进行标记。

最后,我们注意到,几乎所有评估都依赖于F-score(参见第IV-E2节)等指标,当数据集高度不平衡时,这些指标无法准确描述分类或检测性能。为了避免对评估结果的误解,建议还计算对类别不平衡更稳健的指标,例如特异性或真阴性率。

RQ6:这些方法在多大程度上依赖标记数据并支持增量学习?基于日志的异常检测最常应用于旨在揭示意外系统行为(例如故障或网络攻击)的用例中。由于事先不知道这些工件,因此不可能存在标签,因此非监督或半监督方法通常更广泛地适用,因此更可取。由于包括RNN在内的大多数神经网络架构都可以实现半监督学习,但只有特定的深度学习模型支持完全无监督操作,因此我们在回顾的文献中发现了28种半监督方法,而62种方法只有8种是无监督的。我们没有想到会看到相对大量的26种监督方法至少需要部分标记的异常进行训练。此外,62种方法中的54种只支持离线训练。这包括大多数监督模型以及不打算随时间的推移动态自动更新训练模型的所有其他方法。审查的方法中只有8中能够通过重新训练或EGNN模型架构实现持续的模型调整。

RQ7:就按嗲吗和所有数据的可用性而言,所呈现的结果的可重复性如何?如地IV-E4节所指出的,大多数审查的方法利用公开可用的数据集来评估其方法,只有7份出版物依靠私人数据集。因此,假设读者愿意根据论文中的描述从头开始重新实现这些方法,所呈现结果的可重复性相对较高。我们只能找到9个由原作者发布的方法的公开源码以及4个重新实现,表明总体可重复性较低。我们鼓励作者将来发表可重复的实验,以便在调查中进行大规模定量比较。

**建议。**基于上述对我们研究问题的回答和发现的问题,我们提出以下研究议程:首先,需要足够和多样化的日志数据集,并具有最先进的基准,以确保深度学习在一般异常检测用例中的适用性,并证明其优于简单或传统的检测方法。其次,检测结果的第可解释性是贯穿整个研究领域的主要问题,需要适当解决。这两个问题的解决在很大程度上提高了所提出方法的可理解性和可靠性,并促进了新型深度学习检测算法的发展。考虑到这一研究议程,我们总结了对未来研究的建议如下:

  • 创建或识别新的日志数据集,这些数据集专门涉及顺序异常,并且在评估将日志数据作为序列摄取的方法时,受其他类型异常的影响较小。
  • 研究使用深度学习提高所提出的异常检测方法的可解释性的方法,例如,通过从模型中提取特定的检测规则或确定负责特定实例检测的主要特征并使用该信息增强检测结果。
  • 考虑事件序列意外的日志工件进行异常检测,或将它们用作深度学习模型的附加输入。
  • 提出新颖的异常检测方法或深度学习框架,已解决实际应用中的常见挑战,特别是关于增量和流处理或日志数据、自适应学习以及高效和低资源训练。
  • 考虑在序列内精确定位异常,而不是将整个序列检测为异常。
  • 允许研究人员通过将开发的代码作为开源发布和在数据共享存储库上使用日志数据集来重现和扩展呈现的结果。

VI 结论

本文介绍了62种科学方法的调查,这些方法使用深度学习技术来检测系统日志数据中的异常事件或过程。调查显示,不同的模型架构适合于这一目的,包括序列输入数据的模型(如循环或卷积神经网络),基于语言的模型(如Transformer)以及无监督模型(例如自动编码器或生成对抗网络)。类似地,有不同的特征用于训练和随后的检测,例如事件或标记的序列和计数,以及从事件派生的参数值或统计信息。为了将这些特征作为神经网络的输入进行处理,有必要将它们编码为数字向量,例如,通过语义矢量化或独热编码。然后通过分类直接检测异常,或者通过从网络中获得某种异常评分来区分正常和异常的系统行为。调查显示,现有方法尚未充分解决一些开放性挑战,包括超越顺序异常的检测技术、训练模型和分类结果的可解释性低、缺乏包含不同共计工件的代表性评估数据集以及再现性低。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/174409.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode算法之分治-归并

目录 1.排序数组2.数组中的逆序对3.计算右侧小于当前元素的个数4.翻转对 1.排序数组 排序数组 //分治-归并 class Solution {int tmp[50010]; public:vector<int> sortArray(vector<int>& nums) {mergeSort(nums,0,nums.size()-1);return nums;}void mergeS…

线程池简介及其简单实现

如果需要频繁的创建销毁线程, 就需要想办法降低创建和销毁的开销, 而线程池就是一个很好的选择: 提前创建好一些线程, 等到需要使用线程的时候, 直接从池子里拿一个就好了, 当不再使用该线程时, 就放回到池子里. 那么此时就从 创建/销毁线程 -> 池子里取线程/将线程还到池子…

找不到vcruntime140_1.dll,无法继续执行代码怎么办?5个可以解决的方案分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“VCRuntime140_1.dll缺失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;我们需要进行修复操作。本文将介绍5个修复VCRuntime140_1.dll缺失的方法&#xff…

解锁电力安全密码:迅软DSE助您保护机密无忧

电力行业信息化水平不断提高&#xff0c;明显提升了电力企业的生产运营能力&#xff0c;然而随着越来越多重要信息存储在终端计算机中&#xff0c;电力面临的信息安全挑战也越来越多。 作为关键基础设施的基础&#xff0c;电力企业各部门产生的资料文档涵盖着大量机密信息&…

微信小程序 prettier 格式化

一、安装prettier插件 二、打开设置 然后再打开setting.json 新增代码 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml", "**/*.wx…

基于AVR单片机的移动目标视觉追踪系统设计与实现

基于AVR单片机的移动目标视觉追踪系统是一种常见的应用领域&#xff0c;旨在通过摄像头采集图像数据并使用图像处理和追踪算法实现对移动目标的实时追踪。本文将介绍基于AVR单片机的移动目标视觉追踪系统的设计原理和实现步骤&#xff0c;并提供相应的代码示例。 1. 设计概述 …

革新突破!智能指标平台引领时代,国产大模型与企业级部署的完美结合

11月21日&#xff0c;跬智信息&#xff08;Kyligence&#xff09;圆满召开了线上数智论坛暨产品发布会&#xff0c;升级智能一站式指标平台 Kyligence Zen 及 AI 数智助理 Kyligence Copilot 的一系列企业级能力&#xff0c;包括正式支持智谱 AI、百川智能等在内的多款国产大模…

SVN创建分支

一 从本地创建方式可指定版本号进行分支创建。 1、在本地目录右击 -----> 点击branch/tag(分支/标签) From: 源&#xff0c;可指定具体的版本号&#xff0c; To path: 可通过"..."选择分支路径 最后点击确定&#xff0c;交由服务器执行创建。 二 通过SVN客…

List操作的一些常见问题

文章目录 阿里巴巴开发手册强制规约&#xff1a;1. Arrays.asList转换基本类型数组2. Arrays.asList返回的List不支持增删操作3. 对原始数组的修改会影响到我们获得的那个List4. ArrayList.subList强转ArrayList导致异常5. ArrayList中的subList切片造成OOM6.Copy-On-Write 是什…

上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹&#xff0c;黄白二线有所分化&#xff0c;题材热点轮动表现。北证50指数大涨超3%&#…

「MACOS限定」 如何将文件上传到GitHub仓库

介绍 本期讲解&#xff1a;如何在苹果电脑上上传文件到github远程仓库 注&#xff1a;写的很详细 方便我的朋友可以看懂操作步骤 第一步 在电脑上创建一个新目录&#xff08;文件夹&#xff09; 注&#xff1a;创建GitHub账号、新建github仓库、git下载的步骤这里就不过多赘…

股票统计信息(七)

7-统计信息 文章目录 7-统计信息一. 股票周级别统计信息二. 查询可支持的所有的股票资金类型三. 股票图形统计信息四. 查询当前用户自选表里面最近十天的交易信息五. 查看天/星期范围统计的历史记录六. 查看最近多少天某个属性的涨跌幅度值 一. 股票周级别统计信息 接口描述: …

使用Python处理ADC激光测距数据并绘制为图片(二)

使用Python处理ADC激光测距数据并绘制为图片 说明一、定义全局变量变二、保存和清空原始数据三、拆分原始数据为键值对四、获取标题、FigText、更新统计信息文件五、生成图片六、处理原始数据文件七、主函数入口八、测试结果 说明 1. 主要是将ADC激光测距叠加后的1024Byte数据绘…

【码神之路】【Golang】博客网站的搭建【学习笔记整理 持续更新...】

介绍 一个用原生GO开发的博客网站&#xff0c;涉及Golang Web开发、Web服务器搭建和HTTP请求处理、模板与静态资源处理等 技术栈 后端&#xff1a;Go、Go并发机制前端&#xff1a;HTML模版链接直达 Golang搭建博客网站的学习视频 注&#xff1a;这里我只记录我实质✅学习到…

PyCharm玩转ESP32

想必玩ESP32的童鞋都知道Thonny&#xff0c;当然学Python的童鞋用的更多的可能是PyCharm和VsCode Thonny和PyCharm的对比 对于PyCharm和VsCode今天不做比较&#xff0c;今天重点说一下用PyCharm玩转ESP32&#xff0c;在这之前我们先对比下Thonny和PyCharm的优缺点 1、使用Tho…

引迈-JNPF低代码项目技术栈介绍

从 2014 开始研发低代码前端渲染&#xff0c;到 2018 年开始研发后端低代码数据模型&#xff0c;发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示&#xff1a; 1. 项目前后端分离 前端采用Vue.js&#xff0c;这是一种流行的前端JavaScript框架&a…

webpack 配置

1、基础配置 // node js核心模塊 const path require(path) // 插件是需要引入使用的 const ESLintPlugin require(eslint-webpack-plugin) // 自动生成index.html const HtmlWebpackPlugin require(html-webpack-plugin); // 将css文件单独打包&#xff0c;在index.html中…

【开源】基于Vue.js的教学过程管理系统

项目编号&#xff1a; S 054 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S054&#xff0c;文末获取源码。} 项目编号&#xff1a;S054&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

iOS越狱检测总结

文章目录 前言检测越狱文件私有目录检测检测越狱软件检测系统目录是否变为链接动态库检测环境变量检测系统调用检测指令集调用检测其他方式检测 前言 在之前的文章中&#xff0c;已经带大家一起制作了一个屏蔽越狱检测的Tweak。本文就和大家一起学习整理一下iOS系统中有哪些越…

scala的schema函数(算子)

在翻阅一些代码的时候&#xff0c;schema算子好像没碰到过&#xff0c;比较好奇structField这个类型&#xff0c;为什么可以直接用name参数&#xff0c;就翻阅了下资料&#xff1a; 在 Apache Spark 中&#xff0c;DataFrame 是一种分布式的数据集&#xff0c;它是以类似于关系…