From e79fcdb06442f4043c65b4020a612918cb43e026 Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Fri, 28 Feb 2025 17:20:56 +0200 Subject: [PATCH] use pre-defined instrumented prometheus handler instead of creating the handler on each scrape --- agents/prometheus.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/agents/prometheus.go b/agents/prometheus.go index 59618dbb7..6c027978c 100644 --- a/agents/prometheus.go +++ b/agents/prometheus.go @@ -39,8 +39,9 @@ type PrometheusAgent struct { filters *engine.FilterS cm *engine.ConnManager shutdown *utils.SyncedChan - reg *prometheus.Registry + handler http.Handler + reg *prometheus.Registry statMetrics *prometheus.GaugeVec } @@ -63,11 +64,18 @@ func NewPrometheusAgent(cfg *config.CGRConfig, filters *engine.FilterS, cm *engi if cfg.PrometheusAgentCfg().CollectProcessMetrics { reg.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})) } + + handler := promhttp.InstrumentMetricHandler( + reg, + promhttp.HandlerFor(reg, promhttp.HandlerOpts{}), + ) + return &PrometheusAgent{ cfg: cfg, filters: filters, cm: cm, shutdown: shutdown, + handler: handler, reg: reg, statMetrics: statMetrics, } @@ -111,5 +119,5 @@ func (pa *PrometheusAgent) updateStatsMetrics() { // scrape request before exposing them via the Prometheus HTTP handler. func (pa *PrometheusAgent) ServeHTTP(w http.ResponseWriter, r *http.Request) { pa.updateStatsMetrics() - promhttp.HandlerFor(pa.reg, promhttp.HandlerOpts{}).ServeHTTP(w, r) + pa.handler.ServeHTTP(w, r) }