diff --git a/main.go b/main.go index 4974ce9..a1884de 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,7 @@ import ( "github.com/fujin/anthropic-proxy/internal/auth" "github.com/fujin/anthropic-proxy/internal/config" + "github.com/fujin/anthropic-proxy/internal/embedded" "github.com/fujin/anthropic-proxy/internal/logging" "github.com/fujin/anthropic-proxy/internal/proxy" "github.com/fujin/anthropic-proxy/internal/ratelimit" @@ -36,7 +37,7 @@ func run() error { }) // Initialize telemetry (metrics always active; OTLP export when endpoint set) - telemetryShutdown, logBridge, err := telemetry.Setup(context.Background(), cfg.Telemetry, tracker) + telemetryShutdown, logBridge, metricsHandler, err := telemetry.Setup(context.Background(), cfg.Telemetry, tracker) if err != nil { return fmt.Errorf("telemetry setup: %w", err) } @@ -115,8 +116,27 @@ func run() error { } } + // Start embedded observability stack (VM + Perses) if enabled + var vm *embedded.VM + var perses *embedded.Perses + if cfg.Telemetry.Embedded.Enabled { + vm = embedded.NewVM(cfg.Telemetry.Embedded, cfg.Port) + if err := vm.Start(); err != nil { + log.Error().Err(err).Msg("failed to start victoria-metrics") + } else { + defer vm.Stop() + } + + perses = embedded.NewPerses(cfg.Telemetry.Embedded, cfg.Port) + if err := perses.Start(); err != nil { + log.Error().Err(err).Msg("failed to start perses") + } else { + defer perses.Stop() + } + } + log.Info().Int("port", cfg.Port).Msg("starting server") - srv := server.New(cfg, pool, profile, tracker) + srv := server.New(cfg, pool, profile, tracker, metricsHandler) quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)