Lesson 41 of 60 · Go
Logging & Structured Tracing with OpenTelemetry
Duration: 25 minutes
OpenTelemetry (OTel)
This lesson explains the main concept clearly with beginner-friendly examples and background so you can learn why the code works.
OTel provides observability – traces, metrics, logs.
$ go get go.opentelemetry.io/otel/sdk@latest
$ go get go.opentelemetry.io/otel/exporters/trace/jaeger
import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
"go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/exporters/trace/jaeger"
)
func initTracer() func(context.Context) error {
exp, _ := jaeger.New(jaeger.WithCollectorEndpoint())
tp := trace.NewTracerProvider(trace.WithBatcher(exp))
otel.SetTracerProvider(tp)
return tp.Shutdown
}
Wrap a handler:
func traced(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx, span := otel.Tracer("myapp").Start(r.Context(), "request")
defer span.End()
next.ServeHTTP(w, r.WithContext(ctx))
})
}