Lab 04: Distributed Tracing
Overview
Step 1: OpenTelemetry SDK Setup
package telemetry
import (
"context"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
)
func InitTracing(ctx context.Context) (func(), error) {
// OTLP gRPC exporter
exporter, err := otlptracegrpc.New(ctx,
otlptracegrpc.WithEndpoint("otel-collector:4317"),
otlptracegrpc.WithInsecure(),
)
if err != nil {
return nil, err
}
// Resource: service metadata
res := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceName("my-service"),
semconv.ServiceVersion("1.0.0"),
semconv.DeploymentEnvironment("production"),
)
// TracerProvider with batching
tp := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(res),
sdktrace.WithSampler(sdktrace.ParentBased(
sdktrace.TraceIDRatioBased(0.1), // 10% sampling
)),
)
otel.SetTracerProvider(tp)
return func() {
tp.Shutdown(ctx)
}, nil
}Step 2: Creating Spans
Step 3: W3C TraceContext Propagation
Step 4: Prometheus Metrics
Step 5: pprof Integration
Step 6: Structured Logging with slog (Go 1.21+)
Step 7: Baggage Propagation
Step 8: Capstone — Tracing Pattern Demo
Summary
Feature
OTel API
Notes
Last updated
