Getting Started
Get up and running with Jaeger in your local environment
If you are new to distributed tracing, please check the Introduction page.
Instrumentation
Your applications must be instrumented before they can send tracing data to Jaeger. We recommend using the OpenTelemetry instrumentation and SDKs.
Historically, the Jaeger project supported its own SDKs (aka tracers, client libraries) that implemented the OpenTracing API. The Client Libraries section provides information about how to use the OpenTracing API and how to initialize and configure Jaeger tracers. As of 2022, the Jaeger SDKs are no longer supported, and all users are advised to migrate to OpenTelemetry.
All in One
All-in-one is an executable designed for quick local testing, launches the Jaeger UI, collector, query, and agent, with an in memory storage component.
The simplest way to start the all-in-one is to use the pre-built image published to DockerHub (a single command line).
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-e COLLECTOR_OTLP_ENABLED=true \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.38
Or run the jaeger-all-in-one(.exe)
executable from the binary distribution archives:
jaeger-all-in-one --collector.zipkin.host-port=:9411
You can then navigate to http://localhost:16686
to access the Jaeger UI.
The container exposes the following ports:
Port | Protocol | Component | Function |
---|---|---|---|
6831 | UDP | agent | accept jaeger.thrift over Thrift-compact protocol (used by most SDKs) |
6832 | UDP | agent | accept jaeger.thrift over Thrift-binary protocol (used by Node.js SDK) |
5775 | UDP | agent | (deprecated) accept zipkin.thrift over compact Thrift protocol (used by legacy clients only) |
5778 | HTTP | agent | serve configs (sampling, etc.) |
16686 | HTTP | query | serve frontend |
4317 | HTTP | collector | accept OpenTelemetry Protocol (OTLP) over gRPC, if enabled |
4318 | HTTP | collector | accept OpenTelemetry Protocol (OTLP) over HTTP, if enabled |
14268 | HTTP | collector | accept jaeger.thrift directly from clients |
14250 | HTTP | collector | accept model.proto |
9411 | HTTP | collector | Zipkin compatible endpoint (optional) |
With Service Performance Monitoring (SPM)
Please refer to Service Performance Monitoring (SPM).
Kubernetes and OpenShift
- Kubernetes templates: https://github.com/jaegertracing/jaeger-kubernetes
- Kubernetes Operator: https://github.com/jaegertracing/jaeger-operator
- OpenShift templates: https://github.com/jaegertracing/jaeger-openshift
Sample App: HotROD
HotROD (Rides on Demand) is a demo application that consists of several microservices and illustrates the use of the OpenTracing API. A tutorial / walkthrough is available in the blog post: Take OpenTracing for a HotROD ride.
It can be run standalone, but requires Jaeger backend to view the traces.
Features
Discover architecture of the whole system via data-driven dependency diagram.
View request timeline and errors; understand how the app works.
Find sources of latency and lack of concurrency.
Highly contextualized logging.
Use baggage propagation to:
- Diagnose inter-request contention (queueing).
- Attribute time spent in a service.
Use open source libraries with OpenTracing integration to get vendor-neutral instrumentation for free.
Prerequisites
- You need Go toolchain installed on your machine to run from source (see go.mod file for required Go version).
- Requires a running Jaeger backend to view the traces.
Running
From Source
mkdir -p $GOPATH/src/github.com/jaegertracing
cd $GOPATH/src/github.com/jaegertracing
git clone git@github.com:jaegertracing/jaeger.git jaeger
cd jaeger
go run ./examples/hotrod/main.go all
From docker
docker run --rm -it \
--link jaeger \
-p8080-8083:8080-8083 \
-e JAEGER_AGENT_HOST="jaeger" \
jaegertracing/example-hotrod:1.38 \
all
From binary distribution
Run example-hotrod(.exe)
executable from the binary distribution archives:
example-hotrod all
Then navigate to http://localhost:8080
.
Migrating from Zipkin
Collector service exposes Zipkin compatible REST API /api/v1/spans
which accepts both Thrift and JSON. Also there is /api/v2/spans
for JSON and Proto.
By default it’s disabled. It can be enabled with --collector.zipkin.host-port=:9411
.
Zipkin Thrift IDL and Zipkin Proto IDL files can be found in jaegertracing/jaeger-idl repository. They’re compatible with openzipkin/zipkin-api Thrift and Proto.