Как запустить prometheus на docker-compose и скрапировать сервер django, запущенный локально?
Я пытаюсь настроить prometheus для мониторинга моего Django-приложения с помощью django-prometheus и Docker compose. Я следовал некоторым руководствам в интернете, но они отличаются от всех тех, что я видел, я хочу пока запустить Django локально, поэтому просто python manage.py runserver
и запустить prometheus с помощью docker-compose (а позже добавить grafana). Я хочу сделать это для локального тестирования, а позже я разверну его на Kubernetes, но это уже для другого эпизода.
Моя проблема заключается в том, чтобы заставить локальный запущенный сервер django взаимодействовать в той же сети, что и запущенный контейнер prometheus, потому что я получаю эту ошибку в /targets
на приборной панели prometheus:
Get "http://127.0.0.1:5000/metrics": dial tcp 127.0.0.1:5000: connect: connection refused
Вот мой файл docker-compose и конфигурация prometheus:
docker-compose.yml
version: '3.6'
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/:/etc/prometheus/
command:
- '--config.file=/etc/prometheus/prometheus.yml'
ports:
- 9090:9090
prometheus.yaml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: django-app
static_configs:
- targets:
- localhost:8000
- 127.0.0.1:8000
Если вы хотите запустить приложение Django вне (контейнера и вне) Docker Compose, то при запуске оно будет привязано к одному из портов хоста.
Вам необходимо заставить службу Docker Compose prometheus
также привязаться к сети хоста.
Вы должны иметь возможность сделать это с помощью network_mode: host
под сервисом prometheus
.
Тогда, prometheus
сможет получить доступ к приложению Django через порт хоста, который он использует, и prometheus
будет доступен как localhost:9090
(без необходимости в секции ports
).