Go - Observability (OpenTelemetry)

Beginner 10/10 Teacher 10/10 Architect 10/10

Observability with OpenTelemetry

OpenTelemetry provides vendor-neutral APIs/SDKs for tracing, metrics, and logs. Export to systems like OTLP/Jaeger/Tempo.

Try it: Add an otelhttp middleware to trace an HTTP handler.

Tracer setup (skeleton)

// Pseudo-code; install otel packages in your module to run.
// exporter, _ := otlphttp.New(context.Background())
// tp := sdktrace.NewTracerProvider(
//   sdktrace.WithBatcher(exporter),
//   sdktrace.WithResource(resource.NewWithAttributes(...)),
// )
// otel.SetTracerProvider(tp)
// defer tp.Shutdown(context.Background())

HTTP instrumentation

// h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){ w.Write([]byte("ok")) })
// wrapped := otelhttp.NewHandler(h, "hello")
// http.Handle("/", wrapped)

Common errors

  • Creating multiple tracer providers—use a single shared provider per process.
  • Dropping spans by forgetting to flush/shutdown on exit.

Practice

  • Propagate context between HTTP client/server using otelhttp.Transport.

Quick quiz

  1. What is OTLP?
Show answer OpenTelemetry Protocol for exporting telemetry data to collectors/backends.