Appearance
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
| Use | URL | Authentication |
|---|---|---|
| Telemetry | https://<arms-host>/api/ingest | OTLP header x-api-key (otlp_headers or OTEL_EXPORTER_OTLP_HEADERS) |
| Vault / evals / platform HTTP | ARMS 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/tracesPOST /api/ingest/v1/metricsPOST /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
| Situation | Status |
|---|---|
| Missing API key | 401 Missing ingestion API key |
| Invalid API key | 401 Invalid ingestion API key |
| Payload too large | 413 |
| Collector unavailable | 502 |
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/ingestor 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.3SDK
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.pyThe 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.