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
- What is OTLP?