How do I send traces from an OpenTelemetry Collector to Rius?
Rius receives traces from an OpenTelemetry Collector through the otlphttp exporter, pointed at https://ingest.eu.console.rius-glassflow.com with your API key in an authorization header. Use the protobuf encoding, which is the default and the recommended one. The exporter adds /v1/traces to the base URL itself. Once the first trace arrives, open it in the console and confirm the model, token counts and cost.
How it works
The Collector sends spans to Rius over OTLP on HTTP. Rius has no gRPC endpoint, so the plain otlp exporter, which speaks gRPC, cannot deliver to it. Use otlphttp instead.
- Endpoint: give the exporter the base URL,
https://ingest.eu.console.rius-glassflow.com. It appends/v1/traces, so the full path ishttps://ingest.eu.console.rius-glassflow.com/v1/traces. The subdomain carries your workspace’s region, and this host is for theeuregion. - Protocol: OTLP over HTTP, either
http/protobuf(recommended) orhttp/json. In the exporter this is theencodingsetting, andprotois the default. gzip compression is accepted, and a request body can be up to 16 MiB. - Authorization: the key goes in an
authorizationheader asBearerfollowed by your API key. The key also decides which workspace the traces land in. - Traces only: Rius ingests traces, not OTLP metrics or logs, so put the exporter in your
tracespipeline.
The Collector forwards spans unchanged. What each span carries depends on the attributes your applications emit, and Rius computes the cost from the model and token counts on the span. You never send a cost value. The Collector page covers this setup in full, and Interoperability lists the other ways to send traces without the SDK.
Set it up
- Create an API key in the console. Keys start with
ri_. Make it available to the Collector process as an environment variable, so the key stays out of the config file:
export RIUS_API_KEY="ri_..."- Add the exporter and put it in your traces pipeline:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch: {}
exporters:
otlphttp/glassflow:
endpoint: https://ingest.eu.console.rius-glassflow.com
# proto is the default encoding and the recommended one; json works too
encoding: proto
compression: gzip
headers:
authorization: Bearer ${env:RIUS_API_KEY}
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlphttp/glassflow]-
To try Rius next to a backend you already use, add
otlphttp/glassflowto the sameexporterslist. Your applications do not change. -
Restart the Collector and run one traced LLM call through it.
-
Open Traces in the console and open the new trace. The span for the model call should show a model name, token counts and cost.
If nothing arrives, check these in order:
- A
401from the endpoint means the API key is wrong or revoked. - Confirm the exporter is
otlphttp, nototlp. - Confirm the endpoint is the base URL, with no
/v1/tracesadded by hand.
If a span arrives without a model or tokens, attributes were lost on the way. A Collector attributes or transform processor may be stripping gen_ai.* keys. A span over OpenTelemetry’s default limit of 128 attributes can also lose some, and the span attribute reference explains that limit. The guide Trace LLM calls with OpenTelemetry compares this path with the others on one page.
What you get
- Traces from every application behind the Collector arrive in one workspace, chosen by the API key.
- Each model call shows its model, token usage and messages, as long as your instrumentation emits them.
- Cost per call appears with no cost value sent from your side. Rius computes it from the model and token counts as a list-price estimate in US dollars.
- A single egress point with local buffering, plus the option to fan the same traces out to a second backend.
- A short first check: one trace in the console with a model name, token counts and cost confirms the whole path works.
When something else fits
If you have no tracing yet and use Python or TypeScript, the Rius SDK needs one init() call and no Collector. If an application already exports OTLP over HTTP, you can point its exporter at the Rius endpoint directly, as the Interoperability page describes. Use the Collector when you want routing, buffering or fan-out.