Zenlayer如何将万台设备监控从Zabbix迁移到Flashcat

news2025/2/24 17:51:29

作为全球首家以超连接为核心的云服务商,Zenlayer 致力于将云计算、内容服务和边缘技术融合,为客户提供全面的解决方案。通过构建可靠的网络架构和高效的数据传输,Zenlayer 帮助客户实现更快速、更可靠的连接,提升用户体验和业务效率。Zenlayer 在全球范围内运营着超过 290 个边缘节点, 骨干网带宽超过 50Tbps, 10000+ 的数据中心接入点,快速连接全球公有云与数据中心。

Zenlayer

监控现状

Zenlayer 运营着全球数百个边缘机房和庞大的骨干网网络,我们的监控目标主要包括:

  1. 各种硬件设备,如交换机、裸金属
  2. 超大大规模网络的连通性和质量
  3. Kubernetes 云原生技术栈

在 Zenlayer,监控系统不仅仅是作为一个内部工具服务于运维和研发团队,我们的售后团队高度依赖监控系统为客户提供高水平的技术支持服务,监控系统是 Zenlayer 最重要的基础服务和产品之一,是我们交付用户价值的关键所在。

目前我们使用的监控工具有:Zabbix、Prometheus、夜莺 Nightingale、ClickHouse:

  • 采用 Zabbix 监控各种网络设备,将全球各个边缘节点的监控数据,汇聚到中心统一处理。
  • 采用 Prometheus 收集 Zenlayer 的云原生技术栈的监控数据,统一使用夜莺 Nightingale 来配置和管理告警规则。
  • 使用 ClickHouse 对系统日志进行分析。

痛点和挑战

考虑到 Zenlayer 的设备数量(近万台网络设备)、设备种类、全球化布局,Zabbix 逐渐接近性能瓶颈:

  1. 海量数据的查询、看图、报警,对 Zabbix 数据库有很大的写入和查询压力,且无法有效扩展。
  2. 全球的监控数据汇总一处,会有频繁的监控数据中断、时延等问题,影响报警的及时性和准确性。
  3. 对网络专线强依赖,若专线发生异常,会导致相应边缘节点的监控报警完全不可用,产生监控盲区。
  4. 数据合规性要求,某些边缘节点的数据不允许汇聚到中心,目前的架构难以有效应对。

Zabbix

鉴于我们在 Zabbix 之外,也用到了另外多种监控工具:

  1. 工具多,体验不一致,技术团队学习成本很高。
  2. 数据孤岛现象严重,关联分析成本高,效率低(比如 Zabbix 、Prometheus、夜莺之间的数据难以有效串联)。
  3. 日志分析的能力较为不足,比如缺少高效便捷的日志报警等功能。

我们迫切需要对现有的监控方案做出改进,以支撑不断增长的业务、适应不断变化的用户需求,提供可持续的服务能力,具体而言,有以下三个目标:

Zenlayer Next Generation Monitoring

解决方案

Zenlayer 技术团队在调研技术方案的时候,关注到了快猫星云的 Flashcat 平台。使用 Flashcat,可以在一个平台上完成指标、日志、链路追踪数据的统一采集、可视化、告警、分析和 OnCall, 免去搭建和维护多套 Prometheus/Zabbix/Grafana/ELK/Jaeger 的工作量,屏蔽多云监控的复杂度。Flashcat 平台的定位和特点,与 Zenlayer 新一代监控方案的设计目标极为吻合:

  • 水平扩展的架构,高性能高可用,有上千家企业使用,经受了严苛的生产实践检验。
  • 支持边缘节点部署模式,可以在中心端高效、便捷的监控众多边缘节点,契合 Zenlayer 边缘计算的业务特点。
  • 内置了故障处理的最佳实践,当业务受损时,Flashcat 能第一时间发现,并辅助技术团队快速展开调查,特别适合我们构建售后监控支撑平台的目标。
  • 支持物理机、网络设备、容器、K8s,微服务、主流云产品,完全覆盖我们的监控场景。

Zenlayer 与快猫星云技术专家一起,重点从全球化架构、边缘计算、网络监控、Zabbix 替代等方面出发,根据 Zenlayer 自身的业务特点,结合快猫星云在统一监控和稳定性保障方向的最佳实践,构建起了「Zenlayer新一代的统一监控方案」,最终也实现了对 Zabbix 的完美替代,解除了困扰已久的难题。

落地效果

边缘部署模式

首先,我们测试了 Flashcat 的边缘节点部署模式,将 Zenlayer 全球划分为 7 大 Region,其中以 HK 为中心 Region,其余为边缘端,我们采用了如下部署架构:

  • 在每个边缘端,本地保存监控数据,即使网络中断,本地仍然能够闭环工作,独立告警。
  • 中心端进行告警规则、仪表盘、数据采集策略的集中式管理、集中查询,降低多 region 运维成本,用户只需要面对 Flashcat 中心端。
  • 中心端、边缘端均采用集群方式部署,可横向扩展,以满足本区域不断增长的监控需求。
  • 当前主要采集存储 Metrics 指标,接下来可在边缘机房部署日志组件,不适合传输到中心端的数据,可以本地化处理。

边缘计算

利用 Flashcat 的边缘部署模式,有效的解决了 Zenlayer 全球节点监控数据汇聚带来的问题,提升了监控数据的时效性、可靠性,降低了监控数据汇聚带来的网络传输成本,同时还减轻了整个监控系统的维护和配置成本。

Zabbix 替换

在 Zenlayer,我们深度使用 Zabbix,特别的,我们本质上是一家网络公司,背后有近万台各种型号的网络设备,分布在全球范围内,所以重度依赖 Zabbix 对网络设备的数据采集和报警能力,比如:

  • Zabbix 对网络设备的自动发现能力
  • Zabbix 对各种网络设备SNMP采集的配置模板
  • Zabbix 采集所支持的设备型号更全面
  • Zabbix 报警中的宏模式

此外,我们的技术团队对于 Zabbix 使用时间久,如果迁移到新的工具有一定的迁移成本。带着以上的问题出发,我们对 Flashcat 进行了细致的测试,发现 Flashcat 对 Zabbix 能力的兼容性非常不错,以网络设备的监控数据采集为例,介绍如下。

网络设备采集配置模板化

Flashcat 针对特定型号的网络设备,支持用户将采集该设备 Metrics 的 SNMP 配置,以模板的形式在 WebUI 上管理和配置,然后下发给指定的采集器 Categraf。比如:

通过SNMP采集华为某型号交换机 uptime 和 sysname 指标的采集模板

oid = "RFC1213-MIB::sysUpTime.0"
name = "uptime"

[[instances.field]]
oid = "RFC1213-MIB::sysName.0"
name = "sysname"
is_tag = true

采集内存总量和使用量的采集模板

...
[[instances.field]]
oid = ".1.3.6.1.2.1.25.2.3.1.5.1"
name = "memsize"

[[instances.field]]
oid = ".1.3.6.1.2.1.25.2.3.1.6.1"
name = "memuse"
...

Zabbix 用户,尤其是深度用户, 之前在 Zabbix 中已经积累了很多模板,这个模板如果按照 Flashcat 的格式去人工配置一遍也是一个很大的工作量。为了减轻这方面的工作量,Flashcat 支持将 Zabbix 的 XML 格式转换为 Flashcat 格式的采集模板,这样就可以加速从 Zabbix 采集模板往 Flashcat 采集模板迁移的过程。在测试中,我们和快猫星云的技术专家,在 Flashcat 中创建了30多种网络采集模板。

- Arista Device Status
- Juniper Device Status
- Juniper BGP
- Nokia Device Status
- Huawei BGP
- Arista BGP
- Ciena Optical
- Juniper Optical
- Ruijie Device Status
- Sintai Optical
- Ruijie Optical
- H3C Optical
- IDC Interface
- Network Status
- ...
报警支持宏模式

宏变量是 Zabbix 中很强大的一个特性,告警阈值可以通过宏变量来设置,这样不同角色的设备就可以分别设置自己的阈值了。Flashcat 平台对宏变量也进行了支持。在测试中,我们从 Zabbix 中迁移了上百条告警规则到 Flashcat 中。

Pingmesh

Pingmesh 是一种用于测量和监控网络性能的技术,通过在一组通信对等体之间执行 Ping 测试来评估网络的可用性和延迟。Flashcat中的 Pingmesh 功能,提供了 TCP、UDP、ICMP 三种协议,在设备之间进行互相探测,并绘制各个层面的连通性视图,从全局视角观测整个网络的连通性,这对于我们的全球化布局特别有价值,能够帮助我们一目了然的看清楚不同的边缘节点之间、不同的机柜之间的网络连通质量。如果你想了解更多 Pingmesh 的技术细节,请查阅网络问题排查必备利器:Pingmesh。

SNMP采集支持多进制转化

在网络设备中,有些 OID 对应的值可能并不是数值,需要从 string 或者 hex-string 格式进行转换。比如,某些设备其 MAC 地址和 IP 地址都是以 hex-string 形式存储和展示的,如果直接采集,在 Flashcat 平台上展示的话会是乱码形式。下面的示例就是演示如何配置将 BGP 对端的 IP 地址作为 tag 附加到指标上的。如果指定conversion="hwaddr"则是进行 MAC 地址转换,指定conversion="float"则是将字符转为 float 类型,还支持转为 int、 hextoint 等。

[[instances.table.field]]
oid = ".1.3.6.1.4.1.2636.5.1.1.2.1.1.1.11"
name = "peer_addr"
conversion = "ipaddr"
is_tag = true
SNMP采集支持返回多值

绝大部分 OID 返回值都是单值的,只需要考虑将返回值转换为合适的格式即可。但是光模块功率是一个典型的多值返回,Flashcat 针对光模块采集做了扩展。比如下面这段配置是将返回值中4个部分分别对应rx_0_lane0 rx_0_lane1 rx_0_lane2 rx_0_lane3 这4个返回值,都按照 float 类型进行了转换。

[[instances.table.field]]
oid = ".1.3.6.1.4.1.2011.5.25.31.1.1.3.1.32"
name = "rx_0"
conversion="lane0:float,lane1:float,lane2:float,lane3:float"
支持relabel/rename

比如 index 原始值如下, 想把这两个字段前3位1.1.4.1.2.16.去掉,生成新标签 peer_addr

index="1.2.16.36.4.255.64.0.1.0.99.0.0.0.0.0.0.0.2"
index="1.1.4.103.140.146.151"

增加如下配置即可:

[[instances.relabel_configs]]
source_labels = ["index"]
target_label = "peer_addr"
#separator = "/"
regex = "\\d+\\.\\d+\\.\\d+\\.(.*)"
action = "replace"
replacement = "$1"

如果不想保留老的index label那么配置如下:

[[instances.relabel_configs]]
regex = "index"
action = "labeldrop"
BGP监控数据采集

假设有两张表需要做关联 , 比如 BGP 中 peer_index 对应的 OID 是 .1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14, 另一张 receive 表对应的 OID 是 .1.3.6.1.4.1.2636.5.1.1.2.6.2.1.7,想对两张表做关联,peer_index 表的 index 中第一位作为 receive 表的 index 的一部分。

先看peer_index的返回:

.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.1.128.1.130.176.1.128.1.130.178  = 0 
.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.1.128.1.130.176.1.128.1.130.179  = 1
.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.1.128.1.130.176.1.128.1.130.180  = 2
.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.2.38.4.9.128.224.5.47.255.0.0.0.0.0.0.0.1.2.38.4.9.128.224.5.47.255.0.0.0.0.0.2  = 3
.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.2.38.4.9.128.224.5.47.255.0.0.0.0.0.0.0.1.2.38.4.9.128.224.5.47.255.0.0.0.0.0.3  = 4
.1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14.0.2.38.4.9.128.224.5.47.255.0.0.0.0.0.0.0.1.2.38.4.9.128.224.5.47.255.0.0.0.0.0.4  = 5

再看receive表的返回:

.1.3.6.1.4.1.2636.5.1.1.2.6.2.1.7.0.1.1 = 2071
.1.3.6.1.4.1.2636.5.1.1.2.6.2.1.7.3.2.1 = 0

这两张表关联查询,那就用 peer_index 对应的值 0/1/2/3/4/5 和 receive 表中的 index 0.1.1/3.2.1 关联匹配,但是因为他们长度不同(peer_index的值只有一位),所以长度对齐就用到了一个 oid_index_length 配置。 比如 oid_index_length=1 表示 receive 表的 index 的第一位只要匹配到 0/1/2/3/4/5 中任意一位就认为匹配成功。peer_index的配置如下:

[[instances.table.field]] 
oid = ".1.3.6.1.4.1.2636.5.1.1.2.1.1.1.1.14" 
name = "peer_index" 
is_tag = true 
secondary_index_table = true  # 这个表的index对应的值要被其他表使用

receive表配置如下:

[[instances.table.field]]
oid = ".1.3.6.1.4.1.2636.5.1.1.2.6.2.1.7"
name = "receive_total_prefix"
oid_index_length=1  # 只取关联index的第一位
secondary_index_use = true # 使用上面指定的index

这样最终取到的指标,只有一个:

snmp_juniper_bgp_prefix_receive_total_prefix{index="0.1.128.1.130.176.1.128.1.130.178"} 2017

从监控走向可观测

除过对 Zabbix 替换的需求,突破扩展性瓶颈限制等问题。Zenlayer 对于建立全面的可观测性体系,在过去的工作中,或多或少都有一些建设了,比如:

  • 我们使用 ClickHouse 存储和分析日志,制作报表
  • 我们使用 Prometheus 收集多套 K8s/K3s 云原生技术栈的数据,并使用夜莺 Nightingale 管理告警规则
  • 我们构建了网络层面的立体化的监测
  • 在某些特定场景下,我们借助智能监控提升效率,降低维护成本
  • 我们使用 on-call 工具管理告警的全生命周期过程,提高告警的处理效率,降低工作失误

客观讲,我们不缺少工具,也不是缺少数据,困扰我们的反而是工具太多了,数据太多了!更多的工具意味着更多的学习成本,面对更多的数据,如果缺乏高效的分析能力,数据只能是负担。我们在测试 Flashcat 的过程中,充分调研了 Flashcat 的多数据源接入功能,包括 Metrics 源、Logging 源、Tracing 源、事件源四大类。在对接数据源后,用户就可以在 Flashcat 平台上,对这些数据源背后的数据,进行集中的查询、可视化分析、告警等。并借助 Flashcat 的北极星和灭火图,我们构建起了面向业务场景、层层下钻的故障发现、定位体系。

比如,在故障发现层面,我们利用 Flashcat 提供的智能检测算法,对骨干网络流量进行实时监测,当流量出现异常波动,1分钟就可以被检测到,并发送我们的技术团队知晓和应急。

北极星

总结

Zenlayer 与快猫星云技术专家一起,重点从全球化架构、边缘计算、网络监控、Zabbix 替代等方面出发,根据 Zenlayer 自身的业务特点,结合快猫星云在统一监控和稳定性保障方向的最佳实践,构建起了 Zenlayer 新一代的统一监控方案,最终也实现了对 Zabbix 的完美替代,解除了困扰已久的难题。

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

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

相关文章

【LeetCode】升级打怪之路 Day 25:回溯算法解决“排列-组合-子集”问题

今日题目: 78. 子集77. 组合46. 全排列90. 子集 II47. 全排列 II39. 组合总和 目录 1. 子集(元素无重不可复选) 【easy】2. 组合(元素无重不可复选)3. 排列(元素无重不可复选) 【classic】4. 子…

Geostationary IR Channel Brightness Temperature - GridSat B1 -- shell下载

进入网页 https://www.ncei.noaa.gov/products/gridded-geostationary-brightness-temperature 然后进入数据目录,通过https的方式进行下载: 点击后进入如下界面: 点击任意年份进行下载 这里以2004年为例,如下所示&#xff1…

管道(acwing,蓝桥杯,二分)

题目描述: 有一根长度为 len 的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。 一开始管道是空的,位于 Li的阀门会在 Si 时刻打开,并不断让水流入管道。 对于位…

group by和min、max函数一起使用

原始数据 查询每科的最高分数 -- 查询每科最高分数 select stuId,classId,stuName,max(score) from student_score group by classId 错误的结果 这个显然不是对的,或者说不是我们想要的结果, 我们想要的结果是 原因是什么呢?我们知道使用…

【nfs报错】rpc mount export: RPC: Unable to receive; errno = No route to host

NFS错误 问题现象解决方法 写在前面 这两天搭建几台服务器,需要使用nfs服务,于是六台选其一做服务端,其余做客户端,搭建过程写在centos7离线搭建NFS共享文件,但是访问共享时出现报错:rpc mount export: RPC…

014 Linux_同步

​🌈个人主页:Fan_558 🔥 系列专栏:Linux 🌹关注我💪🏻带你学更多操作系统知识 文章目录 前言一、死锁(1)死锁概念 二、同步(1)同步概念&#xff…

Java面试题总结18之springcloud四种分布式事务解决方案

XA规范:分布式事务规范,规定了分布式事务模型 四个角色:事务管理器(协调者TM),资源管理器(参与者RM),应用程序AP,通信资源管理器CRM 全局事务:一…

微信小程序小白易入门基础教程1

微信小程序 基本结构 页面配置 页面配置 app.json 中的部分配置,也支持对单个页面进行配置,可以在页面对应的 .json 文件来对本页面的表现进行配置。 页面中配置项在当前页面会覆盖 app.json 中相同的配置项(样式相关的配置项属于 app.js…

QML | JavaScript作用域和命名解析

#1 JavaScript作用域和命名解析 QML属性绑定、内联函数和导人的JavaScript文件都运行在一个JavaScript作用域中。作用域主要控制两点:一是表达式可以访问哪些变量;二是当两个或多个名字冲突时,哪个变量优先。由于JavaScript的内建作用域机制非常简单,QML对其进行了加强,使…

java实现kml文件下载接口

根据业务需求,需提供一个下载kml格式航线文件的HTTP GET接口 示例代码 package com.kyrielx.kmzdemo.controller;import org.apache.commons.io.FileUtils; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org…

3/13/24运算符、补码、整型、浮点型、汇编

目录 三目运算符 逗号运算符 自增自减运算符 位运算 运算符优先级 补码讲解 整型解析 溢出解析 浮点数IEEE754标准解析 浮点数精度丢失 真题 汇编指令 生成汇编方法 常用指令 三目运算符 条件运算符是C语言中唯一的三目运算符。通过判断问号之前的表达式的真假&…

linux之权限管理和组

一,ACL权限 1.1,什么是acl权限? ACL是Access Control List的缩写,即访问控制列表。可以通过下列的实例来理解ACL的作用: 思考如何实现如下的权限控制: 每个项目成员在有一个自己的项目目录,…

网工内推 | 信息安全主管,CISP认证优先,最高25K,加绩效提成

01 福建省数字福建云计算运营有限公司 招聘岗位:网络及信息安全主管 职责描述: 1.负责带领IT运维团队,对公司网络与安全整体架构规划,设计、运营及IT设备的全生命周期运维规划等; 2.负责对网络、网络安全的日常运维管…

【JavaScript】JavaScript 程序流程控制 ① ( 顺序流程控制 | 分支流程控制 )

文章目录 一、JavaScript 程序流程控制简介1、顺序流程控制2、分支流程控制3、分支流程控制 - 代码示例 一、JavaScript 程序流程控制简介 JavaScript 程序 执行过程中 , 不同的代码执行顺序 , 得到的结果是不同的 , 在编程中 经常 需要 根据 不同的条件 执行不同的代码块 , 或…

计算机缺失msvcp110.dll如何修复,多种修复方法教给你

当电脑系统中msvcp110.dll文件丢失时,可能会对计算机的正常运行产生一系列显著的影响。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分,这个动态链接库文件对于许多基于Windows的应用程序至关重要,尤其是一些使用C编译器…

2024蓝桥杯每日一题(回溯)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:木棒 试题二:n皇后问题 试题三:糖果 试题四:飞机降落 试题五:生日蛋糕 试题一:木棒 【问题描述】 乔治拿来一组等长…

【工具】Mermaid + 大模型画流程图

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 引入使用画TCP三次握手了解历史人物 总结 引入 最近看面试文章关于TCP三次握手和…

PTA L2-021 点赞狂魔

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这…

好委屈,东方甄选为何总是被供应商骗?

东方甄选最近很委屈。 315晚会过后,知名打假人王海爆料,称315晚会曝光的槽头肉扣肉在东方甄选和小杨哥的直播间里销售过。 东方甄选赶忙去问了问供应商情况。 供应商的回答让他感到暖心,表示虽然315晚会曝光了我们公司违规使用糟头肉&…

Pulsar IO实战

一、引言 今天跟着 官方文档 基于docker玩一把Pulsar IO吧 二、概要 在用户能够轻松的将消息队列跟其他系统(数据库、其他消息系统)一起使用时,消息队列的作用才是最强大的。而Pulsar IO connectors可以让你很轻松的创建、部署以及管理这些跟外部系统的连接&#…