SystemdDoctor
служба не работает мониторинг порты

Экспортёр метрик не запускается: порт занят

Экспортёры метрик — простые службы, и почти все их отказы сводятся к занятому порту или неверному адресу привязки. Вторая по частоте причина — отсутствие прав на чтение системных данных при жёсткой изоляции.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Порт занят другим экземпляром

    Экспортёр мог быть установлен двумя способами: пакетом и вручную. Обе службы пытаются занять один порт.

  2. Указан адрес, которого нет на машине

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

  3. Изоляция закрывает доступ к системным данным

    Экспортёру нужны /proc и /sys. Параметры вроде ProtectProc=invisible или PrivateDevices=yes ломают сбор части метрик.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Кто занимает порт экспортёра.

sudo ss -tlnp | grep 9100

Отвечает ли экспортёр и отдаёт ли метрики.

curl -s localhost:9100/metrics | head -5

Сообщения при запуске.

journalctl -u node_exporter -n 30 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Порт занят другим экземпляром
Почему происходит
Экспортёр мог быть установлен двумя способами: пакетом и вручную. Обе службы пытаются занять один порт.
Как проверить
Посмотрите владельца порта и все связанные unit.
sudo ss -tlnp | grep 9100
systemctl list-unit-files "*exporter*" --no-pager
Как исправить
Оставьте один способ установки, лишнюю службу отключите полностью.
2. Указан адрес, которого нет на машине
Почему происходит
Привязка к конкретному адресу удобна для ограничения доступа, но при смене адресации ломает запуск.
Как проверить
Сравните адрес из ключей с адресами машины.
systemctl cat node_exporter | grep -i "web.listen"
ip -brief addr
Как исправить
Слушайте на нужном адресе, который действительно есть, либо ограничивайте доступ брандмауэром.
3. Изоляция закрывает доступ к системным данным
Почему происходит
Экспортёру нужны /proc и /sys. Параметры вроде ProtectProc=invisible или PrivateDevices=yes ломают сбор части метрик.
Как проверить
Посмотрите параметры изоляции и журнал.
systemctl show node_exporter | grep -E "Protect|Private"
journalctl -u node_exporter -n 30 --no-pager | grep -i "permission\|error"
Как исправить
Ослабьте точечно те параметры, которые мешают сбору нужных метрик.

Пример вывода

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

node_exporter[4500]: caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9100
node_exporter[4500]: caller=main.go:239 level=error err="listen tcp :9100: bind: address already in use"
systemd[1]: node_exporter.service: Main process exited, code=exited, status=1/FAILURE

Связанные ошибки

Источники

  • Документация Prometheus: node_exporter документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено двумя установленными экземплярами экспортёра.
    собственная проверка, systemd 255
    сверено 15 сентября 2026