
Хотите узнать, как ваш VPS расходует ресурсы? Вам поможет связка Node Exporter + Prometheus + Grafana. В этой статье рассказываем, как установить Node Exporter, настроить сбор метрик CPU, памяти и дисков, а также как интегрировать его с Prometheus.
Node Exporter — ключевой компонент в экосистеме Prometheus, которая преобразует показатели работы сервера в наглядные метрики. Без него невозможно получить данные о загрузке процессора, оперативной памяти, состоянии дисков или сетевых интерфейсов. Мы разберём, как развернуть Node Exporter на VPS, подключить его к Prometheus и начать сбор данных для последующего анализа.
Мониторинг ресурсов особенно важен на серверах, где объём доступной оперативной памяти, процессорное время и дисковая нагрузка жёстко ограничены. Даже незначительный всплеск активности одного из сервисов может повлиять на стабильность всей системы. Поэтому своевременный мониторинг VPS — это обязательное условие стабильной работы для любого, кто хочет держать сервер под контролем.
Установка Node Exporter и подготовка среды
Node Exporter распространяется в виде готового бинарника, что упрощает установку. Начнём с загрузки архива с официального GitHub-репозитория. На момент написания статьи актуальной является версия 1.9.1, но перед началом работы проверьте страницу релизов, чтобы выбрать свежую сборку.
Откройте терминал и скачайте архив с помощью wget <ссылка> или curl -LO <ссылка>, затем распакуйте его:
tar xvf node_exporter-*.tar.gz
Флаг -x активирует извлечение файлов, -v выводит список всех файлов, которые обрабатываются, -f указывает на архив. После выполнения появится папка node_exporter-* с бинарным файлом приложения внутри (в названии папки будет версия, которую вы скачали).
Перенесите папку с бинарником в /usr/local/bin — стандартный каталог для пользовательских программ. Файлы в этой директории доступны всем пользователям системы, а путь /usr/local/bin присутствует в переменной окружения $PATH по умолчанию, что позволяет запускать Node Exporter из любого места.
Создание системного пользователя и настройка прав
Запускать Node Exporter от имени root нельзя, это может привести к уязвимостям в системе безопасности. Поэтому создадим изолированного пользователя без права входить в систему:
sudo useradd --no-create-home --shell /bin/false <имя_пользователя>
Эта команда также отключит создание домашней директории, которая не требуется для фоновой службы, и заблокирует вход под этим пользователем через SSH или консоль.
Назначьте права на бинарный файл:
sudo chown <имя_пользователя>:<группа> /usr/local/bin/node_exporter
В данном случае группа будет называться так же, как и пользователь (она была создана для него по умолчанию). Теперь только указанный пользователь и root могут запускать исполняемый файл.
Запуск Node Exporter
Создадим юнит в /etc/systemd/system/ для управления службой.
Создайте файл node_exporter.service и откройте его для редактирования. Добавьте в него:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=<имя_пользователя>
Group=<группа>
ExecStart=путь к исполняемому файлу
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
Разберём параметры:
- After=network.target — служба запустится только после полной инициализации сети.
- User и Group — ограничение прав процесса.
- Restart=always — автоматический перезапуск при любом завершении (включая ручную остановку).
- RestartSec=30 — пауза в 30 секунд перед перезапуском.
Выполните последовательно daemon-reload, start node_exporter и enable node_exporter. Это перезагрузит конфигурацию systemd (обязательно после создания юнита), запустит и добавит службу в автозагрузку при старте системы.
После этого проверьте статус службы (status node_exporter). В выводе должна быть строка Active: active (running). Если статус failed, изучите логи за предыдущие 5-10 минут:
sudo journalctl -u node_exporter --since "5 minutes ago"
Проверка работы
Node Exporter по умолчанию слушает порт 9100. Чтобы убедиться, что метрики собираются, выполните запрос через curl:
curl http://localhost:9100/metrics
В ответе вы увидите список метрик. Вот некоторые из них:
- node_cpu_seconds_total — время работы CPU в разных режимах (idle, user, system).
- node_memory_MemAvailable — доступная оперативная память в байтах.
- node_filesystem_avail — свободное место на смонтированных файловых системах.
Интеграция с Prometheus
Теперь дадим знать Prometheus, откуда брать метрики. Откройте prometheus.yml (файл находится в /opt/prometheus/) и добавьте новое задание:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
scrape_interval: 15s
Разберём параметры:
- job_name: 'node' — произвольное имя задания. Нужно для фильтрации метрик в PromQL.
- targets: ['localhost:9100'] — адрес и порт Node Exporter. Если нужно мониторить удалённые серверы, укажите их IP через запятую: ['192.168.1.5:9100', '192.168.1.6:9100'].
- scrape_interval: 15s — переопределение глобального интервала сбора метрик для этого конкретного job.
Примените изменения и перезапустите Prometheus (restart).
Проверьте, получилось ли связать Node Exporter и Prometheus. Перейдите по адресу http://ваш_сервер:9090 в браузере. Зайдите в Status → Targets: у цели node должен быть статус UP. Если статус DOWN, проверьте, активен ли Node Exporter и открыт ли порт 9100 в файрволе.
Дополнительные настройки
По умолчанию Node Exporter доступен на всех сетевых интерфейсах, что небезопасно для продакшена. Примите меры:
Ограничьте доступ по IP. Разрешите подключение к порту 9100 только для Prometheus:
sudo ufw allow proto tcp from 192.168.1.10 to any port 9100
Замените 192.168.1.10 на IP-адрес вашего сервера Prometheus.
Используйте обратный прокси, который будет выступать промежуточным звеном между Node Exporter и Prometheus, скрывая прямой доступ к порту 9100. Это также добавит проверку логина и пароля перед доступом к метрикам. Например, для проксирования можно использовать Nginx, если он установлен.
Запуск на отдельном интерфейсе. Если оба приложения установлены на одном сервере, ограничьте прослушивание localhost. Для этого в файле node_exporter.service измените строку ExecStart:
ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100
Фильтрация собираемых метрик. Node Exporter собирает все доступные данные, но иногда это избыточно. Используйте флаги для отключения ненужных коллекторов:
ExecStart=/usr/local/bin/node_exporter \
--collector.disable-defaults \
--collector.cpu \
--collector.meminfo \
--collector.filesystem
Где:
- --collector.disable-defaults отключает все коллекторы, активные по умолчанию;
- --collector.cpu включает сбор метрик CPU, остальные два флага включают сбор информации о состоянии памяти и файловой системы.
Заключение
Теперь ваш сервер отправляет метрики в Prometheus, и вы можете отслеживать его состояние в реальном времени. Чтобы визуализировать данные, установите Grafana и импортируйте готовый дашборд Node Exporter Full.
Читайте в блоге:
- Как настроить мониторинг сервера: метрики и методы
- Оптимизация производительности MySQL на сервере CentOS
- Как открыть и закрыть порты в Ubuntu 22.04 и защитить систему от угроз