1. Блог
  2. Мануали

Встановлення Grafana і Prometheus у Docker: моніторинг сервера

Встановлення Grafana і Prometheus у Docker: моніторинг сервера

Зв’язка Prometheus і Grafana — стандарт моніторингу серверів. Prometheus збирає та зберігає метрики, Node Exporter віддає показники операційної системи, а Grafana перетворює їх на наочні графіки. Через Docker Compose увесь стек піднімається за кілька хвилин.

Як влаштований стек

  • Node Exporter працює на кожному сервері й віддає метрики: завантаження процесора, пам’ять, диски, мережу.
  • Prometheus раз на кілька секунд опитує експортери та зберігає значення у своїй базі.
  • Grafana запитує дані в Prometheus і будує дашборди.

Що знадобиться

Крок 1. Файли проєкту

mkdir -p ~/monitoring && cd ~/monitoring

Створіть конфігурацію Prometheus у файлі prometheus.yml:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: node
    static_configs:
      - targets: ["node-exporter:9100"]

Створіть docker-compose.yml:

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.retention.time=30d
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus
    ports:
      - "127.0.0.1:9090:9090"

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    command:
      - --path.rootfs=/host
    pid: host
    volumes:
      - /:/host:ro,rslave

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    environment:
      GF_SECURITY_ADMIN_PASSWORD: "надійний_пароль"
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"

volumes:
  prometheus_data:
  grafana_data:

Prometheus опубліковано лише на локальній адресі: він не має вбудованої авторизації, і відкривати його в інтернет не можна. Параметр retention.time задає термін зберігання метрик.

Крок 2. Запуск

docker compose up -d
docker compose ps

Усі три контейнери мають бути в стані running.

Крок 3. Перевірка Prometheus

Інтерфейс Prometheus доступний лише із самого сервера. Щоб відкрити його в браузері, прокиньте порт через SSH:

ssh -L 9090:127.0.0.1:9090 root@203.0.113.10

Відкрийте http://localhost:9090 і перейдіть у Status → Target health. Обидві цілі — prometheus і node — мають бути в стані UP.

Крок 4. Налаштування Grafana

Відкрийте http://IP-сервера:3000 і увійдіть із логіном admin та паролем із файлу docker-compose.yml.

Джерело даних

  1. Відкрийте Connections → Data sources → Add data source.
  2. Оберіть Prometheus.
  3. У полі Prometheus server URL вкажіть http://prometheus:9090 — контейнери бачать один одного за іменами.
  4. Натисніть Save & test.

Готовий дашборд

Будувати панелі з нуля не потрібно: у каталозі Grafana є готові дашборди.

  1. Відкрийте Dashboards → New → Import.
  2. Введіть ідентифікатор 1860 (дашборд Node Exporter Full) і натисніть Load.
  3. Оберіть створене джерело даних Prometheus і натисніть Import.

Відкриється дашборд із графіками процесора, пам’яті, дисків і мережі.

Крок 5. Підключення інших серверів

На кожному сервері, який потрібно відстежувати, запустіть Node Exporter:

docker run -d \
  --name node-exporter \
  --restart unless-stopped \
  --net host --pid host \
  -v /:/host:ro,rslave \
  prom/node-exporter:latest --path.rootfs=/host

Експортер не має авторизації, тому дозвольте доступ до порту 9100 лише з адреси сервера моніторингу:

sudo ufw allow from 203.0.113.10 to any port 9100 proto tcp

Додайте сервери в prometheus.yml на сервері моніторингу:

  - job_name: node
    static_configs:
      - targets: ["node-exporter:9100"]
        labels:
          instance: monitoring
      - targets: ["198.51.100.20:9100"]
        labels:
          instance: web-01

Застосуйте зміни:

docker compose restart prometheus

Новий сервер з’явиться у випадному списку вгорі дашборда.

Захист Grafana

  • Закрийте порт 3000 і опублікуйте Grafana через зворотний проксі з HTTPS — підійде Nginx Proxy Manager або ручне налаштування Nginx.
  • Самостійну реєстрацію й анонімний доступ типово вимкнено — не вмикайте їх без потреби.

Оновлення

cd ~/monitoring
docker compose pull
docker compose up -d

Дані Prometheus і налаштування Grafana зберігаються в томах і під час оновлення не втрачаються.

Що далі

  • Налаштуйте сповіщення в розділі Alerting: Grafana вміє надсилати повідомлення в Telegram, на пошту та в інші канали.
  • Додайте експортери для своїх сервісів: MySQL, PostgreSQL, Nginx, Docker.
  • Якщо потрібна класична система моніторингу з агентами й шаблонами, подивіться Zabbix; для простої перевірки доступності сайтів — Uptime Kuma.
#grafana#prometheus#моніторинг#docker#node exporter

Ця стаття іншими мовами:EnglishРусский