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

作为全球首家以超连接为核心的云服务商,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.mzph.cn/news/755767.shtml

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

相关文章

局域网内监控别人电脑屏幕

想要在局域网内可以监控他人的屏幕的方法,无疑是使用一款,屏幕监控软件了。 什么是局域网屏幕监控软件? 局域网屏幕监控软件是一种专门用于监控局域网内电脑屏幕活动的软件工具。它通常集成在局域网监控系统中,能够实时捕捉和记…

使用Java JDBC连接数据库

在Java应用程序中,与数据库交互是一个常见的任务。Java数据库连接(JDBC)是一种用于在Java应用程序和数据库之间建立连接并执行SQL查询的标准API。通过JDBC,您可以轻松地执行各种数据库操作,如插入、更新、删除和查询数…

2024蓝桥杯每日一题(递归)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:有序分数 试题二:正则问题 试题三:带分数 试题四:约数之和 试题五:分形之城 试题一:有序分数 【题目描述】 【输入格…

@Builder用法

一.场景模拟Data两个缺点 假如有一结果api结果返回值的类Result&#xff0c;其在代码中频繁被使用&#xff1a; Data public class Result<T> {private int code;private String message;private T data;public Result(int code, String message, T data) {this.code …

AI换脸软件rope最新更新的蓝宝石中文版下载

rope换脸软件蓝宝石版下载地址&#xff1a;点击下载 最近AI软件非常的火爆&#xff0c;今天就给大家带来一个可以AI替换人脸的工具rope&#xff0c;得益于机器学习技术的不断发展&#xff0c;rope经过深度神经网络的无数次迭代优化&#xff0c;最终得出的模型可以自动学习和识…

如何在一个阶段中后期调整心态

在阶段中后期调整心态和自我鼓励的方法涉及心理调适、目标回顾、计划调整和积极心理暗示等多个层面。以下是一些建议&#xff1a; 回顾和调整目标&#xff1a; 回顾初始目标是否依然符合当前情境和自身需求&#xff0c;如有必要&#xff0c;适度调整目标使之更具可行性&#…

【商业成长】Ai 中英字幕:英伟达 NVIDIA GTC 黄仁勋——见证 AI 的变革时刻,听他分享塑造未来的 AI 突破!

英伟达官网&#xff1a;人工智能计算领域的领导者 | NVIDIA Ai 中英字幕 仅供学习使用&#xff0c;不得商用&#xff0c;侵删&#xff0c;感谢&#xff01; 【Ai 中英 舒适字幕】英伟达 NVIDIA GTC 黄仁勋&#xff1a;见证 AI 的变革时刻&#xff0c;听他分享塑造未来的 AI 突破…

2022蓝桥杯/李白打酒加强版/c\c++

问题描述 话说大诗人李白&#xff0c;一生好饮。幸好他从不开车。一天&#xff0c;他提着酒壶&#xff0c;从家里出来&#xff0c;酒壶中有酒2斗。他边走边唱&#xff1a;无事街上走&#xff0c;提壶去打酒。逢店加一倍&#xff0c;遇花喝一斗。这一路上&#xff0c;他一共遇到…

Linux调试器-gdb的使用

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 gdb简单基础指令Linux调试器-gdb使用背景调试准备工作写一个简单的myprocess.c程序makefile程序debug模式运行修改后的Makefile程序 调试(gdb)listruni…

Excalidraw:绘制图形的新利器

title: Excalidraw&#xff1a;绘制图形的新利器 date: 2024/3/19 17:18:08 updated: 2024/3/19 17:18:08 tags: 绘图工具多人协作数据安全简洁设计浏览器访问Docker部署插件扩展 摘要&#xff1a; Excalidraw是一款简洁设计、直观易用的绘图应用&#xff0c;用户可以通过它创…

C++中的this指针、访问控制和构造函数

C中的this指针、访问控制和构造函数 this指针 在C中&#xff0c;this指针是一个特殊的指针&#xff0c;它指向当前对象的地址。每个非静态成员函数&#xff08;包括成员函数模板&#xff09;都有一个this指针作为其隐含参数&#xff0c;这意味着在成员函数内部&#xff0c;th…

IO空间和内存空间的区别

1&#xff0c;IO空间&#xff1a;一个特有的空间&#xff0c;与内存空间独立的空间&#xff0c;同样利用IO空间可以操作数据&#xff0c;只不过是利用对应的IO端口操作函数。 2&#xff0c;内存空间&#xff1a;内存地址的寻址范围&#xff0c;例如32位操作系统内存空间为2的32…

【IJCAI】CostFormer即插即用的MVS高效代价体聚合Transformer,FaceChain团队出品

一、论文题目&#xff1a; CostFormer: Cost Transformer for Cost Aggregation in Multi-view Stereo&#xff0c;https://arxiv.org/abs/2305.10320 二、论文简介&#xff1a; 多视角立体是三维重建的一种重要实现方式&#xff0c;该方式会从一系列同一场景但不同视角的二维…

c++算法学习笔记 (10) 位运算

1.求n的二进制位表示中第k位是几&#xff1a; #include <iostream> using namespace std; int main() {int n 10;for (int i 3; i > 0; i--){ // 求n的第i位cout << ((n >> i) & 1) << " ";} // 输出1 0 1 0return 0; } 2.lowbit…

解析JS加密解密中的生成器构造

前言 之前JS解密的客户&#xff0c;有一部分代码里是有生成器构造出来代码&#xff0c;一些基础比较薄弱的客户以及技术就看起来比较费劲看不懂了&#xff0c;这里特意写一篇文章为这部分客户服务。尽量言简意赅&#xff0c;以下是示例代码&#xff1a; function YV(YD) {ret…

【动态规划】【 数位dp】2827. 范围中美丽整数的数目

本文涉及知识点 数位dp 动态规划汇总 LeetCode2827. 范围中美丽整数的数目 给你正整数 low &#xff0c;high 和 k 。 如果一个数满足以下两个条件&#xff0c;那么它是 美丽的 &#xff1a; 偶数数位的数目与奇数数位的数目相同。 这个整数可以被 k 整除。 请你返回范围 [l…

仿懂车帝的二手车交易平台功能介绍

二手车交易平台app是一款功能丰富的二手车交易平台&#xff0c;以下是其主要功能介绍&#xff1a; 二手车信息展示&#xff1a;APP首页展示各类二手车信息&#xff0c;包括车型、品牌、价格等&#xff0c;用户可以轻松浏览并选择自己感兴趣的车辆。搜索与筛选功能&#xff1a;…

Ethereum, BSC, Polygon, Arbitrum, Base, OPBNB 链打符文代码

Ethereum, BSC, Polygon, Arbitrum, Base, OPBNB 代码创建了一个 Web3 实例,并根据配置文件中的 RPC URL 和链 ID 连接到区块链。 3. 接下来,代码定义了一些变量,如发送者钱包地址、发送者私钥、接收者钱包地址和输入消息。 4. `UpdateBalance` 函数用于获取发送者钱包…

哈希技术解析:从哈希函数到哈希桶迭代器的全面指南

文章目录 引言一、哈希表与哈希函数1、哈希表的基本原理2、哈希函数的作用与特点3、哈希冲突的处理方法 二、哈希桶及其迭代器1、 哈希桶a.定义哈希桶结构b.哈希函数c.哈希桶的插入、查找、删除 2、 哈希桶的迭代器a.类型定义与成员变量b.构造函数c.解引用与比较操作d.递增操作…

Liunx进程间通信

进程间通信 进程间通信进程间通信的基本概念进程间通信的目的 管道匿名管道进程池 命名管道 system V进程间通信system V进程间通信基本概念system V共享内存共享内存和管道的对比 system V 信号量信号量同步和互斥 进程间通信 进程间通信的基本概念 进程间通信就是在不同进程…