package metrics import ( "github.com/prometheus/client_golang/prometheus" "k8s.io/client-go/tools/leaderelection" ) // This file is copied and adapted from k8s.io/component-base/metrics/prometheus/clientgo/leaderelection // which registers metrics to the k8s legacy Registry. We require very // similar functionality, but must register metrics to a different Registry. var ( leaderGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{ Name: "leader_election_master_status", Help: "Gauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.", }, []string{"name"}) leaderSlowpathCounter = prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "leader_election_slowpath_total", Help: "Total number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.", }, []string{"name"}) ) func init() { Registry.MustRegister(leaderGauge) leaderelection.SetProvider(leaderelectionMetricsProvider{}) } type leaderelectionMetricsProvider struct{} func (leaderelectionMetricsProvider) NewLeaderMetric() leaderelection.LeaderMetric { return leaderElectionPrometheusAdapter{} } type leaderElectionPrometheusAdapter struct{} func (s leaderElectionPrometheusAdapter) On(name string) { leaderGauge.WithLabelValues(name).Set(1.0) } func (s leaderElectionPrometheusAdapter) Off(name string) { leaderGauge.WithLabelValues(name).Set(0.0) } func (leaderElectionPrometheusAdapter) SlowpathExercised(name string) { leaderSlowpathCounter.WithLabelValues(name).Inc() }