Трейсинг

Трейсинг в модуле APM платформы наблюдаемости Proto Observability автоматически инструментирует код приложений, предоставляя углубленную аналитику исполнения вызовов, с корреляцией frontend с backend и детализацией до уровня кода и пользовательского опыта.

Что такое трейсинг (tracing)?

Трейсинг (трассировка, tracing) - это процесс отслеживания и записи детальной информации о выполнении приложения для целей исправления ошибок в его работе или неудовлетворительного времени отклика. Трейсинг позволяет разработчикам, командам DevOps и мониторинга анализировать время исполнения функций, весь путь прохождения запросов от сервиса к сервису (для микросервисных приложений), взаимодействие между различными частями системы и как результат оперативно находить узкие места в работе приложений и сервисов.

Ключевые понятия Tracing

Trace – слепок пути запроса. Содержит набор связанных span’ов, представляющих все шаги обработки запроса.

Span – операция, выполняемая в процессе запроса. Например, вызов базы данных или HTTP-запрос к микросервису. Трейсер присваивает уникальный идентификатор (Span ID), временные метки (начало и конец выполнения), метки (tags) и логи (logs) для предоставления детальной информации об исполнении запроса.

Parent-Child Relationship – иерархическая связь между span’ами, показывающая последовательность выполнения операций (например, вызов одного микросервиса другим).

Идентификаторы

  • Trace ID – уникальный идентификатор, связывающий все span’ы в рамках одного trace.
  • Span ID – уникальный идентификатор конкретного span (операции).
  • Parent Span ID – идентификатор родительского span (для отображения вложенности).

Временные метки (Timestamps) – указывают время начала и завершения span’а, что помогает измерять задержки и длительность.

  • Start Time – время начала выполнения span.
  • End Time – время завершения выполнения span.
  • Duration – длительность выполнения span (рассчитывается на основе start и end time).

Метки (Tags) – это статические или динамические ключ-значения, описывающие контекст span’а. Часто используются для фильтрации и поиска операций. Пример: http.method=GET, db.statement=SELECT * FROM users.

Пользовательские данные – дополнительные поля, специфичные для приложения и содержащие информацию о пользователе. Пример: user.id=12345.

Состояние операции – статус span (например, status=success или status=error), HTTP или GRPC статус-коды (http.status_code=200).

Логи, записанные в процессе выполнения операции – это набор событий или сообщений, записанных во время исполнения span, которые дают дополнительную информацию о состоянии, ошибках или ключевых этапах. Они помогают понять, что именно происходило во время выполнения определенного шага запроса. Пример: error=true, exception=“TimeoutException: database query exceeded limit”, execution_time=45ms, result_size=128KB.

Возможности трейсинга в Proto Observability Platform

../images/apm_tracing.png

Proto Observability Platform предоставляет автоматический трейсинг для:

  • Приложений, написанных на популярных языках и их фреймворках - Java, JavaScript, Python, C#, C++, Ruby, PHP, Swift, Kotlin, Go, NodeJS;
  • Мобильных приложений (Android и iOs);
  • Приложений, развернутых в Kubernetes.

Платформа автоматически коррелирует трейсы backend с трейсами frontend, позволяя целиком увидеть распределенную транзакцию. Все собираемые данные автоматически связываются с данными по инфраструктуре, логами и пользователями, обогащая трейсы необходимой для разработчиков информацией. Также каждый трейс анализируется на наличие ошибок, в случае их наличия появляется цетовая индикация. По ошибкам показываются все необходимые данные, включая сообщение и стэк трейс. Все эти возможности позволяют существенно сократить MTTR c дней до минут.

Для использования трейсера от Proto Observability не трубуется производить модефикацию кода или вносить какие-либо изменения. Для подключения трейсинга потребуется совершить несколько простых шагов по инструкции.

Подробная информация о трейсах в модуле APM представлена во всех основных разделах:

  • Сервисы
  • Транзакции
  • Ошибки

Раздел Сервисы

В разделе Сервисы можно проанализировать:

  • Трейсы всех сервисов
  • Трейсы конкретного сервиса
  • Трейсы эндпоинта сервиса
  • Трейсы инстанса сервиса

Для просмотра трейсов по всем сервисам, необходимо перейти на вкладку Трейсы раздела Сервисы.

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

Также платформа предоставляет возможность анализа трейсов на уровне инстансов и эндпоинтов.

Инстанс представляет собой отдельный экземпляр выполнения сервиса на конкретном хосте или в контейнере.

Эндпоинт – конкретная точка входа API или функция сервиса.

Чтобы посмотреть трейсы, отфильтрованные по выбранному эндпоинту необходимо из дашборда сервиса перейти на вкладку эндпоинт, кликнуть на нужный эндпоинт и перейти на вкладку Трейсы эндпоинта. Аналогичный порядок действий актуален и для анализа трейсов инстанса.

Раздел Транзакции

В разделе Транзакции представлен анализ трейсов ключевых бизнес-операций. Для их просмотра выберите из списка бизнес-операций необходимую и в открывшемся дашбоде перейдите на вкладку Трейсы.

Раздел Ошибки

В разделе Ошибки можно посмотреть трейсы по выбранному типу ошибок. Например, вас интересует анализ ошибок типа HTTP Code 500. При клике на данную группу ошибок вы попадете на ее дашборд, на вкладке Трейсы увидите все трейсы с данным типом ошибки.

Все трейсы можно отфильтровать, скачать в виде изображения или JSON файла. Присутствует цветовая индикация трейсов ошибкам.

Представления трейсов

Информация по трейсам предоставляется в 5 вариантах:

  • Сводка
  • Дерево вызовов
  • Граф
  • Таблица
  • Статистика

Сводка

В представлении Сводка доступен мета-анализ трейса:

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

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

Контекст пользователя – ID пользователя, ФИО, email, геолокаци (город, страна, регион), IP адрес, устройство (тип, модель, ОС), браузер, ID просмотра, ID сессии.

Анализ производительности – самый медленный спан, спаны с ошибками, обращения к базе данных, внешние HTTP вызовы.

Операции по типу и затраченное время – наименование операций и анализ времени их исполнения. Вы сразу видите понятное название операций, например Загрузка ресурсов, Просмотр страницы веб-сайта, количество спанов, какой процент заняла операция во всей транзакции, сколько времени исполнялась.

Ошибки – сервис и операция в которой произошла ошибка, сообщение ошибки.

Внешние HTTP вызовы – HTTP методы, общее время HTTP вызовов, HTTP хосты, URL HTTP вызовов с временем их исполнения.

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

Дерево

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

Топология – бизнес-приложение и сервис (с возможностью по клику перейти к дашбордам БП и сервиса), эндпоинт, компонент, peer, peer.address, тип спана, команда (имя команды, ответсвенной за сервис), язык разработки,runtime-id и тп.

Проблемы – тип, сообщение и стэк трейс ошибки.

Теги, логически объединенные в группу, например HTTP.

Инфраструктура – компоненты инфраструктуры (с возможностью по клику перейти на их дашборды), в которых произошел спан.

../images/apm_tracing_errorstack.png

Граф

В представлении Граф трейс отображается в виде графа, с визуальной репрезентацией последовательностей спанов.

Таблица

В представлении Таблица можно посмотреть список всех методов в формате таблицы с тем же набором данных, что отображаются в разделе Дерево.

Статистика

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