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

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

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

    Роли

    • 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.