Skip to content

Send OpenTelemetry traces, metrics, and logs from elsai-arms to the ARMS platform through the authenticated ingest API. Do not send SDK traffic to the collector on ports 4317 or 4318 — those stay internal.

Authentication: two paths

UseURLAuthentication
Telemetryhttps://<arms-host>/api/ingestOTLP header x-api-key (otlp_headers or OTEL_EXPORTER_OTLP_HEADERS)
Vault / evals / platform HTTPARMS base URL (ELSAI_ARMS_URL)Authorization: Bearer + ELSAI_ARMS_API_KEY

ELSAI_ARMS_API_KEY does not automatically authenticate OTLP. You must set otlp_headers (or OTEL_EXPORTER_OTLP_HEADERS) for traces, metrics, and logs.

Create a key in the ARMS UI under Settings → API Keys (/settings/api-keys). The same key can serve both paths, but the mechanisms differ.

The SDK exporter appends the signal path, so traffic lands at:

  • POST /api/ingest/v1/traces
  • POST /api/ingest/v1/metrics
  • POST /api/ingest/v1/logs

Default OTLP protocol is HTTP. Set OTEL_EXPORTER_OTLP_PROTOCOL=grpc only if you have a gRPC collector in front — the ARMS ingest API is HTTP.

If you omit otlp_endpoint and OTEL_EXPORTER_OTLP_ENDPOINT, the SDK writes to the console exporter and nothing reaches ARMS.

Ingest failures

SituationStatus
Missing API key401 Missing ingestion API key
Invalid API key401 Invalid ingestion API key
Payload too large413
Collector unavailable502

1. Get your credentials

If you do not have an ARMS instance yet, see On-prem ARMS.

Typical ingest URLs:

  • Local / split API: http://localhost:3000/api/ingest or your API host
  • External / ingress: https://<your-arms-host>/api/ingest

2. Instrument your application

Install

bash
pip install --extra-index-url https://arms-packages.elsaifoundry.ai/root/elsai-arms/ elsai-arms==3.0.3

SDK

python
import elsai_arms

elsai_arms.init(
    otlp_endpoint="https://<arms-host>/api/ingest",
    otlp_headers={"x-api-key": "<api-key>"},
    # optional — Vault and offline evals:
    elsai_arms_url="https://<arms-host>",
    elsai_arms_api_key="<api-key>",
)

Environment variables

bash
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<arms-host>/api/ingest"
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=<api-key>"
export OTEL_SERVICE_NAME="my-ai-service"
export OTEL_DEPLOYMENT_ENVIRONMENT="production"
# optional — Vault and offline evals:
export ELSAI_ARMS_URL="https://<arms-host>"
export ELSAI_ARMS_API_KEY="<api-key>"
python
import elsai_arms

elsai_arms.init()

CLI

bash
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<arms-host>/api/ingest"
export OTEL_EXPORTER_OTLP_HEADERS="x-api-key=<api-key>"
export OTEL_SERVICE_NAME="my-ai-service"
export OTEL_DEPLOYMENT_ENVIRONMENT="production"

elsai-arms-instrument python app.py

The CLI reads OTEL_EXPORTER_OTLP_*. It does not attach ELSAI_ARMS_API_KEY to OTLP for you.

See SDK configuration for the full parameter list.

3. Open the ARMS dashboard

After you send traffic, open the ARMS UI (typically http://localhost:3000 locally). Traces appear under Monitoring → Telemetry. Dashboards, cost columns, and evaluations use the same ingested data.

Copyright © 2026 elsai foundry.