...

Правильная настройка Node Exporter: практическое руководство по мониторингу серверов под управлением Linux с помощью Prometheus

Правильная настройка Node Exporter означает: я настраиваю службу таким образом, чтобы Prometheus собирал достоверные метрики Linux-серверов с четко указанными портами, целенаправленными настройками коллектора и надежной защитой. В этом практическом руководстве я расскажу об установке, настройке systemd, оптимизации коллекторов, безопасности, интеграции с Prometheus, советах по повышению производительности и полезных проверках для повседневной работы.

Центральные пункты

  • Установка и запуск службы с помощью собственного модуля systemd
  • Коллекционер выбирать целенаправленно, снижать нагрузку на метрику
  • Безопасность путем открытия портов и использования прокси
  • Прометей Скрейпы, оповещения и хранение
  • Производительность через интервалы, шардинг, очистку

Что такое Node Exporter?

Я установил Узел Установите Exporter на каждом хосте под Linux для предоставления системных метрик в формате Prometheus. Этот демон предоставляет данные о загрузке ЦП, общей загрузке системы, оперативной памяти, свопе, файловых системах, сети, а также (по желанию) данные о systemd и процессах. Я обращаюсь к конечной точке через HTTP /метрики и вижу понятные временные ряды, которые Prometheus циклически извлекает. Такой подход подходит для гетерогенных парков серверов и остается прозрачным благодаря модели «pull». Мне удобно чёткое разделение: экспортер собирает данные, Prometheus хранит и анализирует их.

Обзор архитектуры: как Node Exporter и Prometheus взаимодействуют друг с другом

Я запускаю экспортер на порту 9100, управляю коллекторами и настраиваю периодический скрапинг Prometheus. Принцип «pull» упрощает работу с брандмауэрами, поскольку мне нужно открыть доступ только от Prometheus к хосту. Grafana или аналогичные решения для визуализации затем подключаются к Prometheus и наглядно отображают значения. В производственных средах я использую несколько серверов Prometheus для разделения обязанностей. Таким образом я сокращаю пути, четко разграничиваю роли и обеспечиваю прозрачность управления.

Установка под Linux: аккуратно и повторяемо

Я загружаю соответствующий бинарный файл для linux-amd64 или целевую архитектуру и добавьте её в соответствии с /usr/local/bin/. Затем я создаю системного пользователя без логина, например node_exporter, и закреплю права владения за файлом Binary. Для автоматического запуска я создам модуль systemd в каталоге /etc/systemd/system/ с помощью простого параметра ExecStart и политики перезапуска. После systemctl daemon-reload Я активирую и запускаю службу, проверяю её состояние и вызываю curl http://localhost:9100/metrics . Так я сразу вижу, правильно ли отображаются показатели и работает ли сервис так, как положено.

Node Exporter как служба systemd: основные настройки

Я определяю в модуле Пользователь и Group в качестве выделенного аккаунта, установи Тип=простой и четкий ExecStart. Стратегия перезапуска, такая как Перезапуск = при сбое помогает избежать кратковременных сбоев. При обновлениях я редактирую модуль или создаю файл-заменитель, чтобы изменения оставались отслеживаемыми. После каждой корректировки я выполняю daemon-reload и перезапусти службу. Я стараюсь, чтобы этот модуль был компактным, хорошо документированным и пригодным для повторного использования на серверах любого класса.

Порт и адрес списка: согласованность и безопасность

По умолчанию я слушаю на порту 9100, однако в случае конфликтов изменяйте порт в зависимости от конкретного проекта. Параметр --web.listen-address позволяет настраивать хост и порт, например 127.0.0.1:9200 при локальной разгрузке прокси. Единая схема портов позволяет избежать путаницы в больших командах. Я централизованно вношу изменения портов, чтобы брандмауэры и списки безопасности работали корректно. Порт ограничен серверами Prometheus и не имеет свободного выхода в Интернет.

Целенаправленная настройка Collector: только то, что действительно важно

Я выбираю Коллекционер намеренно, чтобы регулировать объем данных и время вычислений. Стандартные модули для процессора, памяти, файловых систем и сети, как правило, остаются активными. При необходимости я активирую специальные модули, такие как --collector.systemd или --collector.processes, чтобы более тщательно отслеживать сервисы и процессы. Нежелательные модули я отключаю с помощью --no-collector.X, чтобы Prometheus обрабатывал меньшее количество временных рядов. Я фиксирую сделанный выбор для каждой роли сервера, чтобы обеспечить единообразие в работе команды.

Textfile Collector: корректная передача собственных метрик

Я использую Textfile Collector для индивидуально Показатели, которые не предоставляются стандартными модулями. Каталог типа /var/lib/node_exporter/textfile_collector собирает .promФайлы в формате Prometheus. Скрипты выполняют операции атомарно, создавая временные файлы и заменяя их в конце, чтобы не появлялись незавершенные значения. Таким образом я передаю бизнес-статистику, статус пакетных заданий или длину очередей непосредственно в Prometheus. Я соблюдаю соглашения об именовании, чтобы обеспечить читаемость отчетов и дашбордов.

Безопасность в режиме реальной работы: доступ только для уполномоченных лиц

Я ограничиваю доступ к портам с помощью Брандмауэр постоянно отслеживаю источники сбора данных. Расположенный выше по цепочке обратный прокси при необходимости обеспечивает TLS или mTLS и осуществляет аутентификацию. Я запускаю сервис без прав root и назначаю минимальные права доступа к путям, где хранятся лог-файлы и текстовые файлы. В отдельных сетях я дополнительно обеспечиваю безопасность с помощью VPN или частных подсетей. Таким образом, подробная системная информация остается защищённой и доступна только инфраструктуре мониторинга.

Интеграция с Prometheus: скрапинг, метки, оповещения

Я кладу в prometheus.yml работу, подобную название_работы: node , введите подходящее scrape_interval (часто 15 с) и добавляю цели или обнаружение сервисов. Унифицированные метки (например, среда, роль, местоположение) упрощают фильтрацию и работу с дашбордами. Для частых анализов я определяю правила записи, тем самым снижая нагрузку на запросы ad hoc. Оповещения генерируются на основе агрегированных метрик, например, по загрузке ЦП, оперативной памяти, области подкачки, заполненности дисков и сетевым ошибкам. Для начала работы с анализом загрузки и пиковых нагрузок я рекомендую ознакомиться с моим кратким Анализ работы процессора и нагрузки, в котором типичные показатели объясняются с учетом практического опыта.

Мониторинг самого Node Exporter: доверие — это хорошо, а контроль — лучше

Я наблюдаю за Статус задания в Prometheus и настраиваю срабатывание оповещений, если хост не обновляется в течение длительного времени. Я регулярно проверяю версии экспортеров, чтобы своевременно использовать исправления ошибок и новые модули. Кроме того, я отслеживаю количество временных рядов на каждый хост, чтобы своевременно обнаружить, если какое-либо изменение в коллекторе приводит к увеличению нагрузки. На информационных панелях отображаются уведомления о последнем успешном сборе данных. Таким образом, я быстро выявляю сбои и реагирую на них без промедления.

Оптимизация производительности и масштабирование: контроль нагрузки

Я контролирую Интервалы в зависимости от размера и назначения среды: 15 секунд для ключевых систем, 30–60 секунд для менее критичных серверов. Благодаря выборочному подбору коллекторов я сокращаю количество метрик и время выполнения запросов. Свои метрики в текстовых файлах я поддерживаю в лаконичном виде, удаляю старые и присваиваю им единообразные имена. Если парк серверов значительно растёт, я распределяю нагрузку между несколькими экземплярами Prometheus и разделяю сферы ответственности. В приведённой ниже таблице представлены проверенные настройки и их влияние на работу системы.

Тема Настройка Эффект Подсказка
Интервал сбора данных 15 с / 30 с / 60 с Уменьшить количество скрейпов Загрузить Учитывать критичность по классам хостов
Подборка «Collector» только необходимые модули Сокращает временные ряды Документировать список по каждому ролю
Сборщик текстовых файлов компактные файлы .prom Снижение затрат на синтаксический анализ Писать лаконично, формулировать чётко
Кардинальность меток Проверить метки Предотвращает Взрыв сериалов Следует избегать использования идентификаторов и значений с высокой степенью изменчивости
Шардинг Разделить «Прометей» Масштабирует скрейпы и запросы Разделение обязанностей

Что касается систем хранения данных, я уделяю особое внимание показателям ввода-вывода и задержкам для каждого устройства и файловой системы. Хорошей отправной точкой послужит мое руководство Мониторинг задержек диска, который объединяет типичные цепочки симптомов и метрики. Я связываю эти значения с показателями ожидания и загрузки ЦП, чтобы точно выявить узкие места. Запросы я инкапсулирую в правила записи, чтобы информационные панели загружались быстро. Таким образом, анализ и эксплуатация остаются оперативными и наглядными.

Визуализация с помощью Grafana: четкое представление, быстрое реагирование

Я использую готовые информационные панели для CPU, ОЗУ, диск, сеть и systemd, но адаптирую их под свои метки. Панель обзора отображает статус, загрузку и хосты, вызывающие подозрения, а страницы с подробной информацией позволяют углубиться в детали. Я кратко описываю панели, чтобы каждый мог понять значение показателей. Селекторы переменных ускоряют переключение между хостами или ролями. Те, кто хочет получить полный обзор, найдут в разделе Стек мониторинга с Grafana Рекомендации по созданию высокопроизводительного стека.

Четкая организация пакетов и управление версиями: обеспечение воспроизводимости

Я обеспечиваю воспроизводимость установок, явно фиксируя версии и проверяя контрольные суммы. Для настроек Fleet я упаковываю Node Exporter в виде внутреннего пакета (например, DEB/RPM) с фиксированной структурой путей и системным пользователем. Обновления я внедряю поэтапно и документирую используемую версию для каждой среды. Там, где это уместно, я сохраняю параметры запуска в файле EnvironmentFile, чтобы изменения не вносились непосредственно в файл модуля и оставались четко отслеживаемыми по версиям. Я сначала тестирую новые релизы в тестовой среде, прежде чем распространять их повсеместно.

Пример конфигурации: модуль systemd и укрепление безопасности

Я использую простую, но надежную модуль и при необходимости дополняю настройки закалки:

[Unit]
Description=Prometheus Node Exporter
After=network-online.target
Wants=network-online.target

[Service]
User=node_exporter
Group=node_exporter
ExecStart=/usr/local/bin/node_exporter \
  --web.listen-address=0.0.0.0:9100 \
  --collector.systemd \
  --collector.processes \
  --collector.filesystem.fs-types-exclude='^(tmpfs|devtmpfs|overlay|squashfs)$' \
  --collector.filesystem.mount-points-exclude='^/(sys|proc|dev|run)($|/)'
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Для продуктивных хостов я дополнительно укрепляю безопасность службы, не ограничивая при этом права на чтение /proc и /sys сломать. Я помещаю это в качестве drop-in (/etc/systemd/system/node_exporter.service.d/hardening.conf) на:

[Service]
NoNewPrivileges=true
PrivateTmp=true
PrivateDevices=true
ProtectSystem=strict
ProtectHome=true
ProtectControlGroups=true
ProtectKernelTunables=true
ProtectKernelModules=true
LockPersonality=true
MemoryDenyWriteExecute=true
CapabilityBoundingSet=
AmbientCapabilities=
RestrictNamespaces=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
SystemCallFilter=@system-service

После каждого изменения: systemctl daemon-reload и чистый перезапуск. Для отладки я временно включаю более высокий уровень логгирования с помощью --log.level=debug, чтобы просмотреть сведения о сборщике и парсере.

Доработка Collector для практических условий

Я балансирую видимость и нагрузку с помощью целевых фильтров:

  • Файловые системы: я исключаю псевдо-ФС и временные монтирования (--collector.filesystem.fs-types-exclude и --collector.filesystem.mount-points-exclude), чтобы избежать бессмысленных серий.
  • Процессы: --collector.processes предоставляет полезные итоговые данные, но генерирует дополнительные серии. Я включаю его только на хостах, где количество процессов служит индикатором (например, пакетные или рабочие узлы).
  • Сеть: The netstat-Collector может генерировать большое количество меток в зависимости от ядра и подключений. Я проверяю кардинальность в промежуточном хранилище и, в противном случае, целенаправленно отключаю его.
  • Давление/PSI: Современные ядра предоставляют показатели давления (--collector.pressure, часто включено по умолчанию). Я использую их для раннего выявления узких мест в работе ЦП, ввода-вывода и памяти.
  • NVMe/RAID: специальные коллекторы (например,. nvme) я включаю только там, где есть необходимое оборудование — так панели мониторинга остаются информативными.

Я выборочно проверяю коллекторы с помощью параметра запроса collect[], не изменяя начальные параметры. Пример: curl 'http://localhost:9100/metrics?collect[]=systemd&collect[]=processes'. Так я сразу вижу, какое влияние оказывают отдельные коллекционеры.

Textfile Collector: передовой опыт из практики эксплуатации

Я записываю метрики по отдельности: сначала создаю скрипты .tmp-файлы и в конце заменяем их с помощью mv. Каждый файл содержит только одну логическую группу и занимает не более нескольких килобайт. Обработку временных меток я доверяю Prometheus; самим файлам временные метки не нужны. Если я удаляю .prom-файла, соответствующие серии исчезнут после следующего сбора данных. Я документирую пространства имён (например,. business_*) и поддерживаю стабильные значения меток, чтобы контролировать кардинальность. Если значения сильно колеблются, я сглаживаю их уже в скриптах (например, с помощью усреднения), чтобы панели инструментов работали более плавно.

Безопасность: варианты брандмауэров и прокси-серверов

В первую очередь я делаю ставку на сегментацию сети: экспортер прослушивает только внутренние соединения, а брандмауэр пропускает исключительно IP-адреса Prometheus. Пример с nftables на одном хосте:

table inet filter {
  chain input {
    type filter hook input priority 0;
    ct state established,related accept
    iif lo accept
    tcp dport 9100 ip saddr { 10.0.0.10, 10.0.0.11 } accept
    tcp dport 9100 drop
  }
}

Если требуется шифрование, я устанавливаю перед ним локальный обратный прокси-сервер, который обрабатывает TLS или mTLS и подключается только к 127.0.0.1:9100 перенаправляет. В качестве альтернативы я использую — при условии, что версия это поддерживает — встроенную веб-конфигурацию экспортера через --web.config.file, чтобы аутентификация и сертификаты по-прежнему управлялись централизованно. В принципе, служба работает без привилегий, с минимальными правами на свой каталог и записывает данные только там, где это действительно необходимо (например, путь к текстовому файлу).

Интеграция с Prometheus в деталях: переименование, ограничения, оповещения

Я стараюсь, чтобы задания были лаконичными и унифицированными. Практичное задание с ограничениями и поддержкой меток выглядит следующим образом:

scrape_configs:
- job_name: node
  scrape_interval: 30s
  scrape_timeout: 10s
  sample_limit: 10000
  static_configs:
  - targets: ['host1:9100','host2:9100']
    labels:
 env: prod
 role: web
  relabel_configs:
  - source_labels: [__address__]
    target_label: instance
    regex: '([^:]+)(?::\d+)?'
    replacement: '$1'
  metric_relabel_configs:
  - source_labels: [device]
    regex: '^(ram|loop|zram|dm-).*'
    action: drop

С metric_relabel_configs Я снижаю кардинальность, отбрасывая устройства с низкой информативной ценностью. Для сигналов тревоги я использую простые, но надежные правила:

группы:
- name: node_basic
  правила:
  - оповещение: NodeDown
    выражение: up{job="node"} == 0
    период: 5 м
    метки: {серьёзность: критическая}
  - alert: HighCPU
    expr: 1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) > 0.9
    for: 10m
    labels: {severity: warning}

Для мониторинга нагрузки я использую scrape_duration_seconds и scrape_samples_scraped на каждую цель. Так я могу определить, не приводит ли дополнительно активированный коллектор к непропорциональному увеличению времени сбора или серийного номера.

Работа в контейнерах и Kubernetes

Я развертываю Node Exporter в контейнерах рядом с хостом, чтобы /proc и /sys оставались видимыми с хоста. Для этого я монтирую эти пути в контейнер в режиме «только для чтения» и использую hostNetwork для обеспечения согласованности портов. В Kubernetes я запускаю экспортер в виде DaemonSet на каждом узле и строго ограничиваю контексты безопасности (без ненужных привилегий). При выборе коллекторов я учитываю среды Cgroup-v2; важные коллекторы, такие как meminfo, давление, файловая система и процессор остаются базовыми. После развертывания я проверяю с помощью прямого скручивание проверить на Pod, действительно ли считываются ожидаемые пути метрик хоста.

Устранение неполадок и обеспечение качества

  • Подключение: я проверяю curl -s http://localhost:9100/metrics | head на целевом хосте и, с точки зрения Prometheus, доступность через открытый порт.
  • Обзор для коллекционеров: О collect[] Я тестировал отдельные коллекторы, не изменяя глобальную конфигурацию.
  • Журналы: временно повышаю уровень регистрации (--log.level=debug), чтобы устранить ошибки разбора или проблемы с правами доступа в /proc//sys видимым.
  • Управление версиями: с помощью node_exporter_build_info Я сравниваю версии и целенаправленно планирую обновления.
  • Обзор сериалов: «Метрика» scrape_samples_scraped{job="node"} Я использую это в качестве приблизительного показателя количества серий на каждый хост. Всплеск вверх указывает на появление новых коллекторов или на «взрыв» меток.
  • Тайм-ауты: Я считаю, что scrape_timeout ниже scrape_interval и наблюдаю scrape_timeout_seconds, чтобы своевременно выявлять узкие места.

Вместимость и хранение: планирование вместо неожиданностей

Я настраиваю хранение данных в Prometheus в зависимости от сценария использования: короткие интервалы для основных систем, более длительное хранение для анализа трендов. По мере роста парка оборудования я осуществляю горизонтальное масштабирование с помощью шардинга (например, по местоположению или команде) и разделяю нагрузку на запросы и поступление данных. При необходимости я дополнительно записываю метрики в компонент долгосрочного хранения с помощью Remote-Write. Я активно слежу за кардинальностью и последовательно удаляю неиспользуемые метрики или метки — особенно в случае метрик из текстовых файлов, которые могут быстро разрастаться.

Практические советы для разнородных автопарков

  • Хосты, поддерживающие только IPv6: Я присоединяюсь [::]:9100 и обеспечьте соответствующие правила брандмауэра.
  • Специализированное оборудование: я включаю коллекторы, специфичные для конкретного оборудования, только в тех случаях, когда это целесообразно, и фиксирую различия в профилях ролей.
  • Постепенные обновления: я обновляю партиями и при этом слежу за ситуацией вверх, scrape_duration_seconds и scrape_samples_scraped, чтобы сразу выявлять регрессии.
  • Документация: Я фиксирую фактические параметры запуска для каждой роли. Это позволяет избежать споров и облегчает анализ ошибок.

Вкратце: мой график занятий

Я устанавливаю Узел Экспортирую данные как отдельный сервис systemd, настраиваю порт и адрес прослушивания и строго контролирую доступ. Коллекторы я выбираю осознанно, добавляю необходимые значения через текстовый файл коллектора и ограничиваю количество метрик. В Prometheus я устанавливаю разумные интервалы, обновляю метки, определяю правила записи и настраиваю оповещения для ЦП, ОЗУ, дисков и сети. Я сам контролирую работу экспортера, планирую обновления и регулярно проверяю количество серий на каждом хосте. Благодаря наглядной визуализации я быстрее реагирую, своевременно выявляю тенденции и обеспечиваю надёжность мониторинга своих Linux-серверов в повседневной работе.

Текущие статьи

Сервер CloudLinux в центре обработки данных с панелью мониторинга на переднем плане
Администрация

Как правильно интерпретировать результаты проверки работоспособности CloudLinux: практическое руководство для администраторов

Узнайте, как правильно интерпретировать результаты проверок работоспособности CloudLinux для ЦП, оперативной памяти, ввода-вывода и процессов, а также как оптимально интегрировать ключевое слово «cloudlinux health check» в вашу систему мониторинга.

Центры обработки данных с активной защитой с помощью межсетевого экрана веб-приложений для сайтов на WordPress
Безопасность

Imunify360 WAF: виртуальное исправление уязвимостей для обеспечения безопасности проектов на WordPress

Узнайте, как Imunify360 WAF с функцией виртуального патчинга защищает ваши сайты на WordPress и блокирует уязвимости — включая практические преимущества для безопасного хостинга.

Серверные стойки с символически изолированными веб-сайтами в среде CloudLinux
Безопасность

CloudLinux Site Isolation: более высокий уровень безопасности по сравнению с CageFS в условиях виртуального хостинга

Функция CloudLinux Site Isolation обеспечивает дополнительную защиту в условиях виртуального хостинга по сравнению с CageFS за счет изоляции отдельных веб-сайтов в рамках одной учетной записи. Разделение на основе доменов значительно повышает уровень безопасности CloudLinux и эффективно защищает мультисайтовые установки.