原文:https://mp.weixin.qq.com/s/CvCs-6rX8Lb5vSTSjYQaBg

转自订阅号「AIOps智能运维」,已授权运维帮转发

作者简介:运小贝,百度高级研发工程师

负责百度内网质量监测平台(NetRadar)的业务端设计及开发工作。在系统和网络监控、时序指标异常检测、智能客服机器人等方向有广泛实践经验。

干货概览

本系列文章的上篇:《百度网络监控实战:NetRadar横空出世(上)》对百度内网质量监测做了初步介绍。作为该系列文章的下篇,本文将从核心功能、设计框架、异常检测策略以及可视化视图四个方面进一步介绍百度内网质量监测平台—NetRadar

核心功能

在上一篇文章中我们提到,为了回答关于内网质量的问题,监测平台需要能够执行按需监测以及持续监测两种类型的测量任务。此外,为了实现主动告警以及故障可视化,还要求监测平台能够对测量结果进行分析,并明确告知是否有网络故障。因此,NetRadar平台包含两大核心功能:监测任务的可定制与持续执行以及测量结果的智能分析

监测任务要求NetRadar架构具备两个特性:

01

全量部署Agent

持续监测和按需监测要求每一台服务器都必须能够参与测量。

02

Controller-Agent架构

Controller负责统一协调控制Agent执行各种监测任务。

那么,NetRadar的系统架构具体是怎样设计的呢?

NetRadar系统结构图

NetRadar整体系统结构如图1所示,主要包括Controller端、Agent端 、汇聚端及业务端四个部分。其中Controller和Agent负责执行监测任务并获取测量数据,汇聚端负责数据的汇总和分析,业务端则展示分析结果并向其它平台提供数据。

图1    NetRadar系统结构图

01

Controller端

Controller 是测量子系统的核心,负责持续测量任务和按需测量任务的管理和调度。

持续任务

Controller 根据任务配置和网络拓扑结构生成每个 Agent 的探测目标,即每个 Agent 的 ping 列表。Agent采用pull模式定期获取该列表的内容。

按需任务

用户提交任务后,Controller 根据网络拓扑信息将任务拆解为每个Agent需要执行的测量任务,并采用push模式将任务内容推送给对应的Agent。

02

Agent端

Agent 根据Controller下发的测量任务执行测量操作,并把测量结果发送给汇聚服务器。测量操作包括 ICMP pingTCP pingtraceroute等。

另外,由于 Agent 部署在线上服务器,需要避免干扰线上业务的正常执行,所以Agent 需要不断检查自己消耗的系统资源,当资源使用超标时停止执行新的探测任务。我们对CPU内存磁盘等资源消耗进行限制。

03

汇聚端

汇聚端的功能主要有以下两点:

测量结果,形成指标数据

由于QoS队列、协议以及统计方式的不同,每对服务器之间的网络测量可以生成27种网络性能指标(如图2所示)。另一方面,我们还需要将服务器之间的测量数据按照网络拓扑结构汇聚为反映ToR之间、机房内集群之间、机房之间的网络质量指标。最终,整个系统会产生达百万级别的质量指标。

图2    27种监控指标

为了降低资源消耗,并提高可用性,采用“Adaptor-Aggregator多个实例、两层汇聚”的方式进行汇聚,如图3所示。

图3    Adaptor-Aggregator两层汇聚设计图

Agent优先(随机)选择本地域内的一个Adaptor来发送数据,并在本地域以及其他地域各选择一个Adaptor作为备选,当主Adaptor失效时依次选择备选Adaptor。另外,Adaptor收到数据后,采用一致性哈希的方式根据数据的“汇聚key”进行汇聚,并将汇聚结果发送给Aggregator,由Aggregator进行最终的汇聚。

这样做的好处是可以将汇聚计算的压力分散在Adaptor和Aggregator模块,同时降低了汇聚数据到Aggregator的资源消耗。

生成异常事件

在完成指标数据汇聚后,汇聚端直接进行异常检测,并判断是否有故障发生。如果确定网络故障发生,则向相关人员和系统发送警报。

04

业务端

业务端将汇聚端生成的指标数据和监测到的故障时间分别保存在TSDBEventDB中,用于可视化展示或提供给其他平台使用。TSDB 和 EventDB是百度运维内部成熟的数据存储平台。其中,TSDB主要用于存储时间序列数据,适合存储指标数据;EventDB主要用于存储事件类型数据,适合存储故障事件数据。

另外,业务端还通过分析不同业务线所部署服务在网络拓扑中的位置,得到业务线网络拓扑,从而实现按业务线定制化展示以及进行网络故障通告的功能。

异常检测策略

测量子系统所生成网络质量指标多达百万级别,不可能通过人工监视的方式发现网络故障,因此需要能够自动运行的异常检测策略。指标的数量巨大,表现也有很大的差异,这就要求异常检测策略是通用的、低开销的、高鲁棒性的。

NetRadar平台的异常检测思想如下:首先确定“正常的网络性能指标值”,当观测到的指标值偏离“正常值”较大时视为异常。基于此,我们采用Percentile of Absolute Deviation around the percentile (PAD)方法进行异常检测,该方法使用指标的历史数据确定指标的基准值和偏离程度基准值,然后利用这两个值判断观测值是否异常。

图4给出了异常检测策略示意图,其中上图表示某延迟指标时间序列,下图表示该时间序列的分布以及采用PAD异常检测策略确定的一般异常、严重异常分界值。

图4    异常检测策略示意图

可视化视图

为了展示测量数据和异常检测结果,我们设计了可视化展示方案,如图5所示。

图5    NetRadar可视化展示示意图

NetRadar首页由事件流图、趋势图和机房连通性矩阵三部分组成;

事件流图

事件流图展示发生异常的区域或机房的信息,包括名称、异常起止时间以及异常程度(一般、严重),如果全网都没有异常,则显示“无事件”,同时,严重异常的事件会在首页顶部进行通告;

趋势图

趋势图可以查看不同时刻的异常指标数,包括全部、区域以及机房三个级别;

机房连通性矩阵

机房连通性矩阵视图可以展示不同时刻不同机房间的网络质量。

以上展示内容可以根据业务线信息进行定制化展示。

总结

NetRadar正式上线以来,在百度网络质量监测中发挥着越来越重要的作用。目前,已经辅助百度工程师排查、诊断数十个重要网络故障,将故障定位效率提升至分钟级,减少流量损失达数亿,为百度服务的稳定运行贡献了力量。

百度网络监控实战:NetRadar横空出世(下)的更多相关文章

  1. 百度网络监控实战:NetRadar横空出世(上)

    原文:https://mp.weixin.qq.com/s/VBShicsqReDtureKAdEgDA 转自订阅号「AIOps智能运维」,已授权运维帮转发 作者简介:运小贝,百度高级研发工程师 负责 ...

  2. Linux下smokeping网络监控环境部署记录

    smokeping是一款监控网络状态和稳定性的开源软件(它是rrdtool的作者开发的),通过它可以监控到公司IDC的网络状况,如延时,丢包率,是否BGP多线等:smokeping会向目标设备和系统发 ...

  3. [转帖]linux下网络监控神器"iptraf-ng"

    linux下网络监控神器"iptraf-ng" https://www.cnblogs.com/dupengfei/articles/iptraf-ng.html 优点:监控的网络 ...

  4. 观察者模式在android网络监控下的运用

    github:https://github.com/shonegg/NetMonitor 一.对观察者模式的理解: 1.观察者模式,又叫发布-订阅(Publish/Subscribe)模式,定义的是对 ...

  5. Python简单网络爬虫实战—下载论文名称,作者信息(下)

    在Python简单网络爬虫实战—下载论文名称,作者信息(上)中,学会了get到网页内容以及在谷歌浏览器找到了需要提取的内容的数据结构,接下来记录我是如何找到所有author和title的 1.从sou ...

  6. Docker 监控实战

    如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...

  7. 项目实战——企业级Zabbix监控实战(一)

    项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点 ...

  8. [svc]容器网络学习索引及网络监控

    整理的可能有些误失,抽时间在细细的分类完善下. 发现这篇对于网络从低到高层协议整理的还不错 每层都有一些有意思的话题 一些协议有一些设计上的弱点, 所以产生了种种的网络层安全问题 一般我们学一些 1, ...

  9. 001_TCP/IP TIME_WAIT状态原理及监控实战

    一.原理 <1>TIME_WAIT状态原理---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动 ...

随机推荐

  1. Vue中npm run build报“Error in parsing SVG: Unquoted attribute value”

    自己做的一个Vue项目,在打包时老是报这个错误 # Error in parsing SVG: Unquoted attribute value 查了查网上说的,都说报错原因是压缩和抽离CSS的插件中 ...

  2. js函数式编程(一)-纯函数

    我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文 ...

  3. css3中的nth-child和nth-of-type的区别

    实例: 首先创建一个HTML结构 <div class="post"> <p>我是文章的第一段落</p> <p>我是文章的第二段落& ...

  4. 洛谷 4219/BZOJ 4530 大融合

    4530: [Bjoi2014]大融合 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 990  Solved: 604[Submit][Status] ...

  5. 【HIHOCODER 1420】 Bigint Multiplication

    描述 Given 2 nonnegative integers a and b, calculate a × b. 输入 One line with 2 integers a and b separa ...

  6. 新游发布:《Don't touch the color》

    这是笨猫工作室最后一个Scratch 2.0游戏,经过笨猫工作室成员的不懈努力,游戏终于可以稳定运行.此次更新添加了最高分数显示,优化了系统流畅度.快来试玩吧!!! 卡搭蓝链:https://kada ...

  7. 数据结构和算法(What Why How)

    数据结构和算法是什么? 从广义上讲,数据结构就是指一组数据的存储结构.算法就是操作数据的一组方法. 从狭义上讲,是指某些著名的数据结构和算法,比如队列.堆.栈.二分查找.动态规划等. 数据结构和算法有 ...

  8. Linux学习-核心编译的前处理与核心功能选择

    硬件环境检视与核心功能要求 根据自己的需求来确定编译的选项 保持干净原始码: make mrproper 我们还得要处理一下核心原始码底下的残留文件才行!假设我们是第一次 编译, 但是我们不清楚到底下 ...

  9. python基础学习笔记——网络编程(协议篇)

    一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...

  10. WordPress后台添加侧边栏菜单

    add_action('admin_menu', 'register_custom_menu_page'); function register_custom_menu_page() { add_me ...