OpenTelemetry (any language)
Point any OpenTelemetry SDK — Go, Java / Spring, Ruby / Rails, Rust, Elixir, .NET, Node, Python — at Telescope over OTLP/HTTP JSON.
Telescope accepts OTLP/HTTP traces in JSON encoding. Anything with an OpenTelemetry SDK can send journeys, and they join traces recorded by the Nexus SDKs through the shared W3C trace context.
Configure the exporter
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://services.inverge.net/partner/telescope/otlp/v1/traces
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=http/json
OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-api-key=nxs_live_xxx
OTEL_SERVICE_NAME=billing-serviceJSON only
The endpoint accepts http/json, not protobuf (http/protobuf) or gRPC. Set
the protocol explicitly — many SDKs default to protobuf.
How spans become journeys
All spans of one trace from one service form one batch. A SERVER or
CONSUMER span — or a span with no parent in that service — is its root.
| Span | Becomes |
|---|---|
SERVER with http.request.method | request (method, route, URL, status, client IP, user agent, captured headers) |
CLIENT with http.request.method | http (outgoing call) |
Any span with db.system (db.query.text / db.statement) | query — or redis when the system is Redis |
PRODUCER / CONSUMER with messaging.system | job (dispatched / processed / failed); a consumer is a root |
Event named exception | exception (type, message, stack) — filed in Errors |
| Anything else | span |
Both the current and the older semantic-convention attribute names are read
(http.request.method / http.method, db.query.text / db.statement, …).
Exporters usually ship child spans before their parent. That's handled: when the root arrives, Nexus re-analyses the children already stored, so N+1 and duplicate detection cover the whole batch.
SDKs that only speak protobuf
Some exporters (Go's otlptracehttp, for example) only send protobuf. Run them
through an OpenTelemetry Collector, whose otlphttp exporter can re-encode as
JSON:
receivers:
otlp:
protocols: { grpc: {}, http: {} }
exporters:
otlphttp/nexus:
traces_endpoint: https://services.inverge.net/partner/telescope/otlp/v1/traces
encoding: json
headers: { x-api-key: ${env:NEXUS_API_KEY} }
service:
pipelines:
traces: { receivers: [otlp], exporters: [otlphttp/nexus] }