> For the complete documentation index, see [llms.txt](https://docs.bindplane.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bindplane.com/integrations/destinations/arize-phoenix.md).

# Arize Phoenix

Sends traces to Phoenix Cloud or a self-hosted Phoenix server over OTLP.

### Supported Telemetry Types

| Platform           | Metrics | Logs | Traces |
| ------------------ | ------- | ---- | ------ |
| Linux              |         |      | ✓      |
| Windows            |         |      | ✓      |
| macOS              |         |      | ✓      |
| Kubernetes Node    |         |      | ✓      |
| Kubernetes Cluster |         |      | ✓      |
| Kubernetes Gateway |         |      | ✓      |
| OpenShift Node     |         |      | ✓      |
| OpenShift Cluster  |         |      | ✓      |
| OpenShift Gateway  |         |      | ✓      |

### Prerequisites

* For Phoenix Cloud: a space and an API key for it.
* For a self-hosted server: a Phoenix server the collector can reach, plus an API key when the server has authentication enabled.

### Configuration

#### Basic Configuration

<figure><img src="https://1405008107-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgmiOMzBfoNFwmKJFHMcJ%2Fuploads%2Fgit-blob-b537eaca5b700761659aedc318a08ee09aa39383%2Fintegrations-destinations-arize-phoenix-image-1.png?alt=media" alt="Bindplane docs - Arize Phoenix - image 1"><figcaption></figcaption></figure>

The General tab changes with the Deployment choice. Phoenix Cloud needs only a Space ID and API key. Self-Hosted asks where the server is and how to reach it.

| Parameter                      | Type                             | Required | Default       | Description                                                                                                                                                                              |
| ------------------------------ | -------------------------------- | -------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Deployment                     | Enum: Phoenix Cloud, Self-Hosted | No       | Phoenix Cloud | Where Phoenix runs.                                                                                                                                                                      |
| Space ID                       | String                           | Yes\*    | *(empty)*     | The Phoenix Cloud space that receives the traces: the part of the space URL after `/s/`. For `https://app.phoenix.arize.com/s/my-space`, enter `my-space`. Shown for Phoenix Cloud.      |
| Hostname                       | String                           | Yes\*    | *(empty)*     | Hostname or IP address of the Phoenix server, with no scheme, port, or path. Shown for Self-Hosted.                                                                                      |
| Protocol                       | Enum: HTTP, gRPC                 | No       | HTTP          | The OTLP protocol. Shown for Self-Hosted, since Phoenix Cloud accepts HTTP only.                                                                                                         |
| Port                           | Network Port                     | No       | 6006          | The server's HTTP port. Shown for Self-Hosted with HTTP.                                                                                                                                 |
| Port                           | Network Port                     | No       | 4317          | The server's gRPC port. Shown for Self-Hosted with gRPC.                                                                                                                                 |
| Path Prefix                    | String                           | No       | *(empty)*     | The path Phoenix is served under, when it sits behind a proxy at a sub-path (the server's `PHOENIX_HOST_ROOT_PATH`). Traces go to `<prefix>/v1/traces`. Shown for Self-Hosted with HTTP. |
| API Key                        | String                           | Yes\*    | *(empty)*     | The Phoenix API key, sent as `authorization: Bearer <key>`. Required for Phoenix Cloud. Leave it blank for a self-hosted server without authentication. Sensitive value.                 |
| Project Name                   | String                           | No       | *(empty)*     | The Phoenix project the traces land in. Sets the `openinference.project.name` resource attribute. Leave blank to keep whatever project name the application already sets.                |
| Override Existing Project Name | Boolean                          | No       | false         | Replace a project name the application already set. When off, the project name only fills in traces that lack one. Shown when Project Name is set.                                       |

\* Space ID and API Key are required for Phoenix Cloud, and Hostname is required for Self-Hosted.

#### TLS

Shown for Self-Hosted. Phoenix Cloud always uses TLS.

| Parameter                         | Type    | Required | Default   | Description                                                                                             |
| --------------------------------- | ------- | -------- | --------- | ------------------------------------------------------------------------------------------------------- |
| Enable TLS                        | Boolean | No       | false     | Connect to the server over TLS. Turn this on when the server, or a proxy in front of it, serves HTTPS.  |
| Skip TLS Certificate Verification | Boolean | No       | false     | Skip verification of the server's certificate. Shown when TLS is enabled. Not recommended.              |
| TLS Certificate Authority File    | String  | No       | *(empty)* | A CA file used to validate the server's certificate, such as an internal CA. Shown when TLS is enabled. |
| Mutual TLS                        | Boolean | No       | false     | Authenticate the collector to the server with a client certificate. Shown when TLS is enabled.          |
| TLS Client Certificate File       | String  | Yes\*    | *(empty)* | Path to the client certificate. Shown when Mutual TLS is enabled.                                       |
| TLS Client Private Key            | String  | Yes\*    | *(empty)* | Path to the client private key. Shown when Mutual TLS is enabled.                                       |

\* Required only when Mutual TLS is enabled.

#### Advanced

| Parameter          | Type                      | Required | Default   | Description                                                                                                                                                                           |
| ------------------ | ------------------------- | -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compression        | Enum: none, gzip, deflate | No       | gzip      | Compression applied to each HTTP request. Shown for Phoenix Cloud and for Self-Hosted with HTTP.                                                                                      |
| Compression        | Enum: none, gzip          | No       | gzip      | Compression applied to each gRPC request. Shown for Self-Hosted with gRPC.                                                                                                            |
| Timeout (Seconds)  | Integer                   | No       | 30        | Seconds to wait for each send to complete.                                                                                                                                            |
| Additional Headers | Map                       | No       | *(empty)* | Extra headers attached to each request. An `authorization` header here replaces the bearer token built from the API Key, for servers behind a proxy that expects its own credentials. |

#### Supported Retry and Queuing Settings

These settings are on the Delivery tab.

| Parameter                  | Type      | Required | Default | Description                                                                                                             |
| -------------------------- | --------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------- |
| Enable Batching            | Boolean   | No       | true    | Batch spans before sending.                                                                                             |
| Send Batch Size            | Integer   | Yes      | 512     | Spans per batch that trigger a send, even before the timeout. Shown when batching is enabled.                           |
| Send Batch Max Size        | Integer   | Yes      | 512     | The largest batch sent. Larger batches are split. Shown when batching is enabled.                                       |
| Batch Timeout              | Duration  | Yes      | 5s      | Time after which a batch is sent, even if it isn't full. Shown when batching is enabled.                                |
| Enable Retry on Failure    | Boolean   | No       | true    | Resend traces that failed to send.                                                                                      |
| Initial Interval (Seconds) | Integer   | No       | 5       | Seconds to wait after the first failure before retrying. Shown when retry is enabled.                                   |
| Max Interval (Seconds)     | Integer   | No       | 30      | Upper bound, in seconds, on retry backoff. Shown when retry is enabled.                                                 |
| Max Elapsed Time (Seconds) | Integer   | No       | 300     | Seconds spent retrying a batch before giving up. Shown when retry is enabled.                                           |
| Enable Sending Queue       | Boolean   | No       | true    | Buffer traces in memory so a short network outage doesn't drop them.                                                    |
| Number of Consumers        | Integer   | No       | 10      | Consumers that send batches from the queue. Shown when the sending queue is enabled.                                    |
| Queue Size                 | Integer   | No       | 1000    | Batches kept in memory before new ones are dropped. Shown when the sending queue is enabled.                            |
| Enable Persistent Queuing  | Boolean   | No       | true    | Buffer traces on disk so they survive network outages and collector restarts. Shown when the sending queue is enabled.  |
| Persistent Queue Storage   | Extension | Yes      | Pebble  | The storage extension that holds the persistent queue. Shown when the sending queue and persistent queuing are enabled. |

### Examples

#### Self-hosted server over gRPC with mutual TLS

<figure><img src="https://1405008107-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgmiOMzBfoNFwmKJFHMcJ%2Fuploads%2Fgit-blob-c76277449bf2a1ed590b26c42d306ecc7494c0a4%2Fintegrations-destinations-arize-phoenix-image-2.png?alt=media" alt="Bindplane docs - Arize Phoenix - image 2"><figcaption></figcaption></figure>

Set Deployment to Self-Hosted, Protocol to gRPC, and the gRPC port your server listens on, then fill in the TLS tab.

#### Self-hosted server behind a proxy at a sub-path

<figure><img src="https://1405008107-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgmiOMzBfoNFwmKJFHMcJ%2Fuploads%2Fgit-blob-7e573129598dd64bd0a48ed2bfa747d4fabcccfe%2Fintegrations-destinations-arize-phoenix-image-3.png?alt=media" alt="Bindplane docs - Arize Phoenix - image 3"><figcaption></figcaption></figure>

When Phoenix is served at `https://tools.example.com/phoenix`, set Hostname to `tools.example.com`, Port to 443, and Path Prefix to `/phoenix`, then enable TLS.

### Configuration Tips

#### Batch Size

* LLM spans carry prompts and completions, so they're much larger than typical spans. A Phoenix gRPC server rejects messages over 4 MB, so keep gRPC batches small. Prefer HTTP if you need larger batches.

#### Project Name

* Project Name sets the `openinference.project.name` resource attribute, which Phoenix uses to pick the project a trace lands in.
* With Override Existing Project Name off, applications that set their own project name keep it, and the rest go to the project configured here.
* Turn the override on to send everything from this pipeline to one project, whatever the application set.

### Troubleshooting

#### Requests rejected as unauthorized

Symptoms: `401 Unauthorized` in the collector logs.

Solutions:

1. For Phoenix Cloud, confirm the API key belongs to the space in Space ID.
2. For a self-hosted server with authentication enabled, confirm API Key is set.
3. Check Additional Headers for an `authorization` entry, which replaces the API key.

#### gRPC sends fail with a message size error

Symptoms: `ResourceExhausted` or "received message larger than max" in the collector logs.

Solutions:

1. Lower Send Batch Max Size.
2. Switch Protocol to HTTP.

### Standalone Destination

```yaml
apiVersion: bindplane.observiq.com/v1
kind: Destination
metadata:
  name: arize-phoenix
spec:
  type: arize_phoenix
  parameters:
    - name: deployment
      value: Phoenix Cloud
    - name: space_id
      value: REPLACE_WITH_SPACE_ID
    - name: api_key
      value: REPLACE_WITH_API_KEY
    - name: project_name
      value: my-llm-app
```

### Related Resources

* [Phoenix: Self-hosting](https://arize.com/docs/phoenix/self-hosting)
* [Phoenix: Authentication](https://arize.com/docs/phoenix/self-hosting/features/authentication)
* [Phoenix: Configuration](https://arize.com/docs/phoenix/self-hosting/configuration)
* [OTLP Exporter (otlpexporter) reference](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/otlpexporter/README.md)
* [OTLP HTTP Exporter (otlphttpexporter) reference](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/otlphttpexporter/README.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.bindplane.com/integrations/destinations/arize-phoenix.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
