27.1. Архитектура трассировки #

Ниже приведён пример архитектуры распределённой трассировки.

Рисунок 27.1. Архитектура распределённой трассировки


Пользователь взаимодействует с PPEM через веб-приложение. Чтобы выполнить пользовательские действия, веб-приложение отправляет запросы менеджеру.

Получив запрос от веб-приложения или API, менеджер создаёт корневой спан (span), генерирует контекст трассировки, состоящий из трассировки и идентификатора спана, затем сохраняет временную метку начала спана. Затем контекст трассировки связывается с запросом и используется на протяжении всего времени обработки этого запроса. После завершения обработки сохраняется временная метка окончания спана.

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

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

Менеджер и агенты периодически отправляют трассировочные данные ресиверу, а он сохраняет их в хранилище. Трассировочные данные с одинаковым идентификатором образуют единую трассировку, которую можно просмотреть с помощью Jaeger или Grafana.