Custom Instrumentation of Go Applications with the OpenTelemetry API
Support for custom instrumenting your application using the OpenTelemetry API and sending the spans to Datadog is in beta.
If your code is custom instrumented with the OpenTelemetry (OTel) API, you can configure it to generate Datadog-style spans and traces to be processed by the Datadog tracing library for your language, and send those to Datadog.
The Datadog tracing library, when configured as described here, accepts the spans and traces generated by OpenTelemetry-instrumented code, processes the telemetry, and sends it to Datadog. You can use this approach, for example, if your code has already been instrumented with the OpenTelemetry API, or if you want to instrument using the OpenTelemetry API, and you want to gain the benefits of using the Datadog tracing libraries without changing your code.
If you’re looking for a way to instrument your code with OpenTelemetry and then send span data to Datadog without going through the Datadog tracing library, see OpenTelemetry in Datadog.
Requirements and limitations
- Datadog Go tracing library
dd-trace-go
version 1.5.0 or greater. - Go version 1.18 or greater.
- The Datadog OpenTelemetry API implementation is dependent on upstream OpenTelemetry Go.
The following OpenTelemetry features are implemented in the Datadog library as noted:
Configuring OpenTelemetry to use the Datadog trace provider
Add your desired manual OpenTelemetry instrumentation to your Go code following the OpenTelemetry Go Manual Instrumentation documentation.
Install the OpenTelemetry package go.opentelemetry.io/otel
using the command:
go get go.opentelemetry.io/otel
Install the Datadog OpenTelemetry wrapper package gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry
using the command:
go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry
Import packages in the code:
import (
"go.opentelemetry.io/otel"
ddotel "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentelemetry"
)
Create a TracerProvider, optionally providing a set of options, that are specific to Datadog APM, and defer the Shutdown method, which stops the tracer:
provider := ddotel.NewTracerProvider()
defer provider.Shutdown()
Use the Tracer Provider instance with the OpenTelemetry API to set the global TracerProvider:
otel.SetTracerProvider(provider)
Run your application.
Datadog combines these OpenTelemetry spans with other Datadog APM spans into a single trace of your application.