Prometheus + Grafana для маленького проекта
Ставим минимальный, но работающий мониторинг за один вечер. Без Kubernetes, без 20 helm chart'ов, без боли.
Каждый раз, когда я прихожу в проект «а тут нет мониторинга вообще», у меня одна и та же мысль: давайте сначала поставим минимум, а потом усложним. Минимум — это Prometheus, Grafana, node-exporter и один простой dashboard. Этого хватит на полгода-год, пока не упрёмся в потолок.
docker-compose.yml
version: "3.9"
services:
prometheus:
image: prom/prometheus:v2.54.1
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom-data:/prometheus
ports: ["9090:9090"]
grafana:
image: grafana/grafana:11.2.2
volumes:
- grafana-data:/var/lib/grafana
ports: ["3000:3000"]
node-exporter:
image: prom/node-exporter:v1.8.2
pid: host
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.rootfs=/rootfs'
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
volumes:
prom-data:
grafana-data:
Файл prometheus.yml — стандартный, со scrape-секцией на localhost:9100.
Что в Grafana сразу подключить
- Data source — Prometheus на
http://prometheus:9090. - Импортировать готовый dashboard для node-exporter (id 1860) — там есть всё: CPU, память, диск, сеть, load average.
- Через 10 минут у вас на экране графики, по которым видно, что происходит с машиной.
Минимальные алерты
В prometheus.yml добавляем rule files:
groups:
- name: basic
rules:
- alert: HighCpuLoad
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 10m
labels: { severity: warning }
annotations: { summary: "High CPU on {{ $labels.instance }}" }
- alert: DiskWillFillIn24h
expr: predict_linear(node_filesystem_avail_bytes[6h], 24*3600) < 0
for: 1h
labels: { severity: warning }
Алерты пока никому не шлём — пусть копятся в Alertmanager, посмотрим завтра.
Когда это перестанет хватать
Когда у вас появится 5+ сервисов с разными endpoint'ами, когда захочется trace'ов, когда понадобятся разные retention'ы — тогда стоит смотреть в сторону managed Prometheus (Grafana Cloud, VictoriaMetrics) или полноценного стека с Loki, Tempo, Thanos. Но это потом.
Сейчас — три контейнера, 20 минут, и вы знаете, что происходит с вашим сервером. Лучшее, что можно сделать в начале.