If your service is already instrumented with the OpenTelemetry SDK, add
AxonPushSpanExporter to your tracer provider and every span you create
ships to AxonPush as an app.span event alongside whatever other
OTel-compatible backends you already export to.
[!TIP]
Non-blocking by default (v0.0.5+)
The exporter pushes span publishes onto a bounded in-memory queue and
drains them from a single background daemon thread — span.end() (and
the resulting export call) stays O(microseconds) on the caller’s thread.
provider.force_flush() drains the internal queue and is safe to call
before a process exit. Pass mode="sync" for blocking publishes.
See the stdlib logging page
for the Lambda / GCF / Azure Functions pattern — the
flush_after_invocation decorator works with the span exporter too.
OTel ships auto-instrumentation for popular libraries (FastAPI, Django,
SQLAlchemy, redis, boto3, …). Install the ones you need and they hook into
the tracer provider you just configured — no code changes required: