возможно ли заставить gunicorn повторно использовать pid при перезапуске рабочих?

#gunicorn #prometheus

#gunicorn #prometheus

Вопрос:

У меня проблемы с многопроцессорным режимом prometheus ( MultiProcessCollector ): каждый раз, когда gunicron worker перезапускается (например, по таймауту), он начинается с нового pid, и из-за этого prometheus создает новый файл для хранения метрик. Но когда собираются показатели, клиент prometheus проверяет все файлы. После рабочего дня моя /metrics/ конечная точка может реагировать так же медленно, как 2 секунды (и даже больше).

В документации Prometheus говорится, что удалять файл метрик небезопасно, но у меня есть идея удалить эти файлы, только если они не обновлялись в течение некоторого времени (например, 2 минуты), что означает, что связанный работник уже мертв. Сделайте это в child_exit крючке gunicorn. Но я боюсь, что prometheus потеряет некоторые данные после очистки, но, с другой стороны, он все еще знает о последнем счетчике после перезапуска приложения, поэтому эта часть сомнительна.

Есть еще идеи?

Ответ №1:

Это известная проблема с клиентской библиотекой Python Prometheus. Смотрите эту проблему https://github.com/prometheus/client_python/issues/568 например. Я бы сказал, дерзайте. Также подумайте о том, чтобы полностью отказаться от Gunicorn и вместо этого полагаться на реплики Uvicorn и container.