У меня установлена работающая версия Discourse (на самом деле две: одна на этапе тестирования, другая в продакшене, на разных виртуальных машинах и так далее). Я провожу тестирование в тестовой среде. Установка выполнена согласно официальному руководству.
В настоящее время на той же виртуальной машине, где уже развернута установка Discourse, с помощью docker compose развернут стек Grafana/Prometheus/Node Exporter.
Вот файл 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
Я пересобрал контейнер Discourse, указав сеть, чтобы он не разворачивался в bridge, и подключил Prometheus к той же сети.
docker network create -d bridge discourse
/var/discourse/launcher rebuild app --docker-args '--network discourse'
Я протестировал соединение, зайдя в контейнер Prometheus и выполнив ping контейнера Discourse по внутреннему алиасу сети; соединение установлено.
Однако при настройке задачи в Prometheus для сбора метрик с использованием внутреннего IP-адреса я вижу только сообщение server returned HTTP status 404 Not Found.
Вот конфигурация 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 — это заменённое фактическое имя виртуальной машины.
Согласно документации здесь, доступ к маршруту metrics через внутренний IP-адрес должен быть разрешён:
По умолчанию мы разрешаем доступ к маршруту
metricsадминистраторам и частным IP-адресам.
Пожалуйста, помогите понять, что я упускаю ![]()




