Press "Enter" to skip to content

基于深度学习的日志异常检测

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

云智慧 AIOps 社区是由云智慧发起,针对运维业务场景,提供算法、算力、数据集整体的服务体系及智能运维业务场景的解决方案交流社区。该社区致力于传播 AIOps 技术,旨在与各行业客户、用户、研究者和开发者们共同解决智能运维行业技术难题,推动 AIOps 技术在企业中落地,建设健康共赢的AIOps 开发者生态。

 

前言

 

学术论坛第一期,我们便有幸邀请到了 北大在读博士生, 云智慧智能研究院 算法研究实习生黄同学作为主讲人,为我们带来其对深度学习在日志异常检测领域应用的理解,并分享了最新发表的论文, 下面让我们一起来围观吧~

 

异常检测

 

异常检测分很多方向,包括视频异常检测、医疗异常检测等。异常检测在众多领域都得到了的广泛应用。比如基于CV的异常检测,可以检测是否是恶性肿瘤。云智慧智能研究院主要在时间序列异常检测、调用链异常检测与日志异常检测三个方向进行研究。

 

指标的异常检测

 

指标的异常检测分为业务指标异常检测与技术指标异常检测。任务指标就是与业务相关的指标,比如网站的浏览量,访问量,商品的购买量等都属于业务指标。技术指标主要包括电脑、服务器等设备的CPU使用率,内存的使用情况等。指标异常就是指业务指标或技术指标在短时间内发生突增的现象,比如一个网站的浏览量从每天大概500次访客,突增为10000次;物理内存发生突增等。而对指标异常的检测的主要就是对异常指标的检测。

 

调用链异常检测

 

通俗来说当登录QQ时,点击登陆按钮以后,系统就会去前端调用服务器,服务器又会去调用数据库,然后数据库收到调用指令后会对密码进行一个检查。所以整个登陆流程就是一个采用request的一个调用关系,也就是调用链。而调用链的异常,可以分为两类,一类是结构异常,一类是内容异常。当在调用过程中,如果通常情况下是A调用C,C调用D的调用关系,但是突然有一天A不去调用C而是直接调用了D,那就可能是C这个服务器发生了异常导致A没法调用,只能直接调用D。这种情况下我们认为是调用链的调用结构发生异常。

 

内容异常就是通常情况下A调用C的响应时间是5秒,比如有一天我们发现A调用C的响应时间花费了1min,那可能就是C的调用内容与往常不一样也就是发生了调用内容上的异常。

 

日志异常检测

 

日志数据,属于 半结构化的数据 。由于日志数据的数据量非常巨大,因此一旦发生日志异常,运维人员在大量的日志数据中查找异常就是一个工作量非常巨大并且消耗成本的工作,因此将人工智能引入到日志异常检测中来减少运维人员的工作量。

 

 

日志异常检测的特点

日志异常检测首要的一个特点就是 异常。 异常一定相对于正常来说,因此相对于正常的样本数量而言,异常的数据样本是非常少的。那幺在进行异常检测的过程中,如何对这些数据进行处理就是面临的一个比较大的挑战。
第二个特点就是对于日志而言,不同的系统产生的 日志格式不同 。比如下图中HDFS的日志数据的第一项不是日期,但是Hadoop的第一项就是日期。因日志数据格式不同,在我们想用一套比较好的算法,统一地去解决一系列的问题时,就会面临一定的挑战。
第三个特点就是日志其实是一个 半结构化的数据,同时还包含一些参数 。如下图Apache日志样例数据的第三排和第四排,其实这两条日志数据是想表达同样的内容,只是参数数据不一样。虽然我们读起来很容易,但是对于人工智能来说,电脑没有办法那幺聪明地去识别,它非常可能会把这两条日志认为是完全不一样的两个日志。所以如何处理这样的具有半结构化特征且参数不一样的数据,就成了日志异常检测所面临的一大问题。

 

日志解析

 

由于日志异常检测具有上述特点,所以在日志异常检测之前我们会有一个环节叫做日志解析。日志解析的目的就是把半结构化的数据处理为成结构化的,同时将参数提取出来。这时即使两条日志的参数不同,但是当把它都用星号来代替的时候他们就是一样的。我们把这种“event template”称之为日志模板,最终人工智能就是对这个日志模板进行处理,电脑或者算法就可以识别出哪些数据是同一类的。几十万条日志数据在通过日志解析后,就被统一成了几十条或者是几百条的日志模板,再通过识别最终的日志模板的一个语义信息就可以明白日志的内容。

 

日志异常检测的方法

 

 

    1. 传统方法:

 

 

传统的日志异常检测主要有基于统计特征、基于关键词、基于聚类的方法。

基于统计特征的方法:当进行日志异常检测时,我们可以采用统计窗口日志数量的方法进行异常检测。比如可以将时间窗口设定为10s,我们如何判断在10s有没有发生异常呢?正常的情况下,假设我们每10秒钟产生的日志的数量都是五条六条的数据量。但是突然有一个10s,产生了十五条的日志。那就跟之前的那个日志数量相比,就是一个突增的异常现象,这时可以理解为异常导致日志系统不断的提示报错。这种异常就是一种简单的基于统计特征的异常检测方法。

<!—->

基于关键词的异常检测:日志数据本身包含相关的语义信息,例如”error”和”failure”。当日志中出现了这种关键词,我们就把这种词汇提取出来,这样就可以捕捉日志异常的一些信息。

<!—->

基于聚类的异常检测:日志数据的日志信息都有一定的特征,将一些相似的特征聚集在一起,然后分为几个类。比如说50万条日志信息,根据它特征的相似度,把它分成四个类:A类、B类、C类与D类。当出现一条新的日志数据,我发现它不属于ABCD四类中的任一类。此时就认为这条日志数据为异常数据。

 

    1. 深度学习方法:

 

 

目前基于深度学习进行日志异常检测,从研究方向上主要是有三种:基于监督学习、基于半监督学习与基于无监督学习的日志异常检测。当然在深度学习中还有强化学习,但是在日志异常检测领域,强化学习的应用还没有得到一个广泛的认可。

 

人工智能的应用面非常广泛。深度学习只是人工智能包含的机器学习分支下的一个小分支。除此之外人工智能还包含很多别的分支,例如规划安排,应用案例如滴滴打车,基于乘客和众多司机当前的位置,给乘客匹配哪辆车是最好的?其实人工智能在1950年左右就已经开始被研究了,但是那个时候的人工智能还尚未被市场认可,相关研究者普遍都找不到合适工作。随着我们的计算资源和互联网数据呈几何式的增长,机器学习与深度学习迎来了它的春天。近些年来深度学习深入到我们生活中的方方面面,深度学习应用的研究也是越来越火。

 

 

 

深度学习主要是包含三类:监督学习、半监督学习和非监督学习。其中最简单的是监督学习。

监督学习。对于每一个”log sequence”而言会有很多日志message。为了得到一个”log sequence”,通常会有很多种方法,其中一种就是按照时间窗口划分来得到”log sequence”,比如10s一个间隔就是把10s间隔内产生的所有日志都归于一个”log sequence”。监督学习通俗点来说训练模型就像在做已有标准答案的试卷,日志数据可以比做训练时的题目,标签就是它的参考答案。我们将通过做完题目以后不断跟标准答案进行比对,从而不断提高自己做题的水平和能力。而测试集就像对训练结果的阶段性成果检测,类似于考试的方法去评判模型训练结果的好坏。这就是监督学习的一个主要的思想。

<!—->

半监督学习。指的是我们平时练习的资料中有一部分试题没有标准答案,一部分试题是有标准答案的。而没有参考答案的那些试卷的,也是包含知识信息,能够在进行真正考试的时候取得更好的成绩。那幺如何充分利用这些没有答案的练习试卷进行训练,就是半监督学习探索的重点。

<!—->

无监督学习。训练集没有标签,是学习资料只提供试题但没有标准答案的训练方法。就像老师在期末考试前会给同学发往年的试题,但这些试题没有答案。这个时候对于同学们而言这个试卷也不是完全没有用,可以通过往年试卷题目捕捉试卷的一些出题特点,从而应付接下来的考试。这就是无监督学习的主要思想。

 

论文分享

 

这篇论文是基于监督学习的深度学习提出的一种异常检测算法,创建了基于注意力机制的端到端深度模型Translog,用自然语言语料库对该模型进行了预训练,使其可以获得更好的语义嵌入向量,同时采用编解码充分捕获日志模板的语义信息。

 

Translog模型的框架如下图所示,它首先通过日志解析的方式将所有的原始日志数据解析为相应的日志模板,这些日志模板再通过一个编码器,将日志模板中的语义信息充分捕捉,最后通过解码器输出结果”0″或者是”1″,”0″代表是日志数据是正常的,”1″代表是异常的,本质上是一个二分类的工作。

 

 

该模型的一个创新点是编码器,编码器的工作原理如下图所示,encoder中 s1 代表一个日志模版,每个”log key sequence”有很多日志模板,我们以”log key sequence”为输入单元。日志原始数据首先会经过一个预嵌入层,提取日志语义的顺序信息,然后通过注意力模块、Residual模块和Layer Normalization模块。注意力模块主要检测日志中哪个语义日志模板对日志异常检测的贡献度高。Residual模块和 Layer Normalization 模块则是进一步对日志数据进行规范化,最后通过对这三个模块结果的多次叠加,得到日志语义信息。那幺日志原始数据通过编码器对日志语义信息进行编码后,就会得到”0″或者是”1″的输出结果。

 

 

为了验证模型的训练效果,分别在BGL、HDFS和 OpenStack三个真实的数据集上对模型进行实验,实验结果显示Translog模型在精确度、召回率和 F1 分数三个不同的一个指标上,都达到了一个比较好的效果。

 

写在最后

 

近年来,在AIOps领域快速发展的背景下,IT工具、平台能力、解决方案、AI场景及可用数据集的迫切需求在各行业迸发。 基于此,云智慧在2021年8月发布了AIOps社区, 旨在树起一面开源旗帜,为各行业客户、用户、研究者和开发者们构建活跃的用户及开发者社区,共同贡献及解决行业难题、促进该领域技术发展。

 

社区先后 开源 了数据可视化编排平台-FlyFish、运维管理平台 OMP 、云服务管理平台-摩尔平台、 Hours 算法等产品。

 

可视化编排平台-FlyFish:

 

项目介绍: https://www.cloudwise.ai/flyFish.html

 

Github地址: https://github.com/CloudWise-OpenSource/FlyFish

 

Gitee地址: https://gitee.com/CloudWise/fly-fish

 

行业案例: https://www.bilibili.com/video/BV1z44y1n77Y/

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注