Детализация мониторинга приложений на Go до уровня программного кода
bakotech
  
Новости
Детализация мониторинга приложений на Go до уровня программного кода
24 июл 2018

Платформа Dynatarce объявила о полной детализации мониторинга приложений, написанных на языке программирования Go — до уровня программного кода, без необходимости модифицировать код самих приложений (OneAgent версии 1.145 и выше).

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

Приложения на Go являются уникальными, так как компилируются в двоично исполняемые файлы, которые запускаются CPU на аппаратной независимой платформе. У Go нет слоя абстракции виртуальной машины с определёнными параметрами для мониторинга, как у Java JVM или .NET CLR. Поэтому, Dynatrace OneAgent должен работать на уровне инструкций CPU для того, чтобы перехватывать вызовы функций Go. 

Dynatrace OneAgent для Go — уникальное по своим характеристикам решение. Это — единственное существующее решение для мониторинга приложений на Go без модификации исходного кода или перекомпиляции приложения.  

Также, команда Dynatrace выбрала Cloud Foundry Diego’s BBS (Bulletin Board System), чтобы показать новые возможности OneAgent. BBS является центральным хранилищем данных и оркеструет Diego кластер, использующий буфер протокола при пересылке HTTP запросов для коммуникации с другими частями сервиса Cloud Foundry. 

Пример обзора процессов ниже отображает один BBS-сервис, который запущен в рамках Cloud Foundry – уже с новыми HTTP-метриками.

Далее идет стандартная страница сетевых запросов.

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

Детализированный вид для поиска проблемных точек показывает выполнение программного кода для /v1/actual_lrps/start до выполнения функции StartActualLRP с помощью обработчика Go. Аббревиатура LRP показывает долгосрочный процесс (Long Running Process). Переходя глубже по пути выполнения StartActualLRP, можем видеть запросы ActualLRP к базе данных MySQL.

Далее детально рассматривается время отклика в рамках проблемной точки, определённой Dynatrace. 

Точка входа /v1/desired_lrp/desire.r2 запускает исходящий запрос в один из компонентов сервиса Cloud Foundry. Этот клиентский веб-запрос составляет большинство времени проблемного запроса. 

Проходя по списку компонентов можно увидеть детали LRP-запроса. Различные функции wrap и record показывают часто используемую схему обёртки обработчиков в лямбда-функции для выполнения программного кода перед и после использования функции обработчика.

Последним этапом этого путешествия в детали процессов BBS является Dynatrace CPU Profiler. Он позволяет детально разобрать программный код, запущенный вне контекста веб-запросов (к примеру, фоновые активности и планировщики).

Dynatrace OneAgent понимает, сколько программного кода выполнено и количество ресурсов CPU, использованных каждым веб-запросом. Задачи, выполняющиеся в фоновом режиме и запросы служб к CPU отслеживаются раздельно. К примеру, каждый пакет Go net/http производит новый Goroutine для каждого веб-запроса (точнее, для каждого нового подключения). Поэтому, Goroutine, исполняющий функцию обработки веб-запросов, отмечается, как принадлежащий к службам. Другие Goroutine, которые запускаются перед обработкой веб-запросов, также подразумеваются как часть выполнения служб и отмечаются. С другой стороны, Goroutine, которые не отмечены как принадлежащие к службам, определяются как фоновые активности. 

Результат такой категоризации фоновых активностей, в рамках проблемной точки, можно посмотреть ниже.

Имена функций в дереве большинства вызовов, показанных выше, отображают исполнение фоновых активностей. Можно определить дерево вызовов процесса BBS Converger, набор служб, которые эффективно выполняют рабочие задачи в рамках Goroutines, обработку веб-запросов на уровне подключения к сокетам, дерево вызовов ifrit, пакета управления процессами, который хостится на github.com.

Если у вас остались вопросы по решениям Dynatrace, пожалуйста, пишите нам на dynatrace@bakotech.com

К списку новостей      >