github.com/argoproj/argo-cd/v2@v2.10.9/server/metrics/metrics.go (about) 1 package metrics 2 3 import ( 4 "fmt" 5 "net/http" 6 "strconv" 7 "time" 8 9 "github.com/prometheus/client_golang/prometheus" 10 "github.com/prometheus/client_golang/prometheus/promhttp" 11 12 "github.com/argoproj/argo-cd/v2/util/profile" 13 ) 14 15 type MetricsServer struct { 16 *http.Server 17 redisRequestCounter *prometheus.CounterVec 18 redisRequestHistogram *prometheus.HistogramVec 19 } 20 21 var ( 22 redisRequestCounter = prometheus.NewCounterVec( 23 prometheus.CounterOpts{ 24 Name: "argocd_redis_request_total", 25 Help: "Number of kubernetes requests executed during application reconciliation.", 26 }, 27 []string{"initiator", "failed"}, 28 ) 29 redisRequestHistogram = prometheus.NewHistogramVec( 30 prometheus.HistogramOpts{ 31 Name: "argocd_redis_request_duration", 32 Help: "Redis requests duration.", 33 Buckets: []float64{0.1, 0.25, .5, 1, 2}, 34 }, 35 []string{"initiator"}, 36 ) 37 ) 38 39 // NewMetricsServer returns a new prometheus server which collects api server metrics 40 func NewMetricsServer(host string, port int) *MetricsServer { 41 mux := http.NewServeMux() 42 registry := prometheus.NewRegistry() 43 mux.Handle("/metrics", promhttp.HandlerFor(prometheus.Gatherers{ 44 registry, 45 prometheus.DefaultGatherer, 46 }, promhttp.HandlerOpts{})) 47 profile.RegisterProfiler(mux) 48 49 registry.MustRegister(redisRequestCounter) 50 registry.MustRegister(redisRequestHistogram) 51 52 return &MetricsServer{ 53 Server: &http.Server{ 54 Addr: fmt.Sprintf("%s:%d", host, port), 55 Handler: mux, 56 }, 57 redisRequestCounter: redisRequestCounter, 58 redisRequestHistogram: redisRequestHistogram, 59 } 60 } 61 62 func (m *MetricsServer) IncRedisRequest(failed bool) { 63 m.redisRequestCounter.WithLabelValues("argocd-server", strconv.FormatBool(failed)).Inc() 64 } 65 66 // ObserveRedisRequestDuration observes redis request duration 67 func (m *MetricsServer) ObserveRedisRequestDuration(duration time.Duration) { 68 m.redisRequestHistogram.WithLabelValues("argocd-server").Observe(duration.Seconds()) 69 }