Jaeger Bindings for Python OpenTracing API
Python Makefile
Latest commit bfe7f0c Oct 31, 2016 @black-adder black-adder committed on GitHub Add Adaptive Sampler (#25)
Permalink
Failed to load latest commit information.
crossdock Support debug traces via HTTP header jaeger-debug-id (#19) Sep 20, 2016
idl @ 5054a00 Update idl (#23) Oct 31, 2016
jaeger_client Add Adaptive Sampler (#25) Oct 31, 2016
scripts
tests
.coveragerc
.gitignore Implement tchannel crossdock tests (#13) Aug 26, 2016
.gitmodules
.travis.yml
CHANGELOG.rst
CONTRIBUTING.md Add CONTRIBUTING.md Oct 14, 2016
LICENSE Initial commit Jul 10, 2016
MANIFEST.in Initial commit Jul 10, 2016
Makefile Add url encoding to HTTP_HEADERS codec (#17) Sep 4, 2016
README.md Clarify Zipkin Compatibility Oct 14, 2016
requirements-dev.txt Initial commit Jul 10, 2016
requirements-tests.txt
requirements.txt Initial commit Jul 10, 2016
setup.cfg
setup.py Upgrade to opentracing 1.2 with KV logging (#20) Oct 4, 2016

README.md

Build Status Coverage Status PyPI version

Jaeger Bindings for Python OpenTracing API

This is a client-side library that can be used to instrument Python apps for distributed trace collection, and to send those traces to Jaeger. See the OpenTracing Python API for additional detail.

Installation

apt-get install python-dev
pip install jaeger-client

Getting Started

(under construction)

If your python code is already instrumented for OpenTracing, you can simply switch to Jaeger's implementation with:

import opentracing
from jaeger_client import Config

if __name__ == "__main__":
  config = Config(config={},  # usually read from some yaml config
                  service_name='your-app-name')
  tracer = config.initialize_tracer()

  with opentracing.tracer.start_span('TestSpan') as span:
    span.log_event('test message', payload={'life': 42})

  tracer.close()  # flush any buffered spans

Configuration

(under construction)

See Config class.

Debug Traces (Forced Sampling)

Programmatically

The OpenTracing API defines a sampling.priority standard tag that can be used to affect the sampling of a span and its children:

from opentracing.ext import tags as ext_tags

span.set_tag(ext_tags.SAMPLING_PRIORITY, 1)

Via HTTP Headers

Jaeger Tracer also understands a special HTTP Header jaeger-debug-id, which can be set in the incoming request, e.g.

curl -H "jaeger-debug-id: some-correlation-id" http://myhost.com

When Jaeger sees this header in the request that otherwise has no tracing context, it ensures that the new trace started for this request will be sampled in the "debug" mode (meaning it should survive all downsampling that might happen in the collection pipeline), and the root span will have a tag as if this statement was executed:

span.set_tag('jaeger-debug-id', 'some-correlation-id')

This allows using Jaeger UI to find the trace by this tag.

Zipkin Compatibility

This library internally uses Zipkin Thrift data model and conventions, but if you want to use it directly with other Zipkin libraries & backend, it needs:

  1. different wire codecs to transmit trace context as X-B3-* headers
  2. a reporter that will submit traces to Zipkin backend over Zipkin-supported transports like Kafka or HTTP

Both of these things are easy to add (e.g. it was done in https://github.com/uber/jaeger-client-java/pull/34), but it is not a priority for the Uber team since we are using a different backend. We will welcome PRs that provide that functionality.

License

The MIT License.