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
}