Ich habe eine laufende Discourse-Installation (tatsächlich zwei, eine im Staging und eine in der Produktion, unterschiedliche VMs und alles). Ich teste in der Staging-Umgebung. Installation über den offiziellen Leitfaden.
Derzeit ist ein Grafana/Prometheus/Node Exporter-Stack über docker compose auf derselben VM bereitgestellt, auf der die Discourse-Installation bereits bereitgestellt ist.
Hier ist die 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
Ich habe den Discourse neu erstellt und dabei ein Netzwerk angegeben, damit es nicht auf bridge bereitgestellt wird, und Prometheus mit demselben Netzwerk verbunden.
docker network create -d bridge discourse
/var/discourse/launcher rebuild app --docker-args '--network discourse'
Ich habe getestet, indem ich in den Prometheus-Container eingestiegen bin und den Discourse-Container über den internen Netzwerknamen (Alias) angepingt habe, und er konnte ihn erreichen.
Wenn ich nun den Prometheus-Job konfiguriere, damit er die Metriken abruft, und eine interne IP verwende, sehe ich nur server returned HTTP status 404 Not Found.
Dies ist die Prometheus-Konfiguration:
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 ist ein Ersatz für den tatsächlichen Namen der VM.
Gemäß der Dokumentation hier sollte der Zugriff über die interne IP erlaubt sein:
Out of the box we allow the
metricsroute to admins and private ips.
Bitte helft mir zu sehen, was ich übersehe ![]()




