O job de scrape do Prometheus não consegue alcançar as métricas

Boa descoberta, mas se eu tentar direcionar para essa porta específica, recebo uma mensagem de “conexão recusada”.

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

Testei com um wget de dentro do contêiner do prometheus também, apenas para ter certeza.

/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

Sim, testei com wget em vez disso (o contêiner do prometheus é um busybox básico), mas consegui chegar às métricas de qualquer maneira.

Então, o que você está dizendo é que devo encontrar uma maneira de fazer com que o contêiner que executa o prometheus tenha uma entrada em /etc/hosts que resolva… Perdi você aí, desculpe :slight_smile:

O que eu fiz foi adicionar mais um docker com simplesmente um nginx nele e fornecer uma configuração de proxy reverso que adiciona o cabeçalho Host às requisições que ele recebe. Ele não expõe nenhuma porta, então só pode ser acessado pela rede virtual interna de qualquer maneira.

Então, como as coisas mudam?

Prometheus Job:

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

docker-compose.yaml (apenas a parte com o proxy)

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

No diretório em que seu docker-compose.yaml está, tenha ./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;
    }
}

Aí está:

1 curtida