写点什么

百度网络监控实战:多维度分析方法

  • 2019-08-02
  • 本文字数:2680 字

    阅读完需:约 9 分钟

百度网络监控实战:多维度分析方法

干货概览


在前一篇文章《百度网络监控实战 | 多维度分析应用场景》中,我们简单介绍了一种多维度分析方法,用于预选疑似故障区域,可以大幅减少网络监测的误报。在本文中,我们会结合网络监测数据的特点,详细介绍这种多维度分析方法的实现细节

逐层下钻分析

我们要寻找的维度组合具有贡献度高、一致性好两个特点,在寻找这些目标维度组合的时候,最直接的方式是逐个维度组合进行检测,但是网络监控里有几百万个维度组合,逐个检查会消耗很多时间。


我们可以从全局数据出发,选择最能区分成功、失败探测样本的维度进行下钻。在下钻的过程中,我们可以选择把数据按照所选维度的各个取值拆成多份(如:源机房=A、源机房=B、源机房=C……),也可以选择把数据按照是否包含所选维度取值拆成两份(如:源机房=A、源机房!=A)。在网络质量监测中,拆成两份的方案要比拆成多个的方案更好。


我们用一个例子来说明原因。假设在某一时刻内网同时发生了两个故障,分别是机房 A 出口故障和机房 B 入口故障。在这个情况下,正确的输出应当包含两个维度组合,分别是“源机房=A”、“目标机房=B”。


从全局数据出发,如果我们按照源机房的各个取值把数据拆成多份,如图 1,“目标机房=B”这个维度组合无法出现,因为它在按照“源机房”维度拆分时已经被拆成“源机房=B,目标机房=B”、“源机房=C,目标机房=B”等多个小维度组合。这样一来,“目标机房=B”这个故障将输出为多个子维度组合的故障,不能准确体现故障范围


而如果我们按照数据是否包含源机房 A 把数据拆成两份,如图 2,“目标机房=B”可以更加完整地包含在“源机房!=A”的分支中,再经过一次拆分即可得到“源机房!=A,目标机房=B”这一维度组合。这个维度组合应当解释为,在我们认为“源机房=A”存在故障的情况下,把受到这个故障干扰的数据去掉后(“源机房!=A”),“目标机房=B”存在故障,所以“源机房!=A,目标机房=B”可以上升为我们的目标维度组合“目标机房=B”。



图 1 按照所选维度的各个取值拆成多份下钻的样例



图 2 按照所选维度取值拆成两份下钻的样例


这种分层下钻的方法能够找到贡献度高、一致性好的目标维度组合,同时减少了需要分析的维度组合数量,比逐个维度组合进行检查可以少花很多时间

基于决策树的自动分析

可以看到,这种分层下钻的过程和决策树生成的过程是比较类似的。


决策树生成算法会从全局数据出发,选择最能区分正例负例的属性进行划分,然后对子数据集递归地进行划分,直到继续划分不太能区分正例和负例。所以前面的分层下钻相当于把探测样本的结果作为类别、维度取值作为属性,构建了一棵二叉分类决策树。


首先,把一个探测样本作为一条数据,探测样本的结果作为类别,把成功记作正例,失败记作负例。这样,最能区分正例、负例的属性也就是最能区分成功、失败样本的属性。


接下来,对探测样本进行 One-Hot 编码,每个维度取值展开成一个属性。前面提到的“源机房=A”对应一个属性,属性有两个取值“源机房=A”、“源机房!=A”,类似地,“目标机房=B”、“源 ToR=1”等维度取值也分别对应一个属性。这样,对数据集进行划分时使用的属性就是用来把数据拆分成两份的维度取值。


数据经过预处理之后,接下来的下钻过程可以借助决策树生成算法完成。


如图 3,从全局数据出发,在各个属性(“源机房=A”、“目标机房=B”、“源 ToR=1”……)中选择一个最能区分正例(成功样本)和负例(失败样本)的属性(“源机房=A”)进行划分,之后继续对子数据集递归地进行划分,直到子集(“源机房=A”)使用各个属性划分的区别都不大。



图 3 二叉分类决策树生成样例


在生成的决策树中,每一个叶子结点的成功、失败探测样本都是分布比较均匀的,一致性较好,所以,成功率显著低于正常情况的叶子结点就是需要报告的故障区域。



图 4 二叉分类决策树上进行检测的样例


这样分析得到的目标维度组合排除了直接判定法误报的情况,所返回的维度组合基本上能够正确反应网络故障影响的区域范围。

属性选择方法

对于决策树的每个节点,在选择属性进行划分的时候,我们的候选属性是所有维度取值,比如“源 ToR=1”、“源 ToR=8”、“源机房=A”、“源机房=H”、“目标机房=A”、“目标机房=H”等等,针对每个候选属性,会使用一个函数进行打分,描述区分正负例样本的效果,最后选择分数最高的一个属性。


常见的决策树生成算法在正负例样本不平衡的时候表现比较差,而网络监测中失败样本(负例)的数量远少于成功样本(正例),让这个问题变得比较明显。


我们修改了选择属性时的度量函数,避免比较成功样本和失败样本之间的相对大小,而是比较成功样本在各子节点的分布和失败样本在各子节点的分布。


在把全局数据划分为“源机房=A”、“源机房!=A”的时候,成功样本在两个子集的分布是,我们把这个分布记作,失败样本在两个子集的分布是,记作,那么,分布 P 和 Q 差异最大的属性也就是最能区分成功样本和失败样本的属性。


我们选择了海林格距离)来描述这两个分布的差异。把全局数据划分为“源机房=A”、“源机房!=A”的得分:



类似地,可以计算其他属性的海林格距离:



可以看到,使用源机房 A 进行拆分的海林格距离最大,所以选择按源机房 A 这个属性把数据拆成两份,这个划分结果和人工下钻时的感受是一致的。

总结

本文提出的这种多维度分析方法考虑了很多内网质量监测的特点。考虑到维度组合非常多,我们在寻找目标维度组合的过程中进行了剪枝;考虑到目标维度组合可能是多个,我们选择的剪枝方案是二叉决策树;考虑到成功样本比失败样本多很多,我们在生成决策树时使用海林格距离选择属性。


在其他场景中,数据可能没有这样的特点,这些情况下,需要选择什么指标描述一致性,选择什么方法进行剪枝,有的已经有了一些实践经验,有的还在尝试,需要进一步探索。欢迎大家留言交流相关场景和问题。


作者介绍


李聪


百度高级研发工程师,负责百度智能运维产品(Noah)监控数据分析相关工作,重点关注故障定位、异常检测等相关领域技术。


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


原文链接


https://mp.weixin.qq.com/s?__biz=MzUyMzA3MTY1NA==&mid=2247485107&idx=1&sn=51ea71c2882f3ed93dfb72f8c3699473&chksm=f9c37f7aceb4f66c0161ce303fcf775ec6e25b6fa0bfe892c07330ae883ba6ed2a61d874e3c7&scene=27#wechat_redirect


2019-08-02 08:002764

评论

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

使用SQL加密函数实现数据列的加解密

华为云开发者联盟

大数据 后端 华为云 数据加密

实时云渲染vs本地渲染,哪个更好用?

Finovy Cloud

云渲染 实时云渲染

使用EasyCV Mask2Former轻松实现图像分割

阿里云大数据AI技术

深度学习 计算机视觉 图像处理 图像分割 企业号十月 PK 榜

计算机网络:以太网与IEEE 802.3

timerring

计算机网络 11月月更

多视角碰撞,探索 Serverless 企业落地更多可能性丨阿里云用户组厦门站

云布道师

阿里云 云原生

查看、校验、归档…带你掌握openGauss账本数据库

华为云开发者联盟

数据库 后端 华为云

PLC与SCADA的什么区别和联系

2D3D前端可视化开发

物联网 PLC 工业控制 web组态 SCADA

OceanBase 首席科学家阳振坤博士入选2022 年度“CCF王选奖”

OceanBase 数据库

测试大咖漫谈如何搞定软件质量?

测吧(北京)科技有限公司

软件测试

vue的几个提效技巧

yyds2026

Vue

[力扣] 剑指 Offer 第二天 - 从尾到头打印链表

陈明勇

Go 数据结构与算法 力扣 11月月更

[力扣] 剑指 Offer 第二天 - 反转链表

陈明勇

Go 数据结构与算法 力扣 11月月更

web技术分享| 日期选择限制组件二次封装

anyRTC开发者

Vue 前端 Web Element

火山引擎 DataTester 首推A/B实验经验库,帮助企业高效优化实验设计能力

字节跳动数据平台

大数据 A/B测试

聊聊Vuex原理

yyds2026

Vue

阿里云产品经理刘宇:Serverless 的前世今生

云布道师

阿里云 Serverless 云原生

软件测试 | 测试人员必须掌握的测试用例

测试人

软件测试 自动化测试 测试开发 测试用例

Dive into TensorFlow系列(2)- 解析TF核心抽象op算子

京东科技开发者

tensorflow TF2 Tensor Op

带你了解S12直播中的“黑科技”

华为云开发者联盟

云计算 后端 音视频 华为云 实时直播

Paddle Graph Learning (PGL)图学习之图游走类node2vec模型[系列四]

汀丶人工智能

图神经网络 11月月更

彻底搞懂Vue虚拟Dom和diff算法

yyds2026

Vue

数据库独角兽SingleStore:没有HTAP,机器学习和人工智能都是不切实际的

StoneDB

数据库 开源 HTAP StoneDB SingleStore

最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”

牵着蜗牛去散步

人工智能 腾讯云 腾讯 腾讯云AI

直播预告|OceanBase 社区版 4.0 全解析

OceanBase 数据库

count(*)查询性能很差?用这5招轻松优化

小小怪下士

Java 程序员 后端

OKR之剑·实战篇03:OKR的跟踪需要有“自己”的节奏

vivo互联网技术

团队管理 OKR 目标管理

华为云Astro的前世今生:用7年时间革新低代码开发观念

华为云开发者联盟

低代码 华为云

HummerRisk V0.5.1 发布:新增对象存储、优化K8s 资源态势和资源拓扑等

HummerCloud

Kubernetes 云原生 云安全 云原生安全

【LeetCode】字符串相加Java题解

Albert

算法 LeetCode 11月月更

SREWorks v1.3 版本发布 | 插件机制发布

阿里云大数据AI技术

大数据 运维 插件

使用 SAP Cloud Application Programming 编程模型开发一个图书管理 OData 服务

汪子熙

云原生 CAP SAP 企业级应用 11月月更

百度网络监控实战:多维度分析方法_软件工程_李聪_InfoQ精选文章