Skip to content
Pull request Compare This branch is 2404 commits behind twitter:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


finagle-zipkin provides the instrumentation for Dapper-style distributed tracing in Finagle-based services. See Zipkin for the collection and query services.


  • Annotation - includes a value, timestamp, and host
  • Span - a set of annotations that correspond to a particular RPC
  • Trace - a set of spans that share a single root span

We define four Core Annotations that fully describe an RPC (client send, server receive, server send, client receive)


The ZipkinTracer is a Finagle Tracer that collects trace data.



The default configuration samples 1/1000 traces, computed as a hash of the trace id.

In memory structures

ZipkinTracer keeps some in memory data structures that buffer Spans as they are mutated to prevent making too many I/O calls.

Data sink

ZipkinTracer sends data to a local Scribe daemon. This allows tracing to be as low overhead as possible since Scribe can choose to drop data when under heavy load.


To add tracing to your Finagle service, just add one line to the ServerBuilder or ClientBuilder instantiation



By default, ZipkinTracer sends trace data to a local Scribe daemon. This can be configured to send the data either directly to a Zipkin Collector or some other service. In addition, the sample rate can also be configured to a floating point value between 0.0 and 1.0.

  ZipkinTracer(scribeHost = "", scribePort = 1234, sampleRate = 0.4)

Custom annotations

Additional information can be added in application code with custom annotations. These can be either time-based, or key-value based.

  Trace.record("starting some extremely expensive computation")
  Trace.recordBinary("http.response.code", "500")
Something went wrong with that request. Please try again.