#python #nginx #tornado #uwsgi #prometheus
#python #nginx #торнадо #uwsgi #prometheus
Вопрос:
Моя задача — настроить мониторинг с помощью Prometheus. Вся идея заключается в следующем: каждый раз, когда Prometheus выполняет очистку от конечной точки (т. Е. делает запрос GET), на веб-сервере (теперь это просто Tornado) запускается соответствующий обработчик (скрипт Python), который выполняет задание и возвращает показатели, которые собирает Prometheus.
Кажется, все в порядке, но проблема в том, что я использую Tornado из-за его асинхронности, и это вызывает проблемы (ошибки, трудно обрабатываемые исключения и т.д.), Плюс не так много библиотек, которые хорошо работают с asyncio, поэтому чаще всего мои приложения не работают асинхронно, они просто запускают код в потоках.
Итак, чего я хочу. Я хочу настроить свой веб-сервер для управления запросами Prometheus не асинхронно, а с использованием чего-то вроде многопроцессорной обработки. Я представляю каждый запрос от Prometheus как отдельное соединение от пользователя, и я хочу обработать его отдельно от других подключений (в идеале — в отдельном процессе интерпретатора). Я предполагаю, что этого можно достичь с помощью набора веб-серверов (nginx), сервера приложений Python (uWSGI) и веб-фреймворка (Flask или другого). Как это выглядит:
- Prometheus выполняет запрос GET, скажемhttp://localhost/something_i_watch/metrics
- nginx перенаправляет его на соответствующую конечную точку
- сервер приложений и веб-платформа выполняют работу и возвращают показатели
Преимущество: каждый запрос обрабатывается отдельно (это отдельный процесс интерпретатора Python), у нас есть много возможностей для масштабирования, быстрые запросы не ждут медленных, код Python синхронен.
Это хорошая идея для меня, или это может быть лучше? Может быть, я чего-то не хватает? Извините за беспорядок, если он там, и спасибо за ваши предложения.