Статьи

Мониторинг самоуничтожающихся приложений с помощью Prometheus

Не упустите свои самоуничтожающиеся приложения!

Prometheus — это набор инструментов для мониторинга и оповещения системы с открытым исходным кодом. Данные, относящиеся к мониторингу, хранятся в ОЗУ и LevelDB, тем не менее, данные могут храниться в других системах хранения, таких как ElasticSearch, InfluxDb и другие, https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage

У Prometheus также могут быть плагины оповещения, которые будут уведомлять заинтересованные лица об определенных событиях, таких как нарушение некоторых SLA (Соглашение об уровне обслуживания). В этом посте мы увидим, как настроить коллекторы Prometheus и их варианты использования.

Вам также может понравиться: Мониторинг с помощью Прометея

Генерал Прометей Развертывание

После развертывания Prometheus он настроен на очистку данных от некоторой цели, указанная конечная точка предоставляет данные, относящиеся к метрикам, и предоставляет несколько конфигураций, которые можно использовать для очистки данных с определенного сервера или набора серверов. Например, мы можем настроить использование конфигурации EC2, чтобы Prometheus мог автоматически выполнять автоматическое масштабирование.

Каждый сервер приложений / экземпляр должен хранить данные, относящиеся к этой службе, до вызова API очистки. Конечная точка очистки будет сбрасывать данные в формате, понятном Прометею. Требуется хранение данных в локальном хранилище, что означает, что нам нужно хранить данные, связанные с метриками, в памяти приложения или предоставлять какую-то общую систему хранения. Хранение данных в памяти приложения имеет свои плюсы и минусы

Pros

  • Не требует интеграции с другой системой хранения
  • Нет коммуникационных накладных расходов

Cons

  • При перезапуске приложения данные теряются
  • Объем памяти увеличивается с увеличением количества точек данных

Обработка HTTP-запросов

На приведенном выше рисунке клиентский запрос проходит через Интернет и достигает балансировщика нагрузки, который перенаправляет запрос на определенный сервер.

Каждый сервер обрабатывает HTTP-запрос по-разному, в зависимости от языка программирования разработки приложений и серверного программного обеспечения, такого как Apache2, Nginx, Tomcat и т. Д. Существует два основных варианта: Muiltiprocess на сервере может быть заранее запущено N экземпляров приложения, или же он может создать новый процесс по требованию, из-за ограничений ресурсов на сервере после обслуживания запроса экземпляр приложения уничтожается (приложения Python, Php, Ruby и т. д.).

Threading у нас есть только один экземпляр приложения и несколько N потоков обработки запросов, каждый запрос передается одному из потоков обработки запросов, если у нас достаточно ресурсов для обслуживания нового запроса (приложения Java, Go, Ruby и т. д.). Другой может быть комбинацией этих двух, в которой у нас будет N (> 0) число запущенных экземпляров приложения, и каждый из них сможет обработать запрос в определенном потоке.

Самоуничтожающиеся приложения

Самоуничтожающиеся приложения уничтожаются автоматически, как приложение веб-сервера Multprocess. Процесс может быть остановлен, как только запрос будет обработан сервером.Бессерверное приложение, также называемое FaaS  (функция как услуга), является еще одним примером. Бессерверные экземпляры создаются автоматически на основе некоторых триггеров / событий.

События могут быть разных типов, например, при размещении заказа создается приложение без сервера для обработки выполнения, AWS предоставляет множество способов инициировать вызов функции для различных типов событий, например, когда какой-либо элемент изменяется в DynamoDB, затем генерируется событие, при добавлении нового элемента в очередь SQS запускает функцию, запускает функцию в указанное время.

После того, как событие обработано функцией, экземпляр может быть немедленно завершен или может использоваться повторно в течение некоторого времени, например, 10 минут. Как правило, разработчики не контролируют завершение экземпляра без сервера, как в случае обработки HTTP-запроса, когда новый процесс может быть остановлен после обработки запроса клиента.

Приложение, которое имеет только один экземпляр приложения, может обеспечить конечную точку очистки Prometheus без каких-либо проблем, поскольку оно может хранить данные в одном экземпляре приложения и совместно использовать их в нескольких потоках.

Приложение, созданное по требованию, имеет проблему, так как данные будут разбросаны по нескольким экземплярам, ​​и, как мы обсуждали, экземпляр будет уничтожен в какой-то момент времени, что означает, что данные также будут потеряны, в противном случае нам потребуются некие агрегаторы это объединит данные из этих экземпляров и сохранит их в некоторой общей области памяти. Есть много способов решить вторую проблему, например, Prometheus Pushgateway, экспортер Prometheus.

Прометей с пушгейтом

На рисунке выше представлены два типа приложений: Приложение 1 и Приложение 2. Любое из них может быть приложением без сервера или несколькими многопроцессорными веб-приложениями.

Pushgatway хранит данные во внутреннем хранилище данных, и Prometheus удаляет их в соответствии с настройками. Это решает проблему хранения данных приложения, но это приводит к еще одной проблеме единой точки отказа, если настроен только один экземпляр Pushgatway.

В любом случае Pushgatway переходит в плохое состояние, такое как аппаратный сбой, проблема с сетью от клиента к push-шлюзу, или он не может справиться с высокой пропускной способностью, тогда все метрики будут потеряны. Pushgateway следует рассматривать в качестве последнего средства при развертывании, как описано в документе

Мы рекомендуем использовать Pushgateway только в определенных ограниченных случаях. Есть несколько ловушек при слепом использовании Pushgateway вместо обычной модели тяги Прометея для сбора общих метрик:

  • При мониторинге нескольких экземпляров через один Pushgateway, Pushgateway становится одновременно единственной точкой отказа и потенциальным узким местом.
  • Вы теряете автоматический мониторинг работоспособности Прометея с помощью upметрики (генерируемой при каждой очистке).
  • Pushgateway никогда не забудет серию, переданную ему, и будет выставлять их Прометею навсегда, если только эти серии не будут удалены вручную через API Pushgateway.

Ссылка: https://prometheus.io/docs/practices/pushing/

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

Из-за вышеуказанных ограничений нам следует рассмотреть возможность использования других альтернатив, таких как Node exporter , StatsD exporter , Graphite Exporter . Все эти три экспортера развертываются на главном компьютере вместе с кодом приложения, и данные собираются в экземпляре экспортера.

Узел Экспортер

Node exporter является одним из рекомендованных экспортеров, так как он может экспортировать информацию о хост-системе, а также ARP, CPU, использование диска, информацию Mem, текстовый файл. Текстовый файл является интересной частью экспортеров, так как наше приложение должно записывать данные в текстовый файл, и этот текстовый файл будет экспортирован в Прометей.

Текстовый файл должен соответствовать форматированию текстовых данных Prometheus, код приложения будет продолжать добавлять данные в текстовый файл, которые будут экспортироваться экспортером. Чтобы использовать его, установите —collector.textfile.directory флаг на экспортере узлов. Сборщик проанализирует все файлы в этом каталоге, соответствующие глобусу, *.prom используя текстовый формат.

Ссылка: https://prometheus.io/docs/instrumenting/exposition_formats/#text-format-example


Простой текст