Architecture
- jaeger-agentSidecar daemon
- jaeger-collectorReceives spans
- jaeger-queryUI & API
- jaeger-ingesterKafka consumer
- all-in-oneDev deployment
Span Data
- operationNameSpan name
- traceID128-bit identifier
- spanID64-bit identifier
- referencesParent spans
- tagsKey-value pairs
- logsTimestamped events
Storage Backends
- CassandraDistributed DB
- ElasticsearchSearch & analytics
- KafkaMessage buffer
- BadgerLocal storage
- MemoryDevelopment only
Default Ports
- 16686Query UI
- 14268Collector HTTP
- 14250Collector gRPC
- 6831Agent UDP compact
- 6832Agent UDP binary
Docker Deployment
# All-in-one for development
docker run -d --name jaeger \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 6831:6831/udp \
jaegertracing/all-in-one:latest
# With Elasticsearch backend
docker run -d --name jaeger \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://elasticsearch:9200 \
jaegertracing/all-in-one:latest
Environment Variables
# Collector configuration
SPAN_STORAGE_TYPE="elasticsearch"
ES_SERVER_URLS="http://elasticsearch:9200"
COLLECTOR_ZIPKIN_HOST_PORT=":9411"
COLLECTOR_OTLP_ENABLED="true"
# Sampling configuration
SAMPLING_STRATEGIES_FILE="/etc/jaeger/sampling.json"
# Query service
QUERY_BASE_PATH="/jaeger"
Sampling Types
- constAlways on/off
- probabilistic% sampling
- rateLimitingTraces/second
- remoteFrom collector
Client Libraries
- jaeger-client-goGo SDK
- jaeger-client-javaJava SDK
- jaeger-client-nodeNode.js SDK
- jaeger-client-pythonPython SDK
- OpenTelemetryRecommended
Sampling Configuration (sampling.json)
{
"service_strategies": [
{
"service": "my-service",
"type": "probabilistic",
"param": 0.1
}
],
"default_strategy": {
"type": "probabilistic",
"param": 0.01
}
}
Query API
- /api/tracesSearch traces
- /api/traces/{id}Get trace
- /api/servicesList services
- /api/operationsList operations
Kubernetes Operator
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://es:9200