Skip to main content

Async Tracing Instrumentation using OpenTracing API (http://opentracing.io)

Project description

PyPI version Python versions Pypi Downloads Build Status Coverage Status

python-opentracing-async-instrumentation

A collection of asyncio instrumentation tools to enable tracing with OpenTracing API.

Module

Make sure you are running recent enough versions of pip and setuptools, e.g. before installing your project requirements execute this:

pip install --upgrade "setuptools>=29" "pip>=9"

The module name is opentracing_async_instrumentation.

What's inside

Supported client frameworks

The following libraries are instrumented for tracing in this module:

  • aiobotocore — Asyncio AWS SDK for Python
  • aioboto3 — Asyncio AWS SDK for Python (uses aiobotocore under the hood)
  • aiohttp - Asyncio HTTP server and client

Planned libraries

Limitations

  • Only Python 3.5+ is currently supported.

Server instrumentation

For inbound requests a helper function before_request is provided for creating middleware for frameworks like aiohttp and possibly Tornado.

A middleware is provided for aiohttp.

In-process Context Propagation

As part of the OpenTracing 2.0 API, in-process Span propagation happens through the newly defined ScopeManager interface.

Usage

This library provides two types of instrumentation, explicit instrumentation for server endpoints, and implicit instrumentation for client call sites.

Server

Server endpoints are instrumented by creating a (or using a provided) middleware class that:

  1. initializes the specific tracer implementation
  2. wraps incoming request handlers into a method that reads the incoming tracing info from the request and creates a new tracing Span
from aiohttp import web
from opentracing_async_instrumentation.client_hooks import aiohttpserver

async def handler(request):
    return web.Response(body='Hello World')

app = web.Application()
app.router.add_get('/', handler)
app.middlewares.append(aiohttpserver.enable_tracing)

if __name__ == '__main__':
    web.run_app(app)

Client

Client call sites are instrumented implicitly by executing a set of available client_hooks that monkey-patch some API points in several common libraries like aiohttp and aiobotocore. The initialization of those hooks is usually also done from the middleware class's __init__ method.

Usage is via the client_hooks interface.

from opentracing_async_instrumentation import client_hooks

client_hooks.install_all_patches()

Customization

For the aiohttp library, in case you want to set custom tags to spans depending on content or some metadata of responses, you can set response_handler_hook. The hook must be a method with a signature (response, span), where response and span are positional arguments, so you can use different names for them if needed.

from opentracing_async_instrumentation.client_hooks.aiohttpclient import patcher


def hook(response, span):
    if not response.ok:
        span.set_tag('error', 'true')


patcher.set_response_handler_hook(hook)

Development

To prepare a development environment please execute the following commands.

virtualenv env
source env/bin/activate
make bootstrap
make test

You can use tox to run tests as well.

tox

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

opentracing_async_instrumentation-0.1.2.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file opentracing_async_instrumentation-0.1.2.tar.gz.

File metadata

  • Download URL: opentracing_async_instrumentation-0.1.2.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.4

File hashes

Hashes for opentracing_async_instrumentation-0.1.2.tar.gz
Algorithm Hash digest
SHA256 4ba9fc1d7d593ac9efb96c8760d0c77ee7aac1ae3bd2c3dea1545ec2f3dfec8c
MD5 f4599d21bb0238bc996a9db7db46ebae
BLAKE2b-256 a4a2b969b7d1098b117fb6915c419a09e74993b35c0c68bc79eb0e8bf550169f

See more details on using hashes here.

File details

Details for the file opentracing_async_instrumentation-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: opentracing_async_instrumentation-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.7.4

File hashes

Hashes for opentracing_async_instrumentation-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ac9cbd15d4675d9d70e3dad0ab81731d6c85895a558a8339e6d09258b43b372a
MD5 b4f1345aafa149f09d030d38ab9082eb
BLAKE2b-256 5787f9cd979d56bff4cd365f32067c93b78195cbf36c12c1de6b62bd07b72dec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page