OpenTelemetry asgi Instrumentation

Module contents

The opentelemetry-instrumentation-asgi package provides an ASGI middleware that can be used on any ASGI framework (such as Django-channels / Quart) to track requests timing through OpenTelemetry.

opentelemetry.instrumentation.asgi.get_header_from_scope(scope, header_name)[source]

Retrieve a HTTP header value from the ASGI scope.

Return type



A list with a single string with the header value if it exists, else an empty list.


Collects HTTP request attributes from the ASGI scope and returns a dictionary to be used as span creation attributes.

opentelemetry.instrumentation.asgi.set_status_code(span, status_code)[source]

Adds HTTP response attributes to span using the status_code argument.


Default implementation for span_details_callback


scope (dict) – the asgi scope dictionary

Return type

Tuple[str, dict]


a tuple of the span, and any attributes to attach to the span.

class opentelemetry.instrumentation.asgi.OpenTelemetryMiddleware(app, span_details_callback=None)[source]

Bases: object

The ASGI application middleware.

This class is an ASGI middleware that starts and annotates spans for any requests it is invoked with.

  • app – The ASGI application callable to forward requests to.

  • span_details_callback – Callback which should return a string and a tuple, representing the desired span name and a dictionary with any additional span attributes to set. Optional: Defaults to get_default_span_details.