Мониторинг сервера через 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 IP_АДРЕС_ДОВЕРЕННОГО_СЕРВЕРА to any port 9090

AlmaLinux (firewalld):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP_АДРЕС_ДОВЕРЕННОГО_СЕРВЕРА" 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 IP_АДРЕС_СЕРВЕРА_С_PROMETHEUS to any port 9100

AlmaLinux (firewalld):

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP_АДРЕС_СЕРВЕРА_С_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: ['IP_АДРЕС_СЕРВЕРА_С_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 <

Шаг 2. Установка пакета

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

Запуск службы 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 со временем накапливает немало исторических данных, и диск под них лучше брать с запасом.

Прокрутить вверх