What OTLP endpoint and headers does Rius use?
Rius takes OTLP over HTTP at https://ingest.eu.console.rius-glassflow.com/v1/traces, with your API key in an Authorization: Bearer header. You send protobuf (recommended) or JSON, and you can enable gzip. Each request can be up to 16 MiB. You can set all of this with the standard OTEL_EXPORTER_OTLP environment variables, with no Rius SDK.
How it works
Rius ingests traces over one HTTP endpoint. These are the details your exporter needs:
- URL:
https://ingest.eu.console.rius-glassflow.com/v1/traces. The host carries your workspace’s region in the subdomain, and the examples here useeu. Use your workspace’s region. - Header:
Authorization: Bearerfollowed by an API key from the console. The key decides which workspace the traces land in. Keys start withri_, and older keys that start withgf_keep working. - Protocol: OTLP over HTTP, either
http/protobuf(recommended) orhttp/json. There is no gRPC endpoint, so an exporter that speaks gRPC cannot send here. JSON requests get JSON replies. - Content type:
application/x-protobuforapplication/json. - Compression:
Content-Encoding: gzipis accepted. Span batches compress well, so it is worth enabling. - Size limit: 16 MiB per request, measured on the body and on its decompressed form. Default exporter batch sizes sit far below this.
- Signals: traces only. Rius does not ingest OTLP metrics or logs.
The base endpoint variable and the traces-specific variable differ in one way. An exporter that reads OTEL_EXPORTER_OTLP_ENDPOINT appends /v1/traces itself, so you give it the base URL. OTEL_EXPORTER_OTLP_TRACES_ENDPOINT is used as written, so you give it the full path.
Set it up
-
Create an API key in the console. The trace LLM calls with OpenTelemetry guide covers the full setup for each sender.
-
Export the standard variables with the base URL. They take effect through the SDK: register a tracer provider with an OTLP/HTTP exporter that has no endpoint or headers set in code (in Java, through
AutoConfiguredOpenTelemetrySdk), or run the zero-code agent in Python, Node.js, Java or .NET:
export OTEL_EXPORTER_OTLP_ENDPOINT="https://ingest.eu.console.rius-glassflow.com"
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer <your API key>"
export OTEL_SERVICE_NAME="my-agent"
# Keep long LLM spans whole; the default of 128 attributes is too low
export OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT=4096- If you prefer variables that apply only to traces, use the traces-specific set. The endpoint carries the full path, and the space in the header is written as
%20:
export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://ingest.eu.console.rius-glassflow.com/v1/traces
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_TRACES_HEADERS="Authorization=Bearer%20ri_..."-
Set
OTEL_EXPORTER_OTLP_PROTOCOLtohttp/protobufexplicitly. In Node,@opentelemetry/exporter-trace-otlp-httpsends JSON, which Rius accepts, but@opentelemetry/exporter-trace-otlp-protois the better choice. -
If you send through an OpenTelemetry Collector, use the
otlphttpexporter, nototlp, which speaks gRPC. Give it the base URL, setcompression: gzipand pass the key inheaders. -
Run one traced call and open Traces in the console. If a request is rejected, the status code tells you why:
| Status | Cause |
|---|---|
400 | The body is not valid OTLP for its content type. |
401 | The API key is wrong or revoked. |
402 | Billing blocks ingest, for example because the trial has ended. |
413 | The body is over 16 MiB. Send smaller batches. |
415 | The content type is neither application/x-protobuf nor application/json. |
429 | The workspace is over its plan’s ingest rate. Retry after the Retry-After delay. |
503 | A temporary failure. Retry with backoff. |
The span attribute reference lists which attributes to set so the spans get model, token and cost analytics.
What you get
- Traces from any OpenTelemetry SDK or Collector arrive in the workspace that your API key belongs to, with no Rius SDK and no re-instrumentation.
- Each LLM call shows its model and token counts, and Rius computes the cost on its side. You never send a cost attribute.
- Clear errors. A
401,413or415points to the key, the batch size or the content type. - A rate hint. A
429carriesRetry-After, in seconds, up to 60, so your exporter knows how long to back off.
When something else fits
- If your tooling only speaks OTLP over gRPC, or exports metrics and logs, it cannot send to Rius, which takes OTLP over HTTP and traces only.
- If you have no tracing yet in Python or TypeScript, the Rius SDK sets up the exporter, endpoint and header for you with one
init()call.
Related
Still stuck? Get help