SNMP 采集桥
Prometheus 生态抓取 SNMP 设备的桥梁:snmp_exporter 默认监听 9116,收到带 target 与 module 参数的请求后,按对应 MIB 模块轮询交换机、路由器、UPS 等设备的 OID,再把结果整理成 /metrics 供 Prometheus 抓取。
基本信息
| 服务 | snmp_exporter |
|---|---|
| 协议 | 对外 TCP/HTTP(9116);对设备用 SNMP(UDP 161) |
| 默认端口 | 9116 |
| 配置依赖 | snmp.yml,由 generator 工具按 MIB 生成 |
| 暴露面 | 仅监控网段 |
典型使用场景
- 网络设备接口流量、丢包与错误计数接入监控
- 交换机端口状态与光模块温度告警
- UPS、精密空调等机房设备的状态采集
- 多厂商统一采集:按厂商 MIB 生成不同 module
- 结合告警做趋势判断:是链路问题还是设备问题
部署与验证
部署与验证
snmp_exporter --config.file=snmp.yml
curl -s 'http://mon01:9116/snmp?target=10.0.0.1&module=if_mib' | head -c 300
# Prometheus 侧按 multi-target 模式配置:
# params: {module: [if_mib]}
# targets: ['10.0.0.1']排障与核对
| 检查项 | 做法 | 异常表现 |
|---|---|---|
| 导出器存活 | curl -s http://mon01:9116/ | 无响应:进程未起或端口冲突 |
| 采集结果 | 带 target/module 参数请求 | 超时:设备侧 SNMP 未开或被 ACL 拦 |
| MIB 覆盖 | 检查 snmp.yml 的 module 列表 | 指标缺失:所需 OID 不在该 module 内 |
| 认证方式 | community 或 v3 用户名与密钥 | v3 认证失败:返回为空且日志有鉴权错误 |
snmp.yml 由独立工具按 MIB 文件离线生成,更换厂商设备或升级固件后要重新生成并重载配置;Prometheus 侧一般按设备地址展开采集任务,配置里必须带上 module 参数,否则采集结果为空。
SNMP 侧的加固
SNMP 本身没有强认证:v2c 的 community 字串等同口令且明文传输,出厂默认 public 人人皆知。生产环境应使用 SNMPv3 的认证与加密选项、只允许监控主机轮询、并在设备侧配置 ACL;不参与采集的网络面一律关闭 SNMP。
采集超时常见两类原因:设备 ACL 只放通了某台监控主机,或单台设备 OID 过多导致轮询超时。前者改 ACL,后者要裁剪 module 里的 OID,或按设备规模重新评估并发与超时参数。
生产沿用默认 public 的 SNMPv2c:任何内网主机都能读取设备拓扑与接口表,为下一步攻击画出完整地图。