Следить за серверами, сервисами и сайтами нужно. Но платить Datadog по $15 за хост в месяц — это больно, особенно когда у вас пяток VPS и десяток self-hosted приложений. Хорошая новость: open-source стек мониторинга собирается за час и покрывает 90% потребностей среднего проекта.
В этом гайде соберём стек: Prometheus (метрики), Grafana (дашборды), Loki (логи), Node Exporter (системные метрики), Uptime Kuma (статус сайтов). Всё в Docker Compose, всё с персистентностью, всё с алертами.
Шаг 1: Docker Compose
Создайте директорию monitoring и файл docker-compose.yml:
version: "3.8"
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=30d"
ports:
- "9090:9090"
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- "--path.procfs=/host/proc"
- "--path.sysfs=/host/sys"
- "--path.rootfs=/rootfs"
ports:
- "9100:9100"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:Шаг 2: Prometheus — сбор метрик
Создайте prometheus.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["node-exporter:9100"]
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]Node Exporter собирает CPU, RAM, диск, сеть — всё системное. Чтобы мониторить несколько серверов, запустите Node Exporter на каждом и пропишите их IP в targets.
Шаг 3: Grafana — визуализация
Зайдите на http://ваш-сервер:3000 (логин: admin, пароль: changeme). Добавьте Prometheus как data source (URL http://prometheus:9090).
Импортируйте дашборд 1860 (Node Exporter Full) — это самый популярный шаблон для системных метрик. После импорта увидите красивые графики.
Шаг 4: Loki — логи
Добавьте Loki и Promtail в docker-compose.yml:
loki:
image: grafana/loki:latest
volumes:
- loki_data:/loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
restart: unless-stopped
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./promtail.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
restart: unless-stoppedВ Grafana добавьте Loki как data source и используйте Explore для поиска по логам. Все логи контейнеров и системные логи — в одном месте, с поиском и фильтрацией.
Шаг 5: Uptime Kuma — статус сайтов
Для мониторинга доступности сайтов и API отдельным контейнером запустите Uptime Kuma:
uptime-kuma:
image: louislam/uptime-kuma:latest
volumes:
- uptime_kuma_data:/app/data
ports:
- "3001:3001"
restart: unless-stoppedUptime Kuma может пинговать, проверять HTTP-статусы, SSL-сертификаты, TCP-порты, DNS-записи. Настройте оповещения в Telegram, Discord или Email.
Шаг 6: Алерты
Prometheus поддерживает Alertmanager для оповещений. Минимальная настройка — правило в prometheus.yml:
rule_files:
- "alert.rules.yml"А в alert.rules.yml:
groups:
- name: node
rules:
- alert: HighCPU
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "CPU выше 80% на {{ $labels.instance }}"Alertmanager можно подключить к Telegram, Email, Slack.
Сколько это стоит по ресурсам
Весь стек на VPS с 2 ГБ RAM:
- Prometheus: ~200 МБ RAM + диск под данные (зависит от retention)
- Grafana: ~150 МБ RAM
- Loki: ~200 МБ RAM
- Node Exporter: ~50 МБ RAM
- Promtail: ~100 МБ RAM
- Uptime Kuma: ~100 МБ RAM
Итого: около 800 МБ RAM за полный мониторинг-стек. Оставшихся 1.2 ГБ хватит на ваши приложения.
Что дальше
С этим стеком вы получаете:
- Метрики всех серверов в реальном времени
- Централизованные логи с поиском
- Красивые дашборды в Grafana
- Алерты о проблемах
- Мониторинг доступности сайтов
Когда проект вырастет, можно добавить: cAdvisor (контейнерные метрики), Blackbox Exporter (HTTP/DNS/TCP-проверки), Grafana Tempo (трейсинг).
Никаких $15 за хост. Только ваши данные на вашем сервере.
Официальный сайт Prometheus | Официальный сайт Grafana | Uptime Kuma на GitHub