架构

Alauda Distributed Tracing 基于 Jaeger v2 和 Alauda Build of OpenTelemetry v2。Jaeger 实例通过 OpenTelemetry Operator 部署,后端存储使用 Elasticsearch。在此架构中,Jaeger v2 为数据摄取、查询和可视化提供核心 tracing 后端能力。

Jaeger v2 的设计目标是成为一个通用且灵活的 tracing 平台。它可以作为单个 binary 部署,并可配置为在 Jaeger 架构中承担不同的 roles

Roles

  • collector:接收来自应用的传入 trace 数据,并将其写入存储后端。
  • query:提供用于查询和可视化 traces 的 API 和用户界面。
  • es-rollover:管理 Jaeger 基于 Elasticsearch rollover 的索引操作。它用于为 rollover 部署准备 aliases、indices 和 templates,并可周期性地将写入 alias 切换到新的 index,同时更新读取 aliases。

存储架构

直接写入存储

在此部署模式下,collector 会接收来自被追踪应用的数据,并直接写入存储。存储必须能够处理平均流量和峰值流量。collector 可以使用内存队列来平滑短期流量峰值,但如果存储无法及时跟上,持续的流量激增可能导致数据丢失。

Architecture

使用 OpenTelemetry Collector

不需要使用 OpenTelemetry Collector 来运行 Jaeger,因为 Jaeger 是带有不同 roles 的 OpenTelemetry Collector 定制发行版。不过,如果你已经在使用 OpenTelemetry Collector 来采集其他类型的 telemetry,或对 tracing 数据进行预处理/增强,它可以放在 Jaeger 的采集流水线前端。OpenTelemetry Collector 可以作为应用 sidecar 运行,也可以作为远程 service 集群运行。

OpenTelemetry Collector 支持 Jaeger 的 Remote Sampling 协议,并且既可以直接从 config 文件提供静态配置,也可以将请求代理到 Jaeger 后端(例如在使用 adaptive sampling 时)。

Architecture

作为 sidecar / 宿主机智能体的 OpenTelemetry Collector

优势

  • SDK 配置更简单,因为 trace 导出端点和 sampling config 端点都可以指向本地 host,而无需关心这些服务在远端的具体位置。
  • Collector 可以通过添加环境信息(例如 k8s pod name)来增强数据。
  • 用于数据增强的资源消耗可以分布到所有应用 host 上。

劣势

  • 需要额外一层数据 marshaling/unmarshaling。

作为远程集群的 OpenTelemetry Collector

优势

劣势

  • 需要额外一层数据 marshaling/unmarshaling。

Jaeger Binary

Jaeger binary 构建于 OpenTelemetry Collector framework 之上,并包含:

  • 官方上游组件,例如 OTLP Receiver、Batch 和 Attribute Processor 等。
  • 来自 opentelemetry-collector-contrib 的上游组件,例如 Kafka Exporter 和 Receiver、Tail Sampling Processor 等。
  • Jaeger 自有组件,例如 Jaeger Storage Exporter、Jaeger Query Extension 等。

Architecture

Jaeger Components

OpenTelemetry Components

Receivers

  • OTLP - 接收通过 OpenTelemetry Protocol (OTLP) 发送的 spans。
  • Jaeger - 接收通过 gRPC 或 Thrift 协议传输的 Jaeger 格式 traces。
  • Kafka - 接收来自 Kafka 的多种格式 spans(OTLP、Jaeger、Zipkin)。
  • Zipkin - 接收使用 Zipkin v1 和 v2 协议的 spans。
  • No-op - 用于不需要 ingestion pipeline 的 Jaeger UI / query service 部署。

Processors

  • Batch Processor - 将 spans 批处理以提升效率。
  • Tail Sampling - 支持高级的采集后采样。
  • Memory Limiter - 在 collector 过载时支持 back-pressure。
  • Attributes Processor - 允许通过 attributes 对 spans 进行过滤、重写和增强。可用于脱敏敏感数据、减少数据量,或附加环境信息。
  • Filter Processor - 允许从 collector 中丢弃 spans 和 span events(⚠️ 可能导致 traces 断裂)。

Exporters

  • OTLP - 通过 gRPC 以 OTLP 格式发送数据。
  • OTLP HTTP - 通过 HTTP 以 OTLP 格式发送数据。
  • Kafka - 以多种格式(OTLP、Jaeger、Zipkin)将数据发送到 Kafka。
  • Prometheus - 将 metrics 发送到 Prometheus。
  • Debug - 用于 pipeline 的调试工具。
  • No-op - 用于不需要 ingestion pipeline 的 Jaeger UI / query service 部署。

Connectors

  • Span Metrics - 从 span 数据生成 metrics。
  • Forward - 在 collector 中的 pipelines 之间转发 telemetry(例如:span 到 metric / span 到 log)

Extensions