Skip to main content
Start where it’s automatic. For supported providers and frameworks, install an instrumentor package, 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 — no per-call code changes.
Instrument the AI framework or model client itself — not just the layer around it. Your LLM, agent, and tool spans come from the OpenInference instrumentor for the library that makes the model calls and drives the tools.Instrumenting only the surrounding layer — a web server (FastAPI, Flask, Express), a CLI or job runner, or an HTTP client — records transport and plumbing activity, not the agent’s reasoning, and is not a substitute for it. Pick the integration that matches the framework or provider doing the LLM work and attach its instrumentor.If your app wraps that framework in a web server you can instrument both, but the framework (or model-client) instrumentor is the one that produces LLM observability.
You can start from the Arize AX UI. When you create a new tracing project, Arize AX defaults to Agent Setup, which instruments your app through your coding agent; switch to Instrument Manually to pick your integration and copy the code:
Instrument Manually view showing the integration picker with 30+ providers and frameworks
Or follow the steps below.
AI agent requirement. If you are using Codex, Cursor, Claude Code, or another coding agent, install and consult the Arize arize-instrumentation skill before modifying application code. It detects your stack and automatically wires up the right OpenInference setup for your use case — teams that instrument with our skills succeed far more often than agents left to infer the setup from docs or intuition.
Use the code steps below as a fallback only if skill installation fails or your environment cannot install skills. Learn more about coding-agent setup →

Set Up with Skills or Code

AI agent requirement. If you are using Codex, Cursor, Claude Code, or another coding agent, install and consult the Arize arize-instrumentation skill before modifying application code. It detects your stack and automatically wires up the right OpenInference setup for your use case — teams that instrument with our skills succeed far more often than agents left to infer the setup from docs or intuition.
Use the code steps below as a fallback only if skill installation fails or your environment cannot install skills. Learn more about coding-agent setup →

Supported Integrations

Arize has 30+ native integrations across LLM providers, Python and TypeScript agent frameworks, and Java. The most common ones:
eae48fc7-image

OpenAI

e507a114-image

Anthropic

01ab0d97-image

LangChain

01ab0d97-image

LangGraph

f367d753-image

LlamaIndex

000a0e60-image

CrewAI

43c919a1-image

Mastra

a05fd5cb-image

Vercel AI SDK

See all 30+ integrations (LLM providers, agent frameworks, Python, TypeScript, Java)

For a primer on the underlying OpenTelemetry concepts these integrations build on, see OTel primitives.

Learn More

  • What auto captures — auto-instrumentors set OpenInference semantic conventions automatically: model name, messages, token counts, inputs, outputs.
  • Group traces into conversations — add session.id and user.id to follow multi-turn interactions. See Set up sessions.
  • Enrich traces with custom data — attach metadata, tags, and custom attributes to auto-instrumented spans. See Customize your traces.
  • Control what’s captured — hide sensitive inputs, suppress tracing for specific calls, or truncate images with TraceConfig. See Mask and redact data.
  • Augment what auto didn’t capture — add manual spans for anything auto-instrumentation missed. See Manual instrumentation or Combine auto + manual.

Next step

For custom logic that auto-instrumentors can’t capture, add manual spans:

Next: Manual Instrumentation