Node Exporter − легковесный агент для сбора метрик ОС Linux и Unix-подобных систем. Node Exporter предоставляет данные о состоянии процессора, памяти, файловых систем, сетевых интерфейсов и других компонентов Linux-сервера. Агент запускается как отдельный процесс и по умолчанию публикует метрики, используя порт 9100. Node Exporter является довольно простым и пассивным инструментом: он не хранит историю, не обрабатывает данные, не генерирует алерты и не строит графики. Как правило, Node Exporter используется для сбора метрик, в дальнейшем обрабатываемых системой мониторинга. Такая система, например, Prometheus, периодически опрашивает агент и сохраняет полученные данные для последующего анализа и визуализации.
В настоящем руководстве разберём, как установить Node Exporter на Linux и подключить данный хост для мониторинга с использованием Prometheus. Приведённые ниже инструкции можно использовать для настройки мониторинга сервера, управляемого как дистрибутивом, основанным на Debian, то есть Debian или Ubuntu, так и работающего на CentOS.
Как установить Node Exporter
Для установки актуальной на текущий момент версии перейдите на официальный сайт загрузки Prometheus и связанных с ним инструментов. В их числе вы можете найти и Node Exporter. В соответствующем разделе правой кнопкой мыши кликните на строке дистрибутива версии для Linux и скопируйте адрес ссылки в буфер обмена.

Затем переключитесь в терминал виртуального сервера, перейдите, например, в свою домашнюю директорию и при помощи скопированной ссылки и утилиты wget
загрузите архив дистрибутива в текущий каталог:
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
По окончании загрузки распакуйте полученный архив:
$ tar -xvf node_exporter-1.9.1.linux-amd64.tar.gz
Далее перейдите в распакованный каталог:
$ cd node_exporter-1.9.1.linux-amd64/
И затем переместите файл node_exporter
в директорию /usr/local/bin/
:
$ sudo mv node_exporter /usr/local/bin/
Для того, чтобы запускать Node Exporter в изолированной и безопасной среде, создайте системного технического пользователя, например node_exporter
. Данная учётная запись не должна иметь оболочку и домашнюю директорию, поскольку она предназначена не для входа в систему, а только для запуска службы.
$ sudo useradd --no-create-home --shell /sbin/nologin node_exporter
Дополнительно измените владельца и группу владельца файла /usr/local/bin/node_exporter
на пользователя root
и группу root
. Это необходимо сделать для того, чтобы только root
смог модифицировать или заменить данный исполняемый файл. Остальные же пользователи, включая и ранее созданного node_exporter
, от имени которого обычно запускается служба, смогут только запускать его на исполнение, но не изменять.
$ sudo chown root:root /usr/local/bin/node_exporter
Как запустить Node Exporter в качестве системного сервиса
При помощи текстового редактора nano
или vi
создайте юнит-файл для службы Node Exporter. Данная служба понадобится для того, чтобы автоматически запускать Node Exporter как системный сервис в фоновом режиме:
$ sudo vi /etc/systemd/system/node_exporter.service
Скопируйте в данный файл следующие строки:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Сохраните файл, закройте его и при помощи следующей команды сообщите systemd
о внесённых в конфигурацию изменениях:
$ sudo systemctl daemon-reload
После чего запустите созданную службу:
$ sudo systemctl start node_exporter
И установите её в автозагрузку:
$ sudo systemctl enable node_exporter
Убедитесь, что сервис функционирует корректно, запустив вывод его состояния на экран:
$ systemctl status node_exporter
В выводе команды не должно присутствовать каких-либо сообщений об ошибках:

Поскольку агент публикует endpoint через порт 9100, необходимо открыть доступ к серверу через данный порт. В Ubuntu и Debian сделать это можно при помощи команды, создающей соответствующее разрешающее правило в брандмауэре UFW:
$ sudo ufw allow 9100
В CentOS для открытия порта нужно внести небольшое изменение в настройки сервиса firewalld
:
$ sudo firewall-cmd --permanent --add-port=9100/tcp
После чего необходимо перезапустить данный сервис:
$ sudo firewall-cmd --reload
Теперь вы можете проверить, что Node Exporter работает и отдаёт метрики. Для этого откройте браузер и перейдите на X.X.X.X:9100/metrics
, где вместо X.X.X.X
укажите IP-адрес своей виртуальной машины. В результате вы должны увидеть страницу с текстом, представляющим собой «сырые» метрики в формате Prometheus. Так, например, они выглядят на нашем тестовом сервере:

Как подключить Node Exporter к Prometheus
Для того, чтобы собираемые метрики передавались в систему мониторинга, необходимо на сервере с установленным Prometheus добавить инструкцию для сбора данных с сервера, на котором установлен Node Exporter.
Чтобы это сделать, откройте файл конфигурации Prometheus:
$ sudo nano /etc/prometheus/prometheus.yml
И в блок scrape_config
добавьте задачу по мониторингу нового узла. В ней укажите IP-адрес виртуальной машины, на которую вы установили Node Exporter, и не забудьте добавить номер порта, который должен прослушивать Prometheus. В нашем примере IP-адрес узла − 195.133.198.94
, номер порта − 9100
:
- job_name: 'your-server'
static_configs:
- targets:
- '195.133.198.94:9100'
Закройте конфигурационный файл с сохранением внесённых изменений и перезапустите службу Prometheus:
$ sudo systemctl restart prometheus
Теперь откройте браузер и перейдите в раздел targets
веб-интерфейса Prometheus. Если всё работает правильно, вы увидите свой хост в списке узлов, которые мониторятся системой.

И, естественно, для данного хоста доступен просмотр метрик, которые Prometheus получает от Node Exporter. Например, чтобы увидеть загрузку CPU за последние 5 минут, перейдите на стартовую страницу веб-интерфейса Prometheus и в строку Expression введите запрос:
rate(node_cpu_seconds_total{mode!="idle"}[5m])
Затем нажмите Execute
.

В результате система выведет среднюю загрузку процессора по всем не-idle режимам за последние 5 минут в виде «доли секунды за одну секунду». В данном примере это по сути и является долей загрузки CPU для каждого из режимов.