论文阅读-Experience Report: System Log Analysis for Anomaly Detection

原文链接:Experience Report: System Log Analysis for Anomaly Detection | IEEE Conference Publication | IEEE Xplore

Experience Report: System Log Analysis for Anomaly Detection

经验报告:基于系统日志的异常检测分析

摘要

在现代大规模的分布式系统中,异常检测的管理中起着重要作用。用于记录系统运行时信息的日志,被广泛地用于异常检测。开发人员(或运维人员)通常通过关键词搜索和规则匹配手动检查日志。然而,现代系统的规模和复杂性日益增加,导致日志量急剧增长,这使得手动检查变得不可行。为了减少人工的工作量,许多基于自动化日志分析的异常检测方法应运而生。然而,由于缺乏对这些方法的评审和比较,开发人员可能仍然不知道应该采用哪些异常检测方法。此外,即使开发人员决定采用某种异常检测方法,重新实现这些方法也需要付出相当大的努力。为了解决这些问题,我们提供了六种最先进的,基于日志的异常检测方法的详细评审和评估,包括三种监督方法和三种无监督方法,并发布了一个开源工具包,便于复用。我们在两个公开的生产日志数据集上对这些方法进行了评估,数据集总共有15,923,592条日志信息和365,298个异常实例。基于评估结果和相关发现,我们相信我们的工作能够为使用这些方法提供指南,并为其未来的发展提供参考。

1引言

现代系统正在向大规模演进,无论是扩展到由数千台商用机器构建的分布式系统(例如 Hadoop [1]、Spark [2]),还是扩展到具有数千个处理器的超级计算机的高性能计算(例如 Blue Gene/L [36])。这些系统正逐渐成为IT行业的核心部分,支撑着各种各样的在线服务(如搜索引擎、社交网络和电子商务)以及智能应用(如天气预报、商业智能和生物医学工程)。由于大多数此类系统被设计为7×24小时不间断运行,以服务于全球数百万的在线用户,所以高可用性和可靠性变得至关重要。任何系统故障,包括服务中断和服务质量下降,都将导致应用程序瘫痪,并造成巨大的经济损失。

旨在及时发现系统异常行为的异常检测,在大规模系统的事件管理中发挥着重要作用。及时的异常检测使得系统开发人员(或运维人员)能够迅速定位问题并立即解决,从而减少系统的停机时间。系统通常会生成记录了系统运行期间的详细信息的日志。这些普遍存在的日志被用作系统异常检测的主要数据源。基于日志的异常检测(例如,[27],[38],[47])已成为学术界和工业界都十分关注的可实际应用的研究课题。对于传统的单机系统,为了检测异常,开发人员通常基于他们的领域知识手动检查系统日志或编写规则,并辅以关键词搜索(如“fail”或“exception”)或正则表达式匹配。然而,这种高度依赖手动日志检查的异常检测方法,已无法适合用于大规模系统,原因如下:

1)现代系统的规模庞大且具有并行性,这使得系统行为变得极其复杂,使得通常只负责特定子组件的单个开发人员,难以全面理解。例如,许多开源系统(如 Hadoop、Spark)是由数百名开发人员共同实现的。单个开发人员对整个系统行为的理解往往是不完整的,因此要从海量日志中识别出问题变得极具挑战。

2)现代系统正在生成大量日志,例如,每小时生成的日志数据量大约为50 GB(约1.2亿到2亿行)[32]。即使使用search和grep等工具,数量如此庞大的日志,使得从噪声数据中手动地辨别出关键信息以检测异常变得极其困难,甚至几乎不可行。

3)大型系统通常基于各种容错机制构建。系统有时会冗余地执行相同的任务,甚至主动终止推测性任务以提高性能。在这种环境下,传统的关键词搜索方法难以有效地从这些系统中提取可疑的日志信息,这可能会导致大量误报,实际上这些日志消息与真正的故障无关 [27]。这将大大增加人工检查的工作量。

因此,对基于自动化日志分析的异常检测方法的需求日益增加。基于日志的异常检测在过去几十年里得到了广泛研究。然而,我们发现,学术界的研究与工业界的实际应用之间仍存在差距。一方面,由于目前缺乏对这一主题的全面综述,开发人员在很多情况下并不了解最先进的异常检测方法。他们必须翻阅大量的文献,才能对当前的异常检测方法有全面的了解。然而,这不仅是一项繁琐的任务,而且并不能保证可以找到最合适的方法,因为每篇研究通常只详细发表了针对特定系统的检测方法。如果开发人员缺乏,理解这些方法所需的机器学习的先验背景知识,这一难度将会进一步加大。另一方面,据我们所知,目前尚无可用于异常检测的基于日志的开源工具。同时,也缺乏对于现有异常检测方法的对比。开发人员难以判断哪种方法最适合解决手头的实际问题。为了对所有候选方法进行比较,他们需要自行实现每种方法。由于缺乏测试基准(参考数据集、真实标签)来确保底层机器学习算法的正确实现,因此往往需要投入大量的精力来复现这些方法。

为了弥合这一差距,本文对基于日志的异常检测方法进行了详细的综述和评估,并发布了一个用于异常检测的开源工具包。我们的目标不是改进某一特定方法,而是呈现当前日志分析在异常检测领域的整体研究现状。我们相信,我们的工作可以在两个方面为研究人员和实际应用人员带来益处:综述可以帮助他们快速了解现有的异常检测方法;而开源工具包则使他们能够轻松复用现有方法,并进行进一步的定制或改进。这有助于避免耗时且重复的复现工作。

基于日志分析的异常检测过程涉及四个主要步骤:日志收集、日志解析、特征提取和异常检测。在我们之前的工作中[24],我们对自动化日志解析方法进行了综述和评估,并公开发布了四个开源日志解析器。在本次工作中,我们的研究将主要集中在用于异常检测的特征提取和机器学习模型。根据使用的数据类型和采用的机器学习技术,异常检测方法可以大致分为两类:监督学习方法和无监督学习方法。监督学习方法需要标记的训练数据,其中包含明确标注的正常实例和异常实例。然后,使用分类技术来学习一个模型,以最大化正常实例与异常实例之间的区分度。而无监督学习方法则不需要任何标签。无监督方法基于这样一个观察结果:异常实例通常表现为远离其他实例的异常点(离群点)。如果存在这种现象就可以应用无监督学习技术,如聚类方法。

具体来说,我们评估并实现了近期文献中报道的六种具有代表性的异常检测方法,包括三种监督学习方法(即逻辑回归[12]、决策树[15]和支持向量机[26])和三种无监督学习方法(即日志聚类[27]、主成分分析[47]和不变性挖掘[28])。我们进一步在两个公开可用的日志数据集上对这些方法进行了系统评估,数据集中共包含15,923,592条日志消息和365,298个异常实例。评估结果主要体现在精确度(即报告的异常中有多少是正确的)、召回率(即实际异常中有多少被检测到)和效率(即在不同日志大小下的运行时间)。尽管数据量有限,但我们相信,这些结果及其相关的发现能够为使用这些方法提供指导,并为未来的研究发展提供基准。

总结来说,本文做出了以下贡献:

  • 对基于自动化日志分析的常用异常检测方法进行了详细的综述;
  • 发布了一个包含六种代表性异常检测方法的开源工具包;
  • 进行了系统的评估,为当前异常检测方法的有效性和效率提供了基准。

本论文的其余部分组织如下。第2节介绍了基于日志的异常检测的整体框架。第3节评估了6种代表性的异常检测方法。我们在第4节中汇报了评估结果,并在第5节中进行了一些讨论。第6节介绍了相关工作,最后第7节总结了论文。

2框架概述

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

图1:异常检测框架

日志收集:大型系统通常会生成日志来记录系统状态和运行时信息,每条日志会包含一个时间戳和一条描述事件的日志消息。这些宝贵的信息可用于多种用途(例如,异常检测),因此首先需要收集日志以便进一步使用。例如,图1展示了从 Amazon EC2 平台上的 HDFS 日志中提取的8行日志记录,为了便于展示,这里省略了一些字段 [47]。

日志解析:日志是非结构化的,通常包含自由格式的文本。日志解析的目的是提取一组事件模板,从而将原始日志结构化。更具体地说,每条日志消息可以被解析到一个具有若干特定参数(可变部分)的事件模板(固定部分)。如图1所示,第4条日志消息(Log 4)被解析为“事件2”,其事件模板为“Received block * of size * from

特征提取:在将日志解析为独立事件后,我们需要进一步将其编码为数值特征向量,以便应用机器学习模型。为此,我们首先通过不同的分组技术(包括固定窗口、滑动窗口和会话窗口)将原始日志切分为一组日志序列。接着,对于每个日志序列,我们生成一个用以表示各个事件的出现次数的特征向量(事件计数向量)。所有特征向量汇集在一起可形成一个特征矩阵,即事件计数矩阵。

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值