arize.otel SDK collapses all of it into a single function call — and adds a few OpenInference-specific capabilities on top.
For the practical how-to of installing and using these helpers, see Set up tracing. This page covers what they do under the hood.
Appreciate the Simplicity
Configuring tracing with raw OpenTelemetry — Resource, Exporter, Span Processor, Tracer Provider — looks like this:register() helper replaces all of that:
What register() Does Under the Hood
The convenience function handles four things for you. Each one has additional capabilities specific to OpenInference and Arize AX compared to the standard OTel SDK:
For the canonical reference of every option, see Configure your tracer.
ArizeRoutingProcessor and Multi-Project Routing
Setting the project name at the Resource level means all traces from one application go to the same Arize AX project. That’s the right default for most apps. But more complex use cases need to send traces to different projects (or different Arize AX spaces entirely) based on span attributes or request metadata — for example, a multi-tenant app that wants each customer’s traces to land in their own project. The previous workarounds were:- Spin up multiple Tracer Providers — but only one can be the global, so this gets awkward.
- Modify resource attributes at the Collector level with a transform processor — works, but adds operational complexity.
ArizeRoutingProcessor plus the register_with_routing and set_routing_context helpers.
How Routing Works
Arize AX supports overriding the resource-level project name with a span attribute —arize.project.name. The ArizeRoutingProcessor also supports routing across Arize AX spaces via the arize.space_id span attribute.
set_routing_context is a context manager that attaches both attributes to the OTel context, so you don’t have to set them manually on every span.
Configuring Routing
set_routing_context block is routed to the specified space and project.
register_with_routing uses ARIZE_API_KEY from the environment if api_key isn’t passed. Both space_id and project_name must be set inside set_routing_context — otherwise routing won’t be applied.Python-only today. For JS/TS or Go apps — or routing logic the SDK can’t express — route at the OTel Collector layer instead.