func()

in internal/satellite/telemetry/prometheus/server.go [49:82]


func (s *Server) Start(config *telemetry.Config) error {
	s.PrometheusConfig = config.Prometheus

	labels := make(map[string]string)
	if config.Cluster != "" {
		labels["cluster"] = config.Cluster
	}
	if config.Service != "" {
		labels["service"] = config.Service
	}
	if config.Instance != "" {
		labels["instance"] = config.Instance
	}

	s.registry = prometheus.NewRegistry()
	s.registerer = prometheus.WrapRegistererWith(labels, s.registry)
	s.Gatherer = s.registry
	s.collectorContainer = make(map[string]telemetry.Metric)

	s.server = http.NewServeMux()
	// add go info metrics.
	s.Register(s.WithMeta("processor_collector", collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})),
		s.WithMeta("go_collector", collectors.NewGoCollector()))
	// register prometheus metrics exporter handler.
	s.server.Handle(s.Endpoint, promhttp.HandlerFor(s.Gatherer, promhttp.HandlerOpts{ErrorLog: log.Logger}))
	go func() {
		log.Logger.WithField("address", s.Address).Info("prometheus server is starting...")
		err := http.ListenAndServe(s.Address, s.server) // #nosec G114 -- consider what is the best timeout to set
		if err != nil {
			log.Logger.WithField("address", s.Address).Infof("prometheus server has failure when starting: %v", err)
		}
	}()
	return nil
}