package main import ( "context" "net/http" "time" "git.mak-sim.ru/maksim/observability_2025/internal/logger" "github.com/go-chi/chi/middleware" "github.com/go-chi/chi/v5" "github.com/juju/zaputil/zapctx" "go.opentelemetry.io/otel" "go.uber.org/zap" "moul.io/chizap" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" ) const ( TRACER_NAME = "go_test" ) var tracer = otel.Tracer(TRACER_NAME) func someFunc(ctx context.Context) { _, span := tracer.Start(ctx, "someFunc") defer span.End() logger := zapctx.Logger(ctx) time.Sleep(1 * time.Second) logger.Info("Hi from SomeFunc") } func main() { ctx := context.Background() logger, err := logger.GetLogger(false) if err != nil { panic(err) } shutdown, err := InstallExportPipeline() if err != nil { logger.Fatal(err.Error()) } defer func() { if err := shutdown(ctx); err != nil { logger.Fatal(err.Error()) } }() r := chi.NewRouter() logger = logger.With(zap.Any("someKey", "someValue")) r.Use(middleware.RequestID) r.Use(chizap.New(logger, &chizap.Opts{ WithReferer: true, WithUserAgent: true, })) counter := promauto.NewCounter(prometheus.CounterOpts{ Namespace: "teta", Name: "testcounter", Help: "Main endpoint request counter", }) r.Get("/", func(w http.ResponseWriter, r *http.Request) { ctxLocal, span := tracer.Start(r.Context(), "main") defer span.End() counter.Inc() ctx := zapctx.WithLogger(ctxLocal, logger) someFunc(ctx) _, err := w.Write([]byte("welcome")) if err != nil { logger.Error("Error writing response", zap.Error(err)) } }) http.Handle("/metrics", promhttp.Handler()) go http.ListenAndServe(":9000", nil) //nolint:errcheck logger.Info("Server started") http.ListenAndServe(":8080", r) //nolint:errcheck }