Deploy Jaeger (all-in-one for dev, separate components for production) and expose the Jaeger collector ports: 4317/4318 for OTLP, 14268 for Thrift HTTP, or 6831 UDP for Thrift compact
Configure your application's OpenTelemetry SDK to export traces via OTLP to the Jaeger collector endpoint, or install a Jaeger client library and configure the remote sampler endpoint
Set sampling strategy either via environment variable (OTEL_TRACES_SAMPLER=parentbased_traceidratio with OTEL_TRACES_SAMPLER_ARG=0.1 for 10%) or via Jaeger's remote sampling config endpoint
Query traces via the Jaeger UI at port 16686 or via the HTTP API at '/api/traces?service=<service_name>&operation=<op>&limit=20&lookback=1h'
Retrieve a specific trace by ID via GET '/api/traces/{traceID}' which returns a JSON envelope with 'data' array of trace objects containing spans and process metadata
Known gotchas
Jaeger's native Thrift client libraries are in maintenance mode; new projects should use OpenTelemetry SDKs with OTLP export to Jaeger rather than Jaeger-specific clients
The all-in-one deployment uses in-memory storage which is wiped on restart; production deployments require a persistent backend (Elasticsearch, Cassandra, or Badger) configured via environment variables
Jaeger's adaptive sampling requires the sampling manager to have access to throughput data from all collectors; single-replica deployments or collectors without shared storage cannot accurately compute adaptive rates
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp