#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.