Архитектура
Alauda Distributed Tracing основан на Jaeger v2 и Alauda Build of OpenTelemetry v2. Экземпляры Jaeger развертываются через OpenTelemetry Operator, а в качестве хранилища используется Elasticsearch или OpenSearch. В этой архитектуре Jaeger v2 предоставляет основные возможности backend для трассировки: прием данных, запросы и визуализацию.
Jaeger v2 разработан как универсальная и гибкая платформа трассировки. Его можно развернуть как единый binary-файл, который можно настроить для выполнения различных ролей в архитектуре Jaeger.
Содержание
РолиАрхитектура храненияНепосредственно в хранилищеС OpenTelemetry CollectorOpenTelemetry Collector как sidecar / host agentOpenTelemetry Collector как удаленный кластерБинарный файл JaegerКомпоненты JaegerКомпоненты OpenTelemetryПолучателиПроцессорыЭкспортерыКоннекторыРасширенияРоли
- collector: принимает входящие данные трассировки от приложений и записывает их в хранилище.
- query: предоставляет API и пользовательский интерфейс для выполнения запросов и визуализации трассировок.
- es-rollover: управляет операциями индексов Jaeger на основе rollover в Elasticsearch. Используется для подготовки alias, индексов и шаблонов для развертываний с rollover, а также может периодически переключать write alias на новый индекс с одновременным обновлением read alias.
- es-index-cleaner: удаляет индексы на основе времени, которые старше настроенного срока хранения. Он сопоставляет индексы с суффиксом даты (
<prefix>-jaeger-(span|service|dependencies|sampling)-YYYY-MM-DD) и удаляет те, срок хранения которых истек. Обычно используется с развертываниями OpenSearch, которые полагаются на ежедневные индексы вместо rollover alias, чтобы обеспечивать хранение данных трассировки в соответствии с политикой retention.
Архитектура хранения
Непосредственно в хранилище
В этом развертывании collectors получают данные от трассируемых приложений и записывают их напрямую в хранилище. Хранилище должно быть способно обрабатывать как средний, так и пиковый трафик. collectors могут использовать очередь в памяти для сглаживания кратковременных пиков трафика, но устойчивый всплеск трафика может привести к потере данных, если хранилище не успевает их обрабатывать.

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

OpenTelemetry Collector как sidecar / host agent
Преимущества:
- Конфигурация SDK упрощается, поскольку и endpoint экспорта трассировок, и endpoint конфигурации семплирования могут указывать на локальный host, без необходимости определять, где эти службы работают удаленно.
- Collector может выполнять обогащение данных, добавляя информацию об окружении, например имя pod в k8s.
- Потребление ресурсов на обогащение данных может быть распределено по всем application host.
Недостатки:
- Дополнительный уровень marshaling/unmarshaling данных.
OpenTelemetry Collector как удаленный кластер
Преимущества:
- Возможности шардирования, например при использовании tail-based sampling.
Недостатки:
- Дополнительный уровень marshaling/unmarshaling данных.
Бинарный файл Jaeger
Бинарный файл Jaeger построен поверх OpenTelemetry Collector framework и включает:
- Официальные upstream-компоненты, такие как OTLP Receiver, Batch и Attribute Processor и т. д.
- Upstream-компоненты из
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 - предоставляет endpoints для Remote Sampling на основе статического файла конфигурации или adaptive sampling.
Компоненты OpenTelemetry
Получатели
- OTLP - принимает spans, отправленные через OpenTelemetry Protocol (OTLP).
- Jaeger - принимает трассировки в формате Jaeger, переданные по протоколам gRPC или Thrift.
- Kafka - принимает spans из Kafka в различных форматах (OTLP, Jaeger, Zipkin).
- Zipkin - принимает spans с использованием протоколов Zipkin v1 и v2.
- No-op - используется для развертывания UI Jaeger / query service, которому не требуется ingestion pipeline.
Процессоры
- Batch Processor - группирует spans для повышения эффективности.
- Tail Sampling - поддерживает расширенное семплирование после сбора.
- Memory Limiter - поддерживает back-pressure, когда collector перегружен.
- Attributes Processor - позволяет фильтровать, переписывать и обогащать spans с помощью атрибутов. Может использоваться для сокрытия чувствительных данных, уменьшения объема данных или добавления информации об окружении.
- Filter Processor - позволяет отбрасывать spans и события spans в collector (⚠️ может привести к нарушению трассировок).
Экспортеры
- OTLP - отправляет данные в формате OTLP через gRPC.
- OTLP HTTP - отправляет данные в формате OTLP по HTTP.
- Kafka - отправляет данные в Kafka в различных форматах (OTLP, Jaeger, Zipkin).
- Prometheus - отправляет метрики в Prometheus.
- Debug - инструмент отладки для pipeline.
- No-op - используется для развертывания UI Jaeger / query service, которому не требуется ingestion pipeline.
Коннекторы
- Span Metrics - генерирует метрики из данных spans.
- Forward - перенаправляет телеметрию между pipeline в collector (например: span в metric / span в log)
Расширения
- Health Check v2 - поддерживает проверки состояния.
- zPages - предоставляет внутреннее состояние collector для отладки.
- Performance Profiler (pprof) - включает endpoint Go
net/http/pprof, который обычно используется разработчиками для сбора профилей производительности и анализа проблем с collector.