From 134b7b626295ed6cf1df19af3eaf2c26fdf1dec6 Mon Sep 17 00:00:00 2001 From: Grail Finder Date: Fri, 11 Jul 2025 17:34:07 +0300 Subject: [PATCH] Enha: tracing [WIP] --- docker-compose.yml | 1 + main.go | 22 ++++++++++++++++++++-- telemetry/telemetry.go | 6 +++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5660f9c..6221b45 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,4 +4,5 @@ services: image: jaegertracing/all-in-one:latest ports: - "6831:6831/udp" + - "14268:14268" - "16686:16686" diff --git a/main.go b/main.go index c527ccd..c453f13 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "gralias/telemetry" "log/slog" "net/http" + _ "net/http/pprof" "os" "os/signal" "path/filepath" @@ -111,16 +112,33 @@ func main() { cm := crons.NewCronManager(repo, slog.Default()) cm.Start() server := ListenToRequests(cfg.ServerConfig.Port) + pprofPort := "6060" + pprofServer := &http.Server{ + Addr: ":" + pprofPort, + } + + go func() { + slog.Info("Pprof server listening", "addr", pprofPort) + if err := pprofServer.ListenAndServe(); err != nil && err != http.ErrServerClosed { + slog.Error("Pprof server failed", "error", err) + } + }() + go func() { if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { panic(err) } }() + <-stop - slog.Info("Shutting down server...") + slog.Info("Shutting down servers...") ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) defer cancel() + if err := server.Shutdown(ctx); err != nil { - slog.Error("server shutdown failed", "error", err) + slog.Error("Main server shutdown failed", "error", err) + } + if err := pprofServer.Shutdown(ctx); err != nil { + slog.Error("Pprof server shutdown failed", "error", err) } } diff --git a/telemetry/telemetry.go b/telemetry/telemetry.go index 48b54b7..0600f1f 100644 --- a/telemetry/telemetry.go +++ b/telemetry/telemetry.go @@ -36,7 +36,11 @@ func NewTracerProvider(exp sdktrace.SpanExporter) *sdktrace.TracerProvider { // OtelMiddleware wraps the provided http.Handler with OpenTelemetry tracing. func OtelMiddleware(handler http.Handler) http.Handler { - return otelhttp.NewHandler(handler, "http.server") + return otelhttp.NewHandler(handler, "http.server", + otelhttp.WithSpanNameFormatter(func(operation string, r *http.Request) string { + return r.URL.Path + }), + ) } func InitTracer() func() {