Opentelemetry является структурой наблюдения с открытым исходным кодом для генерации, захвата и сбора данных телеметрии для облачного программного обеспечения. В моем предыдущем посте я рассказал о том, что Означальность средств для программного обеспечения и говорили о трех типах данных телеметрии, которые включают сигналы наблюдаемости — отслеживание, метрики и журналы. Сегодня я буду глубже взглянуть на первое из них, отслеживание.
Когда мы ссылаемся на отслеживание в OpenElemetry, мы обычно имеем в виду распределенную трассировку (или распределенное отслеживание запросов). Традиционно, отслеживание-это низкоуровневая практика, используемая для профилирования и анализа кода приложения разработчиками посредством комбинации специализированных инструментов отладки (таких как DTRACE на Linux или ETW в Windows) и методы программирования. Напротив, распределенная трассировка-это применение этих методов к современным архитектурам на основе микросервисов.
Микросервисы создают значительные проблемы для отслеживания запроса через приложение благодаря распределенному характеру развертывания микросервисов. Рассмотрим традиционное монолитное приложение: поскольку ваш код централизован на одном хосте, диагностика сбоя может быть так же проста, как следуя по трассировке стека. Когда ваше приложение состоит из десятков, сотен или тысяч услуг, работающих на многих хостах, вы не можете полагаться на одну трассу в стеке — вам нужно что -то, что представляет весь запрос при перемещении от сервиса к сервису, компонента к компоненту. Распределенное отслеживание решает эту проблему, обеспечивая мощные возможности, такие как обнаружение аномалий, распределенное профилирование, моделирование рабочей нагрузки и диагностика стационарных проблем.
Большая часть терминологии и ментальных моделей, которые мы используем для описания распределенной трассировки, могут проследить их происхождение до таких систем, как Сорока , X-trace и Dapper Анкет В частности, Dapper оказывал большое влияние на современные распределенные трассировки, и многие из умственных моделей и терминологии, которые использует Opentelemetry, могут отследить их происхождение. Целью этих распределенных систем отслеживания было профиль запросов, которые перемещались по процессам и хостам, и генерируют данные о тех запросах, подходящих для анализа.
Приведенная выше диаграмма представляет собой след сэмплее. След — это коллекция связанных пролетов, которые названы и временными операциями, которые представляют собой единицу работы в запросе. Пролет, который не является ребенком любого другого пролета, — это родительский промежуток или корневой промежуток трассировки. Корневой пролет, как правило, описывает сквозную задержку всей трассы, причем детские пролеты, представляющие подзаконные операции.
Чтобы разместить это в более конкретных терминах, давайте рассмотрим поток запросов системы, с которой вы можете столкнуться в реальном мире, например, приложение для совместного использования. Когда пользователь запрашивает поездку, начинают происходить несколько действий — между службами передается информация, чтобы аутентифицировать и авторизовать пользователя, проверять информацию о их оплате, найти близлежащие водители и отправить одного из них, чтобы забрать гонщика. Упрощенная диаграмма этой системы и следы запроса через нее появляются на следующем рисунке. Как вы можете видеть, каждая операция генерирует пролет для представления работы, выполняемой во время ее выполнения. Эти пролеты имеют неявные отношения (родительский ребенок) как с начала всего запроса, но и от отдельных услуг в трассировке. Таким образом, следы композируются, где действительная трасса состоит из действительных подрегистраторов.
Каждый промежуток в OpenElemetry инкапсулирует несколько фрагментов информации, таких как название операции, которую она представляет, начальная и конечная метка времени, события и атрибуты, которые произошли во время пролета, ссылки на другие пролеты и статус операции. На приведенной выше диаграмме пунктирные линии, соединяющие пролеты, представляют контекст следа. Контекст (или контекст трассировки) содержит несколько фрагментов информации, которые могут быть переданы между функциями внутри процесса или между процессами через RPC. В дополнение к контексту SPAN, идентификаторам, которые представляют родительский трассировку и SPAN, контекст может содержать другую информацию о процессе или запросе, таких как пользовательские метки.
Одна важная особенность пролетов, как упоминалось ранее, заключается в том, что они инкапсулируют другую информацию. Большая часть этой информации требуется — например, имя операции, начало и остановки времени — но некоторые являются необязательными. OpenElemetry предлагает два типа данных, Атрибут а также Событие которые невероятно ценны, поскольку они помогают контекстуализировать то, что произошло во время исполнения, измеренного одним пролетом. Атрибут S (известные как Tags в Opentracing) являются парами ключей, которые могут быть свободно добавлены в пролет, чтобы помочь в анализе данных трассировки. Вы можете думать о атрибутах как о данных, которые вы хотели бы в конечном итоге агрегировать или использовать для фильтрации ваших трасс, таких как идентификатор клиента, имя хоста процесса или что -либо еще, что вы можете себе представить. Событие S (известные как logs в Opentracing)-это строки с надписью, которые могут быть прикреплены к пролету, с необязательным набором Атрибут S, которые далее описывают это. OpenElemetry дополнительно предоставляет набор Семантические соглашения зарезервированных атрибутов и событий для работы или конкретной информации о протоколе.
Пролеты в OpenElemetry генерируются Tracer , объект, который отслеживает в данный момент активный пролет и позволяет создавать (или активировать) новые пролеты. Трейсеры настроены с Пропагатор Объекты, которые поддерживают передачу контекста по границам процессов. Точный механизм создания и регистрации трассера зависит от вашей реализации и языка, но, как правило, вы можете ожидать, что будет глобальный Tracer Способен обеспечить трассировку по умолчанию для ваших пролетов и/или Tracer Поставщик, способный предоставить доступ к трассеру для вашего компонента. Поскольку пролеты создаются и завершены, трассировщик отправляет их в Opentelemetry Sdk’s Экспортер , который отвечает за отправку ваших пролетов в бэкэнд -систему для анализа.
Чтобы резюме, давайте обобжим:
- Пролет — основной строительный блок трассировки. След — это коллекция связанных пролетов.
- Пролеты — это объекты, которые представляют собой единицу работы, которая является названной операцией, такой как выполнение микросервиса или функциональный вызов.
- Пролет без родителей известен как корневой пролет или родительский промежуток трассировки.
- Пролеты содержат атрибуты и события, которые описывают и контекстуализируют работу, выполняемую в разделе.
- Трейсер используется для создания и управления пролетами внутри процесса и по границам процессов через пропагаторы.
В моем следующем посте в этой серии я планирую обсудить источник данных Opentelemetry Metrics и то, как он взаимодействует со следами. Следите за обновлениями!
Оригинал: «https://dev.to/lightstep/opentelemetry-101-what-is-tracing-1605»