根因分析调研

根因分析调研【7-10】


相对异常检测来说,根因分析的资料相对来说比较稀少,以下是整理了相对来说资料比较详细的内容。
通过这些资料可以了解到,根因分析具体需要做哪些工作?
故障根因分析是指根据故障传播图快速找到当前应用服务 KPI 异常的根本触发原因。故障根因分析系统找出异常事件可能的根因以及故障传播链后,运维专家可以对根因分析的结果
进行确定和标记,从而帮助机器学习方法更好地学习领域知识。这一系统最终达到的效果是当故障发生时,系统自动准确地推荐出故障根因,指导运维人员去修复或者系统自动采取修复措施

实例分析1——清华aiops竞赛网站

根因定位赛题

实例分析2——美团根因分析文章

根因分析初探:一种报警聚类算法在业务系统的落地实施

实例分析3——腾讯

每天5万条告警和900万的监控指标,腾讯AIOps怎么破?

实例分析4——清华

清华AIOps新作:蒙特卡洛树搜索定位多维指标异常

实例分析5——微软亚洲研究院

MSRA AIOps多维指标突变定位: iDice

实例分析6——乌普萨拉大学

Root-cause analysis through machine learning in the
cloud

实例分析7——论文

Survey on Models and Techniques for Root-Cause
Analysis

基于机器学习的智能运维
HotSpot: Anomaly Localization for Additive KPIs
With Multi-Dimensional Attributes

实例分析8——频繁项集开源

python开源

单维属性kpi异常定位

单维属性kpi异常定位,由于单维的指标已经无法再往下进行细化,但是我们可以把多个单维指标组合起来,来用一个组合数据表述某个模块的状态,一旦发生异常,随即进行根因分析。

单维指标如果发生异常,往往也并非是单维指标自身发生了异常,也可能是由于其他指标发生了异常,比如其调用关系链上的指标集合以及依赖关系上的指标集合,另外我们还可以人为进行指标集合划分。

那么,我们如何在单维指标kpi上进行异常定位了??

如何落地?

[外链图片转存失败(img-Pph6GexH-1562902812849)(./1562743189446.png)]
比如说,我们针对我们已经有了的异常数据,这个数据是10.1.10.113主机异常;

针对这个数据,我们如何进行处理操作?

制作频繁项集

频繁项集 经常一起出现异常的指标集合

时间窗口频繁项集
2019-07-09 19:39cpu.iowait.avg1
2019-07-09 19:40net.if.in.bytes,net.if.out.bytes
2019-07-09 19:41cpu.system.avg1,net.if.in.bytes.net.out.bytes
2019-07-09 19:42net.if.out.bytes

通过对历史异常数据进行窗口划分,得到频繁项集数据

支持度

通过对频繁项集的集合进行遍历,我们可以得到以下支持度:

集合支持度
cpu.iowait.avg11/4
net.if.in.bytes2/4
net.if.in.bytes,net.if.out.bytes2/4
net.if.out.bytes3/4

也就是说一个集合子集在所有频繁项集中出现的次数占项集个数的比例

可信度计算

可信度计算就是最终求得关联关系强弱的评判标准,
比如{net.if.in.bytes}–>{net.if.out.bytes} 这条关联规则的可信度就是用二者的支持度除以前者的支持度,公式就是
s ( n e t . i f . i n . b y t e s → n e t . i f . o u t . b y t e s ) = s ( n e t . i f . i n . b y t e s ∪ n e t . i f . o u t . b y t e s ) s ( n e t . i f . i n . b y t e s ) s(net.if.in.bytes \rightarrow net.if.out.bytes)=\frac{s( net.if.in.bytes\cup net.if.out.bytes)}{s(net.if.in.bytes)} s(net.if.in.bytesnet.if.out.bytes)=s(net.if.in.bytes)s(net.if.in.bytesnet.if.out.bytes)

通过对可信度的计算,我们就大概知道从一个指标异常导致另外一个指标异常的可信度是多少,这样就能够在寻找某一个指标异常根因的时候,减少人工耗时,而选用这种方式。

频繁项分析两种实现方式

  1. Apriori算法
  2. FP-growth算法
    第二种算法是对第一种算法的性能上优化,减少搜索以及计算成本,提高性能。

具体资料详见:
算法详解

HotSpot-多维属性的kpi异常定位

这篇论文讲的,在多维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中

在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式开发技术的调研分析可以从以下几个方面进行: 1. 硬件平台:嵌入式系统通常基于特定的硬件平台,如微控制器、单片机、FPGA等。调研不同硬件平台的特点、性能、功耗等指标,以确定最适合项目需求的硬件平台。 2. 编程语言:嵌入式开发可以使用多种编程语言,如C、C++、Python等。调研不同编程语言在嵌入式领域的应用情况、性能表现和开发工具支持,以确定最合适的编程语言。 3. 实时操作系统(RTOS):嵌入式系统通常需要实时性能和可靠性。调研不同RTOS的特点、功能和支持的硬件平台,以确定最合适的RTOS。 4. 通信协议:嵌入式系统通常需要与其他设备或系统进行通信。调研不同的通信协议,如UART、SPI、I2C、CAN、Ethernet等,以确定最适合项目需求的通信协议。 5. 传感器和外设:嵌入式系统通常需要与各种传感器和外设进行交互。调研不同类型的传感器和外设,如温度传感器、加速度计、摄像头等,以确定最适合项目需求的传感器和外设。 6. 调试和测试工具:嵌入式开发过程中,调试和测试是非常重要的环节。调研不同的调试和测试工具,如仿真器、调试器、逻辑分析仪等,以确定最合适的工具来提高开发效率和调试能力。 7. 低功耗优化:嵌入式系统通常需要在有限的能量供应下工作。调研低功耗优化技术,如睡眠模式、功耗管理策略等,以确保系统在低功耗状态下能够正常工作。 通过对以上几个方面的调研分析,可以帮助选择合适的嵌入式开发技术,并确保开发出高性能、可靠和节能的嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值