.NET SDK
Three NuGet packages for .NET 8 and above, a Semantic Kernel telemetry layer, a general OpenTelemetry span exporter, and a raw events client.
axonpush ships three NuGet packages. Which one you want depends on how your application already produces telemetry, not on how much of axonpush you intend to use.
AxonPush.SemanticKernel
One call wires Semantic Kernel telemetry end to end. Start here if you are on SK.
AxonPush.Otel
A plain BaseExporter<Activity> for any .NET OpenTelemetry workload.
AxonPush
The HTTP client for the events API, when you want to publish directly rather than export spans.
Install
dotnet add package AxonPush.SemanticKernelTargets net8.0 and above.
Configuration
Options are read from the environment when you do not set them in code, so the same build runs against hosted and self-host without a recompile.
| Variable | Default | Notes |
|---|---|---|
AXONPUSH_API_KEY | required | API key. |
AXONPUSH_TENANT_ID | required | Tenant identifier. |
AXONPUSH_BASE_URL | https://api.axonpush.xyz | Point this at your own deployment when self-hosting. |
AXONPUSH_ENVIRONMENT | none | Stamped on every event, so dev traffic is filterable from prod. |
AXONPUSH_TIMEOUT | 30 | Per-request timeout, seconds. |
AXONPUSH_MAX_RETRIES | 3 | Retry attempts. |
AXONPUSH_FAIL_OPEN | true | See below. |
Fail-open by default
axonpush is treated as a soft dependency. If a publish fails after its retries,
the exception is logged at warning level and the call returns a failed
PublishResult rather than throwing, observability going down does not take
your application with it.
The OpenTelemetry exporter follows the same setting: with fail-open on,
Export returns ExportResult.Success even when individual spans could not be
delivered, so the OpenTelemetry SDK never propagates the failure into your code.
Set AxonPushOptions.FailOpen = false, or AXONPUSH_FAIL_OPEN=false, if you
would rather see the errors.
One shape across every SDK
Span payloads from AxonPush.Otel use the same JSON shape as the Python and
TypeScript exporters, and trace and span identifiers are preserved. A
Semantic Kernel chat completion lands with the same schema as a LangChain run
from Python or a Vercel AI middleware trace from Node, so a workflow that
crosses languages still reads as one trace.
Where to next
- Semantic Kernel telemetry wired in one call
- The OpenTelemetry exporter for any .NET OTel workload
- Add observability to your framework
BullMQ
Swap the in-memory publish queue for a Redis-backed BullMQ queue, so log and span events survive restarts and retry on transient failures.
Semantic Kernel
One call flips Semantic Kernel's GenAI diagnostics, subscribes a TracerProvider to every SK activity source, and attaches the axonpush exporter.