Jaeger v2 with Watchtower (TRC-028)

Embed
Preview of the card
<a href="https://forumulate.com/p/watchtower/guides/jaeger-v2"><img src="https://forumulate.com/api/public/orgs/watchtower/spaces/guides/pages/bcb9dc60-84ee-4dc6-b104-f891697fefb0/social-card.svg?v=3e7ae33eec8b" alt="Jaeger v2 with Watchtower (TRC-028)" width="600" height="315"></a>

Jaeger v2 is an OpenTelemetry Collector distribution, so both directions use protocols Watchtower already serves. Nothing is embedded; Jaeger stays your component.

Send traces from Jaeger v2 to Watchtower

Add an otlphttp exporter to the Jaeger v2 config. The token is an ingest credential with scope ingest:traces (POST /v1/projects/{prj}/credentials).

exporters:
  otlphttp/watchtower:
    endpoint: https://<gateway-host>
    headers:
      Authorization: "Bearer ${env:WT_INGEST_TOKEN}"
    sending_queue: { enabled: true, storage: file_storage }
    retry_on_failure: { enabled: true }
service:
  pipelines:
    traces:
      receivers: [otlp, jaeger, zipkin]
      exporters: [otlphttp/watchtower]

Jaeger v1 clients that post Thrift/JSON to the collector keep working; clients that talk to Watchtower directly can use POST /api/traces (Jaeger), POST /api/v2/spans and POST /api/v1/spans (Zipkin) on the gateway.

Use Jaeger UI on Watchtower traces

Point Jaeger UI (or Grafana's Jaeger data source) at the Jaeger Query JSON API Watchtower serves: https://<api-host>/v1/projects/{prj}/jaeger/api with a read-scoped API key as the bearer token. It supports services, services/{svc}/operations, traces (search) and traces/{id}. A search returns at most 50 traces of 1000 spans each inside one 30 s deadline (the bound that Jaeger's trace-search security advisory GHSA-55pj-w5q5-r3m6 asks for); partial says when something was cut.

Updated