Моніторинг сервера через Grafana, Prometheus і Node Exporter

В цій статті ми розглянемо, як налаштувати моніторинг VPS або виліленного сервера сервера через Grafana,  Prometheus, Node Exporter та Grafana на операційних системах Debian, Ubuntu та AlmaLinux.

Навіщо потрібен цей стек

Три інструменти — Prometheus, Node Exporter і Grafana — разом закривають практично всю базову потребу в моніторингу сервера, і кожен з них відповідає за свою частину роботи:

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

Ставити їх варто саме в такому порядку — спершу джерело даних (Node Exporter), потім збирач (Prometheus), і тільки в кінці візуалізацію (Grafana), бо без перших двох показувати в Grafana буде просто нічого.

З чого складається стек моніторингу

Компонент Порт за замовчуванням Роль
Node Exporter 9100 Віддає метрики ОС конкретного сервера
Prometheus 9090 Збирає, зберігає та опитує метрики
Grafana 3000 Візуалізує дані, будує дашборди й алерти
Важливо: порти 9090 і 9100 не повинні бути відкриті для всього інтернету. Це внутрішні службові порти, які містять деталізовану інформацію про сервер. Доступ до них варто обмежити фаєрволом лише для довірених IP (наприклад, тільки для сервера, на якому працює сама Grafana), про це нагадаємо ще раз у відповідних розділах нижче.

Що має бути готово заздалегідь

  • VPS з Debian 10/11/12, Ubuntu 20.04/22.04/24.04 або AlmaLinux 8/9
  • Доступ sudo або root
  • Мінімум 1 ГБ оперативної пам’яті (для Prometheus з великою кількістю метрик та тривалою історією знадобиться більше)

Prometheus і Node Exporter поширюються офіційно у вигляді самодостатнього бінарного файлу з GitHub Releases — без залежності від пакетних менеджерів дистрибутива. Завдяки цьому кроки встановлення цих двох компонентів однакові для Debian, Ubuntu та AlmaLinux, відрізняються лише команди встановлення базових утиліт (wget, tar).

Встановлення Prometheus

Крок 1. Встановлення базових утиліт

Debian / Ubuntu:

sudo apt update
sudo apt install -y wget tar nano

AlmaLinux:

sudo dnf install -y wget tar nano

Крок 2. Створення окремого системного користувача

Запускати Prometheus від root — погана практика. Створіть окремого користувача без прав входу в систему:

sudo useradd --no-create-home --shell /usr/sbin/nologin prometheus

Крок 3. Завантаження та встановлення бінарника

Команди нижче використовують версію 3.13.1. Перед встановленням перевірте актуальну версію на сторінці релізів Prometheus на GitHub і за потреби замініть номер версії в команді.
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v3.13.1/prometheus-3.13.1.linux-amd64.tar.gz
tar -xzf prometheus-3.13.1.linux-amd64.tar.gz
cd prometheus-3.13.1.linux-amd64

sudo mv prometheus /usr/local/bin/
sudo mv promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

Крок 4. Каталоги для конфігурації та даних

sudo mkdir -p /etc/prometheus /var/lib/prometheus 
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

Крок 5. Базовий конфігураційний файл

sudo nano /etc/prometheus/prometheus.yml

Мінімальний робочий конфіг (ціль для Node Exporter додамо трохи пізніше, коли він вже буде встановлений):

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

Крок 6. Служба systemd

sudo nano /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries

[Install]
WantedBy=multi-user.target

Запустіть і додайте в автозавантаження:

sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus

Крок 7. Обмеження доступу до порту 9090

Якщо Grafana і Prometheus стоять на одному сервері (найпоширеніший варіант для невеликих проєктів) — відкривати порт 9090 назовні взагалі не потрібно, звернення відбуватимуться через localhost і цей крок можна пропустити

Debian / Ubuntu (UFW):

sudo ufw allow from ІР_АДРЕСА_ДОВІРЕНОГО_СЕРВЕРА to any port 9090

AlmaLinux (firewalld):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ІР_АДРЕСА_ДОВІРЕНОГО_СЕРВЕРА" port protocol="tcp" port="9090" accept'
sudo firewall-cmd --reload

Встановлення Node Exporter

Node Exporter встановлюється на кожен сервер, метрики якого хочете бачити в Prometheus. Якщо у вас кілька VPS — цей розділ повторюється на кожному з них, тоді як Prometheus і Grafana зазвичай достатньо мати в одному екземплярі.

Крок 1. Створення користувача

sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter

Крок 2. Завантаження бінарника

Команди нижче використовують версію 1.12.1. Актуальну версію завжди можна звірити на сторінці релізів Node Exporter.
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
tar -xzf node_exporter-1.12.1.linux-amd64.tar.gz

sudo mv node_exporter-1.12.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Крок 3. Служба systemd

sudo nano /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl status node_exporter

Перевірте, що метрики віддаються коректно:

curl http://localhost:9100/metrics

Якщо у відповіді бачите потік рядків формату node_cpu_seconds_total{...} — Node Exporter працює правильно.

Крок 4. Обмеження доступу до порту 9100

Якщо Grafana і Prometheus стоять на одному сервері (найпоширеніший варіант для невеликих проєктів) — відкривати порт 9090 назовні взагалі не потрібно, звернення відбуватимуться через localhost і цей крок можна пропустити

Debian / Ubuntu (UFW):

sudo ufw allow from ІР_АДРЕСА_СЕРВЕРА_З_PROMETHEUS to any port 9100

AlmaLinux (firewalld):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ІР_АДРЕСА_СЕРВЕРА_З_PROMETHEUS" port protocol="tcp" port="9100" accept'
sudo firewall-cmd --reload

Підключення Node Exporter до Prometheus

Поверніться на сервер із Prometheus і відредагуйте конфіг, додавши ціль для опитування:

sudo nano /etc/prometheus/prometheus.yml
 scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['ІР_АДРЕСА_СЕРВЕРА_З_NODE_EXPORTER:9100']

Якщо Node Exporter стоїть на тому самому сервері, що й Prometheus, вкажіть localhost:9100.

Перезапустіть Prometheus:

sudo systemctl restart prometheus

Перевірити, що ціль підключена й опитується без помилок, можна у веб-інтерфейсі самого Prometheus: відкрийте http://IP_СЕРВЕРА:9090/targets — статус node_exporter має бути UP.

Встановлення Grafana на Debian та Ubuntu

Офіційний APT-репозиторій Grafana Labs єдиний для обох дистрибутивів — команди нижче спрацюють без змін як на Debian 10/11/12, так і на Ubuntu 20.04/22.04/24.04.

Крок 1. Підключення офіційного репозиторію

sudo apt update
sudo apt install -y apt-transport-https software-properties-common wget

sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

Крок 2. Встановлення пакета

sudo apt update
sudo apt install -y grafana

Встановлення Grafana на AlmaLinux

Крок 1. Імпорт GPG-ключа та підключення репозиторію

sudo dnf install -y wget

wget -q -O gpg.key https://rpm.grafana.com/gpg.key
sudo rpm --import gpg.key

sudo tee /etc/yum.repos.d/grafana.repo > /dev/null <<EOF
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF

Крок 2. Встановлення пакета

sudo dnf install -y grafana
Примітка щодо SELinux: на AlmaLinux з увімкненим SELinux Grafana зазвичай запускається без додаткових налаштувань, оскільки працює на порту 3000, який не потребує особливих політик. Якщо плануєте виносити доступ через Nginx як реверс-проксі на порт 80/443 — переконайтесь, що SELinux дозволяє Nginx робити мережеві з’єднання назовні: <code>sudo setsebool -P httpd_can_network_connect 1</code>.

Запуск служби Grafana

Незалежно від дистрибутива, служба запускається однаково:

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server

Відкориваємо порт 3000 для доступу зовні:

sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload

Вхід у веб-інтерфейс Grafana

За замовчуванням Grafana слухає порт 3000. Відкрийте в браузері:

http://IP_ВАШОГО_СЕРВЕРА:3000

Стандартні дані для першого входу:

  • Логін: admin
  • Пароль: admin

Одразу після першого входу система попросить встановити новий пароль.

Важливо: тримати панель Grafana відкритою для всього інтернету з паролем за замовчуванням “admin/admin” неприпустимо. Обов’язково змініть пароль при першому вході і за можливості обмежте доступ до порту 3000 фаєрволом або винесіть вхід через реверс-проксі з SSL.

Підключення Prometheus як джерела даних

  1. У лівому меню відкрийте розділ Connections → Data sources.
  2. Натисніть Add data source.
  3. Виберіть Prometheus.
  4. У полі URL вкажіть адресу вашого Prometheus, наприклад:
    http://localhost:9090

    Якщо Prometheus працює на іншому сервері — замініть localhost на його реальну адресу.

  5. Натисніть Save & test і переконайтесь, що з’явилось повідомлення про успішне підключення.

Готовий дашборд для Node Exporter

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

  1. У лівому меню натисніть “+” → Import.
  2. У полі ID дашборду введіть 1860 — це офіційний ID популярного шаблону “Node Exporter Full”.
  3. Натисніть Load.
  4. Оберіть щойно підключене джерело Prometheus.
  5. Натисніть Import.

За кілька секунд отримаєте готовий дашборд із завантаженням CPU, пам’яті, дисків, мережевого трафіку та десятками інших метрик сервера — без ручного налаштування жодної панелі.

Далі має сенс додати правила алертів на критичні значення (заповнення диска понад 90%, стрибок навантаження CPU, брак вільної пам’яті) і, якщо серверів кілька, повторити встановлення Node Exporter на кожному з них, просто додаючи нові цілі у prometheus.yml. Якщо плануєте тримати такий стек на постійній основі — варто одразу закладатись на VPS з достатнім запасом ресурсів, оскільки Prometheus з часом накопичує чимало історичних даних, і диск під них краще брати з запасом.

Прокрутка до верху