聊聊华三交换机的监控模块,华为和华三在交换机这块也是分为园区和数据中心,但是两者在 oid
和 mib
上是有些差异的。
华为园区交换机和数据中心交换机的 oid
是有一些小异同的,比如华为园区的光模块 oid
和数据中心的光模块 oid
就有异同,光功率的单位和某些 oid
含义就发生了改变。
华三园区交换机和数据中心交换机的 oid
没有什么异同,只不过在固件版本是有一些异同,特别是 S10500
系列的 V5
固件和 V7
固件是有异同的,这个异同是指 V7
固件在 V5
固件的基础上新增了很多 oid
导致如果用同一个模块的,就会出现采集的指标不一定都一致,需要在采集模块上做文章,稍微指定一下不同版本的采集模块。
那如何区分呢,我这里有一个很简单的区分方式,交换机购买年份和固件年份就可以基本上确定, V7
固件几乎都是无缝支持,没有任何问题, V5
固件就需要看设备是什么年份的,十年前的设备肯定有所差异。
配置生成
使用配置之前需要了解下华三交换机的指标模块有哪些,分别都可以采集到什么指标:
建议采集的时候根据单模块的响应时间来决定需要如何定义一个 job_name
的采集时间,有些模块如果你不关心,后续也不需要告警可以不用设置采集模块,要深入理解采集原理,正确设置 job_name
和对应资源交换机的关联关系,合理设置不同类型交换机采集时间,根据固件版本和采集响应时间分类采集 job_name
当然也可以根据标签来实现不同抓取间隔和超时时间纳入不同 job_name
下,这只是思路可自行探索。
如何使用
使用 SNMP Exporter
下的生成器生成最终的采集配置文件即可,步骤如下:
第一步:
我修复好的华三 V7
固件的 mib
文件导入固定目录下如下所示:
# private 目录下是华三 V7 的私有 mib 文件
# public 目录下是华三 V7 的公有 mib 文件
root@demo:/opt/snmp_exporter/generator/mibs/h3c# ls
private public
第二步:
使用 SNMP Exporter
源码构建生成器二进制文件:
# 前提安装好 go 环境
wget https://gitee.com/robotneo/script/raw/master/install-go.sh
# 源码编译
cd /opt
git clone https://github.com/prometheus/snmp_exporter.git
cd /opt/snmp_exporter/generator
# 生成二进制 generator
make generator
第三步:
使用 VS Code
或者 Trae
编写生成器配置文件,我可以新建文件 generator_h3ccs.yml
如下:
auths:
h3ccs_auth:
version:2
community:public
modules:
# 华三交换机系统指标模块
# 适配型号S5000&S5110&S5120&S5130&S5135&S5170&S5500&S5800&S6300&S6500&S6800&S10500系列
# h3ccs_ 的前缀是指 H:H3C(华为)C:Campus(园区)S:Switch(交换机)
h3ccs_system:
walk:
-1.3.6.1.2.1.1.5
-1.3.6.1.2.1.1.3
-1.3.6.1.2.1.47.1.1.1.1.7
-1.3.6.1.2.1.47.1.1.1.1.10
-1.3.6.1.2.1.47.1.1.1.1.11
-1.3.6.1.4.1.25506.2.6.1.1.1.1.19
-1.3.6.1.4.1.25506.2.6.1.1.1.1.11
-1.3.6.1.4.1.25506.2.6.1.1.1.1.12
-1.3.6.1.4.1.25506.2.6.1.1.1.1.6
-1.3.6.1.4.1.25506.2.6.1.1.1.1.8
-1.3.6.1.4.1.25506.8.35.9.1.1.1.2
-1.3.6.1.4.1.25506.8.35.9.1.2.1.2
-1.3.6.1.4.1.25506.2.5.1.1.4.1.1.8
-1.3.6.1.4.1.25506.2.5.1.1.4.1.1.4
-1.3.6.1.4.1.25506.2.5.1.1.4.1.1.5
-1.3.6.1.4.1.25506.2.5.1.1.4.1.1.10
-1.3.6.1.4.1.25506.8.35.5.1.12
-1.3.6.1.4.1.25506.2.6.1.2.1.1.5
max_repetitions:25
retries:3
timeout:5s
allow_nonincreasing_oids:false
use_unconnected_udp_socket:false
......
# 华三交换机接口指标模块
# 适配型号S5000&S5110&S5120&S5130&S5135&S5170&S5500&S5800&S6300&S6500&S6800&S10500系列
h3ccs_interface:
walk:
-1.3.6.1.2.1.31.1.1.1.1
-1.3.6.1.2.1.2.2.1.7
-1.3.6.1.2.1.2.2.1.8
-1.3.6.1.2.1.31.1.1.1.15
-1.3.6.1.2.1.2.2.1.4
-1.3.6.1.2.1.31.1.1.1.18
-1.3.6.1.2.1.2.2.1.6
-1.3.6.1.2.1.31.1.1.1.6
-1.3.6.1.2.1.31.1.1.1.10
-1.3.6.1.2.1.2.2.1.13
-1.3.6.1.2.1.2.2.1.19
-1.3.6.1.2.1.2.2.1.14
-1.3.6.1.2.1.2.2.1.20
-1.3.6.1.2.1.31.1.1.1.7
-1.3.6.1.2.1.31.1.1.1.8
-1.3.6.1.2.1.31.1.1.1.9
-1.3.6.1.2.1.31.1.1.1.11
-1.3.6.1.2.1.31.1.1.1.12
-1.3.6.1.2.1.31.1.1.1.13
max_repetitions:25
retries:3
timeout:5s
allow_nonincreasing_oids:false
use_unconnected_udp_socket:false
......
第四步:
使用生成器二进制文件以及对应的参数去生成最终的采集配置文件,如下所示:
我把华三交换机所有的 mib
文件放入对应的目录下 /opt/snmp_exporter/generator/mibs/h3c/public
和 /opt/snmp_exporter/generator/mibs/h3c/private
,把 generator_h3ccs.yml
放入 /opt/snmp_exporter/generator/conf/h3c/switch
目录下,执行如下命令生成即可:
/opt/snmp_exporter/generator/generator --fail-on-parse-errors generate -m /opt/snmp_exporter/generator/mibs/h3c/public -m /opt/snmp_exporter/generator/mibs/h3c/private -g /opt/snmp_exporter/generator/conf/h3c/switch/generator_h3ccs.yml -o /opt/snmp_exporter/generator/conf/h3c/switch/snmp_h3ccs.yml
如果输出的信息没有任何报错,那就代表生成器的配置文件语法没有任何问题, oid
和节点名称都是存在,并且定义的模块都正常生成如下图所示:

最终得到的 snmp_h3ccs.yml
文件就是最终的采集配置文件,可直接放在 SNMP Exporter
下运行加载。
Tips:建议每个配置文件都单独定义好,认证模块和指标模块名称不要有重复,这样加载采集的的时候即可加载多种品牌定义的配置文件。
运行采集
把生成好的配置文件 snmp_h3ccs.yml
放入指定的加载配置文件的文件夹中,如下所示:
将 snmp_exporter
的作为服务运行,新建服务启动文件 /etc/systemd/system/snmp_exporter.service
[Unit]
Description=snmp_exporter
After=network.target
[Service]
ExecStart=/opt/snmp_exporter/snmp_exporter --config.file=/opt/snmp_exporter/conf/snmp_*.yml --snmp.module-concurrency=3
Restart=on-failure
[Install]
WantedBy=multi-user.target
这里的 --config.file
使用了通配符 *
匹配加载 /opt/snmp_exporter/conf
目录下的所有 snmp_
为前缀的采集配置文件。
把 snmp_h3ccs.yml
放入 /opt/snmp_exporter/conf/
目录下,启动并运行测试如下:

认证模块名称为 h3ccs_auth
指标模块名称为 h3ccs_system,h3ccs_optical,h3ccs_interface
实际采集测试的时候,可以根据实际情况去新增或者修改对应的指标模块,注意抓取间隔时间和超时时间,有些老旧交换机,固件版本低的交换机采集响应时间有些长,为了避免数据采集间隔太长,导致数据不准,可把采集频率设置大一些。
抓取配置
打开 SNMP Exporter
调试 web
页面后,测试编写的指标模块是否符合自己的需求,并且数据返回是否正常。
当这些步骤完成后,我们就要把数据采集到时序库中,由于 SNMP Exporter
是基于 pull
模式,需要配置 job_name
以定时抓取指标数据存入时序库中,交换机由于品牌、类型、分布地域不同,这里就通过文件服务发现设置采集目标,如果方便的话,可以自研 Web
集成页面添加通过 consul
注册采集对象,实现更加友好的服务发现方式,不用维护 yml
文件。
这里以 VictoriaMetrics
下的 vmagent
组件为例:
Prometheus 时序数据库抓取配置兼容,可直接复制到 prometheus.yml 下使用。
job_name
配置如下所示:
scrape_configs:
-job_name:"h3c_switch"
scrape_interval:30s
scrape_timeout:20s
file_sd_configs:
-files:
-/etc/victoriametrics/vmagent/h3c_sw.yml
metrics_path:/snmp
relabel_configs:
-source_labels:["__address__"]
target_label:__param_target
-source_labels:["__param_target"]
target_label:instance
-target_label:__address__
replacement:172.17.40.15:9116
-source_labels:["module"]
target_label:__param_module
-source_labels:["auth"]
target_label:__param_auth
由于上面使用了文件服务发现,我们需要在目录 /etc/victoriametrics/vmagent
下添加定义华为交换机的信息 huawei_sw.yml
文件模版内容如下:
- labels:
# 固件版本为 V7 用这个
module:h3ccs_system,h3ccs_interface,h3ccs_optical
auth:h3ccs_auth
brand:H3C
role:switch
region:beijing
targets:
-192.168.200.10
-192.168.200.11
-labels:
# 固件版本为 V5 用这个
module:h3ccs_system,h3ccs_interface,h3ccs_optical_v5
auth:h3ccs_auth
brand:H3C
role:switch
region:beijing
targets:
-192.168.201.10
-192.168.201.11
面板展示
最后我把采集的数据通过 Grafana
实现对应的仪表板,最终呈现效果如下:






到此就完成基于 SNMP Exporter
对华三园区交换机在 Prometheus
体系下的监控和数据可视化,其实可以发现园区交换机对华三全体系都兼容的。