Skip to main content
Brave Programmer Logo

BraveProgrammer

BraveProgrammer

HomeProjectsBlogsCoursesLessonsAbout

Site footer

BraveProgrammer

Free coding courses, practical tutorials, and real projects from BraveProgrammer. Learn web development with React, Next.js, and TypeScript.

Navigation

  • Home
  • Projects
  • Blogs
  • Courses

Resources

  • About
  • Lessons

© 2026 BraveProgrammer. All rights reserved.

  1. Courses
  2. /
  3. Go Programming Bootcamp

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))
    })
}

Info

Combine tracing with structured logs (zap) for full‑stack observability.

Previous: Building a Simple CLI Tool – Argument ParsingNext: Embedding Files – `embed` Package (Go 1.16+)