Unofficial ddtrace
integration for ASGI apps and frameworks.
Should work seamlessly for any ASGI web framework, e.g. Starlette, FastAPI, Quart, etc.
Note: This project is in alpha stage.
pip install ddtrace-asgi
To automatically send traces to Datadog APM on each HTTP request, wrap your ASGI application around TraceMiddleware
:
# app.py
from ddtrace import tracer
from ddtrace_asgi.middleware import TraceMiddleware
async def app(scope, receive, send):
assert scope["type"] == "http"
headers = [[b"content-type", b"text/plain"]]
await send({"type": "http.response.start", "status": 200, "headers": headers})
await send({"type": "http.response.body", "body": b"Hello, world!"})
app = TraceMiddleware(app, tracer, service="asgi-hello-world")
Then use ddtrace-run
when serving your application. For example, if serving with Uvicorn:
ddtrace-run uvicorn app:app
For more information on using ddtrace
, please see the official ddtrace
repository.
Starlette
from ddtrace import tracer
from ddtrace_asgi.middleware import TraceMiddleware
from starlette.applications import Starlette
app = Starlette()
app = TraceMiddleware(app, tracer, service="my-starlette-app")
class TracingMiddleware:
def __init__(self, app, tracer, service="asgi", distributed_tracing=True):
...
An ASGI middleware that sends traces of HTTP requests to Datadog APM.
Parameters
- app - An ASGI application.
- tracer - A
Tracer
object. - service - (optional) Name of the service as it will appear on Datadog.
- distributed_tracing - (optional) Whether to enable distributed tracing.