register() and OpenInference integrations — this page is for when you need more: batch processing for production, routing spans to multiple projects, or configuring resource attributes directly via the OpenTelemetry SDK.
OpenInference Instrumentation Packages
OpenInference provides auto-instrumentors for popular frameworks. Install the package for your provider and attach it once —.instrument() in Python, registerInstrumentations({...}) / package-specific setup in JS/TS, or option.WithMiddleware(...) on the SDK client in Go — and every call is traced automatically.
Python packages
Python packages
JavaScript packages
JavaScript packages
Go packages
Go packages
Set up your tracer
The quickest setup is a single helper that creates an OpenTelemetryTracerProvider wired to Arize AX, attaches the span exporter, and sets it as the global provider. Each SDK reads your space, API key, and project from the environment, so the minimal call needs no explicit credentials. For the full Python SDK reference, see OpenTelemetry Tracing.
- Python
- JS/TS
- Go
arize-otel’s register() returns a TracerProvider you hand to each OpenInference instrumentor’s .instrument(tracer_provider=...) call. All parameters are keyword-only:Configure the OTel Tracer Directly
- Python
- JS/TS
- Go
Key Concepts
- Resource attributes describe the source of telemetry (service, model, environment). Set once on the TracerProvider.
- Span attributes describe a single span. Set per-span in your code.
- Span processors filter, batch, and perform operations on spans before export.
- Project name resource attribute. The canonical OpenInference key is
openinference.project.name— exposed asResourceAttributes.PROJECT_NAMEfromopeninference.semconv.resourcein Python,SEMRESATTRS_PROJECT_NAMEfrom@arizeai/openinference-semantic-conventionsin JS/TS, and set automatically byarize-otel-go’sOptions.ProjectNamein Go. The Arize collector also acceptsmodel_idas a legacy alias (shown in some older Python/JS examples on this page); both route spans to the same project. - OTLP auth headers. The Arize collector accepts both
space_id/api_key(canonical, whatarize-otel-gosends) and thearize-space-id/arize-api-keyaliases shown in the older Python/JS examples. If you copy the raw-OTel Go snippet below into a stack that already uses thearize-prefixed form, pick one and stay consistent.
Batch vs Simple Span Processor
A span processor controls when and how spans are exported. Choose based on your environment:
Once your tracer is running, you’ll often want to attach more context to the span currently in flight:
Get the Current Span
Access the current span at any point to enrich it with additional information:- Python
- JS/TS
- Go
Route Spans to Multiple Projects
To route traces from one application to multiple Arize spaces or projects, useregister_with_routing from arize-otel:
register_with_routing uses ARIZE_API_KEY from your 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 more complex routing (e.g., by span attribute) — route at the OTel Collector layer instead. See OTEL Collector deployment patterns.arize-space-id from inbound request metadata — avoids redeploying the collector each time a new space is added.