Skip to main content

Zipkin tracing for nameko framework

Project description


Zipkin tracing for nameko framework


pip install emplocity-nameko-zipkin



from nameko_zipkin import Zipkin
from nameko.rpc import rpc

class Service:
    name = 'service'
    zipkin = Zipkin() # Dependency provider injects py_zipkin.zipkin.zipkin_span object

    def method(self):
        assert self.zipkin.service_name ==
        assert self.zipkin.span_name == Service.method.__name__

Standalone rpc

from py_zipkin import zipkin
from nameko_zipkin import monkey_patch
from nameko_zipkin.transport import HttpHandler
from nameko.standalone.rpc import ClusterRpcProxy

handler = HttpHandler('http://localhost:9411/api/v1/spans').handle

with zipkin.zipkin_server_span('RootService',
    with ClusterRpcProxy({'AMQP_URI': "pyamqp://guest:guest@localhost"}) as proxy:

How it works

  • monkey_patch patches MethodProxy class to initialize a client span, it's called in dependency provider setup method
  • On service method call a server span is created
  • Trace parameters (trace_id, parent_span_id, etc.) are passed through context data and are accessible in py_zipkin.thread_local.get_zipkin_attrs
  • If there are no parameters, request isn't traced
  • Child service calls are also supported
  • Trace results are reported through handler classes in nameko_zipkin.transport


ZIPKIN section must be added to nameko service config.yaml

    HANDLER: HttpHandler
      url: http://localhost:9411/api/v1/spans

Test it out locally

We've provided an example docker-compose based stack that includes a nameko service and a Zipkin instance. To try it out, run docker-compose up in the root directory of the project. This will bring up three services: RabbitMQ (required by nameko), Zipkin, and an example Python service with both RPC and HTTP endpoints.

Navigate to http://localhost:8000 to visit the example service, and if you then visit Zipkin dashboard (typically at http://localhost:9411), you should see some traces there!

Planned changes

  • Kafka transport support
  • Custom handlers support in config.yaml ('my_module.MyHandler')

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

emplo-nameko-zipkin-0.1.8.tar.gz (8.3 kB view hashes)

Uploaded source

Built Distribution

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page