Рубрики
Без рубрики

Фляша Pandora: мониторинг приложения Python Web с Prometheus

Первоначально опубликовано на метрике. Мы ем много наших собственных догтей на метрикефе, мониторинг вашего обслуживания … Теги с DevOps, Python.

Первоначально опубликовано на Метрика Отказ

Мы ем много наших Собственный догпродукты на Метрика Мониторинг наших услуг с выделенным кластером, на котором работает одно и то же программное обеспечение.

Это действительно хорошо сработало для нас в течение многих лет: как наш собственный клиент, мы быстро обнаружили вопросы в нашем различном проглатывании, хранениях и услугах по оказанию услуг. Это также приводы к Прозрачность состояния обслуживания Наши клиенты любят.

Недавно мы работаем над новым Prometheus предложение. Еда правильные догпродукты здесь означает интеграцию мониторинга PROMETHEUS с нашими (в основном Python ) стек Backend.

Этот пост описывает, как мы сделали это в одном случае, с полностью обработанным примером мониторинга простого Колбу Приложение работает под uwsgi. + nginx. . Мы также обсудим, почему он остается удивительно вовлеченным, чтобы получить это право.

ПРОМЕТЕУС “ПРЕДПРЕСТОР и Главное вдохновение – Google Borgmon Отказ

В своей родной среде Borgmon повсеместно повсеместно и простым Открытие услуг : Мониторизованные услуги управляются Borg Так легко найти e.g. все рабочие места, работающие на кластере для конкретного пользователя; Или для более сложных развертываний, все подзадачи, которые вместе составляют работу.

Каждый из них может стать одной целью для Borgmon для аналогичных данных с помощью конечных точек VIA/VARZ, аналогичных для прометея/метрик. Каждый, как правило, многопоточный сервер, написанный на C ++, Java, Go или (менее часто) Python.

Прометей наследует многие допущения Боргмона о своей среде. В частности, клиентские библиотеки предполагают, что метрики поступают из различных библиотек и подсистем, в нескольких потоках выполнения, работающих в общем адресном пространстве. На стороне сервера PROMETHEUS предполагает, что одна цель – одна (вероятно) многопоточная программа.

Эти предположения разбиваются во многих развертываниях без Google, особенно в мире Python. Вот общий (например, использование Django или Колбу бежать под WSGI Сервер приложений, который распространяет запросы на нескольких рабочих, каждый из которых является процессом, а не нитью.

В наивном развертывании прометея Python Client Для приложения для колбы, работающих под UWSGI, каждый запрос от сервера PROMETHEUS к/Metrics может ударить другой рабочий процесс, каждый из которых экспортирует свои собственные счетчики, гистограммы и т. Д. Полученные данные мониторинга – мусор.

Например, каждое царапание определенного счетчика вернет значение для одного работника, а не всей работы: значение переходит повсюду повсюду и говорит вам ничего полезного о приложении в целом.

Амит саха Обсуждается те же проблемы и различные решения в Подробная запись Отказ Мы следуем варианту № 2: клиент Prometheus Python включает в себя Многопрокатной режим Предназначен для обработки этой ситуации, с боевик Быть мотивирующим примером сервера приложений.

Это работает, разделяя каталог MMAP () ‘D-словари во всех процессах в приложении. Затем каждый процесс делает математику, чтобы вернуть общий взгляд на метрики всего приложения, когда она соскабливается PROMETHEUS.

Это имеет какой-то «заголовок» Недостатки, перечисленные в документах : Нет. Per-Process Python Metrics бесплатно, отсутствие полной поддержки определенных типов метрических типов, немного сложного датчика и т. Д.

Также трудно настроить конец к концу. Вот что нужно и как мы достигли каждой части в нашей среде; Надеюсь, это Полный пример поможет кому-нибудь делать подобную работу в будущем.

  1. Общий каталог должен быть передан в процесс в качестве переменной среды, PROMETHEUS_MULTIPROC_DIR Отказ Нет проблем: мы используем UWSGI env Возможность пройти в: см. Uwsgi.ini Отказ

  2. Общий каталог клиента должен быть очищен через перезагрузки приложения. Это было немного сложно выяснить. Мы используем один из UWSGI Харкодируемые крючки , Exec-Asap, до EXEC Shell Script Сразу после прочтения файла конфигурации и прежде чем делать что-либо еще. Посмотреть Uwsgi.ini Отказ Наш скрипт Удаляет и воссоздает Общий каталог данных PROMETHEUS клиента. Для того, чтобы быть уверенным в правильных разрешениях, мы запускаем UWSGI под руководитель как root и падение приложений в пределах UWSGI.

  3. Приложение должно настроить многопроцентный режим Python клиента. Это в основном вопрос Следуя документам , что мы сделали через Saha’s Post : см. Metrics.py Отказ Обратите внимание, что это включает в себя некоторые аккуратные промежуточное программное обеспечение Экспорт метрик прометея для статуса ответа и задержки.

  4. UWSGI должен настроить среду приложения, чтобы приложения загружались после вилка () Отказ По умолчанию UWSGI пытается сохранить память, загрузив приложение, а затем вилка () ‘ing Отказ Это действительно имеет Копировать на писать Преимущества и могут сэкономить значительное количество памяти. Однако, похоже, вмешивается в эксплуатацию многопроцессового режима клиента – возможно, потому что есть некоторые Блокировка до вилки () Сюда? Uwsgi’s Опция ленивых приложений Позволяет загрузить приложение после наложения, что дает нам более чистая среда.

Так что это вообще, это приводит к работе /Метрики Конечная точка для нашего приложения для колбы работает под UWSGI. Вы можете попробовать полный рабочий пример в нашем Pandoras_flask Demo Отказ

Обратите внимание, что в нашей демонстрации мы обнаруживаем конечную точку метрики на Различный порт Для правильного приложения – это облегчает доступ к нашему мониторингу без удаления пользователей.

В наших развертываниях мы также используем uwsgi_exporter Чтобы получить больше статистики из самого UWSGI.

Саха Блог пост Отложит ряд альтернатив, с нажимающимися метриками через местный statsd как благоприятный раствор. Это на самом деле не хоп, мы предпочитаем брать.

В конечном итоге, бегая все под контейнерной оркесторией, как Кубернаны предоставит родную среду, в которой прометеус сияет, но это большой шаг, просто чтобы получить другие преимущества в существующем стеке приложений Python.

Вероятно, самый прометечный промежуточный шаг состоит в том, чтобы зарегистрировать каждый подпрограмм отдельно в виде соскоба цели. Это подход, принятый Django-Prometheus Хотя подход «Диапазон портов» немного хакей.

В нашей среде мы могли (и еще можно) реализовать эту идею с чем-то вроде:

  1. Запуск веб-сервера в ниде в каждом процессе, прослушивании на эфемерном порту и обслуживании /Метрики Запросы;
  2. Наличие регистров веб-сервера и регулярно обновляю его адрес (например, имя хоста: 32769) в коротком TTL etcd Путь – мы используем etcd уже для большинства наших услуг Discovery необходимо;
  3. Использование Обнаружение обслуживания на основе файлов в Prometheus, чтобы найти эти цели и соскребать их как отдельные лица.

Мы думаем, что этот подход меньше, чем используя многопроцентный режим клиента Python, но он поставляется со своими сложными слоями.

Стоит отметить, что наличие одной цели на одного работника способствует чем-то из взрыва временных рядов. Например, в этом случае единая метрика гистограммы по умолчанию для отслеживания времени отклика от клиента Python на 8 рабочих будет производить около 140 индивидуальных временных рядов, прежде чем умножить другими этикетками, которые мы могли бы включить. Это не проблема для прометея для обработки, но он добавляется (или вероятно, умножна), когда вы масштабируетесь, поэтому будьте осторожны!

На данный момент экспортные метрики PROMETHEUS из стандартного стека Python Web App немного связан, независимо от того, какую дорогу вы берете. Мы надеемся, что этот пост поможет людям, которые просто хотят собираться со своими существующими nginx + Uwsgi + Колбу Программы.

Поскольку мы работаем больше сервисов под оркесторированием контейнера – то, что мы намерены делать, мы ожидаем, что станет легче интегрировать мониторинг прометея с ними.

Установленные пользователи PROMETHEUS могут понравиться посмотреть наш Хостел Прометей Предлагая – если вы хотите демонстрацию, пожалуйста связаться Действительно

Автор Cian Synnott, Programmer в Метрика Отказ

Оригинал: “https://dev.to/bbhnn/pandora-s-flask-monitoring-a-python-web-app-with-prometheus-540p”