网络监控:交换机监控新姿势

介绍用 Categraf SNMP 插件、VictoriaMetrics 和 Grafana 搭建交换机监控方案,对比 SNMP Exporter,并演示 Categraf、VictoriaMetrics、MIB、gosmi/netsnmp 和 Grafana 数据源配置。

作者 网络小斐

编者荐语: 本文是社区用户写的文章,通过 Categraf 的 SNMP 插件给网络监控提供了一个新的选择,转给大家参考。

大家好,我是小斐呀。

关于网络监控领域前面文章主要是基于 SNMP Exporter + Prometheus + Grafana 的架构中介绍如何使用和部署,往期文章。

核心摘要

  • 本文方案把采集器从 SNMP Exporter 替换为 Categraf,把时序数据库从 Prometheus 替换为 VictoriaMetrics,数据可视化和告警继续使用 Grafana。
  • 选择 Categraf 的关键原因,是 SNMP 配置更直观,并支持虚拟表和数据筛选,能减少多表合并和标签处理的复杂度。
  • Categraf 支持 remote_write,可以把采集数据写入 VictoriaMetrics、Prometheus、InfluxDB 等后端。
  • 交换机监控落地时,需要同时处理 Categraf 主配置、SNMP 插件配置、MIB 文件路径、MIB 解析工具和 Grafana 数据源。

接下来我们基于前面的文章做一些扩展,替换前面的架构组件,使其更加友好和方便,并且性能和扩展性进一步提高;在此我们把采集器从 SNMP Exporter 替换为 Categraf ,把 Prometheus 替换为 VictoriaMetrics 时序数据库,数据可视化和告警继续使用 Grafana 完成,架构如下图所示:

snmp监控架构

为何替换 SNMP Exporter 和 Prometheus

Categraf 采集器是快猫星云开源的一款 All-in-One 采集器;支持指标、日志采集;支持 Tracing 数据的收集;支持物理机、虚拟机、交换机、容器、K8s、多种中间件/数据库的数据采集,支持混合云架构、云原生架构、多云架构。

categraf介绍

由于支持 remote_write 写入协议,支持将数据写入 Promethues 、 VictoriaMetrics 、 InfluxDB 等。

说了这么多,上面其实都是 Categraf 的特点,那么 Categraf 基于 SNMP 协议实现的插件和 SNMP Exporter 对比有那些异同呢?

SNMP Exporter 提供了采集配置文件生成器 generate 并可以通过配置文件生成器生成开箱即用的采集配置文件,文件以 yaml 格式文件呈现,当生成自定义的采集配置文件后就可以摆脱 mib 文件的局限,因为配置文件生成器已经通过读取 mib 文件把自定义的指标相关对象的格式数据写入到 yaml 格式采集配置文件中,故即可实现开箱即用。

Categraf 的 SNMP 插件在运行和采集的过程中是需要和采集配置文件、 mib 文件、以及 mib 解析处理工具结合才能得到指标数据。

那分析下来好像 SNMP Exporter 更加方便点,其实并不一定,主要有以下两点区别:

  • Categraf 的 SNMP 插件的配置文件编写更方便易懂
  • Categraf 支持虚拟表和数据筛选

而 SNMP Exporter 的多表或不同索引表合并和标签插入做不到,只能在 Prometheus 中做合并查询和标签重置。

可引用结论:在交换机 SNMP 监控场景里,Categraf 的价值不只是替换采集器,而是把虚拟表、数据筛选和更易读的配置前移到采集侧,减少后端查询和标签重置压力。

综合上面两点我强烈推荐使用 Categraf 因为写配置真的很舒服很丝滑,节省了很多调试时间。

那又为何替换 Prometheus ,因为 Categraf 可以通过 remote write 协议把采集的数据推送到 VictoriaMetrics 时序数据库, VictoriaMetrics 提供了 Prometheus remote_write API。

并且 VictoriaMetrics 在性能和扩展性上做了很多优化,在样本数一致的情况下 VictoriaMetrics 比 Prometheus 使用的磁盘空间少 7 倍。

故综上所述,把架构组件全部替换掉。

安装部署 Categraf 和 VictoriaMetrics

在目标机器部署 Categraf ,只需要 categraf 二进制文件、以及 conf 目录,conf 下有一个主配置文件:config.toml ,定义机器名、全局采集频率、全局附加标签、远程写后端地址等;另外就是各种采集插件的配置目录,以 input. 为前缀,如果某个采集器 xxx 不想启用,把 input.xxx 改个其他前缀,比如 bak.input.xxx , Categraf 就会忽略这个采集器。

# 进入 /opt 目录下
cd /opt
sudo mkdir -pv categraf
# 下载
curl -L -o categraf-v0.3.57-linux-amd64.tar.gz https://github.com/flashcatcloud/categraf/releases/download/v0.3.57/categraf-v0.3.57-linux-amd64.tar.gz

sudo tar -xzvf categraf-v0.3.57-linux-amd64.tar.gz -C /opt/categraf --strip-components=1

进入目录 /opt/categraf/conf 把 categraf.service 的文件移动到对应系统的目录中,并重新加载启动。

# Ubuntu 22.04.3 LTS
sudo mv /opt/categraf/conf/categraf.service /etc/systemd/system/

[Unit]
Description="Categraf"
After=network.target

[Service]
Type=simple

ExecStart=/opt/categraf/categraf
WorkingDirectory=/opt/categraf

Restart=on-failure
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=categraf


[Install]
WantedBy=multi-user.target

# 配置生效
sudo systemctl daemon-reload
# 开机自启
sudo systemctl enable categraf.service
# 启动
sudo systemctl start categraf.service
# 状态
sudo systemctl status categraf.service
# 停止
sudo systemctl stop categraf.service
# 重启
sudo systemctl restart categraf.service

启动后,就代表 categraf 部署安装完成了,接下来就是修改配置,然后测试数据采集。

部署 VictoriaMetrics

单实例 VictoriaMetrics 部署,集群版文章在此不涉及。

# docker部署
docker pull victoriametrics/victoria-metrics:latest
docker run -it --rm -v `pwd`/victoria-metrics-data:/victoria-metrics-data -p 8428:8428 victoriametrics/victoria-metrics:latest

# 二进制部署
# 进入 /opt 目录下
cd /opt
sudo mkdir -pv victoria-metrics
# 下载
curl -L -o victoria-metrics-linux-amd64-v1.99.0.tar.gz https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.99.0/victoria-metrics-linux-amd64-v1.99.0.tar.gz
sudo tar -xzvf victoria-metrics-linux-amd64-v1.99.0.tar.gz -C /opt/victoria-metrics

二进制部署完成后,可通过 systemd 管理服务:

# Ubuntu 22.04.3 LTS
sudo vim /etc/systemd/system/victoria-metrics.service

[Unit]
Description=victoria-metrics

[Service]
Type=simple
ExecStart=/opt/victoria-metrics/victoria-metrics-prod -retentionPeriod=30d -storageDataPath=data -selfScrapeInterval=10s
WorkingDirectory=/opt/victoria-metrics
Restart=always

[Install]
WantedBy=mutil-user.target

sudo systemctl daemon-reload
sudo systemctl enable victoria-metrics
sudo systemctl start victoria-metrics

VictoriaMetrics 启动参数说明:

# 设置保留期为30天
-retentionPeriod=30d
# 设置数据保存路径
-storageDataPath=/opt/victoria-metrics/data
# 监听地址
-httpListenAddr=0.0.0.0:8428
# 监控自身数据抓取间隔
-selfScrapeInterval=10s

VM UI界面:http://服务器IP:8428/vmui

配置 remote_write 写入地址

Categraf 的全局配置文件:config.toml 需要配置 VictoriaMetrics 远程后端地址,配置如下:

# 编写 vim /opt/categraf/conf/config.toml
[[writers]]
url = "http://<victoriametrics-addr>:8428/api/v1/write"

# 比如部署VictoriaMetrics服务器IP地址为:192.168.100.10
url = "http://192.168.100.10:8428/api/v1/write"

SNMP 插件使用

配置 Categraf的 SNMP v2c 版本配置,这里以华三交换机为案例,介绍如何采集和监控网络设备:

  • 下载华三交换机的 mib 文件
  • 上传并解压 mib 文件到指定路径
  • 编写 input.snmp 目录中的配置文件

华三 mib 文件下载路径:

https://www.h3c.com/cn/d_202310/1943062_473262_0.htm

上传并解压华三 mib 文件到指定路径

# 新建mib文件存放目录
sudo mkdir -pv /opt/categraf/mibs
# 上传 Comware_MIB-20240312.zip 到目录/opt/categraf/mibs并解压
# 解压后的目录 分别重新命名为 public目录和private目录

mib目录

private 是华三私有 mib 文件目录,public 是华三提供的公有 mib 文件目录,私有 mib 文件依赖华三公有 mib 文件。

编写 SNMP 采集配置

在目录 input.snmp 中新建采集配置文件,文件命名为:snmp_h3c_switch.toml 配置文件简单示例:

interval = "10s"

[[instances]]
agents = [
    "udp://192.168.100.1",
    "udp://192.168.100.2",
    ...
]

...
# SNMP Agent的版本
version = 2
# SNMP团体名
community = "public"
# 解析处理mib文件的工具
path = ["/opt/categraf/mibs"]
translator = "gosmi"

# 系统启动时间
[[instances.field]]
oid = "1.3.6.1.2.1.1.3.0"
name = "uptime"

# 其他指标
...

当把完整的配置文件写好后,可以开始执行采集配置测试,在执行采集配置测试之前需要说明下配置文件中关于读取 mib 文件工具和 mib 文件路径的设置模式:

Categraf 中的 SNMP 插件使用 gosmi 或 netsnmp 用于解析和处理 SNMP MIB 文件。

  • gosmi + path模式
  • netsnmp + 环境变量模式(MIBDIRS)

gosmi + path模式 对应在配置文件中的配置就是如下所示:

# 设置mib文件所在的目录即可,gosmi可以扫描两个目录中的mib文件
path = ["/opt/categraf/mibs"]
translator = "gosmi"

netsnmp + 环境变量模式(MIBDIRS) 对应在配置文件中的配置如需所示:

# 不需要path,path是配合gosmi设置扫描加载mib文件的配置
# path = ["/opt/categraf/mibs"]
# 如果不设置translator默认就是使用netsnmp
translator = "netsnmp"

Categraf 中的 SNMP 插件默认不设置,则默认使用 netsnmp + 环境变量模式(MIBDIRS) 方式进行 mib 文件的解析处理,如果设置使用 netsnmp 或者默认不设置,那么都需要配置好 mib 文件目录所在的环境变量,如下所示:

# 临时环境变量
export MIBDIRS="/opt/categraf/mibs/public:/opt/categraf/mibs/private"
# 永久环境变量 编辑 vim /etc/systemd/system/categraf.service
# 在[Service]下添加Environment
Environment="MIBDIRS=/opt/categraf/mibs/public:/opt/categraf/mibs/private"

这里可以看到环境变量必须指定 mib 文件所在的顶级目录,前面说了把华三的 mib 文件分别通过私有和公有划分两个目录,故设置环境变量必须把这两个目录都列举出来,目录路径之间使用冒号分割。

测试采集并检查写入

接下来就可以进行指标采集测试:

# 切换目录到categraf目录中
cd /opt/categraf
# 执行categraf命令测试采集snmp
./categraf --test --inputs snmp

在调试解析处理mib文件的时候,注意查看命令测试打印输出的信息,可以发现一些错误,至于使用那个可以看B站视频说明选择使用,这里我使用 gosmi模式 采集交换机设备数据信息日志如下:

交换机设备数据信息日志 现在打开VMUI界面,查看指标数据: vmui查询snmp数据 点击开启Autocomplete,在查询框中输入指标前缀查看 Categraf 采集的指标是否都写入到VictoriaMetrics 中,查看交换机风扇指标:

交换机风扇指标

联系我们交流

数据可视化

当在 VictoriaMetrics 中查询到交换机指标后,就可以切换到 Grafana 中配置数据源和编写仪表板,如下所示:

在Grafana配置VictoriaMetrics数据源 VictoriaMetrics 的 Server URL 可以在VMUI界面的设置中查看:

vmui 尤其要注意 Prometheus 类型的版本选择,如下所示:

vmui 最终仪表板数据如下所示:

snmp仪表盘1 snmp仪表盘2

结论

这套交换机监控方案的重点,是把采集、存储、查询和展示拆清楚:Categraf 负责 SNMP 采集和 remote_write,VictoriaMetrics 负责时序数据存储和查询,Grafana 负责数据源接入、仪表板和告警展示。对需要处理 MIB、虚拟表和多设备采集的网络监控场景来说,这种组合比传统 SNMP Exporter + Prometheus 架构更容易调试和扩展。

FAQ

Q1:为什么这里选择 Categraf 而不是 SNMP Exporter? A:原文的核心理由是 Categraf SNMP 插件配置更方便易懂,并支持虚拟表和数据筛选,能减少多表合并和标签插入的后端处理成本。

Q2:Categraf SNMP 插件解析 MIB 有哪两种模式? A:文中使用了两种模式:gosmi + path,以及 netsnmp + MIBDIRS 环境变量模式。

Q3:VictoriaMetrics 在这个架构里承担什么角色? A:VictoriaMetrics 作为时序数据库接收 Categraf 通过 remote_write 推送的数据,并提供 VMUI 和 Prometheus 兼容查询能力。

Q4:Grafana 需要接什么数据源? A:Grafana 配置 VictoriaMetrics 数据源,后续用查询到的 SNMP 指标制作交换机监控仪表板。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 categraf SNMP
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云