Implement distributed tracing in Go by initializing an OpenTelemetry tracer provider, setting it as global, and creating a tracer for your service.
package main
import (
"context"
"log"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/sdk/trace"
)
func main() {
ctx := context.Background()
exporter, _ := stdouttrace.New(stdouttrace.WithPrettyPrint())
provider := trace.NewTracerProvider(trace.WithSyncer(exporter))
otel.SetTracerProvider(provider)
defer provider.Shutdown(ctx)
tracer := otel.Tracer("my-service")
ctx, span := tracer.Start(ctx, "request-handling")
defer span.End()
log.Println("Processing request with tracing")
}
- Install the OpenTelemetry SDK and exporter:
go get go.opentelemetry.io/otel/sdk/trace go.opentelemetry.io/otel/exporters/stdout/stdouttrace - Create a new tracer provider with your chosen exporter (e.g., stdout or OTLP).
- Set the provider globally using
otel.SetTracerProvider. - Create a tracer instance with
otel.Tracer("service-name"). - Start a span in your function using
tracer.Start(ctx, "operation-name")and deferspan.End().