基于机器学习的异常检测与分析技术

2023-05-16

传统的运维方式在监控、问题发现、告警以及故障处理等各个环节均存在明显不足,需要大量依赖人的经验,在数据采集、异常诊断分析、故障处理的效率等方面有待提高。

本关键技术面对传统运维故障处理效率低、问题定位不准确、人力成本高三大痛点,将人工智能与运维相结合,由AI逐步取代人力决策,通过机器学习方法,快速给出决策建议或提前规避故障,实现网云业务智能分析和优化,从而极大提高运维生产力。总体来说智能运维比传统运维方式效率高,数据采集更准确,更智能。

基于机器学习的异常检测和智能分析技术基于资源、告警、性能、拨测、日志等多模态数据,通过人工智能技术,对业务异常事件进行溯源、降噪,第一时间对运维人员展示出异常的根本原因及定位分析,提升运维人员故障处理效率,降低运维成本。

异常检测和智能分析流程图

异常检测的输入由数据中台提供业务资源、告警、性能、拨测、日志等多维数据。

异常检测的输出包括异常指标、重要告警、异常日志等信息,为网云业务健康度、智能分析提供参考依据。

本关键技术包含指标异常检测、告警压缩与降噪、日志异常检测、智能分析等技术。指标异常检测技术,接入运维监控指标通过异常检测算法得出指标的异常点;告警压缩和降噪技术,对海量的告警事件进行关联关系挖掘,在保证核心告警内容的前提下抑制告警消息数量,为运维人员提供有效的告警信息;日志异常检测技术从海量日志中实时分析日志模式的变化趋势,及时发现业务异常。智能分析技术,基于上述检测出的异常指标、重要告警、异常日志,结合故障传播关系、决策树 、知识图谱等技术,对网云业务故障和隐患进行智能分析,输出根本原因及定位、建议处理措施,提升运维人员故障处理效率,降低运维成本。

指标异常检测技术

指标异常检测根据不同场景和应用需求,可以分为单指标异常检测和多指标异常检测。

(1)单指标异常检测

  • 检测原理:关注的是某个KPI的值是否异常。例如:KPI突变、抖动等。

  • 异常场景:单指标异常主要是KPI值突然发生了较大变化。例如:CPU使用率突然增加、内存突然降低等。

  • 检测方法:单指标异常检测主要有基于统计学和预测的两种方法。

  • 基于统计学的方法通常是设定阈值判断是否异常。例如:3sigma等。若KPI超过阈值,则判断为异常,反之则正常。

  • 基于预测的方法是通过建模并预测KPI曲线,根据预测值与实际值之间的误差大小判断是否异常。例如:ARIMA等。若误差较大,则判断为异常,反之则正常。

(2)多指标异常检测

  • 检测原理:关联的多个实体的状态是否异常。如:服务器、设备等。

  • 异常场景:多指标异常检测场景主要有两种情况。

  • 第一种情况是尽管每个KPI看起来可能并没有异常,但综合多个KPI来看,可能就是异常的。

  • 第二种情况是有些单个KPI表现异常,但整体来看可能又是正常的。

  • 检测方法:与单指标序列相比,多指标序列具有维度高、数据量大、指标间关系复杂等特性。主要有两种思路:

  • 第一种思路是将多指标序列划分成多个单指标序列,利用单指标异常检测方法发现异常;

  • 第二种思路是直接分析多指标序列,如将多指标序列按形状或时间分成多个子序列,同时结合聚类等算法发现异常。

针对多指标异常检测,第一种思路相对成熟,但这种思路会丢失指标间的关联性信息,同时对每个KPI进行建模会带来更高的成本。

该分析方案包括离线过程和在线过程,主要是通过判断多指标间的变量关系是否被打破来进行异常检测。

若多指标间的变量关系被打破,则判断为异常,反之则正常。发现异常后,会对异常的KPI进行故障定位。

分析方案流程图

方案具体流程如下:

a) 离线过程

基于SBD的DBSCAN聚类:使用基于SBD的DBSCAN聚类算法将相似指标聚类,可以降低分析框架的复杂度,并且将相似形状的指标聚类到同一类中。

SARIMAX建模:随后,在聚类后的每个簇中,对两两指标建立SARIMAX模型,构建指标间的不变量关系。不变量关系指时间序列间存在着不会随时间变化的关系,如指标1为sin(t)和指标2为sin(3t)的关系。

b) 在线过程

异常检测:通过计算两两指标间的残差得分,再根据指定阈值判断不变量关系是否被打破。若残差得分超过阈值,则认为不变量关系被打破,即该指标对存在异常,反之则不存在异常。

可视化不变量关系图:对离线学习和在线学习的不变量关系图进行绘制,可视化异常检测结果。

故障定位:对所有被打破的不变量关系采用改进的PageRank算法进行故障定位。

告警事件压缩与降噪技术

运维一般是通过配置固定阈值,达到阈值后自动触发/生成告警。如网络中断、闪断;系统升级更新;设备多监控内容多等情况下,更会产生海量告警。故障期间,告警风暴,手机/邮箱会被海量告警淹没;运维人员很难从海量告警从筛选出重要告警,容易忽略重要告警;固定阈值控制,频繁误报、漏报告警。

告警压缩和降噪技术,旨在对海量的告警事件进行关联关系挖掘,在保证核心告警内容的前提下抑制告警消息数量,为运维人员提供有效的告警信息。

实现本算法的基础机器学习基础算法常用为有监督训练算法:Apriori。

核心算法思想:通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集;利用频繁项集构造出满足用户最小信任度的规则。

Apriori 算法是一种最有影响的挖掘布尔关联规则频繁项集的算法。算法的名字基于这样的事实:算法使用频繁项集性质的先验知识, 正如我们将看到的。Apriori 使用一种称作逐层搜索的迭代方法,k-项集用于探索(k+1)-项集。首先,找出频繁1-项集的集合。该集合记作L1。L1 用于找频繁2-项集的集合L2,而L2 用于找L3,如此下去,直到不能找到频繁k-项集。找每个Lk 需要一次数据库扫描。

频繁项集的所有非空子集都必须也是频繁的。Apriori 性质基于如下观察:根据定义,如果项集I不满足最小支持度阈值s,则I不是频繁的,即P(I)< s。如果项A添加到I,则结果项集(即I∪A)不可能比I更频繁出现。因此, I∪A也不是频繁的,即 P(I∪A)< s 。

该性质属于一种特殊的分类,称作反单调,意指如果一个集合不能通过测试,则它的所有超集也都不能通过相同的测试。称它为反单调的,因为在通不过测试的意义下,该性质是单调的。

频繁项集挖掘

关联规则的一般步骤:

① 找到频繁集,使用候选项集找频繁项集,如果某个项集是频繁的,那么它的所有子集也是频繁的。该定理的逆反定理为:如果某一个项集是非频繁的,那么它的所有超集(包含该集合的集合)也是非频繁的。Apriori原理的出现,可以在得知某些项集是非频繁之后,不需要计算该集合的超集,有效地避免项集数目的指数增长,从而在合理时间内计算出频繁项集。

② 在频繁集中通过可信度筛选获得关联规则。

支持度(Support):支持度揭示了A与B同时出现的概率。如果A与B同时出现的概率小,说明A与B的关系不大;如果A与B同时出现的非常频繁,则说明A与B总是相关的。支持度: P(A∪B),即A和B这两个项集在事务集D中同时出现的概率。

可信度(Confidence):置信度揭示了A出现时,B是否也会出现或有多大概率出现。如果置信度度为100%,则A和B可以捆绑销售了。如果置信度太低,则说明A的出现与B是否出现关系不大。置信度: P(B|A),即在出现项集A的事务集D中,项集B也同时出现的概率。

③ Ariori算法有两个主要步骤:

连接:将项集进行两两连接形成新的候选集,利用已经找到的k个项的频繁项集Lk,通过两两连接得出候选集Ck+1,注意进行连接的两个频繁项集Lk1,Lk2,必须有k-1个属性值相同,然后另外两个不同的分别分布在Lk1,Lk2中,这样的求出的候选集。

剪枝:去掉非频繁项集,候选集中的并不都是频繁项集,必须剪枝去掉,越早越好以防止所处理的数据无效项越来越多。只有当子集都是频繁集的候选集才是频繁集,这是剪枝的依据。

剪枝

日志异常检测技术

本项目日志异常检测技术采用SwissLog方法,使用 LSTM 的深度神经网络模型,将系统日志作为自然语言序列。SwissLog从正常执行中自动学习日志模式,当日志模式偏离训练模型时检测异常。SwissLog从基础系统日志中构建工作流,一旦检测到异常,用户可以诊断异常并有效的执行根因分析。

SwissLog包括两个阶段,即离线处理阶段和在线处理阶段。每个阶段包括日志解析、句子嵌入、基于注意力机制的Bi-LSTM阶段,在线阶段特别包含异常检测阶段。

日志解析部分对历史日志数据进行分词、字典化和聚类,提取多个模板,这些日志语句与相同的标识符联系起来构建日志序列,然后将日志序列转化为语义信息和时间信息。

句子嵌入部分使用BERT模型或Word2Vec模型对句子进行编码,转化为词向量,将这些语义信息和时间信息输入到基于注意力机制的 Bi-LSTM模型中学习正常、异常和性能异常日志序列的特征,在在线检测阶段,一旦检测到异常,就会发出警报,主要流程如下:

异常日志挖掘与分析流程

(1)日志解析

日志解析的主要目的是日志模板化。

  • 中心思想: 尽可能将包含语义信息的部分视作日志语句中的常量;

  • 解决方法: 基于字典的日志模板化方法。

  • 主要流程如下: a) 日志预处理和字典化
    b) 利用有效词集日志聚类
    c) 寻找最大公共序列
    d) 利用前缀树进行聚类
    e) 得到日志解析模板

(2)日志语句编码阶段

异常检测的最终目标是检测我们前面描述的各种故障。我们可以观察到,仅凭语义信息不足以检测多种类型的故障。因此,还引入了时间信息作为特征来补充异常检测方法。日志解析后,我们通过将日志与相同的标识符(如HDFS日志中的block id)或滑动窗口相关联来构建会话。我们将序列转换为语义信息和时间信息。然后我们用下面的方法对这两种信息进行编码。

  • 中心思想: 日志序列是一组有时序特征的自然语言;

  • 解决方法: 同时考虑日志语句的时序特征和语义特征。

利用BERT学习一条日志语句的语义信息

利用日志序列的打印时间间隔作为时序特征

(3)日志模式学习阶段

在句子嵌入之后,每条日志消息被转换成一个语义向量和一个时间嵌入向量。将二者串联,每个日志序列都表示为一个向量列表,SwissLog以此类向量为输入,采用基于注意力机制的双向LSTM神经网络模型来检测各种异常,如图所示:

采用双向LSTM神经网络模型检测异常

  • 中心思想: 模糊日志序列中不重要的日志语句;

  • 解决方法: 基于注意力机制的双向LSTM模型,学习日志序列的模式。

(4)异常检测

在离线阶段,我们使用历史日志训练获得了一个双向LSTM的预训练模型,可以用此模型进行异常检测。当一组新的日志语句到达时,它首先经过日志解析和句子嵌入阶段。然后将上面阶段获得的输出向量作为输入,输入到预训练模型中。最后,通过双向LSTM模型可以检测是否发生异常。SwissLog根据由共同标识符(例如block ID)关联的日志语句做出预测。

智能分析技术

异常检测旨在表明某些不正常现象,而智能分析则试图阐明“是什么问题”、“为什么发生问题“、“问题的最佳解决方案是什么”。

智能分析除了需要用到上面异常检测阶段输出的基于上述检测出的异常指标、重要告警、异常日志等数据,还需要基础的网云融合资源及物理和逻辑拓扑关系。

本技术的思路是构建一个故障树的超集,通过业务调用链获得资源之间的逻辑调用关系,通过网云融合资源及物理拓扑关系,比如共享机器资源、网络资源等。这两部分一起构成一个可能的故障树,这棵树是真正故障树的一个超集。之后我们对这个超集中的每个边进行联动分析、联动分析,对这棵树进行剪枝,构成最终的故障传播关系。这种方法的覆盖面广,计算开销大大降低,并且是AI擅长解决的问题。当我们拥有了故障传播关系,并它比较全而且准的话,根因分析就变得可行了。当发生故障时,依据准确的报警,着故障传播树就能找到根因,从而进行故障修复。

当上述异常指标、重要告警、异常日志之间存在逻辑关系时,可以根据故障树给出根源;当数据存在结构性的时候,可以根据图算法模型对根因进行分析,然后进一步将不同的算法模型对场景和不同的元数据进行适配,对异常进行有效的根因定位。在众多可能引起故障的因素中,追溯到导致故障发生的症结所在,并找出根本性的解决方案。利用机器学习或者深度学习的方法,找出不同因素的之间的强相关关系,并利用这些关系推断出哪些因素是根本原因。

当故障和问题发生时,智能分析功能基于智能算法给出当前问题事件的故障根因推荐,并将问题事件的相关故障信息汇集到一个页面,根因分析结果可以帮助运维工程师快速确定故障的根因,并迅速对故障进行修复,降低损失。

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

基于机器学习的异常检测与分析技术 的相关文章

  • 一些简单的JavaScript加密/解密

    UTF8编码与解码 xff1a span class hljs function span class hljs keyword function span span class hljs title encodeUTF8 span spa
  • git的基本操作

    新上手一个项目 xff0c 难免会忘记git的一些操作指令 xff0c 于是趁现在工作不是很忙 xff0c 自己便整理一下git的一些基本指令 git拉取远程数据 xff0c 并建立新的分支 git clone url 克隆远程仓库代码 g
  • git clone 加速方法

    查询github global ssl fastly net和github com的IP 安装查询工具 xff1a sudo apt install dnsutils nslookup github com nslookup github
  • javascript性能优化(7)

    Ajax 异步 JavaScript 和 XML Ajax 是高性能 JavaScript 的基石 它可以通过延迟下载大量资源使页面加载更快 它通过在客户端和服 务器之间异步传送数据 xff0c 避免页面集体加载 它还用于在一次 HTTP
  • javascript性能优化(8)

    Programming Practices 编程实践 避免二次评估 JavaScript 与许多脚本语言一样 xff0c 允许你在程序中获取一个包含代码的字符串然后运行它 有四种标准 方法可以实现 xff1a eval xff0c Func
  • 编写可维护的JavaScript-编程风格

    可以使用JSHint对代码进行检查 代码规范可以是使开发更高效 基本的格式化 缩进层级 使用制表符进行缩进 Tab使用空格进行缩进 语句结尾 是不是使用分号看个人喜好 xff0c 书上推荐是不使用 xff1b 但是jshint等工具 xff
  • 编写可维护的JavaScript-编程实践

    UI层的松耦合 1 将JavaScript从css中抽离出来 xff1b 现在大部分已经不支持 xff1b 2 将css从JavaScript中抽离出来 不要直接在js内添加样式 xff1b 如 xff1a e style color 61
  • 编写可维护的JavaScript-自动化

    自动化的利弊 优点 xff1a 本地的源代码不必同生产环境保持一致 xff0c 所以你可以任意组织你的代码结构而不必担心在服务器上使用的代码是否需要优化 静态分析可以自动发现错误 在部署之前有多种方式处理JavaScript xff0c 比
  • ECMAScript 6 入门-Babel

    配置文件 babelrc 直接在项目的跟目录下建立 babelrc的文件 xff1b 具体方法 xff1a 可以在控制台输入echo null gt babelrc xff1b 回车即可 该文件用来设置转码规则和插件 xff0c 基本格式如
  • ECMAScript 6 入门-变量的解构赋值

    数组的解构赋值 原文链接 详细的内容我就不说了 xff0c 大家自己打开链接自己看看吧 xff0c 我再怎么说也是拾人牙慧 xff1b 我只是摘抄一段放入博客内吧 xff1b 用途 变量的解构赋值用途很多 xff08 1 xff09 交换变
  • ECMAScript 6 入门-字符串的扩展

    codePointAt charAt 方法可返回指定位置的字符 用法 xff1a stringObject charAt index xff1b 参数 xff1a index 必需 表示字符串中某个位置的数字 xff0c 即字符在字符串中的
  • ECMAScript 6 入门-正则的扩展

    原文http es6 ruanyifeng com docs regex 正则的扩展 字符串的正则方法 字符串对象共有 4 个方法 xff0c 可以使用正则表达式 xff1a match replace search 和split matc
  • ECMAScript 6 入门-函数的扩展

    原文链接http es6 ruanyifeng com docs function 函数参数的默认值 ES6 允许为函数的参数设置默认值 xff0c 即直接写在参数定义的后面 function span class hljs keyword
  • CentOS 云镜像 CloudImage 版本对应下载

    因为要在OpenStack内创建CentOS 7 4的qcow2格式镜像 xff0c 所以去http cloud centos org centos 7 images 上下载 发现没有显式的标明CentOS 版本 xff1a 不过 xff0
  • ECMAScript 6 入门-数组的扩展

    原文http es6 ruanyifeng com docs array Array from 扩展运算符 扩展运算符 xff08 spread xff09 是三个点 xff08 xff09 它好比 rest 参数的逆运算 xff0c 将一
  • 使用递归-实现二维矩阵数组

    废话不多说 xff0c 直接上代码 xff1a 函数递归 把 1 2 3 4 5 6 得到 1 3 5 1 3 6 1 4 5 arr 需要递归的数组 1 2 3 4 5 6 function diguiArrData arr if arr
  • 微信小程序使用图标

    微信小程序使用阿里巴巴图标 因为业务需求项目上要使用一些图标 xff0c 下面简单的介绍一下使用方法 首先登陆自己的iconfont的账号 阿里巴巴矢量图标库在图标管理我的项目中查看 下载并保存文件iconfont css xff1b 把文
  • 微信小程序自定义组件-事件

    文档地址https developers weixin qq com miniprogram dev framework custom component 页面 page span class hljs preprocessor wxml
  • 微信小程序scroll-view左右滚动

    官方只有一个HTML的代码演示 xff0c 而css没有 xff1b 自己根据官方的HTML代码 xff0c 尝试几个方案 xff0c 都GG了 xff1b 最后实现成功 xff1b 因为需要用到scroll top的特性 xff1b 所以
  • 微信小程序去除button边框

    因为一些业务逻辑需要去除button边框 xff1b 这里试了几种去除的方式 xff1b 发现只有 span class hljs tag button span span class hljs pseudo after span span

随机推荐

  • 微信小程序-经纬度逆解析详细地址

    业务需求需要将经纬度解析为详细地址 xff0c 去年使用的是百度地图 xff0c 今年发现腾旭地图也更新了微信小程序的地图的接口 xff1b 1 http lbs qq com guides startup html 申请腾讯地图的key
  • 微信小程序-上传图片转base64

    最近业务需要 xff1a 将图片转为base64格式 so xff1b 百度n多资料最后写成 xff0c 还是有一点小bug就是生成的图片不太清晰 xff1b 文章最后还有代码的下载地址 参考资料 xff1a 微信小程序文档 wx canv
  • 数据结构和算法

  • 马原笔记-第三章

    实践与认识及其发展规律 实践与认识实践认识从实践到认识从认识到实践实践与认识的辩证运动及其规律 真理与价值真理真理的客观性真理的绝对性和相对性及其辩证关系真理的检验标准 价值真理和价值在实践中的辩证统一关系 认识世界和改造世界认识世界和改造
  • Debian9系统上 基于Qt5.12.1 开发的QML界面程序 无法输入中文

    问题背景 xff1a 使用QT的QML开发出来的客户端程序无法在TextEdit框输入中文 xff0c 当鼠标聚焦到输入光标后 xff0c 压根切换不了中文输入法 网上找了一大堆 xff0c 尝试了各种方案 xff0c 终于解决了问题 至此
  • react面试题

    请写一个函数 xff0c 获取当前url的参数值 xff0c 必须支持以下功能 xff1a 如果传了参数名则获取此参数名对应的参数值 xff0c 如果不传 xff0c 则获取所有参数 span class hljs comment 比如 x
  • webpack4+react+antd从零搭建React脚手架(三)-路由搭建

    react router 还是 react router dom xff1f 在 React 的使用中 xff0c 我们一般要引入两个包 xff0c react 和 react dom xff0c 那么 react router 和 rea
  • 2018秋季面试总结

    最近几天一直在找工作 xff0c 今天把面试遇到的问题一个一个的整理下来 基础问题 xff08 css html js xff09 算法问题 xff1a 使用一个for循环 xff0c 找出一个数组里面第二大的值 当时没有想出来 xff0c
  • js实现数组去重-ES6实现

    方法一 xff1a function unique arr const res 61 new Map return arr filter a 61 gt res has a amp amp res set a 1 就这么短 xff0c 就可
  • vue 报错 Avoid mutating a prop directly since the value will be overwritten whenever the parent compo

    Vue报错 xff1a Avoid mutating a prop directly since the value will be overwritten whenever the parent component re renders
  • 老男孩全栈Python开发

    地址 视频地址 p34 28 05
  • js实现文件分片上传

    span class token operator lt span span class token operator span span class token constant DOCTYPE span html span class
  • python实战-VScode环境搭建

    环境搭建 xff08 VScode xff09 以前用的是pycharm的专业版 xff0c 后来搞得破解不了了 xff0c 花了几个小时研究了一下怎么用VScode来搭建python开发的环境 开始之前 xff1a 装好python环境确
  • nginx部署多个vue项目

    上一篇已经介绍了然后配置web项目 xff1b 今天由于公司需求 xff0c 需要在同一域名端口下 xff0c 部署两个项目 xff1b 今天花了一上午终于弄好了 xff0c 选择赶紧做一个笔记 如何连接阿里云服务器就不在这里说了 xff0
  • 汇编语言

    基础知识 1 1机器语言 计算机的机器指令是一列二进制数字 计算机将之为转变为一列高低电平 xff0c 以使计算机的电子器件受到驱动 xff0c 进行运算 1 2 汇编语言的产生 程序员 汇编指令 编译器 机器码 计算机 1 3 汇编语言的
  • Bootloader概述

    Bootloader概述 分类 xff1a 嵌入式 Bootloader概述 Bootloader的含义 PC机上 windows linux 引导过程简介 嵌入式Bootloader 介绍与分析 嵌入式bootloader 介绍 Boot
  • vue SEO优化

    第一 xff0c ssr vue官方文档给出的服务器渲染方案 xff0c 这是一套完整的构建vue服务端渲染应用的指南 xff0c 具体参考https cn vuejs org v2 guide ssr html 第二 xff0c vue
  • 阿里云ubuntu 16.0402 安装mysql

    参考文献 阿里云服务器Ubuntu 16 04 3安装mysql如何远程连接阿里云上mysql数据库 出错10061 阿里云ubuntu 16 0402 安装mysql 前提 xff1a 装上Xshell xff0c winscp等远程工具
  • 阿里云开发工具汇总

    阿里云Ubuntu16 04 安装pip span class token function wget span https bootstrap pypa io get pip py python get pip py 阿里云Ubuntu1
  • 基于机器学习的异常检测与分析技术

    传统的运维方式在监控 问题发现 告警以及故障处理等各个环节均存在明显不足 xff0c 需要大量依赖人的经验 xff0c 在数据采集 异常诊断分析 故障处理的效率等方面有待提高 本关键技术面对传统运维故障处理效率低 问题定位不准确 人力成本高