Arize Phoenix

Stream Ingate's gateway traces into Arize Phoenix over standard OTLP, Phoenix reads the OTel GenAI attributes natively, with no mapping on either side.

What it is

Arize Phoenix is an open-source LLM observability and evaluation platform: trace visualization, prompt/agent quality evals, and dataset curation, built on OpenTelemetry's GenAI semantic conventions. It ingests traces over the standard OTLP traces endpoint (/v1/traces). Nothing Phoenix-specific is required on the sending side.

Consume traces from Ingate

Create an export config pointing at your Phoenix collector's OTLP traces endpoint:

bash
curl -X POST https://api.ingateai.com/api/v1/exports \
  -H "X-Ingate-Key: sk-ingate-..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "phoenix",
    "kind": "otlp",
    "endpoint": "http://<phoenix-host>/v1/traces",
    "include_sources": ["proxy", "api"]
  }'

Hot reload

Once created (or enabled), delivery starts immediately: the config hot-reloads into the live exporter registry with no restart required.

kind: "otlp" batches trace entries and POSTs them as application/x-protobuf, which is exactly what Phoenix's OTLP receiver expects. Spans carry the OTel GenAI semantic convention attributes (gen_ai.provider.name, gen_ai.request.model, gen_ai.usage.input_tokens/output_tokens, gen_ai.input.messages, gen_ai.output.messages, gen_ai.user.id, gen_ai.session.id) that Phoenix reads natively to render prompt/completion pairs, token usage, and latency in its trace UI, no attribute mapping needed on either side.

include_sources controls which gateway traffic feeds Phoenix: proxy (passthrough/translation requests), api (agent-monitoring/SDK ingest), otel (spans Ingate itself received via its OTel receiver). Omit the field to default to ["proxy", "api"].

Reference

  • Trace Exports: how gateway trace streaming works
  • Exports API: full config shape, include_sources semantics, hot-reload behavior