in devops/otel-trace-exemplar/recursive/main.go [136:175]
func main() {
log.Print("starting tracer provider")
tp, err := initTracer()
if err != nil {
log.Fatalf("failed to start OpenTelemetry Trace config: %v", err)
}
mp, err := initMeter()
if err != nil {
log.Fatalf("failed to start OpenTelemetry Meter config: %v", err)
}
defer func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatalf("failed to shutdown TraceProvider: %v", err)
}
if err := mp.Shutdown(context.Background()); err != nil {
log.Fatalf("failed to shutdown MeterProvider: %v", err)
}
}()
log.Print("launch telemetry data generator")
meter := mp.Meter("demo")
histogram, err = meter.Int64Histogram(
"exemplar/root.latency",
metric.WithDescription("latency of the root handler"),
metric.WithUnit("ms"),
)
if err != nil {
log.Fatalf("failed to initialize histogram: %v", err)
}
http.HandleFunc("/_hello", func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("ok"))
})
otelHandler := otelhttp.NewHandler(http.HandlerFunc(root), "client.handler")
http.Handle("/root", otelHandler)
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatalf("failed to start server: %v", err)
}
}