Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Развёртывание в Docker: первый запуск Prometheus
docker_setup

Развёртывание в Docker: первый запуск Prometheus

Практическая настройка Prometheus и Grafana в Docker Compose, базовая конфигурация

Развёртывание в Docker: первый запуск Prometheus

«Лучше один раз запустить, чем сто раз прочитать»

#Почему Docker

Можно установить Prometheus напрямую на сервер через apt или brew. Но мы будем использовать Docker, и вот почему:

  1. Изоляция — Prometheus не загрязняет систему зависимостями
  2. Портативность — одинаково работает на Linux, macOS, Windows
  3. Версионность — легко переключаться между версиями
  4. Production-like — в продакшене вы скорее всего тоже будете использовать контейнеры

Требования:

  • Docker и Docker Compose установлены
  • Базовое понимание работы с контейнерами

#Структура проекта

Создадим директорию для нашего проекта мониторинга:

monitoring/
├── docker-compose.yml
├── prometheus/
│   └── prometheus.yml
└── grafana/
    └── provisioning/
        └── datasources/
            └── prometheus.yml

#Prometheus: минимальная конфигурация

Создадим файл prometheus/prometheus.yml:

global: scrape_interval: 15s # Как часто опрашивать цели evaluation_interval: 15s # Как часто вычислять правила scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090']

Разбираем:

  • scrape_interval — глобальная частота опроса целей (15 секунд по умолчанию). Можно переопределить для каждой job отдельно.
  • evaluation_interval — как часто вычислять правила алертинга и recording rules.
  • job_name — имя логической группы целей. Prometheus автоматически добавит лейбл job="prometheus" ко всем метрикам от этой job.
  • targets — список адресов для опроса. localhost:9090 — это сам Prometheus (он отдаёт метрики о себе).

Важный момент: Prometheus использует pull-модель. Он сам забирает метрики с целей. Поэтому target должен быть доступен из контейнера Prometheus.


#Docker Compose: запускаем всё вместе

Создадим docker-compose.yml:

version: '3.8' services: prometheus: image: prom/prometheus:v2.52.0 container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--storage.tsdb.retention.time=15d' restart: unless-stopped grafana: image: grafana/grafana:10.4.0 container_name: grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-piechart-panel restart: unless-stopped volumes: prometheus_data: grafana_data:

Разбираем ключевые моменты:

#Prometheus

  • image: prom/prometheus:v2.52.0 — официальный образ Prometheus. Всегда фиксируйте версию в production — не используйте latest.
  • ports: "9090:9090" — пробрасываем порт 9090 на хост. Web UI Prometheus будет доступен по адресу http://localhost:9090.
  • volumes — монтируем:
    • Конфигурацию (prometheus.yml) в /etc/prometheus/
    • Данные в volume prometheus_data (сохраняется после перезапуска)
  • command — аргументы командной строки:
    • --config.file — путь к конфигу
    • --storage.tsdb.path — где хранить данные
    • --storage.tsdb.retention.time — сколько хранить данные (15 дней)
  • restart: unless-stopped — автоматически перезапускать при падении

#Grafana

  • image: grafana/grafana:10.4.0 — официальный образ Grafana.
  • ports: "3000:3000" — Grafana будет доступна по http://localhost:3000.
  • volumes — монтируем:
    • Данные (дашборды, пользователи) в volume grafana_data
    • Provisioning (автоконфигурация источников данных)
  • environment — переменные окружения:
    • GF_SECURITY_ADMIN_USER/PASSWORD — логин/пароль администратора
    • GF_INSTALL_PLUGINS — плагины для установки
  • restart: unless-stopped — автоперезапуск

#Volumes

  • prometheus_data — хранение метрик Prometheus
  • grafana_data — хранение дашбордов и настроек Grafana

Важно: без volumes данные потеряются при удалении контейнеров.


#Запуск

Запускаем стек:

cd monitoring docker compose up -d

Проверяем статус:

docker compose ps

Должны увидеть два запущенных контейнера:

NAME          STATUS         PORTS
prometheus    Up (healthy)   0.0.0.0:9090->9090/tcp
grafana       Up (healthy)   0.0.0.0:3000->3000/tcp

#Проверка работы

#Prometheus UI

Откройте http://localhost:9090.

Вы увидите web-интерфейс Prometheus. Вверху есть строка для PromQL-запросов.

Проверочный запрос: введите promhttp_metric_handler_requests_total и нажмите Execute.

Вы должны увидеть метрики — количество обработанных запросов самого Prometheus.

Что вы видите:

  • Таблицу с временными рядами
  • Лейблы (например, code="200", instance="localhost:9090")
  • Значения метрик

#Grafana UI

Откройте http://localhost:3000.

Логин: admin, пароль: admin (или те, что указали в docker-compose.yml).

Проверка источника данных:

  1. Нажмите ⚙️ (Settings) → Data sources
  2. Должен быть Prometheus с URL http://prometheus:9090

Важный момент: Grafana обращается к Prometheus по имени сервиса Docker Compose (http://prometheus:9090), а не по localhost. Это работает благодаря Docker network.


#Первый дашборд

Создадим простой дашборд для мониторинга самого Prometheus:

  1. В Grafana нажмите Create → Dashboard
  2. Нажмите Add visualization
  3. Выберите источник данных Prometheus
  4. В редакторе запросов введите: rate(promhttp_metric_handler_requests_total[5m])
  5. Нажмите Run
  6. Должен появиться график — запросы в секунду к Prometheus

Что означает запрос:

  • promhttp_metric_handler_requests_total — counter обработанных запросов
  • rate(...[5m]) — скорость изменения за последние 5 минут (запросов в секунду)

Сохраните дашборд (Ctrl+S или кнопка Save).


#Мониторинг Docker контейнеров

Хотите мониторить не только Prometheus, но и Docker? Добавьте cAdvisor.

#Добавляем cAdvisor в docker-compose

cAdvisor (Container Advisor) собирает метрики о контейнерах Docker.

Обновите docker-compose.yml:

services: prometheus: # ... (без изменений) grafana: # ... (без изменений) cadvisor: image: gcr.io/cadvisor/cadvisor:v0.47.0 container_name: cadvisor ports: - "8080:8080" volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro restart: unless-stopped

#Добавляем cAdvisor в конфигурацию Prometheus

Обновите prometheus/prometheus.yml:

global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'cadvisor' static_configs: - targets: ['cadvisor:8080']

Важно: target — cadvisor:8080, а не localhost:8080. Prometheus работает в отдельном контейнере и обращается к cAdvisor через Docker network.

#Перезапускаем

docker compose down docker compose up -d

#Проверяем

Откройте Prometheus UI (http://localhost:9090) и выполните запрос:

container_cpu_usage_seconds_total

Должны увидеть метрики CPU для всех контейнеров (включая сам Prometheus и Grafana).


#Частые проблемы и решения

#Ошибка: "connection refused"

Симптом: Prometheus не может подключиться к target.

Причины:

  1. Target не запущен
  2. Неправильный адрес (например, localhost вместо имени сервиса)
  3. Фаервол блокирует порт

Решение:

  • Проверьте docker compose ps — все ли контейнеры запущены
  • Убедитесь, что используете имя сервиса Docker Compose (cadvisor:8080, а не localhost:8080)
  • Попробуйте curl http://cadvisor:8080/metrics из контейнера Prometheus

#Ошибка: "no data"

Симптом: Запросы возвращают пустые результаты.

Причины:

  1. Метрики ещё не накопились (подождите 1-2 минуты)
  2. Неправильное имя метрики
  3. Неправильные лейблы

Решение:

  • Подождите пару минут, Prometheus должен собрать данные
  • Используйте автодополнение в Prometheus UI для проверки имён метрик
  • Проверьте лейблы через {job="cadvisor"}

#Ошибка: "write: no space left on device"

Симптом: Prometheus не может записать данные.

Причины:

  • Закончилось место на диске
  • Volume не настроен, данные пишутся в контейнер

Решение:

  • Проверьте место: df -h
  • Убедитесь, что volume prometheus_data существует
  • Увеличьте storage.tsdb.retention.time или уменьшите scrape_interval

#Домашнее задание

  1. Запустите стек из docker-compose
  2. Откройте Prometheus UI, поэкспериментируйте с запросами:
    • up — показывает статус всех targets (1 = доступен, 0 = недоступен)
    • prometheus_tsdb_head_samples_appended_total — сколько метрик записано
  3. Откройте Grafana, создайте дашборд с 2-3 панелями для Prometheus
  4. Добавьте cAdvisor, найдите метрики использования памяти контейнерами

Далее: PromQL для начинающих: запросы к метрикам