diff --git a/staging/src/k8s.io/component-base/metrics/legacyregistry/BUILD b/staging/src/k8s.io/component-base/metrics/legacyregistry/BUILD index 2afa5d91353..d713da30039 100644 --- a/staging/src/k8s.io/component-base/metrics/legacyregistry/BUILD +++ b/staging/src/k8s.io/component-base/metrics/legacyregistry/BUILD @@ -10,6 +10,7 @@ go_library( deps = [ "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/component-base/metrics:go_default_library", + "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", ], ) diff --git a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go index 2653cf54f32..cd824e54df9 100644 --- a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go +++ b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go @@ -18,9 +18,11 @@ package legacyregistry import ( "fmt" + "sync" + + "github.com/prometheus/client_golang/prometheus" apimachineryversion "k8s.io/apimachinery/pkg/version" "k8s.io/component-base/metrics" - "sync" ) var globalRegistryFactory = metricsRegistryFactory{ @@ -51,7 +53,11 @@ func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error { return nil } registrationErrs := make([]error, 0) - globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver) + preloadedMetrics := []prometheus.Collector{ + prometheus.NewGoCollector(), + prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}), + } + globalRegistryFactory.globalRegistry = metrics.NewPreloadedKubeRegistry(ver, preloadedMetrics...) globalRegistryFactory.kubeVersion = &ver for _, c := range globalRegistryFactory.registerQueue { err := globalRegistryFactory.globalRegistry.Register(c) diff --git a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry_test.go b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry_test.go index fdb4b13c50a..cde07f4d9f2 100644 --- a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry_test.go +++ b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry_test.go @@ -193,3 +193,33 @@ func TestDeferredMustRegister(t *testing.T) { }, "Did not panic even though we expected it.") } + +func TestPreloadedMetrics(t *testing.T) { + // reset the global registry for this test. + globalRegistryFactory = metricsRegistryFactory{ + registerQueue: make([]metrics.KubeCollector, 0), + mustRegisterQueue: make([]metrics.KubeCollector, 0), + } + + SetRegistryFactoryVersion(apimachineryversion.Info{ + Major: "1", + Minor: "15", + GitVersion: "v1.15.0-alpha-1.12345", + }) + // partial list of some preregistered metrics we expect + expectedMetricNames := []string{"go_gc_duration_seconds", "process_start_time_seconds"} + + mf, err := globalRegistryFactory.globalRegistry.Gather() + if err != nil { + t.Errorf("Got unexpected error %v ", err) + } + metricNames := map[string]struct{}{} + for _, f := range mf { + metricNames[f.GetName()] = struct{}{} + } + for _, expectedMetric := range expectedMetricNames { + if _, ok := metricNames[expectedMetric]; !ok { + t.Errorf("Expected %v to be preregistered", expectedMetric) + } + } +} diff --git a/staging/src/k8s.io/component-base/metrics/registry.go b/staging/src/k8s.io/component-base/metrics/registry.go index 1471cd7a8da..70a7db3f093 100644 --- a/staging/src/k8s.io/component-base/metrics/registry.go +++ b/staging/src/k8s.io/component-base/metrics/registry.go @@ -94,3 +94,18 @@ func NewKubeRegistry(v apimachineryversion.Info) KubeRegistry { version: parseVersion(v), } } + +// NewPreloadedKubeRegistry creates a new Registry with preloaded prometheus collectors +// already registered. This is exposed specifically to maintain backwards +// compatibility with the global prometheus registry. +// +// Deprecated +func NewPreloadedKubeRegistry(v apimachineryversion.Info, cs ...prometheus.Collector) KubeRegistry { + registry := &kubeRegistry{ + PromRegistry: prometheus.NewRegistry(), + version: parseVersion(v), + } + + registry.PromRegistry.MustRegister(cs...) + return registry +}