【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

外网质量监控系统实践之路

  • 2020-02-26
  • 本文字数:2470 字

    阅读完需:约 8 分钟

外网质量监控系统实践之路

用户在访问 360 服务器时,会经过运营商链路、各省的机房然后到达 vip,那么在这个链路中任何一个环节出现问题,都会导致用户无法正常上网。如何快速、准确的定位到这个链路中的哪个环节出现了故障?对于运维的人员来说是至关重要的。下来跟随作者一起来探讨下外网质量监控系统在 360 是如何实践的吧。

背景介绍

用户在访问 360 服务器时,会经过运营商链路、各省的机房然后到达 vip,那么在这个链路中任何一个环节出现问题,都会导致用户无法正常上网。如何快速、准确地定位到这个链路中的哪个环节出现了故障?对于运维的人员来说是至关重要的。


假如没有外网质量监控系统,那么我们是如何确定故障的呢。传统的方式是被动式的,当用户反映不能正常上网后,运维人员开始申请账号、登录主机、然后执行 ping、telnet 等命令来查看服务器是否可以正常访问,耗时又耗力,而且还不能准确的定位到具体的故障。比如,某个 vip 不能访问,可以是由于 vip 原因或是机房故障还可能是运营商的原因,而我们手动探测的链路太有限了。外网质量探测系统应运而生。


系统特点

  • 实时性检测(分钟级)。

  • 端到端持续检测(真实反映用户到 vip 的网络访问质量)。

  • 全覆盖监测(覆盖全国三大运营商的各个省份)。

  • 按需下发检测任务(简单灵活的接入方式)。

  • 检测结果主动报警(准确快速地主动告警,确定故障类型及影响范围)。

  • 支持不同视角的可视化展示(cdn 机器到 vip、运营商到 vip、机房到机房的平均延迟、丢包率、最大最小延迟等)。

系统框架

源主机的选择-CDN 机器

要进行外网探测,源主机的选择是我们要解决的第一个问题。那么我们有必要先看一下用户上网的流程是什么样的。如下图所示。



用户通过域名访问某个网址,三级域名系统给用户返回了 ip(vip 的地址)或者 cip(cdn 的 ip 地址),然后用户通过 ip 或者 cip 来访问后端服务器。用户的机器肯定是不能够作为源主机的。从剩下的机器中,我们看出,cdn 节点在这里起到了关键性的作用,我们将 cdn 节点作为源主机,添加故障判断逻辑后,可以准确的判断 vip 故障、机房故障及运营商故障,这也正是我们进行外网监控的目的所在(比如单个运营商所 ping 的所有 vip 中,有一半的 vip 丢包率都大于 50%,那么我们是不是可以认为这个运营商有问题了。所以 cdn 节点作为源节点非常合适)。

系统原理

利用三大运营商部署在各个省份的 cdn 机器来周期性的向 vip 发起 ping 操作。运行流程为:cdn 机器向 vip 发出 ping 包,将结果存储到时序数据库,然后故障判定模块从时序数据库中拿数据,进行分析之后,发出报警。我们的指标,主要是丢包率和平均时延。


系统架构图

整体架构主要分为三层。展示层、数据采集层和数据分析层。展示层:我们支持 grafana 以及自研的 web 系统展示,比如 watchman。数据采集层:我们借助了公司内部成熟的 wonder-agent 和大数据网关来进行数据收集。公司内部有 10 万台 wonder-agent,wonder-agent 在启动时,会判定自己的宿主机是否是我们想要的源,如果是,启动 ping 模块,并从网关那里拉取自己所 ping 的 vip 列表。由于 agent 的宿主机所处的运营商不同,我们会将不同运营商的 agent 划分到相应运营商的 lvs 下,这样就会避免 wonder-agent 上报数据超时的问题,也解决了断点问题。数据存储好之后,我们来看数据分析和报警层,数据分析模块,会从 influxdb-ha 来拉取时序数据,每分钟拉取一次,然后进行故障判断,生成报警。


任务下发

Center 网关生成每个 CDN 机器所 ping 的 vip 列表。通过对所有 vip 进行分片,保证同一个机房下的不同 cdn 服务器所 ping 的 vip 列表没有交集,并且同一机房下的 cdn 所 ping 的 vip 列表的并集为全部的 vip。然后,agent 主动从 center 网关拉取 vip 列表,同步周期为 1 小时。


优点:


  • 避免了 ping 风暴,减小了 vip 的负载。

  • 减小了 agent 采集数据的压力。

agent 数据采集

agent 通过执行 ping 功能来周期性的获取每个 vip 的存活状态,并上报给网关,其执行流程如下图所示。


存储

数据的存储主要分为了四类,如下所示。


1、Influxdb 时序数据库。存储实时的探测指标数据(平均延迟、最大最小延迟、成功率等)。


2、Mongo 存储故障数据(聚合)运营商故障、vip 故障、机房故障)。


3、Mysql 存储加白数据(vip 加白)。


4、元数据存储,内存存储(机房-vip、省份-vip 等映射关系等)。

报警策略

故障策略

故障的判断方式一共分为三种,如下所示。


1.vip 故障


1 个或者大于 1 个运营商一半以上的省份丢包率大于 50%报警(针对 lato 机房国内全部省份到 lato 都丢包 100%报警)。


2.机房故障


大于等于 2 个运营商、或者大于 10 个 vip 小于等于三分之一的 vip 丢包率大于 50%:怀疑机房故障大于等于 2 个运营商、或者大于等于二分之一的 vip 丢包率大于 50%;判断为机房故障。


3.运营商故障


单个运营商大于等于三分之一的省份、或者大于等于三分之一的 vip 丢包率大于 50%:怀疑(电信运营商)故障。单个运营商大于等于二分之一的省份、或者大于等于二分之一的 vip 丢包率大于 50%;判断为(电信运营商)故障。

数据分析与告警

1.平滑过滤掉毛刺数据。



其中,a1-a5 都是由 vip 组成的 vip 列表,通过求 a1-a5 的并集,将得到的结果(即去掉毛刺的数据)作为最终判断故障的元数据。


2.根据故障策略以及元数据对数据进行故障判定。


3.根据业务聚合,生成不同的故障报警内容。


4.提供业务名称或者部门 id 发送对应的报警内容。


5.不关注的报警,业务可以选择加白。

可视化

cdn 机器到目的 vip 的平均延迟、最大、最小延迟以及丢包率。



全国各省市到各个运营商机房的平均延迟。



vip 加白。



报警内容。


系统规划

在提供安全可靠报警的同时,未来努力的方向。


提供按需检测任务接口,主动下发,目前只支持被动获取(这样的话如果加 vip 列表,只有等到定时触发,不能很及时的进行探测)。


支持多种探测方式。包括 tcp ping、icmp ping 和 http ping。


添加异常检测机器学习算法(平均延迟更智能)。


接入 stackstrom 自动切换 vip。


对七层 URL 实现访问延迟和状态的监控。


本文转载自 360 云计算公众号。


原文链接:https://mp.weixin.qq.com/s/CIi9k2soHuLhwnkqnMtPdg


2020-02-26 23:571056

评论

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

Go RPC入门指南:RPC的使用边界在哪里?如何实现跨语言调用?

王中阳Go

php Go RPC RPC框架 10月月更

大数据ELK(二十七):数据可视化(Visualize)

Lansonli

10月月更 Visualize

Linux 中 Grep 命令的常见示例,非常全面!

wljslmz

Linux grep 10月月更

PriorityQueue 源码解析(二)

知识浅谈

Priority Queue 10月月更

「趣学前端」提到布局,我第一个会想到的是flex

叶一一

CSS 前端 10月月更

「趣学前端」开耍CSS的3D转换,不会玩滑板但能画滑板

叶一一

CSS 前端 10月月更

如何使用 CSS 提高页面性能?

CoderBin

CSS 面试 前端 优化 10月月更

【一Go到底】第十六天---跳转控制goto&return

指剑

Go golang 10月月更

python程序能打包吗?看这篇就知道了

芥末拌个饭吧

python 3.5+ pyinstaller 10月月更

如何在 SAP BTP Java 应用里使用 SAP HANA 数据库

Jerry Wang

云原生 Cloud SAP 10月月更 btp

【ArchSummit】通过ArchSummit 全球架构师峰会对企业数字化转型的思考

小明Java问道之路

云原生 企业数字化转型 全球架构师峰会 ArchSummit 10月月更

Java基础(七)| 类、对象、封装和构造详解

timerring

Java 对象 封装 构造 10月月更

STM32L0 系列 EEPROM 读写,程序卡死?

矜辰所致

EEPROM STM32L051 10月月更

Python还不会用日志模块?本文给你答案

芥末拌个饭吧

python 3.5+ logging模块 10月月更

「CSS畅想」当我拥有了一个小夜灯,我的CSS副属性被激活了

叶一一

CSS JavaScript 前端 10月月更

架构师的十八般武艺:架构治理

agnostic

架构治理

架构师的十八般武艺:后记

agnostic

架构师

架构实战训练营模块2-朋友圈复杂度分析

阿姆斯壮

#架构实战营 架构实战训练营9期

【一Go到底】第十六天---函数

指剑

Go golang 10月月更

可能的二分法

掘金安东尼

算法 10月月更

「CSS畅想」有一天,我遇到了一个奇特的路灯,眼里一下子有了光

叶一一

CSS JavaScript 前端 10月月更

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵社区

新书上市|豆瓣8.6,首部全面披露中国游戏发展史的奇书!

图灵教育

游戏

致MonoCats社群的一封信:邀请您与我们在以太坊开启新篇章

股市老人

Python进阶(二十四)Python中函数的参数定义和可变参数

No Silver Bullet

Python 函数 可变参数 10月月更

Goroutine是什么?进程、线程、协程又是什么?有什么区别和联系?

王中阳Go

Go 线程 进程 协程 10月月更

【LeetCode】用栈操作构建数组Java题解

Albert

算法 LeetCode 10月月更

「趣学前端」玩转CSS的2D转换,也许能有个代码纸片人

叶一一

CSS 前端 10月月更

TSDB在高速公路大数据平台的应用

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

打造安全的Open RAN

俞凡

架构 安全 OpenRAN

什么时候用Goroutine?什么时候用Channel?

王中阳Go

Go 并发 channel goroutine 10月月更

外网质量监控系统实践之路_文化 & 方法_360云计算_InfoQ精选文章