用根因定位法,让运维效率再高一点!

‍‍

作者 | 中国农业银行研发中心 王哲

头图 | 下载于视觉中国

出品 | CSDN云计算(ID:CSDNcloud)

随着业务不断发展,微服务架构越来越受到各大企业的青睐,随之也给传统运维带来更大的挑战,多维KPI指标数量繁多、相互之间关系复杂,要想在故障发生后,第一时间定位到故障性能指标,只依靠人力排查的难度可想而知。

在几代运维人的不懈努力下,故障定位的方法也由传统的查日志、匹配历史解决方案,晋升为利用机器学习、深度学习等更加智能快捷的方法,进行异常检测、时序分析、根因定位,快速定位异常,极大缩短故障抢修时间,从而快速恢复服务。本文将从异常检测算法、相关性系数以及格兰杰因果分析三种方法出发,对故障根因进行初步的探索和实践。

异常检测算法——孤立森林和RRCF

根因定位问题的目标其实是要定位到某个网元发生的某种指标异常,那么将异常检测算法直接运用到根因定位问题中也是有效可行的,本章节将介绍孤立森林和Robust Random Cut Forest两种异常检测算法的应用。

众所周知,孤立森林(Isolation Forest)是一种高效的异常检测算法,它和随机森林比较相似,不同点在于每次选择划分属性和划分值时都是随机的,而不是根据信息增益或者基尼指数来选择。在构建树的过程中,如果一些样本很快就到达了叶子节点(即叶子到根的距离很短),那么就被认为很有可能是异常点。比如下图中,共有a,b,c,d四个指标,b和c的高度为3,a的高度为2,d的高度为1,d就有可能是异常,因为其最早就被孤立了。

下面展示该方法的代码实现:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest 
from scipy import stats# 读入数据
df = pd.read_csv(‘a.csv’)
rng = np.random.RandomState(42)
#定义样本总数
n_samples=10  
# 训练模型
clf = IsolationForest(max_samples=n_samples, random_state=rng, contamination=0.33)  #contamination为异常样本比例
clf.fit(df.values)
scores_pred = clf.decision_function(df.values)
# 测试
clf.predict(df.values)

RRCF(Robust Random Cut Forest)是以孤立森林为基础改造而来的,由于数据是持续产生的,那么数据时序特征也是不可忽视的重要特征,RRCF的优势就在于能更好地适用于流式数据。

大致的算法流程如下:首先对数据流进行采样,为保证数据的实效性,采用蓄水池采样策略判断出当前数据点是否参与异常检测建模,同时指定一个时间窗口长度,当建模的数据过期后,应该从模型中剔除掉;然后构建森林,人为指定采样点数量(如果使用RRCF的默认值,将会构建出一个由100棵树构成的森林,每棵树都从上一步的池中随机采样256个数据点);在森林构造完成后,将待处理的样本点放入森林中并计算异常分数,每个样本的异常分数代表包含或不包含该点的情况下,导致模型发生变化的程度,计算公式如下:

在无法很好的确定故障根因的情况下,可以考虑计算各个时间序列指标特征的RRCF异常分数,然后对其进行排序,得到的TOPN作为根因的候选值,再结合其他方法能够得到比较好的异常定位效果。

相关性系数

要进行故障诊断,完成根因定位,计算不同指标的相关系数势必会产生一定的帮助。比如在观测到响应时间、交易量等业务指标异常时,可以计算这一段时间内,与该业务指标相关性较高的的性能指标,这些高相关性的性能指标很有可能是引发这次故障的根因。当然,在实际使用时,需要结合实际情况或者前期训练的结果,设置相应的权重,决定其是否为真正根因。

计算相关性系数的方法有很多,例如Person相关、时间滞后互相关(TLCC)计算两个信号之间的方向性,动态时间扭曲(DTW)同步长度不同的信号、还有瞬时相位同步等方法,不同的方法将适用于不同的数据场景。本章节将以常用的Person相关为例展开实验,展现相关性系数的魅力。

两个连续变量(X,Y)的pearson相关性系数等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX,σY),系数的取值总是在-1到1之间,数字 -1(负相关)、0(不相关)和 1(完全相关)表示出它们之间的线性关系,相关系数的绝对值越大,相关性越强,也就是说,相关系数越接近于1或-1,相关度越强,相关系数越接近于0,相关度越弱。

下面展示一个在一段时间内不同指标之间的Person相关系数的方法,并根据两两指标间的系数大小,排序输出topn进行结果展示。

# 计算相关系数并进行可视化
def plot_corr(new_metric1):columns = [column for column in new_metric1]col_dic = {}for i in range(len(columns)):col_dic[columns[i]] = new_metric1[columns[i]]df = pd.DataFrame(col_dic)#画出曲线趋势图ax = df.plot()ax.legend(loc=2, bbox_to_anchor=(1.05,1.0),borderaxespad = 0.)plt.show()# 计算相关系数df_corr = df.corr()# 对相关系数排序输出sort_res = sort_corr(df_corr)# 可视化 cmap:YlGnBu RdPuimport matplotlib.pyplot as mp, seabornseaborn.heatmap(df_corr, center=0, annot=True, cmap='YlGnBu')mp.show()return df_corr, sort_res

下图1展示的是不同指标在一段时间内的趋势,图2展示的是这些指标之间的相关性系数热力图,并对相关系数设定一定的阈值,得到大于阈值的强相关性指标集。

['system.load.1',  'system.load.1.pct',  'system.cpu.pct_usage',  'system.cpu.user',  'system.load.norm.1',  'system.cpu.i_dle']

格兰杰因果分析

格兰杰因果关系作为一种可以衡量时间序列之间相互影响关系的方法,近十几年备受业界青睐。如果想知道两个序列之间是否具有因果性,可以用格兰杰因果检验(Granger causality test)进行分析。

格兰杰因果关系检验的是“统计学意义上”的因果性(时间上的先后),和我们日常语言逻辑中的因果关系并不能同一而论。从统计的角度上讲,因果关系是通过概率或者分布函数的角度体现出来的,在宇宙中所有其它事件的发生情况固定不变的条件下,如果一个事件 A 的发生与会对于另一个事件 B 的发生造成一定的影响,并且这两个事件在时间上又是先后发生的(A 前 B 后),那么我们便可以说 A 是 B 的原因。

举个生活中的例子:在下雷雨前往往会天气闷热,有“蚂蚁搬家”的现象发生,从统计学角度来讲,“蚂蚁搬家”和“下雷雨”之间存在因果关系,但并不能说“蚂蚁搬家”是“下雷雨”的原因,按照我们通常的逻辑来讲,“下雷雨”反而是“蚂蚁搬家”的原因。因此在使用该方法前,要明确格兰杰因果关系检验的是“统计学意义上”因果性的内涵。

下面展示使用Python的statsmodels中的grangercausalitytests实践,代码如下:

from statsmodels.tsa.stattools import grangercausalitytests
import pandas as pd
import numpy as np#生成数据
df = pd.DataFrame(np.random.randint(0, 100, size=(10, 2)), columns=['a', 'b'])
#格兰杰因果检验
grangercausalitytests(df[['a', 'b']], maxlag=2)

执行的结果为:

Granger Causality
number of lags (no zero) 1
ssr based F test:         F=5.7509  , p=0.0534  , df_denom=6, df_num=1
ssr based chi2 test:   chi2=8.6264  , p=0.0033  , df=1
likelihood ratio test: chi2=6.0496  , p=0.0139  , df=1
parameter F test:         F=5.7509  , p=0.0534  , df_denom=6, df_num=1Granger Causality
number of lags (no zero) 2
ssr based F test:         F=1.6759  , p=0.3246  , df_denom=3, df_num=2
ssr based chi2 test:   chi2=8.9380  , p=0.0115  , df=2
likelihood ratio test: chi2=6.0010  , p=0.0498  , df=2
parameter F test:         F=1.6759  , p=0.3246  , df_denom

对结果解读如下:

number of lags (no zero) 1:当lags为1时的检测结果

ssr based F test:残差平方和F检验

ssr based chi2 test:残差平方和卡方检验

likelihood ratio test:似然比检验结果

parr F testamete:参数 F 检验结果

根因定位在日常运维工作中起到的重要作用可以说是不言而喻,本文介绍了孤立森林和RRCF、相关性分析以及格兰杰因果关系三种根因定位的方法,也做了初步的算法探索与实践。相信随着研究的进一步深入,根因定位在智能运维领域的应用会更加广泛,我们也将为快速定位异常,大力而做出不懈的努力。

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

更多精彩推荐
☞5G、射频、奥特曼,这仨有联系吗?☞再见 Nacos,我要玩 Service Mesh 了!☞有没有不用加班的程序员?如何衡量程序员的工作量?
点分享点收藏点点赞点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础开发 nginx 模块

简介: 推荐学习资料: * nginx 开发指南: http://nginx.org/en/docs/dev/development_guide.html * nginx 动态模块编译博客文章: https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/ * nginx 源码: https://github.com/nginx 推荐学习资料: nginx…

勒索病毒如何防治?看阿里云双拳出击不留隐患

简介: 阿里云与合作伙伴Commvault联合发布勒索病毒防治解决方案,从公共云、混合云等场景入手,提供完善的解决方案 在众多的数据安全工作中,勒索病毒的防治是近几年备受关注的领域。从互联网诞生伊始,勒索病毒就相生相…

中国五大移动应用商店携手启动64位安卓生态迁移

为协助中国安卓开发者无缝对接全球64位开发环境,并进一步向终端用户提供最佳体验,中国五大移动应用商店(排名不计先后)—小米应用商店、OPPO软件商店、vivo应用商店、腾讯应用宝、百度手机助手,于今日共同宣布&#xf…

滴滴基于 Flink 的实时数仓建设实践

随着滴滴业务的高速发展,业务对于数据时效性的需求越来越高,而伴随着实时技术的不断发展和成熟,滴滴也对实时建设做了大量的尝试和实践。本文主要以顺风车这个业务为引子,从引擎侧、平台侧和业务侧各个不同方面,来阐述…

闲鱼直播三周内实现点击率翻倍,我们是这么做到的...

作者:闲鱼技术-莫癫 1. 业务背景 闲鱼直播业务上线后面临的最大问题是增长问题。闲鱼BI同学分析发现,对比短时观看和长时观看人群,发现两部分人群有较明显的兴趣阶段性差异。 业务希望在理解直播、主播和用户的基础根据兴趣对头部优质直播精…

Azure 中国四年扩容 12 倍还不够,微软放话:全球每年新建 50-100 数据中心!

数据已渗透到我们生活和工作的方方面面,如今全球正处于经济发展转型与变革的关键时期,数据作为数字经济的核心生产要素,无疑建设先进的数据中心是科技企业的硬核 IT 实力的有力保证,科技巨头纷纷强势布局数据中心: 据…

打造数字化服务能力,中国联通如何借助云原生技术实现增长突围?

简介: 中国联通与阿里云结合阿里云原生 PaaS、阿里飞天操作系统、阿里云原生数据库以及中国联通天宫平台,共同研发运营商级专有云平台“天宫云”,支撑中国联通核心业务应用。 8 月 13 日,中国联通发布《2020 年半年度报告》&#…

报名倒计时 | 「TeaTalk」技术沙龙成都站再来袭!

在5G浪潮驱动下,数据增长速度远远超过了网络带宽的增速。同时,增强现实、无人驾驶等众多新应用的出现对延迟提出了更高要求。边缘计算将网络边缘上的计算、网络与存储资源组成统一的平台为用户提供服务,使数据在源头附近就能得到及时有效的处…

爱奇艺在 Dubbo 生态下的微服务架构实践

简介: 本文整理自作者于 2020 年云原生微服务大会上的分享《爱奇艺在 Dubbo 生态下的微服务架构实践》,重点介绍了爱奇艺在 Dubbo、Sentinel 等开发框架方面的使用经验以及微服务生态体系的建设经验。 作者 | 周晓军 爱奇艺中间件团队负责人 导读&#…

记 Arthas 实现一次 CPU 排查与代码热更新

简介: 线上代码经常会出现 CPU 占用过高的情况,按以往经验我会使用 top 指令,进一步借助于 jstack 去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,及时是一个增量包,应用也需要短暂停…

灵活、高效、智慧,宁畅发布新品及“智定+”战略

4月21日,2021宁畅新品暨战略发布会在京举办,宁畅发布了新品服务器“G40”系列,并推出 “智定”战略。该战略旨在智能时代为用户提供灵活、高效、智慧的定制化基础设施和服务。 图:2021宁畅新品暨战略发布会现场 宁畅总裁秦晓宁介…

应用系统瓶颈排查和分析的思考-Arthas 实战

简介: 业务应用系统接入流程引擎来处理业务应用的流程执行,流程引擎提供多线程高性能异步化来执行流程元素的执行,但是如何设置流程引擎的线程池线程数执行,以及执行线程数和任务数,应用机器资源使用情况之间的关系如何…

Java 虚拟机诊断利器

背景 最近学习Java字节码过程中遇到了反射,有段代码是这样的: package com.example.classstudy;import java.lang.reflect.Method;/*** author TY*/ public class ReflectionTest {private static int count 0;public static void foo() {new Excepti…

IDC报告:中国公有云服务市场同比增长49.7%,领跑全球

IDC最新发布的《全球及中国公有云服务市场(2020年)跟踪》报告显示,2020年全球公有云服务整体市场规模(IaaS/PaaS/SaaS)达到3,124.2亿美元,同比增长24.1%,中国公有云服务整体市场规模达到193.8亿…

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

简介: Arthas 是阿里巴巴开源的应用诊断利器,提供了 profiler 命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。 作者 | 羽涅 阿里巴巴 CCO 技术部技术专家,承担 CCO …

Arthas 初探--安装初步适用

简介: 由于在项目中遇到一种情况,某段代码在进行单元测试和在 tomcat 容器中运行的性能相差数百倍,因此需要分析在不同环境下某个方法执行的具体时间,从而确定问题。Arthas 可以做到无侵入的监控应用远行情况。 作者 | agmtopy 由…

用 Arthas 神器来诊断 HBase 异常进程

1. 异常突起 HBase 集群的某一个 RegionServer 的 CPU 使用率突然飙升到百分之百,单独重启该 RegionServer 之后,CPU 的负载依旧会逐渐攀上顶峰。多次重启集群之后,CPU 满载的现象依然会复现,且会持续居高不下,慢慢地…

赠书 | 如何部署一个Knative Service

我们以一个go语言编写的程序代码为例,创建一个简单的Web服务,当该服务接收到HTTP GET请求时会根据环境变量TARGET传递的内容向response输出Hello $TATGET! 内容。1. 创建一个文件名为helloworld.go的文件。程序源码如下:package mainimport (…

一文读懂阿里云网络-SLB负载均衡新姿势

简介: 简介:负载均衡是洛神网络中最为关键的网元之一,其担负着网络流量分发的重任,有了它之后,用户在浏览应用的时候才能体会到“丝般顺滑”的感觉。欢迎免费体验SLB性能保障型负载均衡产品! 通过此文&…

聊聊缓存机制:双写兜兜转转,又回到了串行化

来源 | moon聊技术责编 | 寇雪芹头图 | 下载于ICphoto什么是双写?这个很好理解,双写就是说,一份数据在数据库存一份,在缓存中也存一份,给缓存一个过期时间,当读不到缓存时从数据库读出来然后写入缓存。为什…