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

Docker部署的Prometheus无法采集主机JMeter 9270端口指标

问题描述

已搭建包含cadvisor、Prometheus、Grafana的Docker监控栈,希望集成运行在主机上的JMeter。JMeter将指标推送到localhost:9270/metrics,但Docker容器中的Prometheus无法访问该地址。尝试将目标IP改为docker0网关IP 172.17.0.1 以及Ubuntu虚拟机eth0的IP 10.211.55.5,均无效果。

现有配置文件

docker-compose.yml

version: "3.9"
services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.47.1
    platform: linux/aarch64
    container_name: cadvisor
    privileged: true
    devices:
      - /dev/kmsg:/dev/kmsg
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk:/dev/disk:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /cgroup:/cgroup:ro
      - /etc/machine-id:/etc/machine-id:ro
    expose:
      - "8080"
    ports:
      - "8005:8080"
    networks:
      - monitoring

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./docker/prometheus/:/etc/prometheus/
      - prometheus-data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/console'
      - '--storage.tsdb.retention=200h'
    expose:
      - 9090
    ports:
      - "9090:9090"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana
    container_name: grafana
    volumes:
      - grafana-data:/var/lib/grafana
    expose:
      - 3000
    ports:
      - "3000:3000"
    networks:
      - monitoring

volumes:
  app:
  dbData:
  prometheus-data: {}
  grafana-data: {}

networks:
  monitoring:
    driver: bridge

prometheus.yml

scrape_configs:
  - job_name: 'cadvisor'
    scrape_interval: 5s
    static_configs:
      - targets: ['cadvisor:8080']

  - job_name: 'prometheus'
    scrape_interval: 10s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'jmeter'
    static_configs:
      - targets: ['172.17.0.1:9270']
解决方案

1. 修改JMeter的监听地址

JMeter默认绑定localhost时,仅允许主机本地进程访问,Docker容器无法连接。需修改JMeter的Prometheus插件配置,将监听地址改为0.0.0.0,让服务绑定所有可用网卡:

  • 找到JMeter的Prometheus插件配置(通常对应jmeter-plugins-prometheus-listener-*.jar的设置项)
  • 设置hostname为0.0.0.0,端口保持9270
  • 重启JMeter服务

2. 检查主机防火墙/安全组规则

Ubuntu主机的防火墙(如ufw)可能拦截了Docker容器对9270端口的访问,需添加允许规则:

# 允许Docker默认网桥网段访问9270端口
sudo ufw allow from 172.17.0.0/16 to any port 9270
# 先查询自定义monitoring网络的子网:docker network inspect monitoring | grep Subnet
# 允许自定义网络网段访问9270端口
sudo ufw allow from <monitoring_subnet> to any port 9270

执行后重启ufw:sudo ufw reload

3. 验证容器到主机的连通性

进入Prometheus容器,直接测试与主机IP的连通性,排查网络链路问题:

# 进入Prometheus容器
docker exec -it prometheus /bin/sh
# ping主机eth0的IP 10.211.55.5,确认网络可达
ping 10.211.55.5
# 测试9270端口是否可访问
telnet 10.211.55.5 9270
# 或直接请求metrics端点
curl http://10.211.55.5:9270/metrics

如果ping不通,检查主机网络配置;如果telnet/curl失败,在主机上确认JMeter的监听状态:

sudo netstat -tulpn | grep 9270
# 正常输出应包含0.0.0.0:9270或10.211.55.5:9270

4. 调整Prometheus的网络模式(可选)

如果自定义bridge网络存在访问限制,可将Prometheus改为使用主机网络模式(注意避免端口冲突):
修改docker-compose.yml中prometheus服务的配置,添加network_mode: host并移除原有的networks配置:

prometheus:
  image: prom/prometheus
  container_name: prometheus
  volumes:
    - ./docker/prometheus/:/etc/prometheus/
    - prometheus-data:/prometheus
  command:
    - '--config.file=/etc/prometheus/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'
    - '--web.console.libraries=/etc/prometheus/console_libraries'
    - '--web.console.templates=/etc/prometheus/console'
    - '--storage.tsdb.retention=200h'
  network_mode: host

修改后重启Prometheus容器,此时Prometheus可直接使用localhost:9270作为JMeter的target地址。

5. 确认Prometheus配置生效

修改prometheus.yml后,需重启Prometheus容器使配置生效:

docker restart prometheus

访问Prometheus的Targets页面(http://localhost:9090/targets),查看jmeter job的状态,根据错误提示进一步排查(如connection refused、timeout等)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:48