写点什么

创造程序的“白衣天使”(下)

  • 2019-09-11
  • 本文字数:2650 字

    阅读完需:约 9 分钟

创造程序的“白衣天使”(下)

在上一篇《创造程序的“白衣天使”(上)》文章中我们主要介绍了一种在服务发生故障时自动排查监控指标的算法,算法的第一步利用了概率统计的方式估算每个指标的异常分数,第二步用聚类的方式把异常模式相近的实例聚集在一起形成摘要,第三步用 ranking 的方式向工程师推荐最有可能是根因的摘要。


由于运维场景的特点是数据量大,但是标定很少,生成标定的代价高昂而且容易出错,所以我们综合利用了概率统计、非监督学习和监督学习的方法解决问题,在尽量减少训练数据的前提下取得了良好的效果。


在离线实验的 70 个故障案例中,我们的算法能够把 60 个案例的根因摘要 rank 在第一位,显示出了算法强大的生命力。

异常检测算法

异常检测算法是我们整个自动排查监控指标工具的核心,它需要解决跨实例跨指标的异常程度比较问题。这涉及一个本源的问题:什么是异常?


请闭上眼睛想 1 分钟,再接着往下看。


是不是觉得这个问题似乎不大好回答?作者也拿这个问题为难过不少人。有的人说异常就是不正常呗,但是正常是什么就说不清楚了。有的人说,你给我一些具体的数据我能告诉你哪些是异常,但是脱离具体数据抽象的说不出来。还有人一上来就说,这个问题还真是从来没想过。


正所谓“少见多怪”,说的是因为很少见或者干脆没见过,所以觉得奇怪。又有说“司空见惯”,说的是天天见,所以就习惯了。这两个成语表达的就是不常见的事情容易被看成是怪的,常见的事情就不怪了。换成数学的语言就是:小概率事件是异常,大概率事件是正常。虽然这个说法不是百分之百准确,但是大部分时候还就是这样。所以,衡量指标的异常程度可以用观测到指标值的概率来描述,既然是概率,当然是可以比较的,而且可以跨实例、跨指标地比较。


指标值的观测概率可以从多个不同的角度来建模计算,这里我们主要关注突增突降的情况。指标的突增突降是很容易被人所理解的。比如,工程师们很容易就同意图 1 中的指标有异常。另一方面,许多故障都会体现在某些指标的突增突降上。最关键的是,计算指标的突增突降对应的观测概率是比较容易的,很适合我们这种需要扫描大量指标的场景。



图 1 CPU_WAIT_IO 的突增说明出现了磁盘竞争






为了方便计算和人的查看,通常会计算概率的对数。概率的对数都是负数,大家看正数比较自然,所以我们就把概率的对数的负数作为异常分数


上溢分数:



下溢分数:



剩下的问题就是如何确定 X 的分布了。常用的办法是假设服从正态分布,并{xi}利用估计正态分布的两个参数



最后计算基于 Yj 计算 Z 检验的统计量



Zj 服从以 0 为均值,以 1 为标准差的正态分布 N(0,1)。可以通过正态分布来计算单点的上溢概率和下溢概率





这里 k 是一个正数,用来控制 Beta 分布的形状。k 越大,Beta 分布越尖;k 越小,Beta 分布越平坦。


有了概率密度函数,单点的概率就可以利用积分计算了


聚类

在为每个指标计算异常分数之后,我们把属于同一个实例的指标的异常分数合起来,形成一个异常分数的向量



这里的每一个下标对应一个指标。


为了便于工程师阅读,我们需要把异常模式差不多的向量通过聚类的方法聚在一起。聚类是无监督学习(Unsupervised Learning)的典型方法之一。与监督式学习(Supervised Learning)不同,聚类不能通过样本的标记(Label)来控制输出的结果,所以控制聚类方向的核心就落在了距离函数和聚类算法上。


距离函数的选择很多。通常的有欧氏距离,或者更加一般的 Lp 距离;计算向量之间夹角大小的余弦(cosine)距离;甚至可以使用相关系数来度量两个向量之间的距离。当属于同一个模块的不同实例之间负载几乎完全相同时,欧式距离就应该能给出不错的结果。但是,实际中实例之间的负载总是会有差别,这就使得同样的异常模式在不同的实例上表现出不同的异常分数,欧式距离就会使聚类的效果打折扣。这时,相关系数是一个不错的选择。Pearson Correlation 计算两个实例对应异常分数的相关性,同时能够忽略数值的绝对水位。Spearman Correlation 首先将一个实例指标按照异常程度排序,然后计算两个实例异常程度排序之间的相关性。在我们的实验中 Spearman Correlation 的效果是不错的。


在聚类算法上,由于我们事先无法知道有多少种不同的异常模式存在,K-means 显然就不是一个很好的选择了。层次聚类和 DBSCAN 都不需要预先设定聚类的个数,能更好地适应我们的需求。在实验中,我们采用了 DBSCAN,确实得到了很好的效果。


聚类时,理论上我们可以把所有模块的所有实例放在一起聚类。在实验中我们发现这样的聚类结果有时候也还可以,而且它可以发现跨模块的问题,比如由于网络故障导致多个模块之间通信收到影响最终产生整个系统的故障。但是,这种方法也在不少情况下的输出并不好。所以,我们采用了相对保守的方式,将聚类局限在属于同一个模块、同一个机房的实例中。

排序(Ranking)

聚类算法把异常模式相似的实例聚到了一起,形成摘要。每个摘要已经具备一定的可读性,我们只需要把属于根因模块的摘要排在前面推荐给工程师就大功告成了。


排序算法考虑的因素有以下三个:


1.摘要中实例的个数,实例越多说明影响越大,就越有可能是根因;


2.摘要中异常分数特别高的指标的个数,指标越多越可能是根因;


3.摘要中各实例指标的平均异常分数,平均分数越高越可能是根因。


将以上三个因素的值计算出来,就形成了三个 feature。我们只需要用通常的方法训练一个 ranker 就可以了。


表格 1 中是错误!未找到引用源。 所示的那个故障案例的自动分析结果。标中的第一列是摘要所属的模块与机房,第二列是摘要中实例在同模块同机房的实例中所占的比例,第三列是摘要中的实例列表,第四列是异常分数特别高的指标以及它们的异常分数。我们的算法确实把根因模块 G 中的一个摘要最为第一个推荐出来了。通过第四列的内容,我们可以看出机房 DC1 中的 G 模块因为某种原因超载了。G 超载后,它对上游模块的响应变慢,从而使得同机房中的 E 模块不得不维护更多的 RPC 连接,所以同机房的 E 模块被拍在了第二位,而且与网络连接数相关的指标也确实出现了异常。


表 1 故障的排查分析结果


总结

故障诊断作为智能运维中的一个典型的复杂场景,一直是众多运维工程师的努力方向。本文介绍的指标自动排查算法表明,除了机器学习之外,概率统计也将会在智能运维中占据重要的位置。


关于故障诊断的研究,如有任何想法和疑问,欢迎留言一起交流。


作者介绍:


运筹,百度资深数据架构师,负责百度智能运维算法和策略的研究工作,致力于用算法和数据的力量解决运维问题。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/IoqiLVA4rQiymyoulGIU9A


2019-09-11 19:431010

评论

发布
暂无评论
发现更多内容

CleanMyMacX4.12.5中文版苹果电脑管家

茶色酒

CleanMyMacX4.12.5

ChatGPT入门案例|商务智能对话客服(二)| 社区征文

TiAmo

openai ChatGPT

使用自定义的初始化方法宏(OC)

刿刀

飞桨框架v2.4 API新升级!全面支持稀疏计算、图学习、语音处理等任务

百度Geek说

API 框架 3D点云 企业号 2 月 PK 榜 Sparse Transformer

拥有了瓴羊Quick BI,企业的数据分析变得更好

巷子

利用DUCC配置平台实现一个动态化线程池

京东科技开发者

spring 多线程 代码 动态线程池 ducc

更专业、安全、可控!政企都选择WorkPlus私有化部署

WorkPlus

连续两年榜上有名!TDengine 荣获墨天轮“2022 年度时序数据库”奖项

TDengine

数据库 tdengine 时序数据库

国际财务系统基于ShardingSphere的数据分片和一主多从实践

京东科技开发者

数据库 数据分片 ShardingSphere 企业号 2 月 PK 榜 一主多从

什么是网关型堡垒机?与运维审计堡垒机有什么区别?

行云管家

堡垒机 堡垒机网络安全

黑龙江哈尔滨市等保测评机构有五家啦!名单看这里!

行云管家

等保 机构 等保测评 哈尔滨

使用了瓴羊Quick BI,数据分析的效率有效提升

夏日星河

Maven Shade插件relocation修改类常量的问题

Laughing

Java 后端 Maven-Shade-Plugin RelocationClass

电阻为什么都是4.7kΩ、5.1kΩ,而不是整数5kΩ?

元器件秋姐

科普 元器件 元器件知识 电阻 电阻值

QCon演讲实录(下):多云管理关键能力实现与解析-AppManager

阿里云大数据AI技术

大数据 运维 多云服务 多云管理

多款社交黑马海外霸榜,融云全球通信服务护航登顶

融云 RongCloud

GuitarPro2024免费版吉他打谱工具

茶色酒

GuitarPro

大规模即时云渲染技术,追求体验与成本的最佳均衡

阿里云视频云

云计算 云渲染 云庙会

炸了!3年图片都没了

艾小仙

完美主义者友好!合合信息旗下扫描全能王“智能擦除”照片中的杂物

合合技术团队

人工智能 图片 文本

极客时间运维进阶训练营第十四周作业

9527

面试必问:JVM 如何确定死亡对象?

王磊

java面试

我不想再传递 nameof 了

newbe36524

C# Docker Kubernetes

可靠、稳定、安全,龙蜥云原生容器镜像正式发布!

OpenAnolis小助手

开源 容器 云原生 镜像 龙蜥社区

瓴羊Quick BI可视化功能,满足企业的数据分析需求

对不起该用户已成仙‖

有了瓴羊Quick BI,企业再也不必担心可视化分析情况

小偏执o

EasyRecovery2023新版本有哪些新功能?

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

MASA Stack 1.0 发布会 —— 社区问题解答

MASA技术团队

.net stack 应用现代化 MASA

飞桨特色产业级模型库助力AI开发与落地更简单

飞桨PaddlePaddle

paddle 开源 模型 飞桨

WorkPlus即时通讯集成工作平台,提效企业一体化管控

WorkPlus

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.4版已发布

JackJiang

即时通讯 即时通讯IM

创造程序的“白衣天使”(下)_文化 & 方法_运筹_InfoQ精选文章