Skip to content

embrace OTel - drop OpenTracing #3939

@szuecs

Description

@szuecs

In the past we started as early adopters of the OpenTracing (OT) standard, later there was OpenCensus established and these standardization of distributed tracing ended up in OTel, that has since some years broad usage.

OTel has defined a lot of Required/Conditionally Required/Recommended/Opt-In structure for span attributes defined requirement-levels, examples:

server.address Stable Recommended
network.peer.address Stable Recommended
service.peer.name Development Opt-In

We use at least (extracted from ./proxy/tracing.go):

  • client.request
  • component
  • error
  • blocked
  • flow_id
  • hostname
  • http.host
  • http.method
  • http.remote_ip
  • http.path
  • http.url
  • network.peer.address
  • http.status_code
  • skipper.route_id
  • span.kind

The names were chosen when OTel was not there excluding network.peer.address, which was chosen to follow the available OTel standard.
Today, we should rename all of the OTel Attributes (OT Tags) to follow the OTel spec.
The migration can be done as follows:

  1. PR that adds all OTel Attribute names (additionally to the old Tag names)
  2. PR with minor version upgrade that deletes all old Tag names and drop OT support completely in all skipper code and replace with OTel.

Reasoning:
Most people will have migrated to vendors ( examples dash0, Grafana, ...) or OSS Software (example https://www.jaegertracing.io/) that is OTel capable in the backend. With the mentioned approach everyone is able to migrate in their pace. Likely checks/alerts/dashboards have to change to have the OTel attributes is use.

In the past we had a discussion how to achieve the migration and the decision after a 95% implementation of Otel internal showing an OT interface, was that we use the OTel bridge tracer, the recommended approach by the OTel people. We will drop the bridge tracer and the github.com/zalando/skipper/tracing package to not carry old dependencies with us.

The skipper.Options will remove the members:

  • OpenTracing []string
  • OpenTracingInitialSpan string
  • OpenTracingExcludedProxyTags []string
  • OpenTracingDisableFilterSpans bool
  • OpenTracingLogFilterLifecycleEvents bool
  • OpenTracingLogStreamEvents bool
  • OpenTracingClientTraceByTag bool
  • OpenTracingBackendNameTag bool
  • OpenTracingTracer ot.Tracer

We will check which options we will rename (prefix change: OpenTracing -> OTel) to reuse the functionality. All parts of the code base that use an ot.Tracerwill be changed to useotel.Tracer`.

References:

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions