Docker Prometheus
Prometheus — система мониторинга и база данных временных рядов с открытым исходным кодом. Собирает метрики с целевых хостов по модели pull (сам опрашивает экспортёры), хранит их и предоставляет язык запросов PromQL. Чаще всего используется в связке с Grafana для визуализации.
Возможности
- Сбор метрик по HTTP (pull-модель)
- Хранение временных рядов с метками (labels)
- Мощный язык запросов PromQL
- Встроенные алерты через Alertmanager
- Большая экосистема экспортёров: node_exporter, cAdvisor, blackbox_exporter и др.
Установка через Docker Compose
mkdir -p /opt/monitoring/prometheus && cd /opt/monitoring
Файл конфигурации /opt/monitoring/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
- job_name: "cadvisor"
static_configs:
- targets: ["cadvisor:8080"]
Файл /opt/monitoring/docker-compose.yml (стек мониторинга целиком):
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=30d"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus_data:/prometheus
networks:
- monitoring
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: unless-stopped
pid: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- "--path.procfs=/host/proc"
- "--path.sysfs=/host/sys"
- "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)"
networks:
- monitoring
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
privileged: true
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- monitoring
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=ChangeMe123
volumes:
- grafana_data:/var/lib/grafana
networks:
- monitoring
- traefik_proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.grafana.rule=Host(`example.com`) && PathPrefix(`/grafana`)"
- "traefik.http.routers.grafana.entrypoints=websecure"
- "traefik.http.routers.grafana.tls.certresolver=letsencrypt"
- "traefik.http.services.grafana.loadbalancer.server.port=3000"
volumes:
prometheus_data:
grafana_data:
networks:
monitoring:
driver: bridge
traefik_proxy:
external: true
Запуск
docker compose up -d
Проверка
Targets (список опрашиваемых хостов) доступны по адресу:
http://localhost:9090/targets
Пример PromQL-запроса — загрузка CPU:
100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Полезные экспортёры
- node_exporter — метрики хоста: CPU, RAM, диск, сеть
- cAdvisor — метрики Docker-контейнеров
- blackbox_exporter — проверка доступности URL, TCP-портов
- mysqld_exporter — метрики MySQL / MariaDB
Обновление
docker compose pull && docker compose up -d
Примечания
- По умолчанию данные хранятся 15 дней. Параметр
--storage.tsdb.retention.time=30dувеличивает срок хранения до 30 дней. - Prometheus не имеет встроенной авторизации — не открывайте порт
9090наружу. Используйте Traefik с basic auth или оставьте во внутренней сети. - Для визуализации установите Grafana и подключите Prometheus как источник данных.