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

网络小斐 2024年4月12日

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

大家好,我是小斐呀。

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

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

为何替换

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

由于支持 remote_write 写入协议,支持将数据写入 PromethuesVictoriaMetricsInfluxDB 等。

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

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

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

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

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

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

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

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

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

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

安装部署

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

# 进入 /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 部署,集群版文章在此不涉及。

# 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

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目录

20240412172620

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

在目录 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模式 采集交换机设备数据信息日志如下:

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

20240412173548

数据可视化

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

20240412173639 VictoriaMetrics 的 Server URL 可以在VMUI界面的设置中查看:

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

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

20240412173859 20240412173939

开源版
Flashcat
Flashduty