Как запустить 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).

Вернуться на верх