From f9bf086a883e43028abaf859771010c487c7dce2 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Mon, 26 May 2025 15:27:12 +0530 Subject: [PATCH] internal/cli: enable metric early on --- internal/cli/server/server.go | 51 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/internal/cli/server/server.go b/internal/cli/server/server.go index 87c4851eea..dd6a52a09b 100644 --- a/internal/cli/server/server.go +++ b/internal/cli/server/server.go @@ -111,6 +111,11 @@ func VerbosityStringToInt(loglevel string) int { //nolint:gocognit func NewServer(config *Config, opts ...serverOption) (*Server, error) { + // Enable metric collection if requested + if err := setupMetrics(config.Telemetry); err != nil { + return nil, err + } + // start pprof if config.Pprof.Enabled { pprof.SetMemProfileRate(config.Pprof.MemProfileRate) @@ -127,6 +132,9 @@ func NewServer(config *Config, opts ...serverOption) (*Server, error) { // start the logger setupLogger(config.Verbosity, *config.Logging) + // setup open telemetry collector + srv.setupOpenCollector() + var err error for _, opt := range opts { @@ -281,10 +289,6 @@ func NewServer(config *Config, opts ...serverOption) (*Server, error) { } } - if err := srv.setupMetrics(config.Telemetry, config.Identity); err != nil { - return nil, err - } - // Set the node instance srv.node = stack @@ -313,28 +317,16 @@ func (s *Server) Stop() { } } -func (s *Server) setupMetrics(config *TelemetryConfig, serviceName string) error { - // Check the global metrics if they're matching with the provided config - if metrics.Enabled() != config.Enabled { - log.Warn( - "Metric misconfiguration, some of them might not be visible", - "metrics", metrics.Enabled, - "config.metrics", config.Enabled, - "config.expensive", config.Expensive, - ) - } - - // Update the values anyways (for services which don't need immediate attention) - if config.Enabled { - metrics.Enable() - } - - if !metrics.Enabled() { - // metrics are disabled, do not set up any sink +func setupMetrics(config *TelemetryConfig) error { + if !config.Enabled { return nil } + if config.Expensive { + log.Warn("Expensive metrics are collected by default, please remove this flag", "flag", "--metrics.expensive") + } log.Info("Enabling metrics collection") + metrics.Enable() // influxdb if v1Enabled, v2Enabled := config.InfluxDB.V1Enabled, config.InfluxDB.V2Enabled; v1Enabled || v2Enabled { @@ -387,14 +379,20 @@ func (s *Server) setupMetrics(config *TelemetryConfig, serviceName string) error log.Info("Enabling metrics export to prometheus", "path", fmt.Sprintf("http://%s/debug/metrics/prometheus", config.PrometheusAddr)) } - if config.OpenCollectorEndpoint != "" { + return nil +} + +func (s *Server) setupOpenCollector() error { + config := s.config + + if config.Telemetry.OpenCollectorEndpoint != "" { // setup open collector tracer ctx := context.Background() res, err := resource.New(ctx, resource.WithAttributes( // the service name used to display traces in backends - semconv.ServiceNameKey.String(serviceName), + semconv.ServiceNameKey.String(config.Identity), ), ) if err != nil { @@ -405,7 +403,7 @@ func (s *Server) setupMetrics(config *TelemetryConfig, serviceName string) error traceExporter, err := otlptracegrpc.New( ctx, otlptracegrpc.WithInsecure(), - otlptracegrpc.WithEndpoint(config.OpenCollectorEndpoint), + otlptracegrpc.WithEndpoint(config.Telemetry.OpenCollectorEndpoint), ) if err != nil { return fmt.Errorf("failed to create open telemetry tracer exporter for service: %v", err) @@ -427,9 +425,8 @@ func (s *Server) setupMetrics(config *TelemetryConfig, serviceName string) error // set the tracer s.tracer = tracerProvider - log.Info("Open collector tracing started", "address", config.OpenCollectorEndpoint) + log.Info("Open collector tracing started", "address", config.Telemetry.OpenCollectorEndpoint) } - return nil }