基于深度模型的日志异常检测

news2024/12/28 20:46:53
  • 本文转载自:深度模型的日志异常检测,还有谁不会?
  • PPT下载地址:https://bbs.huaweicloud.com/forum/thread-100052-1-1.html
  • 视频讲解地址:https://bbs.huaweicloud.com/live/DevRun_live/202101222000.html

文章目录

  • 1. 为什么需要日志异常检测?
  • 2. 日志异常检测是如何实现的?
    • 2.1 日志解析
    • 2.2 异常检测
      • 2.2.1 DeepLog模型
      • 2.2.2 Template2Vec模型
      • 2.2.3 Log2Vec模型
  • 3. AIops中的日志异常检测效果展示
  • 参考文献

AIOps(Artificial Intelligence for IT Operations)即智能运维,将AI应用于运维领域,基于已有的运维数据(日志、监控信息、应用信息等),通过机器学习的方式来进一步解决自动化运维没办法解决的问题。华为AIOps使能服务沉淀了10+开箱即用的智能APP,覆盖网络维护、网络体验、网络规划、设备故障预测等应用领域,包含KPI异常检测、硬盘异常检测、故障识别及根因定位、日志异常检测等。其中日志异常检测(Log Anomaly Detection,LAD)实时监控日志,识别并推荐根因异常,辅助运维人员定位故障根因,提升运维效率。

1. 为什么需要日志异常检测?

通信网络中部署的大规模设备在运行过程中产生海量日志。如图1所示,日志是一种时序文本数据,由时间戳和文本消息组成,实时记录了业务的运行状态。通过收集并分析日志,可以发现或预知网络中已发生或潜在的故障。
在这里插入图片描述

图1 windows公开数据集中的部分日志样例[1]

目前日志规范不统一。如图2所示,不同类型的设备打印出的日志格式也不同,且日志数据呈现出非结构化的特点。主要体现在日志时间格式不统一,日志记录的级别不统一,不同厂家自定义的专业词汇或缩略语不统一。这些问题增加了日志分析的难度。

在这里插入图片描述

图2 四种不同规范的日志样例数据[1]

此外,现代网络系统规模庞大,每小时打印日志约50Gb(约1.2亿~ 2亿行)的量级[2],若依靠人工分析日志数据来识别网络中是否发生了故障则效率低下,因此有必要引入AI算法进行日志异常检测,以达到降低运维成本,显著提升业务体验的目的。

自2017年Min Du等人提出DeepLog以来[3],基于序列的深度学习建模逐渐成为近年来研究的热点。原始的DeepLog主要包括两个部分:模板序列异常检测模型(Log key anomaly detection model)和参数值异常检测模型(Parameter value anomaly detection model)。模板序列异常检测模型通过学习正常日志打印对应的工作流,然后对测试数据进行推理,以检测出是否存在违背工作流的异常日志。参数值异常检测模型则是对每一个模板(Log key或Template)构建一个模型,用推理出的参数值与实际参数值作对比,对比结果在置信区间内则认为是正常,否则为异常。模板序列异常检测模型的缺点在于对模板使用one-hot向量编码,无法学习出不同模板之间的语义相似性。参数值异常检测模型的缺点在于建模的数量太多,有多少个模板就要建立多少个模型,实现起来工作量较大。针对上述问题,2019年与2020年Weibin Meng等人先后提出Template2Vec和Log2Vec方法[4,5],可以学习出模板之间的语义相似性,并且能够解决新模板的在线学习问题。

2. 日志异常检测是如何实现的?

日志异常检测的核心是借助AI算法自动分析网络设备日志来发现并定位故障,根据送入检测模型的数据格式,日志异常检测算法模型分为序列模型和频率模型,其中序列模型又可以分为深度模型和聚类模型。本期主要分享近年来研究的热点:深度模型。

2.1 日志解析

非结构化的日志数据直接处理非常困难。通常的做法是通过日志解析得到日志的模板,然后再对模板进行异常检测。模板相当于日志的“摘要”,日志可以视作模板加参数得到。例如,模板Send Bytes to ,加上参数size=120, block=blk4612,使用打印函数print()可以得到一条具体的日志Send 120 Bytes to blk4612。改变参数值size=256, block=blk3768,可以得到另一条日志Send 256 Bytes to blk3768。日志解析相当于日志打印的逆过程,由日志反向处理得到模板。以Pinjia He等人提出的Drain方法为例[6],简单说明日志解析的过程。Drain认为具有相同长度的(即模板中token个数)日志,其业务含义具有相似性,因此长度是模板提取的一个重要判据。此外,特定的关键字也代表了特定的业务含义。变量一般认为是纯数字或者数字与字母等其他符号的组合。日志解析如图3所示,首先将变量token转换为,然后根据长度区分类别,最后根据关键字区分类别,最终得到一个模板。例如Receive from node blk_3587经过处理后得到模板Receive from node 。提取完模板内容后,会分配一个唯一的ID。

在这里插入图片描述

图3 模板与日志的关系以及日志解析原理图

2.2 异常检测

2.2.1 DeepLog模型

以DeepLog的Log key anomaly detection model为例,网络结构如图3所示,其中LSTM原理可以参看文献[3]。输入 为one-hot编码形式(备注:此处不用one-hot编码也是可以的,直接输入从0开始编码的模板ID即可),h为窗口长度,即x为t时刻之前的h个模板组成的序列。 表示第t个时刻出现的模板,假设模板ID的集合为{0,1, …,M},则 ,DeepLog采用两层LSTM,之后接全连接网络(FC),经过softmax函数处理后,输出各个模板的概率分布 ,其中_n_为模板的个数。

在这里插入图片描述

图4 DeepLog网络结构图

在训练态,收集设备正常运行时产生的日志获取训练集,具体步骤如下:

  • Step1: 取设备正常运行时打印的日志,通过日志解析得到模板序列;
  • Step2: 按task_id(或线程号、任务号)提取模板序列;
  • Step3: 设置窗口长度h(通常h=10, 这里以h=3为例),步长s=1,依次对每个task_id的序列进行滑动窗口提取训练样本数据;
  • Step4: 使用训练数据和梯度下降法等算法训练神经网络。

从上述收集训练数据的过程中可以发现,整个过程只要求训练数据来自于系统正常运行或故障占比很小的日志。数据标签不需要人工标注,因此该模型可以认为是一个无监督的深度学习模型。

在这里插入图片描述

图5 训练态收集训练数据

在这里插入图片描述
在这里插入图片描述

图6 推理态示意图

推理态步骤如下:

  • Step1: 取待检测的推理日志,通过日志解析得到模板序列;
  • Step2: 按task_id(或线程号、任务号)提取模板序列;
  • Step3: 加载训练后的模型,对各个task_id对应的序列滑动窗口依次检测;
  • Step4: 对每一个检测样本(xi, yi),计算出概率最大的topN模板集合,若yi属于模板集合则正常,否则异常。

DeepLog输入数据的编码方式为one-hot,所以无法学习出两个模板之间的语义相似度,例如,假如模板数据库的表中共有3个模板,如表1所示。从模板ID或者one-hot编码无法学习出1号模板与2号模板业务意义相反,也学不到1号模板与3号模板业务意义相近。因此,原始的DeepLog的学习能力是有局限性的。

表1 模板的one-hot编码示例

在这里插入图片描述

2.2.2 Template2Vec模型

为了学习出模板的业务含义或语义,Weibin Meng等人在使用DeepLog之前,设计了一个Template2Vec向量编码。核心思想是参照Word2Vec[7]的设计思路,提出了模板向量Template2Vec。Template2Vec将模板编码成语义向量,以代替原始DeepLog中的模板索引或one-hot编码。对于新出现的模板,则将其转换为一个最接近的已有模板。Template2Vec原理如图7所示:
在这里插入图片描述

图7 Template2Vec原理

具体步骤如下:

  • Step 1 : 在WordNet[8]中对模板内容中的自然语言单词进行同义词和反义词搜索(如图7中的down和up),之后,运维人员再对具有业务知识的词汇识别同义词和反义词(如图中的Interface和Vlan-Interface),并将其转化为正常的自然语言词汇。
  • Step 2: 应用dLCE [9]生成模板中单词的词向量,如图7中的Word vectors。
  • Step 3: 模板向量是模板中单词的词向量的加权平均值。如图中的Templates vectors

Template2Vec结合了运维人员的专业领域知识和自然语言处理中的dLCE模型,以便准确生成模板向量。例如对模板Receiving blk src dest的Template2Vec求解过程如下。

在这里插入图片描述

图8 Template2Vec计算过程示意图

借助Template2Vec将模板序列转换为语义向量序列,之后送入DeepLog即可进行日志异常检测。

2.2.3 Log2Vec模型

Template2Vec存在一个较大的问题:不能在运行态或推理态处理日志中词汇表外(OOV)的新词汇。为了解决这一问题,提出了Log2Vec方法。Log2Vec主要包含两部分:日志专用的词嵌入(log-specific word embedding, LSWE)和新词处理器(OOV Word processor).

LSWE可以看作在Template2Vec的基础上,加入了关系三元组,即增加了关联信息。具体做法是:(1) 对于通用的关系三元组采用Dependence Trees[10]方法进行语义向量转化,(2) 对于业务领域范围内的三元组,加入专家经验来识别处理。

新词处理器则采用MIMICK [11] 来处理运行中出现的OOV单词。使用方法如图9所示。首先,在已有的词汇数据集上训练出可用的MIMICK模型。然后,使用该模型在OOV单词上将其转换为一个唯一的向量。

在这里插入图片描述

图9 新词处理器原理图

3. AIops中的日志异常检测效果展示

NAIE的AIOps中的日子异常检测模型服务,能够实时监控日志,识别并推荐根因异常。内置多种类型算法,无需定制即可支持不同网元日志的异常检测;具备在线学习能力,持续提升检测精度,辅助运维人员定位故障根因,提升运维效率。

例如,对某个网元的某个计算节点的日志监控过程中,如图10所示,实时统计出现的异常量,给出各个异常对应的关键日志。若算法报出的结果存在误报,如图11所示,用户可以加入业务反馈,反馈的误报异常点将会被在以后的检测中被过滤掉。由于日志包含了丰富的领域业务知识,如图12所示,每条关键日志都会给出上下文,辅助运维人员定位具体的异常内容。

在这里插入图片描述

图10 异常检测与关键日志推荐

在这里插入图片描述

图11 可以加入用户反馈

在这里插入图片描述

图12 异常日志上下文

参考文献

[1] https://github.com/logpai/loghub

[2] Shilin He, Jieming Zhu, Pinjia He, Michael R. Lyu. Experience Report: System Log Analysis for Anomaly Detection, IEEE International Symposium on Software Reliability Engineering (ISSRE), 2016. (ISSRE Most Influential Paper).

[3] Min Du, Feifei Li, Guineng Zheng, Vivek Srikumar. DeepLog: Anomaly Detection and Diagnosis from System Logs through Deep Learning. CCS-2017

[4] Meng W, Liu Y, Zhu Y, et al. LogAnomaly: Unsupervised Detection of Sequential and Quantitative Anomalies in Unstructured Logs[C]//IJCAI. 2019: 4739-4745.

[5] Meng W, Liu Y, Huang Y, et al. A semantic-aware representation framework for online log analysis[C]//2020 29th International Conference on Computer Communications and Networks (ICCCN). IEEE, 2020: 1-7.

[6] Pinjia He, Jieming Zhu, Zibin Zheng, and Michael R. Lyu. Drain: An Online Log Parsing Approach with Fixed Depth Tree. ICWS’2017

[7] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013.

[8] George A Miller. Wordnet: a lexical database for english. Communications of the ACM, 38(11):39–41, 1995.

[9] Kim Anh Nguyen, Sabine Schulte im Walde, and Ngoc Thang Vu. Integrating distributional lexical contrast into word embeddings for antonym-synonym distinction. arXiv preprint arXiv:1605.07766, 2016.

[10] Katrin Fundel, Robert K¨uffner, and Ralf Zimmer. Relex—relation extraction using dependency parse trees. Bioinformatics, 23(3):365–371, 2007.

[11] Yuval Pinter, Robert Guthrie, and Jacob Eisenstein. Mimicking word embeddings using subword rnns. In Proceedings of the 2017 Conference on Empirical Methods in Natural Language Processing (EMNLP), pages 102–112, 2017.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyqt5的组合式部件制作(三)

到目前为止,组合式部件的制作已经初具雏形,唯一需要完善的是所有部件和子部件的自动初始化,如果有一个层次比较复杂的组合式部件,靠人工逐个输入子部件的名称显然不现实,比如下图: 这个部件由多层、多个部件…

类EMD的“信号分解方法”及MATLAB实现(第九篇)——小波包变换(WPT)/小波包分解(WPD)

在上一篇我们讲到了离散小波变换DWT,在建立了小波分解的基本概念后,我们现在转向小波包分解——一种更精细的小波分析方法。小波包分解在多分辨率分析的基础上,提供了一种全面的频率分析工具,这在许多复杂信号处理场合中被证明是极…

第五章:java方法重写/覆盖

系列文章目录 文章目录 系列文章目录前言一、方法重写/覆盖二、方法的重写和重载的比较总结 前言 方法重写指的是子类重写父类的方法。 一、方法重写/覆盖 方法覆盖(重写)就是子类有一个方法并且和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这…

Docker指定容器使用内存

Docker指定容器使用内存 作者:铁乐与猫 如果是还没有生成的容器,你可以从指定镜像生成容器时特意加上 run -m 256m 或 --memory-swap512m来限制。 -m操作指定的是物理内存,还有虚拟交换分区默认也会生成同样的大小,而–memory-…

MySQL json相关函数详解

MySQL提供了一系列的JSON函数,用于解析、提取、修改和操作JSON数据。以下是一些常用的JSON函数及其功能。 以下所有操作都使用该表(zone_test)用来演示: 一:JSON_OBJECT(key1,value1,key2,value2) 1、作用:…

聚观早报 |GPT-4周活用户数达1亿;长城汽车10月销量增加

【聚观365】11月8日消息 GPT-4周活用户数达1亿 长城汽车10月销量增加 xAI宣布推出PromptIDE工具 aigo爱国者连发5款儿童手表 SpaceX预计今年营收90亿美元 GPT-4周活用户数达1亿 在OpenAI首届开发者大会上,该公司首席执行官萨姆奥特曼(Sam Altman&a…

【Python】python获取本机IP的两种方式

1.使用专用网络 通过进入网站:http://myip.ipip.net获取本机ip地址 代码实现: import requests res requests.get(http://myip.ipip.net, timeout5).text print(res) 也可以在终端cmd中用如下代码实现; curl http://myip.ipip.net 2.使用自带的socke…

java8中的函数式接口的应用

函数式接口详解&#xff08;Java&#xff09;-CSDN博客 下面是一个去重的代码 /*** 学习Function匿名函数 和Predicate匿名函数 的定义* author Administrator**/ public class DistinctFilterList {public static final List<Dish> menu Arrays.asList( new Dish(&quo…

数据源、映射器的复用

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的&#xff1a;学习与总结 demo解决问题&#xff1a;复用球体数据源、映射器&#xff0c;vtkSmartPointer与std::vector、vtkNew与std::array的搭配使用…

实验5-2——网络yum源的配置

网络yum源的配置 实验步骤&#xff1a; 1.在/etc/yum.repos.d中新建一个文件夹bak备份原来的东西,查看/etc/yum.repos.d/内容 cd /etc/yum.repos.d mkdir bak ls 2.把/etc/yum.repos.d中已有的repo文件都移入bak文件夹中并查看 mv *.repo bak ls 3. 下载安装weget以防万一本…

程序员男盆友给自己做了一款增进感情的小程序

前言 又是无聊的一天&#xff0c;逛GitHub的时候发现一个给女朋友做了一个互动微信小程序&#xff0c;据说女朋友更爱自己了&#xff0c;所以当晚。。。。给自己做了丰盛的晚餐&#xff0c;我当即点开立马开发粘贴复制起来&#xff0c;想到做的小程序可以和未来的女朋友增进感…

带有滑动菜单指示器的纯 CSS 导航选项卡

效果展示 CSS 知识点 filter 属性回顾 transition 属性回顾 使用单选框实现导航菜单的思路 单选框当点击完成后就会有一个:checked属性&#xff0c;可以利用这个属性来实现导航菜单底部滑动块的滑动动画和当前菜单项激活状态的管理。 整体页面结构 <div class"tab…

C#创建Windows Service(Windows 服务)基础教程

Windows Service这一块并不复杂&#xff0c;但是注意事项太多了&#xff0c;网上资料也很凌乱&#xff0c;偶尔自己写也会丢三落四的。所以本文也就产生了&#xff0c;本文不会写复杂的东西&#xff0c;完全以基础应用的需求来写&#xff0c;所以不会对Windows Service写很深入…

springboot内容协商

1.基于请求头 Accept: application/json Accept: application/xml Accept: application/xxx 自定义数据 发的请求头的数据类型 期望返回的数据类型 2.通过请求参数 例如 /football?formatjson 一般respondbody 默认以json方式进行返回 如何请求同一个接口&#xff0c;可以…

四川芸鹰蓬飞:抖音短视频运营是做什么的?

抖音短视频作为一种新兴的社交媒体平台&#xff0c;它的运营团队肩负着将用户需求与平台资源相结合&#xff0c;促使平台发展壮大的重要任务。抖音短视频运营旨在通过精准的用户分析和有针对性的内容推送&#xff0c;提高用户留存和活跃度&#xff0c;增加广告收入&#xff0c;…

idea使用git删除本地提交(未推送)

1、找到reset head 2、打开弹窗&#xff0c;在HEAD后面输入^ 结果为HEAD^ 注释&#xff1a; Reset Type 有三种&#xff1a; Mixed&#xff08;默认方式&#xff09;&#xff0c;保留本地源码&#xff0c;回退 commit 和 index 信息&#xff0c;最常用的方式Soft 回退到某个版本…

黑色星期五推广策略:TikTok海外网红营销加速品牌增长

在数字化时代&#xff0c;TikTok已经成为了一个具有巨大潜力的社交媒体平台&#xff0c;它不仅让用户分享短视频&#xff0c;还为品牌提供了一个独特的宣传渠道。尤其是在黑色星期五这个全球购物盛宴的时刻&#xff0c;品牌有机会通过TikTok网红营销来提升销售额。本文Nox聚星将…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1&#xff09;Windows or Linux (本文以Windows为主) 2&#xff09;JLink、Daplink、Wch-Link烧录器 3&#xff09;GNU Arm Embedded Toolchain交叉编译…

Apache Storm 2.5.0 集群安装与配置

1、下载Apache Storm 2.5.0 https://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-2.5.0/ 2、准备3台服务器 192.168.42.139 node1 192.168.42.140 node1 192.168.42.141 node2 3、配置host [rootnode1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost…

前端缓存机制——强缓存、弱缓存、启发式缓存

强缓存和弱缓存的主要区别是主要区别在于缓存头携带的信息不同。 强缓存&#xff1a; 浏览器发起请求&#xff0c;查询浏览器的本地缓存&#xff0c;如果找到资源&#xff0c;则直接在浏览器中使用该资源。若是未找到&#xff0c;或者资源已过期&#xff0c;则浏览器缓存返回未…