Technology Stack
1
Apache Cassandra® is a trademark of the Apache Software Foundation in the United States and/or other countries.
V2 Architecture (2024)
Host or Container
Application
OpenTelemetry SDK
Jaeger�Collector Role
DB
Jaeger�Query Role
Spark jobs
(optional)
Trace data (push)
Instrumentation
Jaeger�UI
receiver
Storage exporter
Jaeger�Collector Role
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Sampling Config (poll)
DB
(remote)
sampling
configs
Flink streaming
(optional)
Trace data (push)
Instrumentation
adaptive sampling
Kafka
async
Jaeger�Ingester Role
Jaeger�Query Role
Jaeger�UI
Jaeger�Collector Role
Jaeger�Collector Role
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Sampling Config
(remote)
sampling
configs
Traces
Instrumentation
adaptive sampling
OpenTelemetry Collector
Traces
Sampling�Config
(a) OpenTelemetry Collector as a sidecar or host agent
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Sampling Config
(remote)
sampling
configs
Traces
Instrumentation
adaptive sampling
OpenTelemetry Collector(s)
Traces
Sampling
Config
(b) OpenTelemetry Collector as a central cluster
Extensions
Pipeline
Trace Receivers
jaeger
zipkin
oltp
Processors
spanmetrics
batch
adaptive_sampling
Metric Exporter
prometheus
Span Exporter
jaeger_storage_exporter
Metric Store (external)
Prometheus
Trace Storage� (external)
Storage
jaeger_query�
User Interface
protocols:
http:� grpc:
remote_sampling�
protocols:
http:� grpc:�� adaptive:
�jaeger_storage�
backends:
elasticsearch:�� metric_backends:� prometheus:�
Data flow
Dependencies
Architecture (2023)
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Jaeger�Collector
Sampling Config (poll)
DB
(remote)
sampling
configs
Jaeger�Query
Spark jobs
(optional)
Trace data (push)
Instrumentation
adaptive sampling
Jaeger�UI
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Jaeger�Collector
Sampling Config (poll)
DB
(remote)
sampling
configs
Jaeger�Query
Flink streaming
(optional)
Trace data (push)
Instrumentation
adaptive sampling
Jaeger�UI
Kafka
Jaeger�Ingester�(& indexer)
async
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Jaeger�Collector
Sampling Config
(remote)
sampling
configs
Traces
Instrumentation
adaptive sampling
OpenTelemetry Collector
Traces
Sampling�Config
(a) OpenTelemetry Collector as a sidecar or host agent
Host or Container
Application
OpenTelemetry SDK�(with OTLP exporter)
Jaeger�Collector
Sampling Config
(remote)
sampling
configs
Traces
Instrumentation
adaptive sampling
OpenTelemetry Collector
Traces
Sampling
Config
(b) OpenTelemetry Collector as a central cluster
Architecture (2017)
Host or Container
Application
jaeger-client
jaeger-agent
Spans�(UDP)
Control�flow
jaeger-collector
Control flow poll�(sampling, etc.)
DB
adaptive sampling
jaeger-query
UI
Spark jobs
push
Host or Container
Application
jaeger-client
jaeger-agent
Spans�(UDP)
Control�flow
jaeger�collector
Control flow poll�(sampling, etc.)
DB
adaptive sampling
jaeger�query
UI
Flink streaming
Kafka
push
jaeger�ingester�& indexer
async
MY SERVICE
inbound
request
outbound
request
Tracing SDK
Send trace data to Jaeger
(background thread)
1
instrumentation
Handler
Headers
TraceID
Context
Span
Context
Span
Headers
TraceID
instrumentation
Client
2
3
A
B
C
D
E
{context}
{context}
{context}
{context}
Unique ID → {context}
Edge service
A
B
E
C
D
time
TRACE
SPANS
A
B
E
C
D
time
TRACE
SPANS
Scratch
JAEGER
Host or Container
Application
Instrumentation
OpenTracing API
jaeger-client
jaeger-agent �(Go)
jaeger-collector
(Go)
memory queue
Data Store
(Cassandra)
jaeger-query�(Go)
jaeger-ui�(React)
Control Flow
Trace
Reporting�
Thrift over
TChannel
Control Flow
Trace Reporting
Thrift over UDP
Adaptive Sampling