From 0032610ace8cb30da993aada8f23a4a3c6923735 Mon Sep 17 00:00:00 2001 From: bogo Date: Tue, 29 Aug 2023 17:19:47 +0800 Subject: [PATCH] change the latency metric and dependency inject prometheus registry --- cmd/adapter/adapter.go | 6 ++++++ pkg/client/metrics/metrics.go | 25 +++++++++++++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/cmd/adapter/adapter.go b/cmd/adapter/adapter.go index ed14e4f6..c20a6f59 100644 --- a/cmd/adapter/adapter.go +++ b/cmd/adapter/adapter.go @@ -273,6 +273,12 @@ func (cmd *PrometheusAdapter) addResourceMetricsAPI(promClient prom.Client, stop return err } + metricsHandler, err := mprom.MetricsHandler() + if err != nil { + return err + } + server.GenericAPIServer.Handler.NonGoRestfulMux.HandleFunc("/metrics", metricsHandler) + if err := api.Install(provider, podInformer.Lister(), informer.Core().V1().Nodes().Lister(), server.GenericAPIServer, nil); err != nil { return err } diff --git a/pkg/client/metrics/metrics.go b/pkg/client/metrics/metrics.go index 03297853..e9ad89f4 100644 --- a/pkg/client/metrics/metrics.go +++ b/pkg/client/metrics/metrics.go @@ -18,13 +18,15 @@ package metrics import ( "context" + "k8s.io/component-base/metrics/legacyregistry" + "net/http" "net/url" "time" "github.com/prometheus/client_golang/prometheus" + apimetrics "k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/component-base/metrics" - "k8s.io/component-base/metrics/legacyregistry" "sigs.k8s.io/prometheus-adapter/pkg/client" ) @@ -34,16 +36,27 @@ var ( // overhead and HTTP overhead. queryLatency = metrics.NewHistogramVec( &metrics.HistogramOpts{ - Name: "cmgateway_prometheus_query_latency_seconds", - Help: "Prometheus client query latency in seconds. Broken down by target prometheus endpoint and target server", - Buckets: prometheus.ExponentialBuckets(0.001, 2, 10), + Namespace: "prometheus_adapter", + Subsystem: "prometheus_client", + Name: "request_duration_seconds", + Help: "Prometheus client query latency in seconds. Broken down by target prometheus endpoint and target server", + Buckets: prometheus.DefBuckets, }, []string{"endpoint", "server"}, ) ) -func init() { - legacyregistry.MustRegister(queryLatency) +func MetricsHandler() (http.HandlerFunc, error) { + registry := metrics.NewKubeRegistry() + err := registry.Register(queryLatency) + if err != nil { + return nil, err + } + apimetrics.Register() + return func(w http.ResponseWriter, req *http.Request) { + legacyregistry.Handler().ServeHTTP(w, req) + metrics.HandlerFor(registry, metrics.HandlerOpts{}).ServeHTTP(w, req) + }, nil } // instrumentedClient is a client.GenericAPIClient which instruments calls to Do,