Prometheus抓取作业无法到达指标

但是,如果我尝试定位该特定端口,我会收到“连接被拒绝”消息。

Get "http://discourse_app:9405/metrics": dial tcp 172.20.0.2:9405: connect: connection refused

为了确保万无一失,我还从 Prometheus 容器内部使用 wget 进行了测试。

/prometheus # ping discourse_app
PING discourse_app (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.223 ms
64 bytes from 172.20.0.2: seq=1 ttl=64 time=0.270 ms
^C
--- discourse_app ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.223/0.246/0.270 ms
/prometheus # wget discourse_app:9405/metrics
Connecting to discourse_app:9405 (172.20.0.2:9405)
wget: can't connect to remote host (172.20.0.2): Connection refused

是的,我改用 wget 测试了(Prometheus 容器是一个精简的 busybox),但最终还是能够访问 metrics。

那么您的意思是,我应该找到一种方法让运行 Prometheus 的容器在 /etc/hosts 中有一个解析条目……抱歉,我没听懂 :slight_smile:

我所做的是添加另一个只有 nginx 的 docker,并提供一个正向代理配置,该配置将 Host 标头添加到它接收到的请求中。它不公开任何端口,因此只能通过内部虚拟网络访问。

那么情况如何变化?

Prometheus Job:

  - job_name: discourse_exporter_proxy
    scheme: http
    static_configs:
      - targets:
        - 'discourse_forward_proxy:8080'

docker-compose.yaml(仅代理部分)

version: "3"

services:
# [...]
    discourse_forward_proxy:
        image: nginx:latest
        container_name: discourse_forward_proxy
        restart: unless-stopped
        volumes:
            - ./discourse_forward_proxy/:/etc/nginx/conf.d
        networks:
            - prometheus-discourse_forward_proxy
            - discourse
# [...]

networks:
    prometheus-discourse_forward_proxy:
        internal: true
    discourse:
        external: true

在您的 docker-compose.yaml 所在的目录中,有一个 ./discourse_forward_proxy/discourse_forward_proxy.conf

server {
    listen 8080;

    location /metrics {
      proxy_set_header Host "YOUR_DOMAIN_HERE.COM";
      proxy_pass https://discourse_app/metrics;
    }
}

看,就这样了:

1 个赞