OpenTelemetry ASGI Instrumentation¶
This library provides a ASGI middleware that can be used on any ASGI framework (such as Django, Starlette, FastAPI or Quart) to track requests timing through OpenTelemetry.
Installation¶
pip install opentelemetry-instrumentation-asgi
Usage (Quart)¶
from quart import Quart
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
app = Quart(__name__)
app.asgi_app = OpenTelemetryMiddleware(app.asgi_app)
@app.route("/")
async def hello():
return "Hello!"
if __name__ == "__main__":
app.run(debug=True)
Usage (Django 3.0)¶
Modify the application’s asgi.py
file as shown below.
import os
from django.core.asgi import get_asgi_application
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'asgi_example.settings')
application = get_asgi_application()
application = OpenTelemetryMiddleware(application)
Usage (Raw ASGI)¶
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
app = ... # An ASGI application.
app = OpenTelemetryMiddleware(app)
References¶
API¶
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.
-
class
opentelemetry.instrumentation.asgi.
CarrierGetter
[source]¶ Bases:
opentelemetry.trace.propagation.textmap.DictGetter
-
opentelemetry.instrumentation.asgi.
collect_request_attributes
(scope)[source]¶ 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.
-
opentelemetry.instrumentation.asgi.
get_default_span_details
(scope)[source]¶ Default implementation for span_details_callback
-
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.
- Parameters
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.