SystemdDoctor
служба не работает наблюдение сеть

Prometheus не собирает метрики: цель недоступна

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

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

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

  1. Служба слушает только петлевой адрес

    Отдающая метрики служба привязана к петлевому адресу, а сборщик обращается с другой машины. Соединения не будет.

  2. Порт закрыт брандмауэром

    Соединение отбрасывается, сборщик получает таймаут. Со стороны наблюдаемой машины при этом всё выглядит нормально.

  3. Сбор не успевает за отведённое время

    Если отдача метрик занимает больше таймаута сбора, цель помечается недоступной при работающей службе.

Диагностика

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

Отвечает ли цель и как быстро.

curl -s -o /dev/null -w "%{http_code} %{time_total}\n" http://узел:9100/metrics

На каком адресе слушает отдающая служба.

sudo ss -tlnp | grep :9100

Сообщения сборщика о неудачах сбора.

journalctl -u prometheus -n 30 --no-pager | grep -iE "scrape|target"

Решение

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

1. Служба слушает только петлевой адрес
Почему происходит
Отдающая метрики служба привязана к петлевому адресу, а сборщик обращается с другой машины. Соединения не будет.
Как проверить
Посмотрите, на каком адресе слушает служба.
sudo ss -tlnp | grep -E ":9100|:9090"
systemctl cat node-exporter 2>/dev/null | grep -i "web.listen"
Как исправить
Привяжите отдающую службу к нужному адресу или собирайте метрики через туннель. Открывать её во внешнюю сеть без ограничения доступа не стоит: метрики раскрывают устройство системы.
2. Порт закрыт брандмауэром
Почему происходит
Соединение отбрасывается, сборщик получает таймаут. Со стороны наблюдаемой машины при этом всё выглядит нормально.
Как проверить
Проверьте доступность порта со стороны сборщика.
timeout 5 bash -c "</dev/tcp/наблюдаемый-узел/9100" && echo открыт || echo закрыт
Как исправить
Откройте порт только для адреса сборщика. Правило для всей сети здесь не нужно.
3. Сбор не успевает за отведённое время
Почему происходит
Если отдача метрик занимает больше таймаута сбора, цель помечается недоступной при работающей службе.
Как проверить
Посмотрите время ответа и таймаут.
curl -s -o /dev/null -w '%{time_total}\n' http://наблюдаемый-узел:9100/metrics
grep -iE 'scrape_timeout|scrape_interval' /etc/prometheus/prometheus.yml 2>/dev/null
Как исправить
Увеличьте таймаут сбора или уменьшите объём отдаваемых метрик. Таймаут больше интервала сбора задавать нельзя.

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

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

prometheus[6500]: level=warn msg="Error on ingesting samples" scrape_pool=node target=http://10.0.0.5:9100/metrics err="Get \"http://10.0.0.5:9100/metrics\": dial tcp 10.0.0.5:9100: connect: connection refused"

# на наблюдаемой машине:
$ sudo ss -tlnp | grep :9100
LISTEN 0 4096 127.0.0.1:9100 0.0.0.0:* users:(("node_exporter",pid=980,fd=3))

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

Где встречается чаще всего

Источники

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