Настройка Node Exporter

DockerBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы расширите мониторинг на внешнюю службу. Вы настроите Node Exporter, экспортер Prometheus для метрик оборудования и операционной системы. Настройка будет использовать работающий контейнер Prometheus из предыдущей лабораторной работы. Вы запустите контейнер Node Exporter и добавите его как новую цель в ваш prometheus.yml. К концу этой лабораторной работы вы сможете запрашивать системные метрики на уровне хоста в пользовательском интерфейсе Prometheus.

Загрузка Docker-образа Node Exporter

На этом шаге вы загрузите официальный образ Docker для Node Exporter. Node Exporter — это экспортер Prometheus, который предоставляет широкий спектр метрик оборудования и ядра с хост-машины.

Для начала загрузите образ prom/node-exporter из Docker Hub. Откройте терминал и выполните следующую команду:

docker pull prom/node-exporter

Эта команда обращается к реестру Docker Hub и загружает последнюю версию образа Node Exporter на вашу локальную машину. Вы увидите вывод, показывающий прогресс загрузки каждого слоя образа.

Ожидаемый вывод:

Using default tag: latest
latest: Pulling from prom/node-exporter
Digest: sha256:a5579e72377a6053359058893b80f4f47c55d761457d685343b8e797859a159b
Status: Image is up to date for prom/node-exporter
docker.io/prom/node-exporter

Запуск контейнера Node Exporter на порту 9100

Теперь, когда у вас есть образ, давайте запустим Node Exporter в виде контейнера. Мы откроем его метрики на порту 9100, который является портом по умолчанию для Node Exporter.

Выполните следующую команду, чтобы запустить контейнер и поместить его в ту же сеть Docker, что и Prometheus:

docker run -d -p 9100:9100 --name node-exporter --network monitoring prom/node-exporter

Разберем эту команду:

  • -d: Запускает контейнер в режиме отсоединения (detached mode), то есть он работает в фоновом режиме.
  • -p 9100:9100: Сопоставляет порт 9100 хоста с портом 9100 контейнера.
  • --name node-exporter: Присваивает контейнеру запоминающееся имя для удобства обращения.
  • prom/node-exporter: Образ, который будет использоваться для создания контейнера.

Вы можете проверить, что контейнер запущен, с помощью команды docker ps:

docker ps

В списке запущенных контейнеров вы должны увидеть node-exporter. При желании вы можете подтвердить подключение к сети с помощью:

docker inspect node-exporter --format '{{.HostConfig.NetworkMode}}'

Вывод должен быть monitoring.

Ожидаемый вывод:

CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            prom/node-exporter     "/bin/node_exporter"     A few seconds ago   Up a few seconds   0.0.0.0:9100->9100/tcp, :::9100->9100/tcp   node-exporter
...            prom/prometheus        "/bin/prometheus --c…"   About a minute ago   Up about a minute   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus

Обновление prometheus.yml для добавления цели Node Exporter

На этом шаге вы настроите Prometheus для сбора метрик с недавно запущенного контейнера Node Exporter. Это делается путем редактирования файла конфигурации prometheus.yml для добавления новой задачи сбора (scrape job).

Сначала откройте файл prometheus.yml, расположенный в каталоге вашего проекта, с помощью редактора nano:

nano ~/project/prometheus.yml

Теперь добавьте новую конфигурацию задачи для Node Exporter в раздел scrape_configs. Ваш окончательный файл должен выглядеть следующим образом. Убедитесь, что отступы правильные, так как YAML чувствителен к ним.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["prometheus:9090"]

  - job_name: "node_exporter"
    static_configs:
      - targets: ["node-exporter:9100"]

Вот что делает новый блок:

  • job_name: 'node_exporter': Присваивает имя этой задаче сбора, которое будет использоваться для маркировки собранных метрик.
  • targets: ['node-exporter:9100']: Указывает Prometheus, где найти Node Exporter. Мы используем имя контейнера, потому что Docker обеспечивает внутреннее разрешение DNS между контейнерами в одной сети. Имя хоста localhost ограничено каждым контейнером, поэтому его нельзя использовать для доступа к другим контейнерам.

После редактирования сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и затем Enter.

Перезапуск контейнера Prometheus с обновленной конфигурацией

Чтобы Prometheus загрузил новую конфигурацию, вам необходимо перезапустить его контейнер. Ранее настроенное монтирование тома гарантирует, что контейнер увидит обновленный файл prometheus.yml после перезапуска.

Выполните следующую команду, чтобы перезапустить контейнер Prometheus:

docker restart prometheus

Эта команда корректно останавливает, а затем запускает контейнер с именем prometheus. Через несколько секунд Prometheus будет работать с новой конфигурацией.

Теперь давайте проверим изменения в пользовательском интерфейсе Prometheus.

  1. В интерфейсе LabEx нажмите кнопку + (Новая вкладка), выберите Web Service и введите 9090 для порта.
  2. Когда откроется новая вкладка, вы должны увидеть стартовую страницу браузера выражений Prometheus (Prometheus Expression Browser).
  3. Нажмите меню "Status" в верхней навигационной панели, а затем выберите "Targets".
Страница целей Prometheus, показывающая статус UP

Теперь вы должны увидеть два перечисленных цели (targets): prometheus и node_exporter. Обе должны иметь состояние "UP", что указывает на то, что Prometheus успешно собирает метрики как от себя, так и от Node Exporter.

Запрос метрики node_cpu_seconds_total в пользовательском интерфейсе

Финальный шаг — подтвердить, что Prometheus успешно принимает метрики от Node Exporter, выполнив запрос.

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

node_cpu_seconds_total

Эта метрика представляет собой общее время в секундах, которое процессор провел в различных режимах (например, простой, пользовательский, системный).

Пользовательский интерфейс Prometheus, показывающий результаты запроса node_cpu_seconds_total

Нажмите кнопку "Execute". Если соединение установлено успешно, под графиком вы увидите таблицу результатов. Каждый результат соответствует различному ядру процессора и режиму работы. Отображение этих результатов подтверждает, что весь ваш конвейер мониторинга работает корректно: от сбора данных Node Exporter до приема и хранения Prometheus.

Вы можете переключаться между видами "Table" и "Graph" для визуализации данных.

Резюме

Поздравляем! Вы успешно расширили свою систему мониторинга, добавив внешний сервис. В этой лабораторной работе вы научились запускать официальный Prometheus Node Exporter в Docker-контейнере, настраивать экземпляр Prometheus для сбора метрик с этой новой цели (target) и проверять сбор данных, запрашивая метрики на уровне хоста. Это фундаментальный навык для построения комплексного стека наблюдаемости (observability stack), позволяющий получить глубокое представление о производительности и состоянии ваших систем.