Неделя, когда мониторинг показывал ноль
Воркеры были живы, панели показывали ноль скачиваний, а единственный сработавший алерт указывал не туда. Почему поиск целей в Prometheus молча возвращал пустой список и почему это не считалось ошибкой.
Симптом
Семь дней панели Grafana показывали ноль скачиваний, хотя воркеры были живы. Сработал ровно один
алерт: «воркеры пропали», по ветке absent(). Но воркеры были на месте.
Почему всё выглядело здоровым
Метрики воркеров собирались через docker discovery: Prometheus сам спрашивает у Docker, какие контейнеры есть, и ходит к ним за метриками. Если discovery возвращает пустой список, у Prometheus нет целей, а значит нет и неудачных опросов. Джоба не падает. Она просто пустая.
Причина
Встроенный в Prometheus клиент Docker, которым пользуется discovery, разговаривал с демоном по API версии 1.24. Демон принимал запросы только начиная с версии 1.40 и отвечал отказом. Отказ оседал внутри discovery и наружу не выходил ни как ошибка опроса, ни как упавшая джоба.
Исправление
Воркеры отдают метрики на фиксированных портах, и Prometheus опрашивает их по статическому списку. Правило алерта ждёт ровно три цели: если их меньше, это авария, а не «нет данных».
Цена решения записана рядом с ним: при изменении числа реплик нужно поправить диапазон портов, список целей и число в правиле. Возвращать discovery можно только после обновления Prometheus.