Архитектура
Alauda Distributed Tracing основан на Jaeger v2 и Alauda Build of OpenTelemetry v2. Экземпляры Jaeger развертываются через OpenTelemetry Operator, а в качестве хранилища бэкенда используется Elasticsearch. В этой архитектуре Jaeger v2 предоставляет основные возможности бэкенда трассировки для приема данных, запросов и визуализации.
Jaeger v2 предназначен для того, чтобы быть универсальной и гибкой платформой трассировки. Его можно развернуть как один бинарный файл, который можно настроить на выполнение разных ролей в архитектуре Jaeger.
Содержание
РолиАрхитектура хранилищаНепосредственно в хранилищеС OpenTelemetry CollectorOpenTelemetry Collector как sidecar / host agentOpenTelemetry Collector как удаленный кластерБинарный файл JaegerКомпоненты JaegerКомпоненты OpenTelemetryReceiversProcessorsExportersConnectorsExtensionsРоли
- collector: Принимает входящие данные трассировки от приложений и записывает их в хранилище.
- query: Обслуживает API и пользовательский интерфейс для запроса и визуализации трассировок.
- es-rollover: Управляет операциями индексов на основе rollover в Elasticsearch для Jaeger. Используется для подготовки aliases, indices и templates для deployments с rollover и может периодически переключать write alias на новый index, одновременно обновляя read aliases.
Архитектура хранилища
Непосредственно в хранилище
В этой схеме экземпляры collector получают данные от отслеживаемых приложений и записывают их непосредственно в хранилище. Хранилище должно быть способно обрабатывать как средний, так и пиковый трафик. Экземпляры collector могут использовать очередь в памяти, чтобы сглаживать кратковременные пики трафика, но устойчивый всплеск трафика может привести к потере данных, если хранилище не успевает справляться.

С OpenTelemetry Collector
Вам не нужно использовать OpenTelemetry Collector для эксплуатации Jaeger, поскольку Jaeger представляет собой кастомизированную дистрибуцию OpenTelemetry Collector с разными ролями. Однако, если вы уже используете OpenTelemetry Collector для сбора других типов телеметрии или для предварительной обработки / обогащения данных трассировки, его можно разместить перед Jaeger в конвейере сбора. OpenTelemetry Collector можно запускать как sidecar приложения или как удаленный кластер сервиса.
OpenTelemetry Collector поддерживает протокол Remote Sampling Jaeger и может либо напрямую предоставлять статические конфигурации из файлов конфигурации, либо проксировать запросы в backend Jaeger (например, при использовании adaptive sampling).

OpenTelemetry Collector как sidecar / host agent
Преимущества:
- Конфигурация SDK упрощается, поскольку и endpoint экспорта трассировок, и endpoint конфигурации sampling могут указывать на локальный host, и не нужно беспокоиться о поиске удаленного расположения этих сервисов.
- Collector может обогащать данные, добавляя информацию об окружении, например имя pod в k8s.
- Потребление ресурсов на обогащение данных может быть распределено по всем хостам приложений.
Недостатки:
- Дополнительный слой сериализации/десериализации данных.
OpenTelemetry Collector как удаленный кластер
Преимущества:
- Возможности шардинга, например при использовании tail-based sampling.
Недостатки:
- Дополнительный слой сериализации/десериализации данных.
Бинарный файл Jaeger
Бинарный файл Jaeger построен на базе фреймворка OpenTelemetry Collector и включает:
- Official upstream components, такие как OTLP Receiver, Batch and Attribute Processor и т. д.
- Upstream components из
opentelemetry-collector-contrib, такие как Kafka Exporter и Receiver, Tail Sampling Processor и т. д. - Собственные компоненты Jaeger, такие как Jaeger Storage Exporter, Jaeger Query Extension и т. д.

Компоненты Jaeger
- Jaeger Storage Extension - Расширяемый hub для backend-хранилищ, поддерживаемых в Jaeger. Предоставляет всем остальным компонентам Jaeger доступ к реализациям хранилища Jaeger.
- Jaeger Storage Exporter - Записывает spans в backend-хранилище, настроенное в Jaeger Storage Extension.
- Jaeger Query Extension - Запускает API запросов и UI Jaeger.
- Adaptive Sampling Processor - Выполняет вычисление вероятностей для adaptive sampling.
- Remote Sampling Extension - Обслуживает endpoint'ы для Remote Sampling на основе статического файла конфигурации или adaptive sampling.
Компоненты OpenTelemetry
Receivers
- OTLP - Принимает spans, отправленные через OpenTelemetry Protocol (OTLP).
- Jaeger - Принимает трассировки в формате Jaeger, передаваемые по протоколам gRPC или Thrift.
- Kafka - Принимает spans из Kafka в различных форматах (OTLP, Jaeger, Zipkin).
- Zipkin - Принимает spans, используя протоколы Zipkin v1 и v2.
- No-op - Используется для развертывания Jaeger UI / query service, которому не требуется ingestion pipeline.
Processors
- Batch Processor - Группирует spans для повышения эффективности.
- Tail Sampling - Поддерживает расширенную выборку после сбора.
- Memory Limiter - Поддерживает back-pressure, когда collector перегружен.
- Attributes Processor - Позволяет фильтровать, переписывать и обогащать spans атрибутами. Может использоваться для удаления конфиденциальных данных, уменьшения объема данных или добавления информации об окружении.
- Filter Processor - Позволяет отбрасывать spans и события spans из collector (⚠️ может привести к повреждению трассировок).
Exporters
- OTLP - Отправляет данные в формате OTLP через gRPC.
- OTLP HTTP - Отправляет данные в формате OTLP по HTTP.
- Kafka - Отправляет данные в Kafka в различных форматах (OTLP, Jaeger, Zipkin).
- Prometheus - Отправляет метрики в Prometheus.
- Debug - Инструмент отладки для pipeline.
- No-op - Используется для развертывания Jaeger UI / query service, которому не требуется ingestion pipeline.
Connectors
- Span Metrics - Генерирует метрики на основе данных spans.
- Forward - Перенаправляет телеметрию между pipeline в collector (например: span в metric / span в log)
Extensions
- Health Check v2 - Поддерживает проверки состояния.
- zPages - Предоставляет внутреннее состояние collector для отладки.
- Performance Profiler (pprof) - Включает endpoint Go
net/http/pprof, который обычно используется разработчиками для сбора профилей производительности и анализа проблем с collector.