tessary.call_site.id attribute, which the exporter cannot supply for you: see The call-site tag.
Prerequisites
- The Endpoint and Bearer Token from the connect gate. Past the gate, use Settings → Sources → Connect a source: select Create a connection token, then take the token out of the Header field, which shows it as
Authorization: Bearer <token>. The endpoint is your Tessary origin plus/v1/traces. - An application that already builds OpenTelemetry spans, or a collector that already receives them. If neither exists yet, instrument your agent first.
Use environment variables
Reach for this form first. Every OpenTelemetry SDK reads these variables, they need no code change, and they cannot drift from an SDK’s own API.<token> with the value from the connect screen.
Where an application already sets one of these variables for another destination, this form cannot express both. Use one of the forms below instead.
Add a span processor in code
For a codebase that builds its exporter programmatically. Add a processor to the provider that already exists. Never construct a secondTracerProvider: spans on a provider the Tessary exporter is not registered on are never exported, which looks identical to a missing tag.
TESSARY_ENDPOINT and TESSARY_TOKEN stand in for however the repository reads configuration. Read the token from the environment or a secret store, not from a literal in source.
Fan out from a collector
Where an OpenTelemetry Collector already runs, add Tessary as another exporter on the traces pipeline and change nothing in the application.transform processor to set tessary.call_site.id one layer out.
Verify it works
Run the application and watch the connect screen, which updates itself.Spans arrive. The connect gate either opens, if the spans carry
tessary.call_site.id, or replaces itself with the untagged state and a live count of spans received against spans tagged. Either outcome means the exporter is working.Reference
Environment variables
What the endpoint accepts
Span requirements carries every attribute the receiver reads, and Ingestion contract carries the batch, body, and payload limits.
Transports
The HTTP receiver is always on. A gRPC receiver exists and is opt-in throughTESSARY_INGEST_OTLP_TRANSPORT, documented in Ingest and OTLP. The default Docker Compose configuration does not publish the gRPC port to the host, so HTTP is the reachable transport on a stock self-hosted install.
Related pages
The call-site tag
The attribute an exporter cannot supply for you.
Instrumentation troubleshooting
When nothing arrives, or the old backend still gets traces and Tessary does not.
