Skip to content
This repository has been archived by the owner on Dec 8, 2022. It is now read-only.


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit

Announce archival

Git stats


Failed to load latest commit information.
Latest commit message
Commit time

OpenTracing Tutorials

A collection of tutorials for the OpenTracing API (

Update (Dec 8 2022): Since OpenTracing has been officially retired, I have archived this repository. The tutorials here are still useful when learning about distributed tracing, but using the OpenTelemetry API should be preferred over the OpenTracing API for new applications.

The blog post "Migrating from Jaeger client to OpenTelemetry SDK" can also be used as a reference on how to use the OpenTelemetry SDK as an OpenTracing tracer implementation.

Tutorials by Language

Also check out examples from the book Mastering Distributed Tracing:


The tutorials are using CNCF Jaeger ( as the tracing backend. For this tutorial, we'll start Jaeger via Docker with the default in-memory storage, exposing only the required ports. We'll also enable "debug" level logging:

docker run \
  --rm \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 16686:16686 \
  jaegertracing/all-in-one:1.7 \

Alternatively, Jaeger can be downloaded as a binary called all-in-one for different platforms from

Once the backend starts, the Jaeger UI will be accessible at http://localhost:16686.