Мониторинг Linux хостов с Prometheus Node Exporter

- Опубликовано
- //4 мин. чтения
Prometheus Node Exporter — это официальный инструмент для сбора метрик с хостов (серверов) Linux и предоставления их Prometheus. Он предназначен для мониторинга аппаратных и операционных системных метрик, таких как использование CPU, памяти, диска, сети и других параметров.
Для чего нужен Node Exporter?
Node Exporter собирает метрики с хоста, на котором он запущен, и предоставляет их в формате, понятном Prometheus. Это позволяет:
- Мониторинг состояние хостов: использование CPU, памяти, диска, сети, температуру, нагрузку на систему и другие параметры.
- Интеграция данные в Prometheus: Prometheus периодически опрашивает Node Exporter и собирать метрики для дальнейшего анализа.
- Визуализация данные: собранные метрики можно отображать в Grafana или других инструментах визуализации.
Какие метрики собирает Node Exporter?
Node Exporter предоставляет широкий спектр метрик, включая:
- CPU:
- Использование CPU (user, system, idle и другие состояния).
- Количество ядер и частота.
- Память:
- Использование оперативной памяти (RAM).
- Использование swap-памяти.
- Диск:
- Использование дискового пространства.
- Скорость чтения/записи.
- Количество операций ввода-вывода (IOPS).
- Сеть:
- Входящий и исходящий трафик.
- Количество ошибок и сброшенных пакетов.
- Системные метрики:
- Загрузка системы (load average).
- Количество запущенных процессов.
- Температура компонентов (если поддерживается).
- Файловые системы:
- Использование места на диске.
Как работает Node Exporter?
Node Exporter собирает метрики с хоста, используя системные вызовы и файлы в /proc
и /sys
. Метрики предоставляются через HTTP-интерфейс в формате, понятном Prometheus (обычно на порту 9100
). Prometheus периодически опрашивает Node Exporter (по умолчанию каждые 15 секунд) и сохраняет метрики в своей базе данных.
Установка и запуск Node Exporter
Запуск через Docker:
Для запуска будем использовать официальный образ Node Exporter с Docker Hub, там же вы найдете уже готовый docker-compose
файл, но нам нужно его немного изменить для корректного сбора метрик с хоста:
services:
nodeexporter:
image: prom/node-exporter:latest
container_name: nodeexporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- --path.procfs=/host/proc
- --path.rootfs=/rootfs
- --path.sysfs=/host/sys
- --collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($|/)
restart: unless-stopped
network_mode: host
networks: {}
Разбор конфигурации
/proc:/host/proc:ro
: Монтирует директорию/proc
хоста в контейнер для сбора метрик о процессах./sys:/host/sys:ro
: Монтирует директорию/sys
хоста для сбора информации о системе./:/rootfs:ro
: Монтирует корневую файловую систему хоста для сбора метрик о дисках и файловых системах, а:ro
указывает, что доступ будет только для чтения (read-only), что повышает безопасность.--path.procfs=/host/proc
: Указывает путь к смонтированной директории/proc
внутри контейнера.--path.rootfs=/rootfs
: Указывает путь к корневой файловой системе внутри контейнера.--path.sysfs=/host/sys
: Указывает путь к смонтированной директории/sys
внутри контейнера.--collector.filesystem.mount-points-exclude
: Исключает определённые точки монтирования (например,/sys
,/proc
,/dev
,/host
,/etc
) из сбора метрик, чтобы избежать дублирования или ненужных данных.network_mode: host
: Использует сетевой стек хоста, что позволяет Node Exporter собирать сетевые метрики напрямую. Это важно для корректного сбора данных о сетевых интерфейсах.
WARNING
При запуске с помощью Docker в LXC контейнере Proxmox, некоторые метрики снимаются некорректно, а некоторые снимаются с хоста Proxmox.
Установка как службы
- Скачиваем последнюю версию бинарного файла Node Exporter со страницы релизов Github и разархивируем её:
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.9.0.linux-amd64.tar.gz
cd node_exporter-1.9.0.linux-amd64
NOTE
Команды изменяются в зависимости от версии. Замените 1.9.0
на актуальную.
- Перемещаем файл
node_exporter
в папку/usr/local/bin/
, переходим в нее и проверяем что файл перемещен:
mv ./node_exporter /usr/local/bin/
cd /usr/local/bin && ls
- Создаём нового пользователя
node_exporter
:
useradd --no-create-home --shell /bin/false node_exporter
Так как пользователь node_exporter
не требует пароля, из соображений безопасности запрещаем:
--no-create-home
– создание домашней папки (/home/node_exporter
).--shell /bin/false
– вход в систему этому пользователю.
- Меняем владельца файла
/usr/local/bin/node_exporter
:
chown node_exporter:node_exporter /usr/local/bin/node_exporter
Теперь только node_exporter
может запускать этот файл.
- Создаем
systemd
-службу:
nano /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
Nice=-10
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
- Запускаем службу и проверяем ее статус:
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter
Настройка Prometheus для сбора метрик
Добавьте конфигурацию для Node Exporter в файл prometheus.yml
:
- job_name: 'nodeexporter'
scrape_interval: 5s
basic_auth:
username: user
password: password
static_configs:
- targets:
- node1.domain.ru:9100 #Remote HTTP Host
- gateway.internal:9100 #gateway
- monitoring.internal:9100 #monitoring
- main.internal:9100 #main
- media.internal:9100 #media
- cloud.internal:9100 #cloud
- job_name: 'nodeexporter_https'
scrape_interval: 5s
scheme: https
basic_auth:
username: user
password: password
static_configs:
- targets: [mode2.domain.ru] #Remote HTTPS Host
Визуализация данных
Для визуализации метрик собранных Node Exporter, будем использовать [[Мониторинг роутера Mikrotik при помощи Prometheus и Grafana в docker контейнере|Grafana]] с дашбордом Node Exporter Full (id:1860
):

или Node Exporter Quickstart (id:11074
)

Заключение:
Мы разобрали запуск Prometheus Node Exporter с помощью Docker и как службы systemd. Если вы используете Prometheus, Node Exporter станет незаменимым компонентом вашей системы мониторинга.