HotSpot-多维属性的kpi异常定位(根因分析)

2023-05-16

最近公司有这方面的需求,所以,就找一些论文和资料来了解一下在异常检测基础之上,如何做到对异常或者故障的根因分析。

有两种根因分析的需要,一种就是单指标异常检测,就是指标就是一维的这种,如果这种指标发生异常,直接就能够锁定到相关时间,位置,如果这种做异常检测,自然就需要升维,就是比如说,同时针对几个指标来进行,用窗口划分,然后看看同一时间段,都有哪些指标发生异常,然后这些窗口内的数据就组成原始处理数据,后续再处理。

一种就是这篇论文讲的,在多维kpi上进行根因定位,如果某一个多维kpi发生异常,你怎么知道具体是哪些属性发生了变化,是哪些属性导致了最终的异常的发生了?

这也就是这篇文章要解决的问题。

HotSpot: Anomaly Localization for Additive KPIs With Multi-Dimensional Attributes

这篇文章是裴丹老师他们发表的一篇文章,时间在2018年。

两个挑战

1、不同组合的多维指标相互依赖,对于定位多维指标异常是在哪一个聚合层次导致了多维指标发生改变是困难的;
2、当多维指标的纬度大到一定程度,会有成千上万的不同组合是可能导致异常发生的原因,其搜索空间巨大,找到导致异常发生的组合也是困难的;

整体思路

针对以上两个挑战,该论文提出了两个主要的解决办法,
1、基于异常传播的波动影响力计算可能性分值,来解决第一类问题;
2、用蒙特卡罗搜索树算法以及分级(hierarchical)剪枝策略来解决第二类问题;

效果

百分之九十五类型的根因分析,F值能够超过0.9,运维人员的体验显示,该算法能够把根因定位时间从人工1个小时降低到20s。

主要内容

基本概念介绍

pv -page view

术语定义标记例子
属性每一个pv记录的信息类别----省份(P),ISP(I),数据中心(D),频道(C)
属性值每一个属性可能的值----比如对于省份(北京,上海,广东)
元素对于每一个属性的不同值组合向量e=(p,i,d,c)例如(北京,* ,* ,*)
PV 值一个元素的访问数量v(ei)v(beijing,* ,* ,*)
预测值用历史值预测一个元素未来数值f(ei)f(beijing, * ,* ,* )
数据立方体多维数据的数据结构n-d 立方体一个4维数据立方体(p,i,d,c)
立方体所给纬度的子集Bi比如(Bi,Bp,j,Bp,i,d,w)
可能性分值用来衡量一组元素是根本原因的可能性psps(S),S={(beijing, * , * , * ),(* ,mobile, * , *)}

PV 记录

一段时间内的pv日志记录
通过对这些日志记录的统计,比如说,按照每分钟的统计,我们可以得到下边的统计结果:
在这里插入图片描述
通过对一段时间内的如上日志统计,我们会得到下边的数据结构
在这里插入图片描述
针对四维的PV数据立方体,我们看一下,它可以表示为两个三维立体
在这里插入图片描述
对于我们目前一直在谈论的page views的子集组合以及其层次,我们可以分为四个层次

在这里插入图片描述

问题再表述
对于多维kpi,异常定位问题,就是找到导致总kpi数值发生异常变化的最有可能的组合子集。

在这里插入图片描述

挑战

1、如何衡量一个组合会成为根本原因的方式,这种方式并不容易,
如上面图所示,直觉的会感觉用变化比例,但是这个并不好用。
文中用h(e)来表示一组组合变化
比如h(total)=25
之所以不用变化比例,是因为有的不同组合有可能变化比例相同,难以分清两个,那个可能是根因的可能性大
2、有很多集合需要被比对,
之所以很多集合需要被计算,去比对,因为ps这个指标不具备可分解特性,比如ps({e1,e2})!=ps({e1})+ps({e2})

蒙特卡罗搜索以及分级剪枝

论文作者受到MCTS在alphaGo上的优秀表现启发,所以准备使用这种方法来在搜索空间中进行最可能根因搜索,而分级剪枝则是受到以下直觉启发:
如果父亲组成集合不可能是根因组合,那么说明它的每一个孩子组合都不可能是是根因组合。

hotspot架构全览

在这里插入图片描述

依赖

这种方法依赖异常检测以及预测,虽然有了对于不同组合的统计,但是如果没有相对应的预测值以及检测方法,那就不知道异常是什么,那就无法针对该异常进行根因分析。

三大核心步骤

可能性分数计算

在这里插入图片描述
我们可以看到这个整体的变化都是由于(beijing,*)造成的,
v ( x i ′ ) = f ( x i ′ ) − h ( x ) × f ( x i ′ ) f ( x ) , ( f ( x ) ≠ 0 ) v\left(x_{i}^{\prime}\right)=f\left(x_{i}^{\prime}\right)-h(x) \times \frac{f\left(x_{i}^{\prime}\right)}{f(x)},(f(x) \neq 0) v(xi)=f(xi)h(x)×f(x)f(xi),(f(x)̸=0)
x是一个完整的集合,x‘ 是一个集合中的子集,如果一个组合发生了变化,那么其子集肯定对这个整体的变化有变化贡献,通过以上方式可以计算不同子集的变化贡献。

可能性分数计算
1、假设某个组合是根因
2、新降低的pv数值,
3、比对新降低的pv值与实际的pv值,越相近,是异常的可能性越大

 Potential Score  = max ⁡ ( 1 − d ( v ⃗ , a ⃗ ) d ( v ⃗ , f ⃗ ) , 0 ) \text { Potential Score }=\max \left(1-\frac{d(\vec{v}, \vec{a})}{d(\vec{v}, \vec{f})}, 0\right)  Potential Score =max(1d(v ,f )d(v ,a ),0)

可能性分数的范围就是0-1,分数值越高,是根因的可能性越大

蒙特卡罗搜索

在这里插入图片描述

  1. 选择
    先计算每一个组合的可能性分数,然后进行排名,
    Q ( s , a ) = max ⁡ u ∈ { s ′ } ∪ d e s c e n d e n t ( s ′ ) p s ( S ( u ) ) Q(s, a)=\max _{u \in\left\{s^{\prime}\right\} \cup d e s c e n d e n t\left(s^{\prime}\right)} p s(S(u)) Q(s,a)=u{s}descendent(s)maxps(S(u))
    a = arg ⁡ max ⁡ a ∈ A ( s ) { Q ( s , a ) + C ln ⁡ N ( s ) N ( s , a ) } a=\underset{a \in A(s)}{\arg \max }\left\{Q(s, a)+C \sqrt{\frac{\ln N(s)}{N(s, a)}}\right\} a=aA(s)argmax{Q(s,a)+CN(s,a)lnN(s) }
    Q(s, a)执行步骤a的数值,数值越大,执行步骤a的可能性越大

  2. 扩展
    当一个状态s被选择之后,开始进行扩展,增加新的节点S’
    S ( s ′ ) = S ( s ) ∪ { e ∗ } S\left(s^{\prime}\right)=S(s) \cup\left\{e^{*}\right\} S(s)=S(s){e}
    e ∗ = max ⁡ e ∈ { e 1 , e 2 , … , e n } − S ( s ) p s ( e ) e^{*}=\max _{e \in\left\{e_{1}, e_{2}, \ldots, e_{n}\right\}}-S(s) p s(e) e=e{e1,e2,,en}maxS(s)ps(e)

扩展标准就是选择一个最大的e* 使得余下的组合有最大的ps(S)

  1. 评估
    初始化扩展后新的节点,计算ps,Q,N
  2. 回溯

进行以上四步骤,直到满足以下三个条件之一:

  1. 一个最好的组合找到了
  2. 所有可用的节点都被扩展了
  3. 迭代次数已经超过限制,

分级剪枝

之前我们就说过了这个剪枝策略,其实这个策略确实和apriori 频繁项集的确实很像,
为了降低计算成本,我们看个例子
在这里插入图片描述
假设在第一层,有两个数据
BSet1.Bp={(Fujiang, ),(Jiangsu, )} ps(BSet1.Bp)=0.5
BSet1,Bi={(
,Mobile),(
,Unicom)} ps(BSet1,Bi)=0.32

当在我搜索第二层的时候,{(Zhejiang,Unicom)} 就不用再计算了,因为{(Zhejiang, *)} 不在BSet中

在这里插入图片描述

在这里插入图片描述

评估

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

HotSpot-多维属性的kpi异常定位(根因分析) 的相关文章

随机推荐

  • 怎样设计celery任务在调用 revoke时记录任务状态

    你可以通过在任务函数中手动记录任务状态并在 revoke 时进行更新 可以使用数据库 如 MySQL PostgreSQL 或 MongoDB 存储任务状态信息 xff0c 然后在 revoke 时对其进行更新 下面是一个示例代码 xff1
  • Flutter中,怎么给Scaffold设置背景色

    在Flutter中 xff0c 可以通过在Scaffold的decoration属性中设置BoxDecoration并设置其color属性来设置Scaffold的背景色 例如 xff1a span class hljs built in S
  • 怎么将微信小程序项目转为uniapp项目

    将微信小程序项目转换为uni app项目需要以下几个步骤 安装uni app开发工具 xff1a HBuilderX在HBuilderX中创建一个新的uni app项目将微信小程序的代码复制到uni app项目的相应文件夹中在uni app
  • 介绍matlab的概要和功能介绍

    Matlab Matrix Laboratory 是一个由MathWorks公司开发的商业数学软件 xff0c 它提供了一系列的数学函数和算法 xff0c 可以帮助用户解决复杂的科学计算问题 主要功能包括数值计算 绘图和可视化 编程和应用程
  • 可以就无线定位的研究前沿给出一些介绍吗

    答 xff1a 当前 xff0c 无线定位技术的研究受到了越来越多的关注 它可以提供高精度的位置推断 xff0c 可以用于实时跟踪 边缘计算 导航和室内定位等许多应用场景 近年来 xff0c 基于深度学习的无线定位算法被广泛应用 xff0c
  • 生成十六进制数转二进制数的汇编语言

    以下是一个将十六进制数转换为二进制数的 x86 汇编语言程序的示例 xff1a span class hljs meta section span data span class hljs comment 定义要转换的十六进制数 span
  • 大模型扎堆涌现,AIGC 的价值到底是什么?

    ChatGPT 在 2023 年初爆红之后 xff0c AIGC 引发了各行业的热切关注 xff0c 国内的各类大模型不断推出 近日 xff0c 科大讯飞对外发布了 讯飞星火认知大模型 xff0c 现场不仅实测了文本生成 语言理解 知识问答
  • JAVAer的学习路径

    非常抱歉 我不能用中文回答您的问题 但是 我可以用英文为您介绍学习 Java 的一些建议 如果您是刚刚开始学习 Java 那么建议您从以下几个方面入手 安装 Java 开发环境 JDK 并配置环境变量 这样才能在电脑上开始写 Java 程序
  • 三阶线性自抗扰控制 (LADRC)的原理和推导过程

    三阶线性自抗扰控制 LADRC 是一种线性控制策略 xff0c 它通过计算系统的状态信息来生成控制输入 该策略的目的是通过使用自抗扰 即系统的内部参数 来实现系统的稳定 xff0c 并通过减少噪声的影响来提高系统的性能 在推导LADRC控制
  • 自制aruco识别码

    要自制Aruco识别码 xff0c 你可以使用Aruco库中提供的工具生成自定义识别码 这些工具可以在多种编程语言 如C 43 43 xff0c Python 中使用 xff0c 生成满足你的特定要求的识别码 一旦生成了识别码 xff0c
  • 无人机领域常用的控制算法有哪些

    无人机控制算法常用的有基于模型的控制 Model based Control 基于模糊控制 Fuzzy Control 基于模式识别 Pattern Recognition 神经网络控制 Neural Network Control 基于深
  • Docker创建Mysql容器,并添加root密码验证与更多用户

    使用代码 xff1a 创建Docker的mysql容器 span class token function sudo span span class token function docker span pull mysql span cl
  • 安卓 qemu 运行linux,Qemu运行linux 4.9

    1 git clone最新的Qemu代码到本地 xff1a ubuntu 64 ubuntu X556UB Qemu git clone git git qemu project org qemu git 正克隆到 39 qemu 39 r
  • android os 小米系统,小米全新 OS 自研底层,要挑战最强的 iOS 系统

    小米全新 OS 自研底层 xff0c 要挑战最强的 iOS 系统 2020 04 27 20 29 47 3点赞 1收藏 6评论 4月27日下午消息 xff0c 小米十年梦想之作全新 MIUI 12 操作系统正式亮相 xff0c 这款全新的
  • php函数strrchr,php strrchr函数怎么用

    PHP strrchr函数用于查找指定字符在字符串中的最后一次出现 xff0c 其语法是strrchr string char xff0c 参数string必需 xff0c 是规定要搜索的字符串 xff1b char必需 xff0c 是规定
  • mysql putty,Mysql和Putty – ERROR 1044(42000):拒绝用户访问

    我在命令行级别的mysql相当新 不幸的是 我已经设置的任务意味着我必须使用命令行 我通过PuTTY访问学校服务器 登录没有问题他们输入mysql p 登录正常 但是当我去创建数据库时 我得到了1044错误 我也试过root但也没有运气 l
  • 大模型battle?LLM排行榜出炉,清华竟位列第五!

    CSDN 编者按 自GPT爆火之后 xff0c 当下流行的开源大型语言模型越来越多 xff0c LMSYS 组织 xff08 UC伯克利博士Lianmin Zheng牵头举办 xff09 建立了 Chatbot Arena 基准平台通过匿名
  • html页面引用template组件,在Vue.js中定义组件模板的7种方法

    Vue js 使用了基于 HTML 的模板语法 xff0c 允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 所有 Vue js 的模板都是合法的 HTML xff0c 所以能被遵循规范的浏览器和 HTML 解析器解析 在Vue
  • 解耦是什么意思通俗点_在美国点餐会用到的“BLT”,你知道是什么意思吗?

    在美国餐厅 xff0c 服务员会如何向后厨传达你点的餐呢 xff1f 来看看这些都是什么吧 xff01 Photo provided to China Daily 1 BLT to go xff01 培根夹莴苣和番茄三明治外卖 原句 xff
  • HotSpot-多维属性的kpi异常定位(根因分析)

    最近公司有这方面的需求 xff0c 所以 xff0c 就找一些论文和资料来了解一下在异常检测基础之上 xff0c 如何做到对异常或者故障的根因分析 有两种根因分析的需要 xff0c 一种就是单指标异常检测 xff0c 就是指标就是一维的这种