Skip to content

Commit aa107d6

Browse files
brandondaauren
authored andcommitted
Make metrics registerer/gathererer replacable
Signed-off-by: Brad Davidson <[email protected]>
1 parent e6f668c commit aa107d6

File tree

4 files changed

+37
-25
lines changed

4 files changed

+37
-25
lines changed

pkg/controllers/netpol/network_policy_controller.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import (
1616
"github.com./cloudnativelabs/kube-router/v2/pkg/options"
1717
"github.com./cloudnativelabs/kube-router/v2/pkg/utils"
1818
"github.com./coreos/go-iptables/iptables"
19-
"github.com./prometheus/client_golang/prometheus"
2019
"k8s.io/klog/v2"
2120

2221
v1core "k8s.io/api/core/v1"
@@ -845,8 +844,8 @@ func NewNetworkPolicyController(clientset kubernetes.Interface,
845844

846845
if config.MetricsEnabled {
847846
// Register the metrics for this controller
848-
prometheus.MustRegister(metrics.ControllerIptablesSyncTime)
849-
prometheus.MustRegister(metrics.ControllerPolicyChainsSyncTime)
847+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerIptablesSyncTime)
848+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerPolicyChainsSyncTime)
850849
npc.MetricsEnabled = true
851850
}
852851

pkg/controllers/proxy/network_services_controller.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com./coreos/go-iptables/iptables"
2626
"github.com./docker/docker/client"
2727
"github.com./moby/ipvs"
28-
"github.com./prometheus/client_golang/prometheus"
2928
"github.com./vishvananda/netlink"
3029
"github.com./vishvananda/netns"
3130
api "k8s.io/api/core/v1"
@@ -2285,18 +2284,18 @@ func NewNetworkServicesController(clientset kubernetes.Interface,
22852284

22862285
if config.MetricsEnabled {
22872286
// Register the metrics for this controller
2288-
prometheus.MustRegister(metrics.ControllerIpvsServices)
2289-
prometheus.MustRegister(metrics.ControllerIpvsServicesSyncTime)
2290-
prometheus.MustRegister(metrics.ServiceBpsIn)
2291-
prometheus.MustRegister(metrics.ServiceBpsOut)
2292-
prometheus.MustRegister(metrics.ServiceBytesIn)
2293-
prometheus.MustRegister(metrics.ServiceBytesOut)
2294-
prometheus.MustRegister(metrics.ServiceCPS)
2295-
prometheus.MustRegister(metrics.ServicePacketsIn)
2296-
prometheus.MustRegister(metrics.ServicePacketsOut)
2297-
prometheus.MustRegister(metrics.ServicePpsIn)
2298-
prometheus.MustRegister(metrics.ServicePpsOut)
2299-
prometheus.MustRegister(metrics.ServiceTotalConn)
2287+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerIpvsServices)
2288+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerIpvsServicesSyncTime)
2289+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceBpsIn)
2290+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceBpsOut)
2291+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceBytesIn)
2292+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceBytesOut)
2293+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceCPS)
2294+
metrics.DefaultRegisterer.MustRegister(metrics.ServicePacketsIn)
2295+
metrics.DefaultRegisterer.MustRegister(metrics.ServicePacketsOut)
2296+
metrics.DefaultRegisterer.MustRegister(metrics.ServicePpsIn)
2297+
metrics.DefaultRegisterer.MustRegister(metrics.ServicePpsOut)
2298+
metrics.DefaultRegisterer.MustRegister(metrics.ServiceTotalConn)
23002299
nsc.MetricsEnabled = true
23012300
}
23022301

pkg/controllers/routing/network_routes_controller.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com./coreos/go-iptables/iptables"
2424
gobgpapi "github.com./osrg/gobgp/v3/api"
2525
gobgp "github.com./osrg/gobgp/v3/pkg/server"
26-
"github.com./prometheus/client_golang/prometheus"
2726
"github.com./vishvananda/netlink"
2827
v1core "k8s.io/api/core/v1"
2928
"k8s.io/client-go/kubernetes"
@@ -1407,11 +1406,11 @@ func NewNetworkRoutingController(clientset kubernetes.Interface,
14071406
nrc := NetworkRoutingController{ipsetMutex: ipsetMutex}
14081407
if kubeRouterConfig.MetricsEnabled {
14091408
// Register the metrics for this controller
1410-
prometheus.MustRegister(metrics.ControllerBGPadvertisementsReceived)
1411-
prometheus.MustRegister(metrics.ControllerBGPadvertisementsSent)
1412-
prometheus.MustRegister(metrics.ControllerBGPInternalPeersSyncTime)
1413-
prometheus.MustRegister(metrics.ControllerBPGpeers)
1414-
prometheus.MustRegister(metrics.ControllerRoutesSyncTime)
1409+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerBGPadvertisementsReceived)
1410+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerBGPadvertisementsSent)
1411+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerBGPInternalPeersSyncTime)
1412+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerBPGpeers)
1413+
metrics.DefaultRegisterer.MustRegister(metrics.ControllerRoutesSyncTime)
14151414
nrc.MetricsEnabled = true
14161415
}
14171416

pkg/metrics/metrics_controller.go

+18-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ const (
2121
namespace = "kube_router"
2222
)
2323

24+
var (
25+
// DefaultRegisterer and DefaultGatherer are the implementations of the
26+
// prometheus Registerer and Gatherer interfaces that all metrics operations
27+
// will use. They are variables so that packages that embed this library can
28+
// replace them at runtime, instead of having to pass around specific
29+
// registries.
30+
DefaultRegisterer = prometheus.DefaultRegisterer
31+
DefaultGatherer = prometheus.DefaultGatherer
32+
)
33+
2434
var (
2535
// BuildInfo Expose version and other build information
2636
BuildInfo = prometheus.NewGaugeVec(prometheus.GaugeOpts{
@@ -159,6 +169,11 @@ type Controller struct {
159169
MetricsPort uint16
160170
}
161171

172+
// Handler returns a http.Handler for the default registerer and gatherer
173+
func Handler() http.Handler {
174+
return promhttp.InstrumentMetricHandler(DefaultRegisterer, promhttp.HandlerFor(DefaultGatherer, promhttp.HandlerOpts{}))
175+
}
176+
162177
// Run prometheus metrics controller
163178
func (mc *Controller) Run(healthChan chan<- *healthcheck.ControllerHeartbeat, stopCh <-chan struct{},
164179
wg *sync.WaitGroup) {
@@ -168,16 +183,16 @@ func (mc *Controller) Run(healthChan chan<- *healthcheck.ControllerHeartbeat, st
168183

169184
// register metrics for this controller
170185
BuildInfo.WithLabelValues(runtime.Version(), version.Version).Set(1)
171-
prometheus.MustRegister(BuildInfo)
172-
prometheus.MustRegister(ControllerIpvsMetricsExportTime)
186+
DefaultRegisterer.MustRegister(BuildInfo)
187+
DefaultRegisterer.MustRegister(ControllerIpvsMetricsExportTime)
173188

174189
srv := &http.Server{
175190
Addr: ":" + strconv.Itoa(int(mc.MetricsPort)),
176191
Handler: http.DefaultServeMux,
177192
ReadHeaderTimeout: 5 * time.Second}
178193

179194
// add prometheus handler on metrics path
180-
http.Handle(mc.MetricsPath, promhttp.Handler())
195+
http.Handle(mc.MetricsPath, Handler())
181196

182197
go func() {
183198
if err := srv.ListenAndServe(); err != nil {

0 commit comments

Comments
 (0)