当前位置: 首页 > news >正文

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

  • 本文转载自:深度模型的日志异常检测,还有谁不会?
  • 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.

相关文章:

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

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

最大连续子数组

最大连续子数组(Maximum Subarray)问题是一个经典的算法问题,其目标是在给定的整数数组中找到一个连续的子数组,使得该子数组的元素之和最大。这个问题有多种解决方法,其中包括暴力解法、分治法和动态规划等。 下面是…...

【FastCAE源码阅读5】使用VTK实现鼠标拾取对象并高亮

鼠标拾取对象是很多软件的基本功能。FastCAE的拾取比较简单,是通过VTK实现的。 对几何而言,拾取类型切换在工具栏上,单击后再来单击视图区对象进行拾取,拾取后的对象会高亮显示。效果如下图: 一、拾取对象 拾取对象…...

【全志H616 使用标准库 完成自制串口库(分文件实现) orangepi zero2(开源)】.md updata: 23/11/07

文章目录 H616 把玩注意:Linux内核版本5.16 及以上,需手动配置i2c-3 uart5驱动配置示例 分文件编译时需将每个文件一同编译 (空格隔开)例: ggc a.c b.c b.h -lpthread -lxxx..; 常用命令查看驱动文件查看内核检测信息/…...

小白学爬虫:手机app分享商品短连接获取淘宝商品链接接口|淘宝淘口令接口|淘宝真实商品链接接口|淘宝商品详情接口

通过手机APP分享的商品短链接,我们可以调用相应的接口来获取淘口令真实URL,进而获取到PC端的商品链接及商品ID。具体步骤如下: 1、通过手机APP分享至PC端的短链接,调用“item_password”接口。 2、该接口将返回淘口令真实URL。 3…...

python 应用之 request 请求调用

场景: 验证一个第三方接口 目录 一、应用实例 1、预准备工作 1)、引用包 2)、生成随机串 3)、获得当前时间戳 4)、HASH 5)、header处理 6)、请求处理 2、requests请求 1&#xff09…...

BeanUtils.copyProperties浅拷贝的坑你得知道?

今天想写一篇文章,主要关于深拷贝和浅拷贝相关的,主要是最近写代码的时候遇到一个BUG,刚好涉及到浅拷贝导致的问题。 问题背景 现在有一个需要是需要修改门店信息,门店也区分父门店和子门店,父门店被编辑更新是需要通过…...

ubuntu安装rabbitMQ 并 开启记录消息的日志

apt-get update apt-get install rabbitmq-server rabbitmqctl add_user root password // 设置用户名密码 rabbitmqctl set_user_tags root administrator // 设置为管理员身份 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" //为…...

思维模型 首因效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。先入为主,一见钟情。 1 首因效应的应用 1.1 面试中的首因效应 小李是一名应届毕业生,他准备参加一家知名互联网公司的面试。在面试前,他做了充分的准备…...

Redis极速上手开发手册【Redis全面复习】

文章目录 什么是RedisRedis的特点Redis的应用场景Redis安装部署Redis基础命令Redis多数据库特性Redis数据类型Redis数据类型之stringRedis数据类型之hashRedis数据类型之listRedis数据类型之setRedis数据类型之sorted set案例:存储高一班的学员信息 Redis封装工具类…...

[动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子

[动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子 文章目录 [动态规划] (十四) 简单多状态 LeetCode LCR 091.粉刷房子题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 LCR 091. 粉刷房子 题目解析 (1) 一排房子,共有n个 (2) 染…...

【VSS版本控制工具】

VSS版本控制工具 1 安装 VSS2 服务器端配置3 新建用户4 客户端配置Vss2005Vs20055 客户端详细操作 1 安装 VSS 第一步:将VisualSourceSafe2005安装包解压。 第二步:找到setup.exe双击运行。 第三步:在弹出的界面复选框中选中Iaccepttheterms…...

数据持久化技术(Python)的使用

传统数据库连接方式:mysql(PyMySQL)ORM 模型:SQLAlchemy MyBatis、 Hibernate PyMySQL 安装: pip install pymysql简单使用 利用 pymysql.connect 建立数据库连接并执行 SQL 命令(需要提前搭建好数据库…...

第23章(上)_索引原理之索引与约束

文章目录 索引索引分类主键选择索引的代价 约束外键约束约束与索引的区别 索引使用场景不要使用索引的场景总结 索引 索引的概念:索引是一种有序的存储结构。索引按照单个或多个列的值进行排序。 索引的目的:提升搜索效率。 索引分类 按照数据结构分为…...

金蝶云星空BOS设计器中基础资料字段属性“过滤”设置获取当前界面的基础资料值作为查询条件

文章目录 金蝶云星空BOS设计器中基础资料字段属性“过滤”设置获取当前界面的基础资料值作为查询条件背景说明业务需求格式BOS配置 金蝶云星空BOS设计器中基础资料字段属性“过滤”设置获取当前界面的基础资料值作为查询条件 背景说明 序列号档案是基础资料,资料里…...

OFDM深入学习及MATLAB仿真

文章目录 前言一、OFDM 基本原理及概念1、OFDM 简介2、子载波3、符号4、子载波间隔与符号长度之间的关系 二、涉及的技术1、保护间隔2、交织3、信道编码4、扩频5、导频6、RF(射频)调制7、信道估计 三、变量间的关系四、IEEE 802.11a WLAN PHY 层标准五、…...

软件测试简历原来是写了这些才让面试官已读不回

前言: 马上就到了面试跳槽涨薪好时候了,最近看很多的小伙伴已经开始投简历了,一天投了几十次几百次,面试官已读不会,面试的机会都没有更别说后面的事情的,这是为什么呢? 很大一部分的原因是的…...

ESP32网络开发实例-Web服务器RGB LED调光

Web服务器RGB LED调光 文章目录 Web服务器RGB LED调光1、RGB LED介绍3、软件准备4、硬件准备4、代码实现在本文中,我们将创建一个 RGB LED 控制器网络服务器。 Web 服务器将显示用于设置 RGB LED 颜色的色谱。 颜色将主要分为三种:红色、绿色和蓝色。 用户将从光谱中选择一种…...

C# TCP Server服务端多线程监听RFID读卡器客户端上传的读卡数据

本示例使用设备介绍:液显WIFI无线网络HTTP协议RFID云读卡器可编程实时可控开关TTS语-淘宝网 (taobao.com) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Sy…...

【electron】【附排查清单】记录一次逆向过程中,fetch无法请求http的疑难杂症(net::ERR_BLOCKED_BY_CLIENT)

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ Adblock等插件拦截2️⃣ 【失败】Content-Security-Policy启动服务器json-serverhtml中的meta字段 3️⃣ 【失败】https vs httpwebPreferences & allowRunningInsecureContent disable-features 4️⃣ 【失败】检测fetch…...

【JS】scrollTop+scrollHeight+clientTop+clientHeight+offsetTop+offsetHeight

scrollTop、scrollHeight、clientTop、clientHeight、offsetTop以及offsetHeight 1. scrollTop 与 scrollHeight 1.1 scrollTop scrollTop 是这六个属性中唯一一个可写的属性。 Element.scrollTop 属性可以获取或设置一个元素的内容垂直滚动的像素数。 一个元素的 scrollT…...

Go语言函数用法

文章目录 Go语言函数用法 Go语言函数用法 函数在Go语言中有多种用法,它们是组织和模块化代码、提高代码的可维护性和可重用性的关键部分。以下是函数的一些常见用法: 封装代码:函数允许将一组相关的代码块封装到一个独立的单元中&#xff0c…...

3.5、Linux:命令行git的使用

个人主页:Lei宝啊 愿所有美好如期而遇 在Linux Centos7.6下安装git yum -y install git 注册一个gitee账号 进去注册就好,记住自己的用户名和密码。 创建一个仓库 点击复制,接着就可以在Linux上使用了 git clone git clone 刚才复制的地…...

基于servlet+jsp+mysql网上书店系统

基于servletjspmysql网上书店系统 一、系统介绍二、功能展示四、其它1.其他系统实现五.获取源码 一、系统介绍 项目类型:Java web项目 项目名称:基于servletjspmysql网上书店系统 项目架构:B/S架构 开发语言:Java语言 前端技…...

自用工具类整理

自动生成数据 uuid&雪花id private static Long workerId 1L; private static Long datacenterId 1L; private static Snowflake snowflake IdUtil.createSnowflake(workerId, datacenterId);public static String getId(String idType) {if (idType.equals("uui…...

jenkins2

jenkins插件管理安装:docker-build jenkins安装了docker 配置docke builder 添加 unix:///var/run/docker.sock rootubuntu20:~# usermod -G docker jenkins 修改docker中service文件添加 -H tcp://0.0.0.0:2376 jenkins中系统管理中 tcp://localhost:2376...

YOLOv5独家改进:分层特征融合策略MSBlock | 南开大学提出YOLO-MS |超越YOLOv8与RTMDet,即插即用打破性能瓶颈

💡💡💡本文独家改进:分层特征融合策略MSBlock,不同Kernel-Size卷积在不同尺度提升特征提取能力,最终引入到YOLOv5,做到二次创新 1)MSBlock使用;2)和C3结合使用 推荐指数:5颗星 MSBlock | 亲测在多个数据集能够实现大幅涨点,小目标检测效果也不错 💡💡…...

HTTP 协议详解-上(Fiddler 抓包演示)

文章目录 HTTP 协议HTTP 协议的工作过程HTTP 请求 (Request)认识URL关于 URL encode认识 "方法" (method)GET 方法POST 方法其他方法请求 "报头" (header)请求 "正文" (body) HTTP 响应详解状态码响应 "报头" (header) HTTP 协议 HTT…...

龙迅LT8911EXB功能概述 MIPICSI/DSI TO EDP

LT8911EXB 描述: Lontium LT8911EXB是MIPIDSI/CSI到eDP转换器,单端口MIPI接收器有1个时钟通道和4个数据通道,每个数据通道最大运行2.0Gbps,最大输入带宽为8.0Gbps。转换器解码输入MIPI RGB16/18/24/30/36bpp、YUV422 16/20/24bp…...

EtherCAT主站SOEM -- 5 -- SOEM之ethercatdc.h/c文件解析

EtherCAT主站SOEM -- 5 -- SOEM之ethercatdc.h/c文件解析 一 ethercatdc.h/c文件功能预览:二 ethercatdc.h/c 文件的主要函数的作用:2.1.1 函数:`ec_configdc()`2.1.2 函数:`ec_dcsync0(uint16 slave, boolean act, uint32 CyclTime, int32 CyclShift)`2.1.3 函数:`ec_dcs…...