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.4

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.