问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

系统日志异常检测方法综述与评估

创作时间:
作者:
@小白创作中心

系统日志异常检测方法综述与评估

引用
CSDN
1.
https://blog.csdn.net/Arwen_emm/article/details/143778697

在现代大规模分布式系统中,异常检测对于确保系统的高可用性和可靠性至关重要。本文详细介绍了基于系统日志的异常检测方法,包括日志收集、解析、特征提取和异常检测等关键步骤。通过对比分析六种代表性异常检测方法(三种监督学习方法和三种无监督学习方法),本文为开发人员提供了全面的参考指南,并发布了一个开源工具包以促进方法的复用和进一步研究。

摘要

在现代大规模分布式系统中,异常检测在系统管理中发挥着重要作用。系统日志作为记录系统运行时信息的主要手段,被广泛应用于异常检测。然而,随着系统规模和复杂性的增加,传统的手动检查方法已难以应对海量日志数据。因此,自动化日志分析的异常检测方法应运而生。本文对六种最先进的基于日志的异常检测方法进行了详细评审和评估,包括三种监督方法和三种无监督方法,并发布了一个开源工具包以促进方法的复用。评估基于两个公开的生产日志数据集,包含15,923,592条日志信息和365,298个异常实例。研究结果为使用这些方法提供了指南,并为未来的研究发展提供了参考。

1. 引言

现代系统正在向大规模演进,无论是分布式系统还是高性能计算系统,都已成为IT行业的核心部分。这些系统支撑着各种在线服务和智能应用,因此高可用性和可靠性变得至关重要。异常检测在大规模系统的事件管理中发挥着重要作用,及时的异常检测可以减少系统的停机时间。然而,传统的手动日志检查方法已无法满足大规模系统的需求,主要面临以下挑战:

  1. 现代系统的规模庞大且具有并行性,单个开发人员难以全面理解系统行为。
  2. 现代系统生成大量日志数据,手动检查变得极其困难。
  3. 大型系统基于各种容错机制构建,传统的关键词搜索方法难以有效提取可疑日志信息。

因此,对基于自动化日志分析的异常检测方法的需求日益增加。然而,学术界的研究与工业界的实际应用之间仍存在差距。一方面,缺乏对这一主题的全面综述,开发人员难以了解最先进的异常检测方法;另一方面,缺乏可用于异常检测的基于日志的开源工具,开发人员难以判断哪种方法最适合解决实际问题。

为了弥合这一差距,本文对基于日志的异常检测方法进行了详细的综述和评估,并发布了一个用于异常检测的开源工具包。研究主要集中在用于异常检测的特征提取和机器学习模型。具体来说,评估并实现了六种代表性异常检测方法,并在两个公开可用的日志数据集上进行了系统评估。评估结果主要体现在精确度、召回率和效率等方面。

2. 框架概述

基于日志的异常检测的整体框架主要包括四个步骤:日志收集、日志解析、特征提取和异常检测。如图1所示:


图1:异常检测框架

  • 日志收集:大型系统会生成大量日志,每条日志包含时间戳和描述事件的日志消息。例如,图1展示了从Amazon EC2平台上的HDFS日志中提取的8行日志记录。

  • 日志解析:日志是非结构化的,通常包含自由格式的文本。日志解析的目的是提取一组事件模板,将原始日志结构化。例如,第4条日志消息(Log 4)被解析为“事件2”,其事件模板为“Received block * of size * from”。

  • 特征提取:将解析后的日志事件编码为数值特征向量。通过不同的分组技术(如固定窗口、滑动窗口和会话窗口)将原始日志切分为一组日志序列,然后生成表示各个事件出现次数的特征向量。

  • 异常检测:将特征向量输入机器学习模型进行训练,生成用于异常检测的模型。通过该模型可以判断新的日志序列是否为异常。

3. 方法论

A. 日志解析

日志是由常量部分和变量部分组成的纯文本。日志解析的目的是将常量部分与变量部分分离,并形成标准化的日志事件。日志解析方法主要有两种类型:基于聚类的方法和基于启发式的方法。我们在之前的工作中实现并比较了四个日志解析器,并发布了一个开源日志解析工具包。

B. 特征提取

特征提取的主要目的是从日志事件中提取有价值的特征,以便输入到异常检测模型中。特征提取的输入是日志解析步骤中生成的日志事件,输出是事件计数矩阵。为了提取特征,我们使用窗口化方法将日志数据集划分为有限的块。具体来说:

  • 固定窗口:每个固定窗口都有特定的时间跨度或持续长度,例如一小时或一天。

  • 滑动窗口:包含窗口大小和步长,例如按小时划分的窗口每五分钟滑动一次。

  • 会话窗口:基于标识符而非时间戳来划分,例如HDFS日志中的block_id。

在利用窗口技术构建日志序列后,将生成一个事件计数矩阵X。在每个日志序列中,我们统计各个日志事件的出现次数,以形成事件计数向量。最终,构建了大量的事件计数向量,从而形成事件计数矩阵X。

C. 有监督的异常检测

监督学习被定义为一种从带标签的训练数据中推导模型的机器学习任务。我们介绍了三种具有代表性的监督方法:逻辑回归、决策树和支持向量机(SVM)。

  1. 逻辑回归:通过逻辑函数计算实例属于正常或异常状态的概率p。当p≥0.5时,将实例标记为异常。

  2. 决策树:通过自顶向下的方式构建树形结构图,根据属性的信息增益选择当前“最佳”属性。例如,图2中的根节点显示数据集中共有20个实例。


图2:决策树的一个实例

  1. 支持向量机(SVM):构建一个超平面来在高维空间中将不同类别的实例分开。寻找这个超平面是一个优化问题,其目标是最大化超平面与不同类别中最近的数据点之间的距离。

D. 无监督异常检测

无监督学习是另一种常见的机器学习任务,其训练数据没有标签。常见的无监督方法包括聚类方法、主成分分析(PCA)等。

  1. 日志聚类:需要两个训练阶段,即知识库初始化阶段和在线学习阶段。在在线学习阶段,事件计数向量会一个接一个地被添加到知识库中。如果最小距离小于某个阈值,该事件计数向量将被添加到最近的簇中。

  2. 主成分分析(PCA):通过寻找能够捕获高维数据中最大差异的组件(即轴)来计算k个主成分。使用PCA生成两个子空间,分别是正常空间Sn和异常空间Sa。

  3. 不变量挖掘:程序不变量是指在系统运行过程中始终成立的线性关系。不变量挖掘旨在寻找不变量(即线性关系),包含三个步骤:估计不变量空间、寻找不变量、验证不变量。

E. 方法比较

  • 监督学习方法需要标签,决策树相比另外两种方法更具可解释性。逻辑回归无法解决线性不可分的问题,而SVM通过使用核函数可以解决这个问题。

  • 无监督方法由于不需要标签,因此更具实际意义。日志聚类采用了在线学习的思想,适用于处理大规模的日志数据。不变量挖掘不仅能够高精度地检测异常,还能为每个检测到的异常提供有意义且直观的解释。然而,不变量挖掘过程比较耗时。主成分分析(PCA)则不容易理解,并且对数据非常敏感。

F. 工具实现

我们用Python实现了六种异常检测方法,并将其打包成一个工具包。对于监督学习方法,我们使用了广泛应用的机器学习库scikit-learn来实现逻辑回归、决策树和支持向量机(SVM)的学习模型。对于无监督方法,我们分别实现了日志聚类、PCA和不变量挖掘方法。

4. 评估研究

A. 实验设计

  • 日志数据集:我们获得了两个适合评估现有异常检测方法的日志数据集,分别是HDFS数据集和BGL数据集。这两个数据集均收集于生产系统,共包含15,923,592条日志消息和365,298个由原始领域专家人工标注的异常样本。

  • 实验设置:我们在一台配备Intel Xeon E5-2670v2处理器和128GB DDR3 1600内存的Linux服务器上运行了所有实验。使用精确度、召回率和F值来评估异常检测方法的准确性。

B. 监督方法的准确率

  • 所有监督方法在训练数据上都能获得较高的准确度(超过0.95)。

  • 在HDFS数据上的总体准确度高于在BGL数据上的准确度,这主要是因为HDFS系统记录的操作相对简单,只有29种事件类型,远少于BGL数据中的385种事件类型。

  • 使用滑动窗口的异常检测比固定窗口能达到更高的准确度。在所有监督方法中,SVM的整体准确度最佳,F值达到了0.85。

C. 无监督方法的准确性

  • 所有无监督方法在HDFS数据上表现出较好的准确性,但在BGL数据上的准确性相对较低。

  • 在三种方法中,不变量挖掘在两种数据集上的表现(F值为0.91)都优于其他无监督异常检测方法。

  • PCA在BGL数据上未能取得较高准确性,因为正常类和异常类无法通过任何单一的阈值自然分开。

  • 窗口大小和步长的设置对监督学习方法和无监督学习方法的影响不同。无监督方法能够发现更准确的模式来进行异常检测。

D. 异常检测方法的效率

  • 监督学习方法能够在短时间内(不到一分钟)检测出异常,而无监督学习方法则更加耗时(PCA除外)。

  • 所有异常检测方法在日志大小增加时呈线性增长,除了日志聚类方法,其时间复杂度为O(n²)。

  • 日志聚类方法无法在可接受的时间内处理大规模数据集,因此日志聚类的运行时间结果没有完全展示。

5. 讨论

  • 数据集的多样性:生产系统记录的日志对于评估异常检测方法至关重要。然而,公开可用的日志数据集非常稀缺,因为公司通常由于保密问题不愿开放其日志数据。

  • 特征表示:为了使异常检测方法具有广泛的适用性,我们主要集中在事件计数矩阵这一特征空间上,这也是大多数现有工作所采用的方法。

  • 其他可用的方法:目前,缺乏可以直接用于异常检测的公开可用的日志分析工具。我们希望我们的工作能迈出公开源代码第一步,并倡导在这一方向上做出更多努力。

  • 潜在研究方向

  • 方法的可解释性

  • 实时日志分析

  • 开源日志分析工具

6. 相关工作

  • 日志分析:日志分析已经在许多方面被广泛应用于提高软件系统的可靠性,例如异常检测、故障诊断、程序验证和性能预测等。

  • 异常检测:异常检测旨在发现异常行为,并将其报告给开发人员以供人工检查和调试。与这些专注于检测特定异常类型的方法不同,本文评估了在大规模系统中检测一般性异常的方法的有效性。

  • 实证研究:近年来,许多关于软件可靠性的实证研究调查相继出现,因为实证研究通常能为研究人员和开发人员提供宝贵且实际的见解。

7. 结论

本文通过提供六种最先进的异常检测方法的综述和评估,填补了这一空白。我们还比较了这些方法在两个具有代表性的生产日志数据集上的准确性和效率。此外,我们发布了这些异常检测方法的开源工具包,以便于复用和进一步研究。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号