mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
preload metrics for legacyregistry for backwards compatibility
The global prometheus registry comes preloaded with process and go metrics. Since these are not under kubernetes control, they can't be considered stable. However, we can make a best effort to maintain backwards compatibility by preloading the same metrics.
This commit is contained in:
parent
544e93486d
commit
42d0041804
@ -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",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user