expose ability to register native prometheus collectors

This commit is contained in:
Han Kang 2019-08-08 13:39:29 -07:00
parent 3030a9d927
commit 12a4ee235f
2 changed files with 30 additions and 20 deletions

View File

@ -40,10 +40,12 @@ var (
type noopRegistry struct{}
func (noopRegistry) Register(metrics.Registerable) error { return nil }
func (noopRegistry) MustRegister(...metrics.Registerable) {}
func (noopRegistry) Unregister(metrics.Registerable) bool { return true }
func (noopRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil }
func (noopRegistry) Register(metrics.Registerable) error { return nil }
func (noopRegistry) MustRegister(...metrics.Registerable) {}
func (noopRegistry) RawRegister(prometheus.Collector) error { return nil }
func (noopRegistry) RawMustRegister(...prometheus.Collector) {}
func (noopRegistry) Unregister(metrics.Registerable) bool { return true }
func (noopRegistry) Gather() ([]*dto.MetricFamily, error) { return nil, nil }
type metricsRegistryFactory struct {
globalRegistry metrics.KubeRegistry
@ -79,7 +81,8 @@ func SetRegistryFactoryVersion(ver apimachineryversion.Info) []error {
prometheus.NewGoCollector(),
prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{}),
}
globalRegistryFactory.globalRegistry = metrics.NewPreloadedKubeRegistry(ver, preloadedMetrics...)
globalRegistryFactory.globalRegistry = metrics.NewKubeRegistry(ver)
globalRegistryFactory.globalRegistry.RawMustRegister(preloadedMetrics...)
globalRegistryFactory.kubeVersion = &ver
for _, c := range globalRegistryFactory.registerQueue {
err := globalRegistryFactory.globalRegistry.Register(c)

View File

@ -57,6 +57,10 @@ type Registerable interface {
// KubeRegistry is an interface which implements a subset of prometheus.Registerer and
// prometheus.Gatherer interfaces
type KubeRegistry interface {
// Deprecated
RawRegister(prometheus.Collector) error
// Deprecated
RawMustRegister(...prometheus.Collector)
Register(Registerable) error
MustRegister(...Registerable)
Unregister(Registerable) bool
@ -96,6 +100,24 @@ func (kr *kubeRegistry) MustRegister(cs ...Registerable) {
kr.PromRegistry.MustRegister(metrics...)
}
// RawRegister takes a native prometheus.Collector and registers the collector
// to the registry. This bypasses metrics safety checks, so should only be used
// to register custom prometheus collectors.
//
// Deprecated
func (kr *kubeRegistry) RawRegister(c prometheus.Collector) error {
return kr.PromRegistry.Register(c)
}
// RawMustRegister takes a native prometheus.Collector and registers the collector
// to the registry. This bypasses metrics safety checks, so should only be used
// to register custom prometheus collectors.
//
// Deprecated
func (kr *kubeRegistry) RawMustRegister(cs ...prometheus.Collector) {
kr.PromRegistry.MustRegister(cs...)
}
// Unregister unregisters the Collector that equals the Collector passed
// in as an argument. (Two Collectors are considered equal if their
// Describe method yields the same set of descriptors.) The function
@ -125,18 +147,3 @@ 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
}