You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prometheus与snmp-exporter连接错误:请求参数顺序异常求助

问题分析与解决步骤

首先纠正一个关键误区:SNMP Exporter对HTTP请求的参数顺序没有要求,module和target的前后顺序不影响接口调用,你看到的参数顺序差异不是报错的根源。真正的问题是 dial tcp [::1]:9116: connect: connection refused——Prometheus容器无法访问到snmp-exporter服务。

核心原因

在Docker Compose环境中,每个容器都是独立的网络节点,容器内的localhost指向容器自身,而非宿主机或其他容器。你在Prometheus配置里写了http://localhost:9116/snmp,导致Prometheus容器试图访问自己的9116端口(但这个端口并没有监听snmp-exporter服务),所以出现连接拒绝。

解决方法

1. 修正Prometheus配置中的snmp-exporter地址

在prometheus.yml的SNMP job配置中,将目标地址改为Docker Compose中snmp-exporter服务的名称(比如你的服务名是snmp-exporter),而非localhost。示例配置:

scrape_configs:
  - job_name: 'snmp'
    static_configs:
      - targets: ['你的UPS设备IP']
    metrics_path: /snmp
    params:
      module: ['你使用的SNMP模块名']
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: snmp-exporter:9116  # 替换为snmp-exporter的服务名+端口

2. 确认Docker Compose网络配置

确保所有服务都在同一个Docker网络中(默认情况下,Docker Compose会为项目创建专属网络,所有服务默认加入)。检查你的docker-compose.yml,snmp-exporter服务的端口映射是否正确,示例:

services:
  snmp-exporter:
    image: prom/snmp-exporter:latest
    ports:
      - "9116:9116"
    volumes:
      - ./snmp-exporter.yml:/etc/snmp_exporter/snmp.yml

3. 验证容器间连通性

在Prometheus容器内执行curl命令,测试是否能正常访问snmp-exporter:

docker exec -it <prometheus容器名> curl "http://snmp-exporter:9116/snmp?module=你的模块名&target=你的UPSIP"

如果能正常返回metrics数据,说明网络连通性没问题。

额外说明

你之前尝试的relabeling规则如果是为了调整参数顺序,完全没必要——HTTP查询参数是键值对,顺序不影响服务端解析。问题的核心始终是容器间的网络连通性配置。

内容的提问来源于stack exchange,提问作者kalidkto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:22:06