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 ![]()
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á:
