Skip to main content
Engineering

Evolving Distributed Tracing at Uber Engineering

February 2, 2017 / Global
Featured image for Evolving Distributed Tracing at Uber Engineering
Image
Merckx modeled the call graph as a tree of blocks, with each block representing an operation within the application, such as a database call, an , or even a library function like parsing JSON.
Merckx architecture is a pull model from a stream of instrumentation data in Kafka.
fieldtypedescription
spanidint64that identifies the current span
parentidint64of the previous span
traceidint64assigned by the original requestor
traceflagsuint8bit flags field
The architecture of the prototype backend for TChannel-generated traces was a push model with custom collectors, custom storage, and the open source Zipkin UI.
The early Jaeger architecture still relied on Zipkin UI and Zipkin storage format.
The current Jaeger architecture: backend components implemented in Go, client libraries in four languages supporting OpenTracing standard, a -based web front-end, and a post-processing and aggregation data pipeline based on .
The Jaeger data model natively supports both key-value logging and span references.
The Jaeger UI shows trace search results. In the top right corner, a duration vs. time scatter plot gives a visual representation of the results and drill-down capability.
The Jaeger UI shows a single trace’s details. At the top of the screen is a minimap diagram of the trace that supports easier navigation within large traces.
Yuri Shkuro

Yuri Shkuro

Yuri Shkuro is a staff software engineer on Uber's Observability Engineering team. He is the author of Mastering Distributed Tracing, a book based on his experiences building, deploying, and operating Jaeger, an open source distributed tracing platform. Learn more: https://www.shkuro.com/books/2019-mastering-distributed-tracing/

Posted by Yuri Shkuro

Category: