• Русский
  • Архитектура

    Alauda Distributed Tracing основан на Jaeger v2 и Alauda Build of OpenTelemetry v2. Экземпляры Jaeger развертываются через OpenTelemetry Operator, а в качестве хранилища бэкенда используется Elasticsearch. В этой архитектуре Jaeger v2 предоставляет основные возможности бэкенда трассировки для приема данных, запросов и визуализации.

    Jaeger v2 предназначен для того, чтобы быть универсальной и гибкой платформой трассировки. Его можно развернуть как один бинарный файл, который можно настроить на выполнение разных ролей в архитектуре Jaeger.

    Роли

    • collector: Принимает входящие данные трассировки от приложений и записывает их в хранилище.
    • query: Обслуживает API и пользовательский интерфейс для запроса и визуализации трассировок.
    • es-rollover: Управляет операциями индексов на основе rollover в Elasticsearch для Jaeger. Используется для подготовки aliases, indices и templates для deployments с rollover и может периодически переключать write alias на новый index, одновременно обновляя read aliases.

    Архитектура хранилища

    Непосредственно в хранилище

    В этой схеме экземпляры collector получают данные от отслеживаемых приложений и записывают их непосредственно в хранилище. Хранилище должно быть способно обрабатывать как средний, так и пиковый трафик. Экземпляры collector могут использовать очередь в памяти, чтобы сглаживать кратковременные пики трафика, но устойчивый всплеск трафика может привести к потере данных, если хранилище не успевает справляться.

    Architecture

    С OpenTelemetry Collector

    Вам не нужно использовать OpenTelemetry Collector для эксплуатации Jaeger, поскольку Jaeger представляет собой кастомизированную дистрибуцию OpenTelemetry Collector с разными ролями. Однако, если вы уже используете OpenTelemetry Collector для сбора других типов телеметрии или для предварительной обработки / обогащения данных трассировки, его можно разместить перед Jaeger в конвейере сбора. OpenTelemetry Collector можно запускать как sidecar приложения или как удаленный кластер сервиса.

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

    Architecture

    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 и т. д.

    Architecture

    Компоненты 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.