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

使用Docker Compose部署Prometheus与Nginx Exporter无法采集指标

问题:Docker环境下Prometheus无法采集Nginx Exporter指标

本地测试Prometheus采集Nginx指标时,直接访问http://localhost:9113/metrics能正常获取指标,但在Prometheus界面(http://localhost:9090/targets)中,目标端点显示为http://nginx-prometheus-exporter:9113/metrics,访问该链接无数据输出,导致Prometheus无法完成指标采集。


相关配置文件

docker-compose.yaml

version: '3'
services:
  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    networks:
      - nginx-prometheus-network

  nginx-prometheus-exporter:
    image: nginx/nginx-prometheus-exporter:0.10.0
    ports:
      - 9113:9113
    command: -nginx.scrape-uri=http://nginx:80/stub_status
    networks:
      - nginx-prometheus-network

  prometheus:
    image: prom/prometheus
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - nginx-prometheus-network

networks:
  nginx-prometheus-network:

nginx.conf

events {}

http {
    server {
        listen 80;
        location /stub_status {
            stub_status;
        }
    }
}

prometheus.yml

global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx-prometheus-exporter:9113']

解决方案

问题根源

你本地能访问localhost:9113/metrics是因为Docker端口映射将容器的9113端口转发到了主机,但Prometheus容器与Nginx Exporter容器处于同一个Docker网络,nginx-prometheus-exporter:9113是容器间的内部访问地址,访问失败的核心原因是Nginx Exporter未成功获取到Nginx的stub_status数据,导致自身的metrics端点无输出。

排查与修复步骤

  1. 验证Nginx Exporter与Nginx的连通性
    进入Nginx Exporter容器,执行curl命令测试能否访问Nginx的stub_status接口:

    docker exec -it $(docker ps -qf "name=nginx-prometheus-exporter") curl http://nginx:80/stub_status
    

    如果返回403或连接失败,说明Nginx配置限制了访问,或者容器间网络存在问题。

  2. 调整Nginx配置(解决访问限制)
    部分Nginx镜像默认拒绝非本地IP访问stub_status,可修改nginx.conf允许Docker网络段访问:

    location /stub_status {
        stub_status;
        allow 172.0.0.0/8; # Docker默认使用的私有IP段
        deny all;
    }
    

    重启Nginx容器生效:

    docker-compose restart nginx
    
  3. 检查Nginx Exporter的metrics输出
    进入Prometheus容器,直接访问Nginx Exporter的内部地址:

    docker exec -it $(docker ps -qf "name=prometheus") curl http://nginx-prometheus-exporter:9113/metrics
    
    • 如果能获取到指标数据,说明Prometheus配置正常,刷新Prometheus targets页面即可恢复采集。
    • 如果无输出,查看Nginx Exporter的日志定位错误:
      docker-compose logs nginx-prometheus-exporter
      
      根据日志中的报错(如连接超时、权限不足)针对性修复。
  4. 确认Docker网络状态
    检查所有服务是否在同一网络中:

    docker network inspect nginx-prometheus-network
    

    确保nginx、nginx-prometheus-exporter、prometheus三个容器均已加入该网络。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:24