文章总结: 文章给出基于夜莺+Categraf+SNMP对2000+多品牌网络设备统一监控的完整工程化路线,涵盖深信服AD/AF/AC/VPN及交换机、路由器、防火墙的指标采集、MIB管理、Push/Pull架构选择、VictoriaMetrics/Prometheus时序库、Grafana仪表盘与告警配置,提供一键脚本、测试方法、记录规则与可视化模板,可直接落地。 综合评分: 88 文章分类: 网络监控,安全建设,安全工具,解决方案,实战经验
网络监控:构建超 2000+ 多品牌多类型网络设备监控系统最佳实践路线
原创
小斐Lab 小斐Lab
网络小斐
2026年1月22日 14:58 浙江
大家好,我是小斐呀。
之前两篇展开说了思科园区和数据中心交换机在夜莺体系中使用 Categraf 采集器中的原生 SNMP 插件采集指标,并把指标名和标签格式和信息统一,保证后续更多其他品牌交换机通过 SNMP 协议采集后的指标和标签标准化统一。
思科交换机标准化采集链接可跳转到如下两篇文章查看:
网络监控:夜莺统一指标语义监控超1000台思科网络设备最佳实践
网络监控:夜莺架构模版适配 500 台国内主流品牌网络设备(包含交换机、路由器、防火墙)
当看完上面文章后,有些小白用户觉得懵逼状态,不知如何动手,只是觉得好看,好用,好牛逼,可是你不动手试一试,怎么知道行不行,符不符合自己的需求,很多小伙伴不管是网工、运维、研发、还是IT等等,公司多少都是有一些网络设备或者其他一些硬件设备,而这些硬件设备最通用的数据暴露协议基本上就是 SNMP 协议了。
当然现在很多稍微高端的新版本交换机慢慢都开始支持 Telemetry 协议,性能和精度都有所提升,在数据中心场景下 Telemetry 精度和性能我觉得更多的是在流量层面观测,其他基础硬件故障倒是不那么必要,当然现在 AI 智算中心兴起,很多 AI 交换机对设备观测提高了要求,都内置了遥测功能,比如:
- 英伟达以太网交换机
Spectrum系列Cumulus Linux操作系统都是支持SNMP、OpenTelemetry和gNMI的 - 英伟达
IB交换机Quantum系列可以通过IB工具或者UFM得到 - 星融元以太网交换机
AsterNOS操作系统都是支持SNMP、gNMI的
这些最新的交换机操作系统越来越拥抱高性能遥测,都开始支持 Telemetry 协议,如果结合 Prometheus 监控生态,可以根据新协议采集指标然后构建 Grafana 监控面板,其中星融元本身就拥抱了 Prometheus 生态,自身就打造了像 AE 、 RE 、 NE 等 exporter 可直接对接 Prometheus + Grafana 生态体系。
上面的那种 Telemetry 协议采集监控指标,之前讲过 Categraf 下的 gNMI 插件的简单使用,把主流品牌的 SNMP 适配差不多后,我将展开说说 Telemetry 体系。回到夜莺监控采集的问题上,下面我将把深信服设备标准化采集适配好,在夜莺体系下完善对深信服设备的监控可视化。
监控架构
夜莺体系下我们对深信服以下设备做标准化:
- 深信服
AD - 深信服
AF - 深信服
AC - 深信服
VPN
其他设备看后续情况而定。
之前对指标架构做了组件大一统的说明,这里在统一下我之前推荐的架构:
按照采集器或导出器的指标暴露方式我们可以把上面架构分为 push 模式和 pull 模式,其中 pull 模式分两条路线,时序库采用 VictoriaMetrics 路线并引入 vmagent 组件,主要解决功能角色分离,组件 vmagent 主要起到抓取、标签处理、对接多协议以及防止单节点 VictoriaMetrics 挂了,组件 vmagent 可以临时缓存采集的指标到本地;时序库采用 Prometheus 路线,抓取、标签处理等都利用原生 Prometheus 自带功能。
其中 pull 模式路线根据你需要采集的对象,来引入不同的 exporter 导出器,比如你采集 SNMP 协议的网络设备,可以引入 snmp_exporter 这个采集器适配的网络设备在我网盘中已经适配大部分网络设备、物理机以及打印机等等。
比如 MySQL 数据库就可以引入 mysqld_exporter 采集 MySQL 数据库指标,如上面星融元交换机官方自己适配了 AsterNOS Exporter 、 RoCE Exporter 、 NIC Exporter 等等,就可以直接采集 AI 交换机的详细指标,如下所示:
不过星融元适配的统一监控面板真的还不够美观,不适合给老板看,应该在做一些大屏给老板查看比较好。
当然如果你还想使用夜莺作为告警引擎,可以在
pull模式路线中引入夜莺纯粹作为告警引擎使用。
指标采集
上面简单说明了架构路线的选择,以及不同采集器区别,请根据实际情况进行路线选择,下面展开说明下 push 模式下夜莺标准化采集深信服设备。
环境准备
新建 Linux 服务器,这里推荐使用 Ubuntu 系统, Categraf 采集器对服务器的要求不高,这里我推荐 4C 8G 即可,硬盘可随意,推荐 100G 即可,后续可以单独使用这台服务器作为采集器服务器,不要和其他组件混合在一起,比如 Nightingale 、 VictoriaMetrics 、 Grafana 等等,注意 Nightingale 部署之前需要部署好 MySQL 和 Redis 数据库。
如果所有组件在同一台服务器上,建议
8C 16G或者16C 32G硬盘根据你的实际存储周期和设备采集样本数来判断,一般情况下500G可适配绝大部分环境。
下载采集器
下载最新版本的 Categraf 二进制压缩包,然后进行解压使用即可,下载链接有两个,一个是从官方网址下载,这个对国内网络比较友好,第二个就是从开源托管网站 Github 上下载最新版本,最新版本通常在这发布,官网可能都会落后这里的版本。
下载官方网址提供的最新版本:
# 1. 下载官网页面内容到变量
html_content=$(curl -s https://flashcat.cloud/download/categraf/)
# 2. 提取官网最新版本号(正则匹配 vX.X.X 格式)
latest_version=$(echo"$html_content" | grep -oP 'categraf-v\K[0-9]+\.[0-9]+\.[0-9]+(?=-linux-amd64\.tar\.gz)' | sort -Vr | head -n 1)
# 3. 打印结果
echo"最新版本号为: v$latest_version"
# 4. 下载最新版本二进制压缩包
# 定义架构(Ubuntu x86_64 对应 amd64)注意如果你的 CPU 架构是 ARM 请替换对应的 arm64
arch="amd64"
# 拼接文件名
filename="categraf-v${latest_version}-linux-${arch}.tar.gz"
# 拼接下载 URL
download_url="https://download.flashcat.cloud/${filename}"
# 使用 curl 下载,显示进度条并遵循重定向
curl -H 'Referer: https://console.flashcat.cloud' \
-L --progress-bar \
-o "${filename}" \
"${download_url}"
# 5. 解压安装
cd /opt
mv ${filename} /opt
tar -zxvf ${filename}
sudo ln -s categraf-${latest_version}-linux-${arch} /opt/categraf
/opt/categraf/categraf --install
下载 Github 网址提供的最新版本:
# 1. 调用 GitHub API 并提取版本号标签 (例如 v0.4.36)
latest_version=$(curl -s https://api.github.com/repos/flashcatcloud/categraf/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
# 2. 打印结果
echo"最新版本号为: $latest_version"
# 3. 下载最新版本二进制压缩包
# 定义架构(Ubuntu x86_64 对应 amd64)注意如果你的 CPU 架构是 ARM 请替换对应的 arm64
arch="amd64"
# 拼接文件名
filename="categraf-${latest_version}-linux-${arch}.tar.gz"
# 拼接下载 URL
download_url="https://github.com/flashcatcloud/categraf/releases/download/${latest_version}/${filename}"
# 4. 执行下载 (使用 -L 处理 GitHub 的 CDN 重定向)
echo"正在从 GitHub 下载: $download_url"
curl -L --progress-bar -o "${filename}""${download_url}"
# 5. 解压安装
cd /opt
mv ${filename} /opt
tar -zxvf ${filename}
sudo ln -s categraf-${latest_version}-linux-${arch} /opt/categraf
/opt/categraf/categraf --install
如果觉得麻烦,你还可以直接执行我提供的一键安装脚本:
# 一键安装脚本安装 Categraf
curl -sSL --fail https://gitee.com/robotneo/script/raw/master/install-categraf.sh | bash -s -- --install-path /opt/categraf
mib 文件提供
每个品牌相关类型的设备都有对应的 mib 文件,因为都是基于 SNMP 协议来暴露指标数据,而 SNMP 协议中 mib 文件定义了相关 oid 的各种属性和标准,并且我们在使用采集配置文件的是直接提供文本型 oid 最终是需要解析引擎去转换为数字型 oid 故你需要在配置文件中执行 mib 文件所在的目录路径。
把每个品牌的对应类型的 mib 文件放在单独的文件夹下,这个文件夹中不要有其他任何文件,就纯粹的是这个类型的 mib 文件即可,这里面包含公有的私有的等等 mib 文件,不要有其他子目录或者压缩文件。
我在网盘中提供的各种
mib文件都是提供zip压缩包的,你需要把压缩包解压后的文件都复制到对应品牌目录下。
如下所示,我需要采集深信服 AD 设备指标,现在我需要在部署 Categraf 的目录下新建 mibs 文件夹,比如我的 categraf 二进制文件所在目录是 /opt/categraf 目录:
# /opt/categraf 目录
cd /opt/categraf
mkdir -pv mibs/sangfor/ad # 新建深信服 AD 设备 mib 文件存放目录
mkdir -pv mibs/sangfor/af # 新建深信服 AF 设备 mib 文件存放目录
mkdir -pv mibs/sangfor/ac # 新建深信服 AC 设备 mib 文件存放目录
现在把网盘里面我提供的深信服 AD 设备的mib 文件导入到 /opt/categraf/mibs/sangfor/ad 目录下:
需要解压 zip 文件,把解压的 mib 后缀文件或者 txt 后缀文件放入 /opt/categraf/mibs/sangfor/ad 目录下。
这些动作做好以后,就可以开始写采集配置文件,把标准化的采集配置文件放到 /opt/categraf/conf/input.snmp 目录下即可。
深信服对应的配置文件我都放在对应的设备类型的目录下,其他品牌以此类推,都是一样的规则,这些对于的采集配置文件都有一些共同的规则,我下面详细介绍一下:
配置文件结构:
- snmp_sangfor_system.toml
- snmp_sangfor_interface.toml
- snmp_sangfor_optical.toml
- snmp_sangfor_xxxxxx.toml
- recording_rule.json
- grafana_vm.json
采集配置文件都是基于 snmp_ 前缀打头,后面跟随各种品牌的英文名称,如深信服( sangfor ),最后是指采集的指标模块,比如系统性能指标( system ),网络接口指标( interface ),光模块接口指标( optical )其他品牌以此类型。
首先需要配置 Categraf 的全局配置文件 conf/config.toml 文件:
# 主要有
[global]
print_configs=false
# 配置 agent_hostname 标签值为当前主机 IP 地址
hostname="$ip"
omit_hostname=false
# 全局采集间隔为 15 秒
interval=15
providers=["local"]
concurrency=-1
[global.labels]
# region = "shanghai"
# env = "localhost"
# sn = "$sn"
[log]
file_name="stdout"
max_size=100
max_age=1
max_backups=1
local_time=true
compress=false
[writer_opt]
batch=1000
chan_size=1000000
# 主要配置夜莺的监听地址,比如夜莺监听地址为 172.17.40.192:17000 其他不变
[[writers]]
url="http://172.17.40.192:17000/prometheus/v1/write"
basic_auth_user=""
basic_auth_pass=""
timeout=5000
dial_timeout=2500
max_idle_conns_per_host=100
[http]
enable=false
address=":9100"
print_access=false
run_mode="release"
ignore_hostname=false
agent_host_tag=""
ignore_global_labels=false
[ibex]
enable=false
interval="1000ms"
servers=["127.0.0.1:20090"]
meta_dir="./meta"
# 开启心跳检测
[heartbeat]
enable=true
# 设置夜莺的监听地址,比如夜莺监听地址为 172.17.40.192:17000 其他不变
url="http://172.17.40.192:17000/v1/n9e/heartbeat"
interval=10
basic_auth_user=""
basic_auth_pass=""
timeout=5000
dial_timeout=2500
max_idle_conns_per_host=100
[prometheus]
enable=false
scrape_config_file="/path/to/in_cluster_scrape.yaml"
log_level="info"
把写好的采集配置文件放入 /opt/categraf/conf/input.snmp 目录下:
- snmp_mapping.toml
- snmp_sangfor_system.toml
- snmp_sangfor_interface.toml
- snmp_sangfor_session.toml
- snmp_sangfor_ha.toml
- snmp_sangfor_optical.toml
配置文件放在星球网盘里面:
深信服 AD 设备因为不能获取光模块信息,故没有 snmp_sangfor_optical.toml 内容。
启动采集测试:
# 通过单个文件测试配置文件是否符合语法和采集要求
/opt/categraf/categraf --test --debug --inputs snmp
# 我们先测试 snmp_sangfor_system.toml 文件 把这一个文件放入 /opt/categraf/conf/input.snmp 目录下
# 测试好后,我们在删除或者重命名这个文件,然后继续测试 snmp_sangfor_interface.toml 文件
# 每次测试保证 /opt/categraf/conf/input.snmp 目录下 只有一个文件 这样就避免干扰
/opt/categraf/categraf --test --debug --inputs snmp
当执行测试命令后,发现没有任何问题,并且正常加载 snmp 原生插件输出指标信息,如下所示:
当采集一切正常,没有任何错误,并且指标值和标签都满足基本需求即可把采集文件放入正式采集配置目录中。
启动正式采集:
# 把测试好的采集配置文件放入 /opt/categraf/conf/input.snmp 目录下
snmp_mapping.toml snmp_sangfor_system.toml snmp_sangfor_interface.toml snmp_sangfor_session.toml snmp_sangfor_ha.toml
# categraf 正式运行采集
sudo systemctl restart categraf.service
采集后,可以看到如下指标:
snmp_icmp_packet_loss
snmp_icmp_rtt
snmp_icmp_up
snmp_interface_high_speed
snmp_interface_in_bits
snmp_interface_in_drops
snmp_interface_in_errors
snmp_interface_in_packets
snmp_interface_out_bits
snmp_interface_out_drops
snmp_interface_out_errors
snmp_interface_out_packets
snmp_link_down_throughput
snmp_link_in_bits
snmp_link_oper_state
snmp_link_out_bits
snmp_link_up_throughput
snmp_link_number
snmp_session_create_number
snmp_session_current_number
snmp_session_node_number
snmp_session_pool_number
snmp_session_vs_create_number
snmp_session_vs_current_number
snmp_session_vs_number
snmp_system_cpu_usage_percent
snmp_system_disk_avail_bytes
snmp_system_disk_size_bytes
snmp_system_disk_temp_celsius
snmp_system_disk_used_bytes
snmp_system_entity_temp_celsius
snmp_system_fan_speed_rpm
snmp_system_fan_status
snmp_system_ha_local_status
snmp_system_ha_peer_status
snmp_system_ha_status
snmp_system_ha_sync_status
snmp_system_mem_usage_percent
snmp_system_power_status
snmp_system_run_mode
snmp_system_status
snmp_up
snmp_uptime_seconds
打开夜莺控制台,打开快捷视图:
快捷视图如何新建:
其他什么交换机、防火墙、路由器、或者更多其他角色都可以按照这种方式来新建快捷视图查看采集的指标对象。
如果有记录规则需要导入,那就需要导入记录规则,如下所示:
记录规则文件就是网盘里面提供的 recording_rule.json 文件,注意有些 recording_rule.json 文件内容是空的,我一般有注释,空的文件内容就不需要导入,那就代表该类设备不需要记录规则,一般来说交换机、防火墙、路由器都有。
当这些都弄好后,接下来就可以打开 Grafana 新建 VM 数据源,导入对应的设备类型的仪表盘,如果你需要把 Grafana 集成到夜莺的控制台,你可以这样操作:
Grafana 也需要修改一些配置:
# 修改 Grafana 的启动配置文件 把一下配置参数的 逗号 注释去掉
vim /etc/grafana/grafana.ini
# 允许嵌入
allow_embedding = true
# 开启匿名访问
[auth.anonymous]
enabled = true
org_name = Main Org.
org_role = Viewer
;hide_version = false
# 重启 Grafana
sudo systemctl restart grafana-server.service
启动成功后,打开夜莺控制台,刷新查看集成中心:
可以看到 Grafana 被嵌入到夜莺控制台中了,后续可以直接在夜莺控制台操作 Grafana 即可。
可视化
这里现在可以导入 grafana_vm.json 文件了,这是模板文件,这里我将以 Grafana v12.1.1 版本为例子,演示如何在 Grafana 演示新建数据源,数据源是以 VictoriaMetris 为例子,展示 Categraf 采集的深信服设备仪表板:
下载好插件后,添加数据源:
然后就点击仪表板导入即可。
下面是深信服 AD 设备的仪表板示例:
到此就完成深信服设备的指标采集和数据面板展示,告警只需要根据自身实际阈值需求设置告警规则即可,可以看面板的指标名称来设置,在夜莺的告警规则配置中,我网盘也有对应的演示案例,照猫画虎即可。
其他品牌设备都是按照该步骤进行,唯一的区别就是在采集侧需要不同的采集配置文件和对应的面板,比如交换机多品牌都是统一的面板,故看实际情况选择即可。
end
如果您的环境下也有各种品牌的网络设备需要统一化采集和监控,也想构建一套比较合适的网络基础设施监控告警系统,可以试试这套开源架构,有深入需求可以加我沟通。
我建立了一些对关于网络和基础设施等相关的监控告警群,针对这块的有需求或者想沟通交流,可以加入到群里交流即可,可公众号后台私信加我,我拉你进群。
📣欢迎朋友们关注公众号📢📢:【网络小斐】!
🙋♂️有想法的朋友也可以加我沟通,朋友🔘做个点赞之交!😂😂
欢迎点赞 👍、收藏 💗、关注 💡 三连支持一下,我们下期见~✨
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网络小斐 小斐Lab 小斐Lab《网络监控:构建超 2000+ 多品牌多类型网络设备监控系统最佳实践路线》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论