-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Description
Feature Description
Vitess currently supports two tracing backends: opentracing-jaeger and opentracing-datadog. Both are built on the OpenTracing API, which has been superseded by OpenTelemetry
The jaeger-client-go library we depend on has been archived for a while now and the Jaeger project themselves recommend migrating to OpenTelemetry. Our Datadog plugin uses the OpenTracing bridge in dd-trace-go, which is also the old way of doing things
OpenTelemetry has become the industry standard for observability. Pretty much every tracing backend worth using supports OTLP natively now: Jaeger (v1.35+), Grafana Tempo, Datadog Agent, Honeycomb, etc. A single OTLP exporter replaces our need for vendor-specific client libraries
Why this matters
- Dead dependencies —
jaeger-client-gois archived. No security patches, no bug fixes. We're shipping a dependency the upstream maintainers have abandoned - Dependency weight —
dd-trace-go.v1pulls in a heavy transitive dependency tree. Removing it in favour of the OTel SDK would trimgo.modsignificantly - Vendor neutrality — with OTLP, users point
--otel-endpointat whatever backend they use. No more needing a Vitess-side plugin per vendor - Industry direction — OpenTracing is done. OpenTelemetry is the CNCF standard. We should be on it
Proposed approach
The existing tracingService interface in go/trace/ is a clean abstraction layer — 348+ call sites use trace.NewSpan/trace.Span without knowing the backend. This means adding OTel is well-contained:
- Add a new
--tracer opentelemetrybackend using the OTel SDK + OTLP/gRPC exporter - Deprecate
opentracing-jaegerandopentracing-datadogfor one release cycle (log a warning at startup) - Remove the old backends in the following release, along with their dependencies
Use Case(s)
Any Vitess user that wants distributed tracing. Today they're forced to use archived/legacy client libraries. This gives them a modern, vendor-neutral option