记一次snmp_exporter/generator生成yml报错问题修复

环境说明:

Ubuntu+snmp_exporter(版本0.28.0)中go build生成的generator程序,期望生成奇安信的yml文件给snmp exporter使用

        sudo apt install snmp-mibs-downloader

        sudo download-mibs

问题现象:

生成报错:

root@server:~/snmp_exporter/generator# ./generator generate  -m ./mibs2 -g source3.yml   -o QiAnXin.yml   --no-fail-on-parse-errors
time=2025-03-29T19:17:45.895Z level=INFO source=net_snmp.go:174 msg="Loading MIBs" from=./mibs2
time=2025-03-29T19:17:45.897Z level=WARN source=main.go:179 msg="NetSNMP reported parse error(s)" errors=427
time=2025-03-29T19:17:45.897Z level=ERROR source=main.go:185 msg="Missing MIB" mib=SNMPv2-SMI from="At line 20 in ./mibs2/QiAnXinNSG.mib"
time=2025-03-29T19:17:45.897Z level=ERROR source=main.go:185 msg="Missing MIB" mib=SNMPv2-TC from="At line 25 in ./mibs2/QiAnXinNSG.mib"
time=2025-03-29T19:17:45.897Z level=INFO source=main.go:57 msg="Generating config for module" module=Qianxin_firewall
time=2025-03-29T19:17:45.897Z level=ERROR source=main.go:141 msg="Error generating config netsnmp" err="cannot find oid '1.3.6.1.4.1.32328.6.1.4' to walk"

分析:

        报错内容msg="Missing MIB" mib=SNMPv2-SMI from="At line 20 in ./mibs2/QiAnXinNSG.mib",分析为QiAnXinNSG.mib文件引用了“SNMPv2-SMI”文件,但是缺失了
        报错内容msg="Missing MIB" mib=SNMPv2-TC from="At line 25 in ./mibs2/QiAnXinNSG.mib",分析为QiAnXinNSG.mib文件引用了“SNMPv2-TC”文件,但是缺失了

处理方案:

root@server:~/snmp_exporter/generator# find /  -name SNMPv2*  【查找出所需文件的路径】
root@server:~/snmp_exporter/generator# cp /var/lib/mibs/ietf/SNMPv2-TC mibs2
root@server:~/snmp_exporter/generator# cp /var/lib/mibs/ietf/SNMPv2-SMI mibs2

修复后效果:重新生成

root@server:~/snmp_exporter/generator# ./generator generate  -m ./mibs2 -g source3.yml   -o QiAnXin.yml   --no-fail-on-parse-errors
time=2025-03-29T19:18:23.857Z level=INFO source=net_snmp.go:174 msg="Loading MIBs" from=./mibs2
time=2025-03-29T19:18:23.860Z level=INFO source=main.go:57 msg="Generating config for module" module=Qianxin_firewall
time=2025-03-29T19:18:23.860Z level=INFO source=main.go:75 msg="Generated metrics" module=Qianxin_firewall metrics=2
time=2025-03-29T19:18:23.861Z level=INFO source=main.go:100 msg="Config written" file=/root/snmp_exporter/generator/QiAnXin.yml

最终生成效果如下:
root@server:~/snmp_exporter/generator# cat QiAnXin.yml 
# WARNING: This file was auto-generated using snmp_exporter generator, manual changes will be lost.
auths:
  public_v2:
    community: publicNSGSNMPComm
    security_level: noAuthNoPriv
    auth_protocol: MD5
    priv_protocol: DES
    version: 2
modules:
  Qianxin_firewall:
    get:
    - 1.3.6.1.4.1.32328.6.1.4.0
    - 1.3.6.1.4.1.32328.6.1.7.0
    metrics:
    - name: deviceSerial
      oid: 1.3.6.1.4.1.32328.6.1.4
      type: DisplayString
      help: The serial of device - 1.3.6.1.4.1.32328.6.1.4
    - name: softwareVersion
      oid: 1.3.6.1.4.1.32328.6.1.7
      type: DisplayString
      help: The software version of device - 1.3.6.1.4.1.32328.6.1.7

我的总结:

generator generate生成时,可以将目标mib文件单独放在1个文件夹(当如果生成时提示有缺失,可以将其他MIB文件复制到这个文件夹),并在generator generate 生成时指定这个文件夹

### 使用 SNMP Exporter 对交换机进行性能或状态监控 为了实现通过 SNMP Exporter 对交换机的性能或状态监控,可以按照以下方式操作: #### 配置 snmp_exporter 的 YAML 文件 `snmp.yml` 是 `snmp_exporter` 的核心配置文件,用于定义要抓取哪些 OID 和其对应的指标名称。由于该文件较为复杂,通常不手动编写而是借助工具生成。 可以通过 Prometheus 提供的 **SNMP Exporter Config Generator** 工具来生成适合目标设备的配置文件[^1]。具体步骤如下: - 访问 GitHub 上的 [SNMP Exporter Config Generator](https://github.com/prometheus/snmp_exporter/tree/master/generator#file-format),下载并运行 generator 脚本。 - 准备 MIB 文件(由交换机厂商提供),将其导入到 generator 中以便解析 OIDs 并映射为可读的指标名。 - 完成后导出生成的 `snmp.yml` 文件,并放置于 `snmp_exporter` 运行目录下。 #### 启动 snmp_exporter 服务 启动 `snmp_exporter` 前需指定加载的 `snmp.yml` 文件路径以及监听端口。命令示例如下: ```bash ./snmp_exporter --config.file=/path/to/snmp.yml --web.listen-address=":9116" ``` 上述命令会使得 `snmp_exporter` 开始在本地地址上监听来自客户端请求的数据采集指令[^3]。 #### 设置 Prometheus 抓取数据源 编辑 Prometheus Server 的配置文件 (`prometheus.yml`) 添加一个新的 job 条目指向已部署好的 `snmp_exporter` 实例位置。样例如下所示: ```yaml scrape_configs: - job_name: 'switch_snmp' static_configs: - targets: ['<exporter_host>:9116'] labels: alias: '<your_switch_alias>' ``` 其中 `<exporter_host>` 应替换为目标主机 IP 地址或者域名;而 `<your_switch_alias>` 则作为标签附加给每条录便于后续查询区分不同设备实例[^2]。 完成以上设置之后重启 Prometheus 即可开始收集相关统计数据。 #### 示例代码展示完整的流程集成 以下是综合上述各部分的一个简单脚本例子,假设我们正在处理的是华为品牌下的某型号路由器产品线情况: ```python import subprocess def generate_snmp_config(mib_files, output_path): """Generate the snmp exporter config using provided mibs.""" command = f"snmp_exporter_generator {mib_files} > {output_path}" result = subprocess.run(command.split(), capture_output=True) if result.returncode != 0: raise Exception(f"Failed to generate SNMP config: {result.stderr.decode()}") if __name__ == "__main__": try: # Generate configuration file based on given MIBs. generate_snmp_config("/usr/share/mibs/huawei/*.my", "/etc/snmp-exporter/snmp.yml") print("Configuration generated successfully.") except Exception as e: print(e) ``` 此 Python 小程序调用了外部 shell 操作完成了自动化构建过程的一部分工作流管理功能.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值