На главную

Разбор1 мин чтения

Неделя, когда мониторинг показывал ноль

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

Симптом

Семь дней панели Grafana показывали ноль скачиваний, хотя воркеры были живы. Сработал ровно один алерт: «воркеры пропали», по ветке absent(). Но воркеры были на месте.

Почему всё выглядело здоровым

Метрики воркеров собирались через docker discovery: Prometheus сам спрашивает у Docker, какие контейнеры есть, и ходит к ним за метриками. Если discovery возвращает пустой список, у Prometheus нет целей, а значит нет и неудачных опросов. Джоба не падает. Она просто пустая.

Причина

Встроенный в Prometheus клиент Docker, которым пользуется discovery, разговаривал с демоном по API версии 1.24. Демон принимал запросы только начиная с версии 1.40 и отвечал отказом. Отказ оседал внутри discovery и наружу не выходил ни как ошибка опроса, ни как упавшая джоба.

Исправление

Воркеры отдают метрики на фиксированных портах, и Prometheus опрашивает их по статическому списку. Правило алерта ждёт ровно три цели: если их меньше, это авария, а не «нет данных».

Цена решения записана рядом с ним: при изменении числа реплик нужно поправить диапазон портов, список целей и число в правиле. Возвращать discovery можно только после обновления Prometheus.

На главную