From 5f4527dacfd7d1eeb6c2e8435bbcfde87bf522b4 Mon Sep 17 00:00:00 2001 From: Xuzheng Chang Date: Mon, 18 Dec 2023 16:22:50 +0800 Subject: [PATCH] [feat] Add rest client metrics Signed-off-by: Xuzheng Chang --- cmd/scheduler/app/server.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/cmd/scheduler/app/server.go b/cmd/scheduler/app/server.go index ebbfb5ba951..f928601caa3 100644 --- a/cmd/scheduler/app/server.go +++ b/cmd/scheduler/app/server.go @@ -23,9 +23,11 @@ import ( "os" "time" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/promhttp" - "volcano.sh/apis/pkg/apis/helpers" + "volcano.sh/volcano/cmd/scheduler/app/options" "volcano.sh/volcano/pkg/kube" "volcano.sh/volcano/pkg/scheduler" @@ -39,6 +41,7 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/component-base/metrics/legacyregistry" "k8s.io/klog/v2" // Register gcp auth @@ -47,6 +50,9 @@ import ( "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/tools/record" + + // Register rest client metrics + _ "k8s.io/component-base/metrics/prometheus/restclient" ) const ( @@ -81,7 +87,7 @@ func Run(opt *options.ServerOption) error { if opt.EnableMetrics { go func() { - http.Handle("/metrics", promhttp.Handler()) + http.Handle("/metrics", promHandler()) klog.Fatalf("Prometheus Http Server failed %s", http.ListenAndServe(opt.ListenAddress, nil)) }() } @@ -147,3 +153,10 @@ func Run(opt *options.ServerOption) error { }) return fmt.Errorf("lost lease") } + +func promHandler() http.Handler { + // Unregister go and process related collector because it's duplicated and `legacyregistry.DefaultGatherer` also has registered them. + prometheus.DefaultRegisterer.Unregister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})) + prometheus.DefaultRegisterer.Unregister(collectors.NewGoCollector()) + return promhttp.InstrumentMetricHandler(prometheus.DefaultRegisterer, promhttp.HandlerFor(prometheus.Gatherers{prometheus.DefaultGatherer, legacyregistry.DefaultGatherer}, promhttp.HandlerOpts{})) +}