1、简介
在现代企业IT基础设施中,网络设备(如防火墙、交换机、路由器等)构成了整个系统运行的关键通道。为了确保业务连续性和网络的健康运行,网络设备的可观测性变得至关重要。
而 SNMP(Simple Network Management Protocol)是网络设备最广泛支持的标准协议。借助 Prometheus SNMP Exporter,我们可以轻松实现对任何支持 SNMP 协议的设备进行指标采集和告警。
本文将通过实践操作演示如何使用 SNMP Exporter 构建一套通用的网络设备监控方案,并以华为 USG6000E 防火墙为例介绍配置方法,实战可复用至任意厂商设备(如 Cisco、H3C、Ruijie、Aruba 等)。
2、特点
| 特点 | 说明 |
|---|---|
| 📡 协议通用性强 | 只要设备支持 SNMP(v1/v2c/v3),即可被采集,无需额外开发 |
| 📁 配置模块化 | 基于 YAML 文件定义监控模块,可定制每类设备或功能的监控项 |
| 🧩 兼容 Prometheus 生态 | 配置文件直接供 Prometheus 使用,无缝集成告警、展示、自动发现 |
| ⚠️ 解析容错机制 | 对部分 MIB 文件解析失败不影响整体运行,可通过参数容错 |
| 🛠 完全开源、支持二次开发 | 社区活跃、灵活拓展、适配自定义设备 |
| 📊 可视化支持 | 可搭配 Grafana 构建美观的网络设备健康仪表盘 |
3、场景
- ✅ 企业网络设备统一监控:交换机、路由器、防火墙、AP集中采集;
- ✅ IDC/数据中心设备状态采集:跨厂商、多协议、多地统一视角;
- ✅ 高校/园区网络监控平台搭建;
- ✅ 电信运营商、金融机构网络安全合规监控;
- ✅ 多厂商MIB文件集成****监控解决方案建设。
4、适配说明
对于其他品牌设备的采集,只需:
- 获取对应厂商的MIB文件
- 根据MIB文件定义采集模块(generator模板)
- 生成 Prometheus 配置文件
- 部署 SNMP Exporter 并在 Prometheus 注册该 Job
✅ 常见设备厂商MIB支持情况如下:
| 厂商 | 支持情况 |
|---|---|
| Cisco | ✅ 完善 |
| H3C | ✅ 可用 |
| 华为 | ✅ 支持良好 |
| Juniper | ✅ 支持 |
| Aruba | ✅ 支持 |
| 锐捷、迈普 | ✅ 部分需自定义解析 |
5、安装部署(以华为防火墙为例)
安装 Go 语言与构建工具
tar -xzvf go1.24.2.linux-amd64.tar.gz -C /usr/local/
#配置环境变量
exportPATH=$PATH:/usr/local/go/bin
exportGOPATH=$HOME/go
exportPATH=$PATH:$GOPATH/bin
exportGO111MODULE=on
exportGOPROXY=https://goproxy.cn,direct
克隆并编译 SNMP Exporter 工具
#安装依赖
apt install build-essential libsnmp-dev unzip -y
#下载安装包
git clone https://github.com/robotneo/snmp_exporter.git
cd snmp_exporter
go mod tidy && go build
cd generator
make generator mibs
✅ 编译后的 generator 工具用于将MIB + 模板配置文件转化为 Prometheus 可读的最终配置。准备 MIB 文件和配置模板
mkdir-p huawei/conf
mkdir-p huawei/mibs/public
# 将设备对应的MIB文件放入 public 目录
# generator_usg6000e.yml 放入 conf 目录
示例结构
huawei/
├── conf/
│ ├── generator_usg6000e.yml
├── mibs/
│ └── public/
│ ├── HUAWEI-IPSEC-MIB.mib
│ ├── IP-MIB.mib
│ └── ...(更多 MIB 文件)
采集指标
root@n9e-2:/opt/snmp_exporter/generator/huawei/conf# cat generator_usg6000e.yml
auths:
usg6000e:
version: 2
community: hanatni2025 #团体名
modules:
usg6000e_system:
walk:
# 单节点
# sysName 系统名称 类型:字符串
-1.3.6.1.2.1.1.5
# sysUpTime 系统启动时间 单位为百分之一秒
-1.3.6.1.2.1.1.3
# sysDescr 系统的文字描述 版本信息 类型:字符串
-1.3.6.1.2.1.1.1
# entPhysicalSoftwareRev 器件的软件版本号
-1.3.6.1.2.1.47.1.1.1.1.10
# entPhysicalName 实体名称 类型:字符串
-1.3.6.1.2.1.47.1.1.1.1.7
# entPhysicalSerialNum 设备序列号 类型:字符串
-1.3.6.1.2.1.47.1.1.1.1.11
# hwEntityCpuUsage 实体CPU实时利用率百分比 单位:%
-1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5
# hwEntityMemUsage 实体内存实时利用率百分比 单位:%
-1.3.6.1.4.1.2011.5.25.31.1.1.1.1.7
# hwEntityTemperature 实体温度 读取的是温度传感器测量温度的最高值 单位:°C
-1.3.6.1.4.1.2011.5.25.31.1.1.1.1.11
# hwEntityUpTime 实体启动时间 单位:秒
-1.3.6.1.4.1.2011.5.25.31.1.1.1.1.10
...
生成配置文件
/opt/snmp_exporter/generator/generator generate \
-m huawei/mibs/public \
-g huawei/conf/generator_usg6000e.yml \
-o huawei/conf/snmp_firewalld.yml \
--no-fail-on-parse-errors
日志示例
Generated metrics module=usg6000e_ipsec metrics=53
Generated metrics module=usg6000e_interface metrics=19
Config written file=snmp_firewalld.yml
服务部署
root@n9e-3:~# mkdir /opt/snmp_exporter/conf
root@n9e-2:/opt/snmp_exporter# mv /opt/snmp_exporter/generator/huawei/conf/snmp_firewalld.yml /opt/snmp_exporter/conf/
root@n9e-3:~# vim /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
root@n9e-3:~# systemctl status snmp_exporter.service
● snmp_exporter.service - snmp_exporter
Loaded: loaded (/etc/systemd/system/snmp_exporter.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2025-04-1123:26:47 CST; 2 months 11 days ago
Main PID: 61701 (snmp_exporter)
Tasks: 24 (limit: 38375)
Memory: 23.5M
CPU: 4d 11h 2min 14.083s
CGroup: /system.slice/snmp_exporter.service
└─61701 /opt/snmp_exporter/snmp_exporter "--config.file=/opt/snmp_exporter/conf/snmp_*.yml"--snmp.module-concurrency=3
测试

6、Prometheus配置
root@n9e-3:/usr/local/prometheus# cat /usr/local/prometheus/targets/usg6000e.yml
- labels:
# 需要采集什么模块指标,就填写模块指标名称即可,用逗号分隔
module: usg6000e_fanpwr,usg6000e_interface,usg6000e_session,usg6000e_system,usg6000e_ipsec
# 认证模块名称,如果团体名或认证信息不对,需要修改认证模块中的验证信息
auth: usg6000e
# 下面三个标签是自定义,可随意删除或添加
brand: Huawei
role: firewall
region: hangzhou
targets:
# - 172.168.252.200 # 华为防火墙管理IP
-10.10.252.252
-10.10.252.251
将生成的模块配置文件与 Prometheus 主配置文件绑定
- job_name: "huawei_firewall"
scrape_interval: 15s
scrape_timeout: 10s
file_sd_configs:
- files:
- /usr/local/prometheus/targets/usg6000e.yml
# refresh_interval: 2m # vmagent 不支持这个参数
metrics_path: /snmp
relabel_configs:
- source_labels: ["__address__"]
target_label: __param_target
- source_labels: ["__param_target"]
target_label: instance
- target_label: __address__
replacement: 172.16.1.113:9116 # snmp_exporter 地址
- source_labels: ["module"]
target_label: __param_module
- source_labels: ["auth"]
target_label: __param_auth
7、Grafana 可视化(星球有模板)
华为防火墙


华为交换机



华三交换机



飞塔防火墙


8、总结
SNMP Exporter 提供了一种稳定、灵活、厂商无关的方式,实现网络设备指标采集统一化。尤其适用于多设备、多协议的复杂运维环境。推荐将本方案作为企业网络监控系统标准化组件之一,纳入 Prometheus + Grafana 可观测性平台中统一管理。
微信打赏:

支付宝打赏:
