Skip to content

Как настроить Prometheus + Grafana

Коротко:

Prometheus (metrics storage) + Grafana (visualization) — open-source standard для monitoring. Deploy за 15 мин через Docker compose. Prometheus scrapes /metrics endpoints ваших apps + Node exporter (system metrics). Grafana подключается к Prometheus как data source, показывает dashboards. Нет lock-in: всё open-source, own-host.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Пошаговая настройка

  1. Создайте docker-compose.yml с prometheus + grafana services
  2. Напишите prometheus.yml с scrape_configs → ваши targets
  3. Add Node exporter на каждый сервер для system metrics
  4. Expose Prometheus :9090, Grafana :3000 (за reverse proxy с auth в prod)
  5. docker compose up -d
  6. В Grafana admin/admin → добавьте Prometheus (http://prometheus:9090) как data source
  7. Import готовый dashboard: Grafana Dashboards → Node Exporter Full (ID 1860)
  8. Для монитора uptime снаружи — Enterno Monitor дополняет

Рабочие примеры

СценарийКонфиг
docker-compose.ymlservices: prometheus: image: prom/prometheus ports: ["9090:9090"] volumes: [./prometheus.yml:/etc/prometheus/prometheus.yml] grafana: image: grafana/grafana ports: ["3000:3000"] environment: - GF_SECURITY_ADMIN_PASSWORD=change_me
prometheus.ymlscrape_configs: - job_name: 'node' static_configs: - targets: ['host.docker.internal:9100'] - job_name: 'app' metrics_path: '/metrics' static_configs: - targets: ['app:8080']
Node exporterdocker run -d --name node-exporter \ --net="host" --pid="host" \ -v /:/host:ro \ prom/node-exporter --path.rootfs=/host
PromQL query (CPU idle)rate(node_cpu_seconds_total{mode="idle"}[5m])
Alert rulegroups: - name: example rules: - alert: HighCPU expr: rate(node_cpu_seconds_total{mode!="idle"}[5m]) > 0.9 for: 5m

Типичные ошибки

  • Grafana exposed :3000 без auth → весь dashboard public
  • Prometheus без retention config держит ВСЕ metrics forever → диск кончится
  • Scrape interval 5 sec × 100 targets = heavy load. Default 15-30 sec
  • High cardinality labels (user_id) → memory explosion в Prometheus
  • Docker bridge networking: targets "localhost" не работают → используйте service name

Больше по теме

Часто задаваемые вопросы

Prometheus или InfluxDB?

Prometheus — pull model, простой setup, TSDB. InfluxDB — push model, SQL-like queries, better long-term. Prometheus лучше для Kubernetes/microservices.

Retention — сколько хранить?

Default 15 дней. Для long-term — remote storage (Thanos, Cortex, Grafana Mimir) или Prometheus federation.

Alerts — где настраивать?

Alertmanager (отдельный service). Routes alerts в email, Slack, PagerDuty, Telegram.

Сравнение с Datadog/New Relic?

Prometheus+Grafana — self-hosted, free. Datadog — SaaS, $15+/host/мес, лучше UX. Выбор по budget vs control.