1 of 18

Technology Stack

  • Go backend
  • Pluggable storage
    • Cassandra, Elasticsearch, memory, ...
  • React/Javascript frontend
  • OpenTracing Instrumentation libraries
  • Integration with Kafka, Apache Flink

1

Apache Cassandra® is a trademark of the Apache Software Foundation in the United States and/or other countries.

2 of 18

V2 Architecture (2024)

3 of 18

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

4 of 18

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

5 of 18

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

6 of 18

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

7 of 18

Architecture (2023)

8 of 18

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

9 of 18

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

10 of 18

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

11 of 18

Architecture (2017)

12 of 18

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

13 of 18

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

14 of 18

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

15 of 18

A

B

C

D

E

{context}

{context}

{context}

{context}

Unique ID → {context}

Edge service

A

B

E

C

D

time

TRACE

SPANS

16 of 18

A

B

E

C

D

time

TRACE

SPANS

17 of 18

Scratch

18 of 18

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