Prometheus对接Cisco交换机:snmp-exporter配置400错误求助
问题排查与修复方案
核心问题分析
你遇到的HTTP 400错误主要来自两个配置失误:
- 指定的SNMP模块不存在:Prometheus配置中使用了
if_mib模块,但你的snmp.yml里仅包含apcups模块,snmp-exporter无法识别无效模块会直接返回400。 - Target参数格式错误:Prometheus的SNMP Job目标带了
:161端口,而snmp-exporter的target参数只需要IP地址(端口由snmp.yml的模块/auth配置默认指定为161),带端口会导致参数非法。
修复步骤
1. 确保snmp.yml包含if_mib模块
snmp-exporter依赖配置文件中的模块定义来采集对应指标,你需要:
- 检查
snmp.yml完整内容,确认是否存在if_mib模块。如果没有,使用snmp-exporter generator重新生成配置(不建议手动修改,因为文件头部提示手动修改会被覆盖)。 - 生成时在generator的
config.yml中添加if_mib配置示例:
modules: if_mib: walk: [ifDescr, ifType, ifMtu, ifSpeed, ifPhysAddress, ifAdminStatus, ifOperStatus, ifInOctets, ifOutOctets] version: 2 auth: public_v2
2. 修正Prometheus的SNMP Job配置
去掉Target中的:161端口,修改后的prometheus.yml对应片段:
- job_name: snmp metrics_path: /snmp params: module: [if_mib] static_configs: - targets: - 172.31.0.40 # 移除端口后缀 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9116
3. 手动验证snmp-exporter接口
在主机上执行curl命令,直接测试snmp-exporter是否能正常返回指标:
curl "http://127.0.0.1:9116/snmp?target=172.31.0.40&module=if_mib"
如果返回正常的metrics数据,说明配置修复有效;若仍返回400,查看返回的错误信息,定位剩余问题(比如模块仍不存在、community字符串不匹配等)。
4. 重启服务生效
修改配置后重启容器:
docker-compose restart prometheus snmp-exporter
额外验证点
- 确认
snmp.yml中public_v2的community值sasan与Cisco交换机上配置的SNMP community完全一致。 - 再次用snmpwalk验证IF-MIB的可用性:
snmpwalk -v 2c -c sasan 172.31.0.40 IF-MIB::ifDescr,确保能正常获取交换机接口信息。
内容的提问来源于stack exchange,提问作者Sasan Askari
相关产品推荐
相关产品推荐

