> For the complete documentation index, see [llms.txt](https://appsecurity.gitbook.io/devops/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://appsecurity.gitbook.io/devops/ppc/tech/arch-services/telemetry/tracing.md).

# Tracing

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

Для минимизации ручного труда можно воспользоваться одним из инструментов трассировки.

### Какие проблемы можно решить с помощью трассировки

1. Найти узкие места в производительности как внутри одного сервиса, так и во всем дереве выполнения между всеми участвующими сервисами. Например:
   * Много коротких последовательных вызовов между сервисами, например, на геокодинг или к базе данных.
   * Долгие ожидания ввода вывода, например, передача данных по сети или чтение с диска.
   * Долгий парсинг данных.
   * Долгие операции, требующие cpu.
   * Участки кода, которые не нужны для получения конечного результата и могут быть удалены, либо запущены отложенно.
2. Наглядно понять в какой последовательности что вызывается и что происходит когда выполняется операция.

![](https://437660652-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lt0mQyntJcgfhc8fWk8%2F-MZD8NLxmyMkNyTZ8z47%2F-MZDAG8hlkA9aoCMPw1k%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=e21e5940-1693-4427-9fb8-956457366233)

Видно что, например, Запрос пришел в сервис WS -> сервис WS дополнил данные через сервис R -> дальше отправил запрос в сервис V -> сервис V загрузил много данных из сервиса R -> сходил в сервис P -> сервис Р еще раз сходил в сервис R -> сервис V проигнорировал результат и пошел в сервис J -> и только потом вернул ответ в сервис WS, при этом продолжая в фоне вычислять что-то еще.\
\
&#x20;Без такого трейса или подробной документации на весь процесс очень сложно понять, что происходит, первый раз взглянув на код, да и код разбросан по разным сервисам и скрыт за кучей бинов и интерфейсов.<br>

3\. Сбор информации о дереве исполнения для последующего отложенного анализа. На каждом этапе выполнения в трейс можно добавить информацию, которая доступна на данном этапе и дальше разобраться какие входные данные привели к подобному сценарию. Например:

* ID пользователя
* Права
* Тип выбранного метода
* Лог или ошибка исполнения

Превращение трейсов в подмножество метрик и дальнейший анализ уже в виде метрик.
