AIops | 一文了解日志异常检测

2023-11-18

作者 | 李旭光 中国农业银行研发中心
责编 | 晋兆雨
出品 | CSDN云计算
头图 | 付费下载于视觉中国

背景介绍

日志是有关系统运行状态的描述,例如Linux的系统日志,数据库系统的日志以及分布式系统的日志等。日志是运维人员查看系统运行状态,寻找系统故障的重要数据。另一方面,日志属于非结构化数据,兼具有大数据量的特点,对于传统的运维人员往往只能基于关键词匹配来处理日志,并不能全面的获取日志包含的信息。所以日志处理需要更强大的算法来解决人工无法解决的问题,需要我们践行AIops理念,运用机器学习来解决日志处理中的难点。本文将介绍有关日志的预处理过程以及几种日志异常检测算法。

日志的预处理

日志数据千差万别,对于绝大部分算法日志数据无法直接用于算法训练,需要通过日志解析、特征提取将日志转换为特征矩阵,特征矩阵作为算法的输入。

日志数据虽不易区分,但总体上可分为可变部分和不变部分,日志解析就是就是将日志的可变部分与不变部分进行区分,并将原始日志转换为日志事件。

完成日志解析,下一步就是要提取日志事件的特征,对于日志特征提取方式一般采用先将日志事件加窗,然后对每个窗口的事件进行计数,这样我们就可以生成最终算法可用的特征矩阵。类似于下面格式的数据:

1,0,2,3,1,4

5,2,4,1,3,0,0,1

3,1,4,5,7,1,4,0

2,1,4,5,5,1

4,2,1,5,3,1,1

异常检测算法

日志异常检测算法主要根据有监督与无监督分为两大类。我们将分别介绍这二类算法。

3.1 有监督算法

a.逻辑回归

逻辑回归是简单的二分类模型,具有较强的解释性,被广泛的应用于分类任务。逻辑回归模型计算输入为正例的概率,概率高的判为正例。通过结合多个逻辑回归模型可以将二分类任务扩展为多分类任务。逻辑回归的图形如下:

图a 逻辑回归模型

逻辑回归是有监督的模型,将处理后的特征矩阵以及标记作为模型的输入,得到训练后的模型,用此模型预测新出现的特征向量,以此判断特征向量是否为异常的,进而判断日志异常。

b.决策树

决策树是一个树状结构,符合人一般的判断的过程,根据事项的重要次序依次判断决策。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。决策树图形如下:

图b 决策树模型

特征矩阵每一列作为一个属性,事件次数作为属性值,特征矩阵和标示列作为决策树模型的输入,决策树可以根据多种指标进行属性分类的次序判断。得到的决策树模型即可用来日志异常的判断。

c.SVM

支持向量机是一类监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面。

图c 支持向量机模型

支持向量机就是找到一个将样本分开的一个超平面,平面的二侧分别对应各自的类别。

以上三种都为监督算法,监督算法需要对数据进行标注,标注需要进行大量的人力劳动,往往在实际的使用中具有局限,不太容易广泛的应用于日志检测,因此无监督的学习方法具有一定的优势,接下来继续介绍二种无监督的算法。

3.2 无监督算法

a. 聚类

聚类试图将数据集中的样本划分为若干个不相交的子集,每个子集对应于一个潜在的子集。聚类的结果应尽量簇内尽量相似,簇间相似性低。聚类有二类指标,一是外部指标,另一种是内部指标。我们可以根据实际问题,合理选择具体的指标来进行训练任务。当选取好了指标,我们就可以根据指标计算对应的“距离”,完成对应的分类任务。

b. PCA

主成分分析是一种常用的降维方法。通过PCA对高维的数据进行降维,将高维的数据投影到低维的k个分量,变换后的低维分量可以保留高维数据的特征。通过PCA获得二个子空间,即正常空间和异常空间,正常空间又PCA计算后得到的k维构成,异常空间由舍弃的的维度构成。对于新的特征向量,计算此向量到异常空间的距离,距离过长即判断异常。

其他

以上方式都是基于将日志转换为事件计数再通过机器学习进行检测,事件计数一方面需要对日志进行大量的预处理工作,另一方面事件计数也只是包含了事件见关联的信息,对于其他异常不能进行检测。接下来我们将介绍二种不基于事件计数方式处理的日志异常检测算法。

a.Word2Vec和SOM算法

Word2Vec是一个可以将词语转换为词向量的工具,即将文本进行向量化同时很好的保持文本之间的语义。Word2Vec基于词进行向量转换,提供了更细粒度的日志分析基础,提供不同的日志预处理方式。

将文本进行了向量化就可以进行下一步的检测算法的应用。自组织网络(SOM)是一种无监督的学习方法,是一种基于神经网络的聚类算法。SOM是一种单层的神经网络,仅包含输入层和输出层。SOM网络接收外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。其特点与人脑的自组织特性类似。SOM的目标是用低维(通常是二维或三维)目标空间的点来表示高维空间中的所有点,尽可能地保持点间的距离和邻近关系(拓扑关系)。

图d 自组织网络模型

b. LSTM

长短期记忆是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

图e LSTM网络模型

DeepLog是一种基于LSTM网络的日志异常检测算法,DeepLog发表于2017年。DeepLog同样不是基于事件计数的日志异常检测,DeepLog训练的过程基于不包含异常的日志数据进行训练。DeepLog首先识别日志的不变部分作为key,和可变部分作为参数,DeepLog会对不变部分和可变部分都进行学习,作为后续异常检测的基础。同时DeepLog还会通过日志对系统的实际工作流进行学习,同样作为后续日志异常检测的参考。DeepLog日志检测就是通过模式检测、参数检测以及工作流检测三种方式,相比于以上的几种算法要更加强大,适应的范围要更广泛。

总结

本文总结了七种用于日志异常检测的方式,大体上可以分为二类,一类是基于预处理后得到的日志事件计数进行检测的方式,另一类是以日志原本状态的直接处理的方式。这七种方式既有监督学习也有无监督学习算法,既有经典的机器学习算法也有深度网络,希望介绍的这七种算法能帮助你解决遇到的问题,启发新的日志检测方式。

作者介绍

李旭光 中国农业银行研发中心
为更高效运维的研发人员,及时响应一线运维需求,积极探索AI应用于运维,不懈追求运维研发的更高境界。

更多阅读推荐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AIops | 一文了解日志异常检测 的相关文章

  • 如何编写嵌套的 __init__.py 文件

    我正在努力解决嵌套问题 init py在我正在编写的Python包中 该包具有以下架构 module init py submodule1 init py source py submodule2 init py source py sub
  • 当我有自定义身份验证模型时,如何登录 Django Rest 可浏览 API?

    我有一个自定义用户模型 如下所示account models py from django contrib auth modles import AbstractUser from django db models signals impo
  • 获取 .wav 文件长度或持续时间

    我正在寻找一种方法来找出 python 中音频文件 wav 的持续时间 到目前为止我已经了解了 pythonwave图书馆 mutagen pymedia pymad我无法获取 wav 文件的持续时间 Pymad给了我持续时间 但它不一致
  • Python 切片对象和 __getitem__

    python 中是否有内部的东西来处理传递给的参数 getitem 不同 并自动转换start stop step构造成切片 这是我的意思的演示 class ExampleClass object def getitem self args
  • 从文本文件中删除特定字符

    我对 Python 和编码都很陌生 我当时正在做一个小项目 但遇到了一个问题 44 1 6 23 2 7 49 2 3 53 2 1 68 1 6 71 2 7 我只需要从每行中删除第三个和第六个字符 或者更具体地说 从整个文件中删除 字符
  • 将非常大的Python列表输出保存到mysql表中

    我想将 python 生成的列表的输出保存在 mysql 数据库的表中 该表如下所示 mysql 中的 myapc8 表 https i stack imgur com 4B4Hz png这是Python代码 在此输入图像描述 https
  • Series.sort() 和 Series.order() 有什么区别?

    s pd Series nr randint 0 10 5 index nr randint 0 10 5 s Output 1 3 7 6 2 0 9 7 1 6 order 按值排序并返回一个新系列 s order Output 2 0
  • 如何通过 python 多处理利用所有核心

    我一直在摆弄Python的multiprocessing现在已经使用了一个多小时的功能 尝试使用并行化相当复杂的图形遍历函数multiprocessing Process and multiprocessing Manager import
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • Python Tkinter 模块不显示输出

    我正在尝试学习 Python 并尝试使用 Python 中的 GUI 并遇到了这个 Tkinter 模块 我的代码运行 但运行时窗口没有出现 我的代码如下 from Tkinter import to create a root windo
  • 如何使用scrapy检查网站是否支持http、htts和www前缀

    我正在使用 scrapy 来检查某些网站是否工作正常 当我使用http example com https example com or http www example com 当我创建 scrapy 请求时 它工作正常 例如 在我的pa
  • Python HMAC:类型错误:字符映射必须返回整数、None 或 unicode

    我在使用 HMAC 时遇到了一个小问题 运行这段代码时 signature hmac new key secret key msg string to sign digestmod sha1 我收到一个奇怪的错误 File usr loca
  • Python将文本文件解析为嵌套字典

    考虑以下数据结构 HEADER1 key value key value HEADER2 key value key value HEADER3 key value HEADER4 key value key value 原始数据中没有缩进
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • pandas 相当于 np.where

    np where具有向量化 if else 的语义 类似于 Apache Spark 的when otherwise数据帧方法 我知道我可以使用np where on pandas Series but pandas通常定义自己的 API
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • 使用 Python 将连续日期分组在一起

    Given dates datetime 2014 10 11 datetime 2014 10 1 datetime 2014 10 2 datetime 2014 10 3 datetime 2014 10 5 datetime 201
  • 在Raspberry pi上升级skimage版本

    我已经使用 Raspberry Pi 2 上的 synaptic 包管理器安装了 python 包 然而 skimage 模块版本 0 6 是 synaptic 中最新的可用版本 有人可以指导我如何将其升级到0 11 因为旧版本中缺少某些功
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa

随机推荐

  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    操作系统 键盘敲入字母时 操作系统期间发生了什么 参考资料 键盘敲入 A 字母时 操作系统期间发生了什么 操作系统 浅谈 Linux 中的中断机制 文章目录 操作系统 键盘敲入字母时 操作系统期间发生了什么 设备控制器 I O 控制方式 设
  • html 自定义简单的时间轴 timeline 并与 table 图表和 echarts 进度甘特图联动

    1 需求 最近有需求需要实现 table 图表与 eharts 柱状图的联动 完整的效果图如下所示 这里时间轴要实现的效果要基本如下图所示 该时间轴并不是要实现选中单独的某一个月份并查看单月的数据 而是要将当前数据的时间跨度控制在时间轴的跨
  • uniapp 电商app支付倒计时处理

    电商app支付倒计时 所有电商app支付页面都是有倒计时的 一来可以促进消费 二来可以减少恶意减库存的问题发生 因为创建订单的时候 除了预售的商品外 实际销售的商品是需要减库存的 一般的电商app倒计时都是30分钟或者45分钟的 如果在此页
  • 带调速功能的arduino摇头避障小车

    一 材料同上篇文章 二 接线同上篇文章 L298N红板有两个使能端口ENA和ENB 这两个端口默认是有跳线帽的 也就是接5V的 此时输出就是HIGH或者LOW 摘掉跳线帽 将外边端口分别接arduino的PWM接口就好 本文接的是3和11
  • 3.[人脸识别] python-opencv 人脸特征采集与录入

    目录 1 环境 2 描述 3 代码 4 效果 1 环境 1 python 3 6 6 64bit 2 python packages 1 opencv python 3 4 1 15 2 opencv contrib python 4 4
  • 李沐动手学深度学习V2-微调练习

    1 继续提高finetune net的学习率 模型的准确性如何变化 原实验参数 lr 5e 5 batch size 128 num epochs 5 lr 5e 4 lr 5e 6 2 2 在比较实验中进一步调整finetune net和
  • 2018.5.21 . XMLSpy激活的方法

    127 0 0 1 altova com XMLspy 127 0 0 1 www altova com XMLspy 127 0 0 1 link altova com XMLspy 追加加到 C WINDOWS system32 dri
  • Python爬虫

    一 什么是代理 二 代理服务器的作用 可以进行请求的响应和转发 三 在爬虫中为何要使用代理 如果我们使用爬虫对一个网站在一段时间内发起一个高频请求 该网站会检测出这个异常的现象 并将异常的请求 IP 获取 将 IP 加入到黑名单 然后改 I
  • [无线通信基础-14]:图解移动通信技术与应用发展-2-第一代移动模拟通信大哥大

    前言 第一代移动通信主要采用的是模拟通信技术和频分多址 FDMA 技术 模拟通信 analog communication 是利用正弦波的幅度 频率或相位的变化 或者利用脉冲的幅度 宽度或位置变化来模拟原始信号 以达到通信的目的 故称为模拟
  • PyTorch中的符号索引和函数索引用法

    Pytorch中很多函数都采用的是函数式索引的思路 而且使用函数式索引对代码可读性会有很大提升 张量的符号索引 张量也是有序序列 我们可以根据每个元素在系统内的顺序位置 来找出特定的元素 也就是索引 一维张量的索引 一维张量索引与Pytho
  • 基于MATLAB的二进制数字调制与解调信号的仿真——2ASK

    实现二进制数字调制与解调信号的仿真是我的MATLAB课程设计的一部分 我参考了网上的一些资料 并加入了一些自己的想法 代码已在本地MATLAB编译通过且能正常运行 2ASK 二进制振幅键控 i 10 10个码元 j 5000 t linsp
  • java线程分析工具

    下载网站 IBM Thread and Monitor Dump Analyzer for Java TMDA 效果图
  • java8新特性-总览

    转眼真正工作的时间也一年多了 说实话虽然老板对我是肯定的 但是我对自己还是很不满意所以学习吧骚年们 Java8新特性 Java8算是java语言的一个大版本还是很有必要学习的 包括函数式编程 新的JavaScript引擎 新的日期API 新
  • 【附带配置疑问解决】Keil5配置ST-Link仿真器下载程序的方法

    0 首先需要安装好ST Link驱动 方法参阅CSDN其他文章或自行百度 1 点击魔术棒 2 选择Debug 按下图下拉框选择ST Link后 点击Settings 3 Flash Download设置如下 4 Pack设置 要把Enabl
  • 【Linux】【Ubuntu】在VMware虚拟机中安装Ubuntu18.04(UEFI启动图文教程)

    在VMware虚拟机中安装Ubuntu18 04 以UEFI方式启动 VMware 版本 15 5 以UEFI启动的Ubuntu系统安装方式与 Linux Ubuntu 在VMware虚拟机中安装Ubuntu18 04 保姆级图文教程 中记
  • BeagleBone 实施 Yocto 项目

    特点 Yocto 项目生产工具和流程 支持为嵌入式软件创建 Linux 发行版 独立于架构 BeagleBone Black 是一个平台 允许用户根据自己的喜好快速轻松地执行安装和自定义 从 Yocto Project 构建系统的基本介绍开
  • SD卡读写实验(SPI模式)

    对于 SD 卡的 SPI 模式而言 采用的 SPI 的通信模式为模式 3 即 CPOL 1 CPHA 1 在 SD 卡 2 0 版 本协议中 SPI CLK 时钟频率可达 50Mhz SD 卡的 SPI 模式 只用到了 SDIO D3 SP
  • 第五届蓝桥杯—— 基础练习:数列特征

    问题描述 给出n个数 找出这n个数的最大值 最小值 和 输入格式 第一行为整数n 表示数的个数 第二行有n个数 为给定的n个数 每个数的绝对值都小于10000 输出格式 输出三行 每行一个整数 第一行表示这些数中的最大值 第二行表示这些数中
  • C++11中的原子操作(atomic operation)

    所谓的原子操作 取的就是 原子是最小的 不可分割的最小个体 的意义 它表示在多个线程访问同一个全局资源的时候 能够确保所有其他的线程都不在同一时间内访问相同的资源 也就是他确保了在同一时刻只有唯一的线程对这个资源进行访问 这有点类似互斥对象
  • AIops | 一文了解日志异常检测

    作者 李旭光 中国农业银行研发中心责编 晋兆雨出品 CSDN云计算头图 付费下载于视觉中国 背景介绍 日志是有关系统运行状态的描述 例如Linux的系统日志 数据库系统的日志以及分布式系统的日志等 日志是运维人员查看系统运行状态 寻找系统故