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 可观测性平台中统一管理。

微信打赏:

支付宝打赏: