Tengo una instalación de Discourse en funcionamiento (dos en realidad, una en staging y otra en producción, máquinas virtuales diferentes y todo). Estoy probando en el entorno de staging. Instalación a través de la guía oficial.
Actualmente, hay una pila de Grafana/Prometheus/Node Exporter desplegada a través de docker compose en la misma VM donde ya está desplegada la instalación de Discourse.
Aquí está el docker-compose.yaml
version: "3"
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
networks:
- prometheus-cadvisor
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
networks:
- prometheus-node_exporter
prometheus:
image: prom/prometheus:latest
restart: unless-stopped
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus:/app.cfg
networks:
- world
- prometheus-cadvisor
- prometheus-node_exporter
- discourse
- grafana-prometheus
command: >-
--config.file=/app.cfg/prometheus.yaml
--storage.tsdb.path=/prometheus
--web.console.libraries=/usr/share/prometheus/console_libraries
--web.console.templates=/usr/share/prometheus/consoles
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_USER: [OMITTED]
GF_SECURITY_ADMIN_PASSWORD: [OMITTED]
GF_PATHS_PROVISIONING: '/app.cfg/provisioning'
volumes:
- ./grafana:/app.cfg
- ./grafana/provisioning:/etc/grafana/provisioning
networks:
- world
- grafana-prometheus
networks:
world:
grafana-prometheus:
internal: true
prometheus-cadvisor:
internal: true
prometheus-node_exporter:
internal: true
discourse:
external: true
Reconstruí el discourse especificando una red para que no se desplegara en bridge y conecté Prometheus a la misma red.
docker network create -d bridge discourse
/var/discourse/launcher rebuild app --docker-args '--network discourse'
Probé entrando en el contenedor de Prometheus y haciendo ping al contenedor de Discourse usando el alias de red interno y pude alcanzarlo.
Ahora, al configurar el trabajo de Prometheus para que extraiga las métricas, usando una IP interna, solo veo server returned HTTP status 404 Not Found.
Esta es la configuración de Prometheus:
global:
scrape_interval: 30s
scrape_timeout: 10s
rule_files:
scrape_configs:
- job_name: prometheus
metrics_path: /metrics
static_configs:
- targets:
- 'prometheus:9090'
- job_name: node_exporter
static_configs:
- targets:
- 'node_exporter:9100'
- job_name: discourse_exporter
static_configs:
- targets:
- 'vmuniqueID-app:80'
vmuniqueID es un reemplazo del nombre real de la VM.
Según la documentación aquí, el acceso a través de IP interna debería estar permitido:
Por defecto permitimos la ruta
metricsa administradores y a IPs privadas.
Por favor, ayúdenme a ver qué me estoy perdiendo ![]()




