Skip to main content
Request records always stay in your organization’s own database. Log destinations also sends a copy to your own systems, never with prompt or response text. Open it from the toolbar in Logs, and choose Save changes when done. Each destination starts from the moment you save it. Earlier requests are not sent. If it can’t be reached, sending pauses and resumes where it stopped, without losing data.

OpenTelemetry

Log destinations panel with Add destination and the OpenTelemetry collector endpoint and headers

Log destinations: a storage bucket and an OpenTelemetry collector.

1

Store the collector's headers

In Secrets, store the headers, such as the API key, as JSON ({"api-key": "..."}) or comma-separated key=value pairs.
2

Point at the collector

Under OpenTelemetry, turn on Send traces to a collector, enter the Endpoint (the HTTP port, usually 4318; /v1/traces is added when the URL has no path), pick the secret under Headers, and save.
Only OTLP over HTTP is supported. A gRPC endpoint (usually port 4317) receives nothing. A collector saved for gRPC shows This collector was saved for gRPC: point it at the HTTP port and save again.
The collector must be reachable from where agents run: public on xpander cloud, reachable from your cluster when self-hosted.
Each span follows the OpenTelemetry GenAI conventions and carries the provider and models, tokens (input, output, cache, reasoning), cost in USD, timings, the IDs of the person, group, agent, task and conversation, the key name, client, trigger, license model and status. It never carries prompt or response text, an email address or error text. Calls of one agent run or coding session share a trace ID.
Create a Send-Your-Data API key in Coralogix, then store this secret in xpander. The application and subsystem names are yours to choose:
Set Endpoint to https://ingress.<your Coralogix domain>/v1/traces, such as https://ingress.eu2.coralogix.com/v1/traces. Spans arrive with the service name xpander-llm-gateway, grouped by your application and subsystem names.

Storage bucket

Store a write credential in Secrets (formats under Bucket credentials below). Then, under Destination, choose Add destination, pick the storage, and fill in Bucket (Container for Azure), an optional Prefix such as gateway/ (no leading slash), the Region (S3 only) and the Credential. Send test writes <prefix>/_xpander_test.json and reports Test row written, or The test failed with the reason: missing bucket, wrong region (it names the right one), access denied, a rejected key, or a blocked storage address. Save. Turn off stops the copy. Files land under <prefix>/dt=YYYY-MM-DD/hour=HH/ (UTC hour of the call), one row per request. Changing the bucket or prefix restarts the export from that moment. Retention in Policies does not delete exported files: set a lifecycle rule on the bucket.
Rows never hold prompt or response text, email addresses, IP addresses or error text.

The audit log

Every destination also receives the organization’s audit log: sign-ins, setting changes, credential use, and a data access row for each call that reads or writes your data. That covers skill calls agents make through xpander (API connectors, custom functions, knowledge bases, file storage) and calls people make through the MCP gateway with their own key. A data access row names who acted, on whose behalf, the skill, the action, read or write, the result, the client and the time, never the request or response. The audit export runs only when the AI Gateway is on for the organization. Skills served over MCP that an agent’s runtime calls directly are in the task’s record, but write no data access row, so they don’t reach log destinations.

Self-hosted installs

On Hybrid and Air-Gapped, both destinations are sent from inside your install and only need to be reachable from your cluster. Air-Gapped can use S3-compatible storage in your network through endpoint_url.

Next steps

Read requests in Logs

Usage and every request.

Store the destination's credential

Add it as a secret.