Le job de scraping Prometheus ne peut pas atteindre les métriques

Bonne trouvaille, mais si j’essaie de cibler ce port spécifique, j’obtiens un message « connexion refusée ».

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

J’ai également testé avec un wget depuis l’intérieur du conteneur prometheus pour être sûr.

/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

Oui, j’ai testé avec wget à la place (le conteneur prometheus est un busybox très basique) mais j’ai quand même réussi à accéder aux métriques.

Alors, ce que vous dites, c’est que je devrais trouver un moyen d’avoir le conteneur exécutant prometheus avec une entrée dans /etc/hosts qui résout… Je vous ai perdu, désolé :slight_smile:

Ce que j’ai fait, c’est ajouter un autre docker avec simplement un nginx dedans et fournir une configuration de proxy forward qui ajoute l’en-tête Host aux requêtes qu’il reçoit. Il n’expose aucun port, il ne peut donc être accédé que par le réseau virtuel interne de toute façon.

Alors, comment les choses changent-elles ?

Job Prometheus :

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

docker-compose.yaml (juste la partie avec le 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

Dans le répertoire où se trouve votre docker-compose.yaml, créez ./discourse_forward_proxy/discourse_forward_proxy.conf

server {
    listen 8080;

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

Voilà :

1 « J'aime »