diff --git a/cmd/controller/controller.go b/cmd/controller/controller.go index 1c72189c7c6..c8fe7a9b6e5 100644 --- a/cmd/controller/controller.go +++ b/cmd/controller/controller.go @@ -43,7 +43,9 @@ func CmdMain() { go loopOvnNbctlDaemon(config) go func() { mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) + if config.EnableMetrics { + mux.Handle("/metrics", promhttp.Handler()) + } if config.EnablePprof { mux.HandleFunc("/debug/pprof/", pprof.Index) mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) diff --git a/cmd/daemon/cniserver.go b/cmd/daemon/cniserver.go index fa24e438818..ec64011e2a5 100644 --- a/cmd/daemon/cniserver.go +++ b/cmd/daemon/cniserver.go @@ -81,7 +81,9 @@ func CmdMain() { } mux := http.NewServeMux() - mux.Handle("/metrics", promhttp.Handler()) + if config.EnableMetrics { + mux.Handle("/metrics", promhttp.Handler()) + } if config.EnablePprof { mux.HandleFunc("/debug/pprof/", pprof.Index) mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) diff --git a/cmd/ovn_monitor/ovn_monitor.go b/cmd/ovn_monitor/ovn_monitor.go index d84461e4679..a49dcca30bf 100644 --- a/cmd/ovn_monitor/ovn_monitor.go +++ b/cmd/ovn_monitor/ovn_monitor.go @@ -32,8 +32,10 @@ func CmdMain() { } exporter.StartOvnMetrics() - http.Handle(config.MetricsPath, promhttp.Handler()) - klog.Infoln("Listening on", config.ListenAddress) + if config.EnableMetrics { + http.Handle(config.MetricsPath, promhttp.Handler()) + klog.Infoln("Listening on", config.ListenAddress) + } // conform to Gosec G114 // https://github.com/securego/gosec#available-rules diff --git a/cmd/pinger/pinger.go b/cmd/pinger/pinger.go index a049145385c..db1f5944ab8 100644 --- a/cmd/pinger/pinger.go +++ b/cmd/pinger/pinger.go @@ -24,8 +24,9 @@ func CmdMain() { if err != nil { util.LogFatalAndExit(err, "failed to parse config") } - if config.Mode == "server" { + if config.Mode == "server" && config.EnableMetrics { http.Handle("/metrics", promhttp.Handler()) + go func() { // conform to Gosec G114 // https://github.com/securego/gosec#available-rules diff --git a/pkg/controller/config.go b/pkg/controller/config.go index fc539c2f0e2..7ed872c62c4 100644 --- a/pkg/controller/config.go +++ b/pkg/controller/config.go @@ -78,6 +78,7 @@ type Configuration struct { EnableExternalVpc bool EnableEcmp bool EnableKeepVmIP bool + EnableMetrics bool ExternalGatewayConfigNS string ExternalGatewayNet string @@ -132,6 +133,7 @@ func ParseFlags() (*Configuration, error) { argEnableExternalVpc = pflag.Bool("enable-external-vpc", true, "Enable external vpc support") argEnableEcmp = pflag.Bool("enable-ecmp", false, "Enable ecmp route for centralized subnet") argKeepVmIP = pflag.Bool("keep-vm-ip", false, "Whether to keep ip for kubevirt pod when pod is rebuild") + argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query") argExternalGatewayConfigNS = pflag.String("external-gateway-config-ns", "kube-system", "The namespace of configmap external-gateway-config, default: kube-system") argExternalGatewayNet = pflag.String("external-gateway-net", "external", "The namespace of configmap external-gateway-config, default: external") @@ -199,6 +201,7 @@ func ParseFlags() (*Configuration, error) { EnableEcmp: *argEnableEcmp, EnableKeepVmIP: *argKeepVmIP, NodePgProbeTime: *argNodePgProbeTime, + EnableMetrics: *argEnableMetrics, } if config.NetworkType == util.NetworkTypeVlan && config.DefaultHostInterface == "" { diff --git a/pkg/daemon/config.go b/pkg/daemon/config.go index 81a6f89dc76..61ced439ce2 100644 --- a/pkg/daemon/config.go +++ b/pkg/daemon/config.go @@ -49,6 +49,7 @@ type Configuration struct { DefaultProviderName string DefaultInterfaceName string ExternalGatewayConfigNS string + EnableMetrics bool } // ParseFlags will parse cmd args then init kubeClient and configuration @@ -73,6 +74,7 @@ func ParseFlags(nicBridgeMappings map[string]string) (*Configuration, error) { argsDefaultProviderName = pflag.String("default-provider-name", "provider", "The vlan or vxlan type default provider interface name") argsDefaultInterfaceName = pflag.String("default-interface-name", "", "The default host interface name in the vlan/vxlan type") argExternalGatewayConfigNS = pflag.String("external-gateway-config-ns", "kube-system", "The namespace of configmap external-gateway-config, default: kube-system") + argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query") ) // mute info log for ipset lib @@ -120,6 +122,7 @@ func ParseFlags(nicBridgeMappings map[string]string) (*Configuration, error) { DefaultProviderName: *argsDefaultProviderName, DefaultInterfaceName: *argsDefaultInterfaceName, ExternalGatewayConfigNS: *argExternalGatewayConfigNS, + EnableMetrics: *argEnableMetrics, } if err := config.initKubeClient(); err != nil { diff --git a/pkg/ovnmonitor/config.go b/pkg/ovnmonitor/config.go index b67116babca..71163f26931 100644 --- a/pkg/ovnmonitor/config.go +++ b/pkg/ovnmonitor/config.go @@ -40,6 +40,7 @@ type Configuration struct { ServiceVswitchdFilePidPath string ServiceNorthdFileLogPath string ServiceNorthdFilePidPath string + EnableMetrics bool } // ParseFlags get parameters information. @@ -49,6 +50,7 @@ func ParseFlags() (*Configuration, error) { argMetricsPath = pflag.String("telemetry-path", "/metrics", "Path under which to expose metrics.") argPollTimeout = pflag.Int("ovs.timeout", 2, "Timeout on JSON-RPC requests to OVN.") argPollInterval = pflag.Int("ovs.poll-interval", 30, "The minimum interval (in seconds) between collections from OVN server.") + argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query") argSystemRunDir = pflag.String("system.run.dir", "/var/run/openvswitch", "OVS default run directory.") argDatabaseVswitchName = pflag.String("database.vswitch.name", "Open_vSwitch", "The name of OVS db.") @@ -121,6 +123,7 @@ func ParseFlags() (*Configuration, error) { ServiceVswitchdFilePidPath: *argServiceVswitchdFilePidPath, ServiceNorthdFileLogPath: *argServiceNorthdFileLogPath, ServiceNorthdFilePidPath: *argServiceNorthdFilePidPath, + EnableMetrics: *argEnableMetrics, } klog.Infof("ovn monitor config is %+v", config) diff --git a/pkg/pinger/config.go b/pkg/pinger/config.go index 712e23bfbe4..204d3bb7c9e 100644 --- a/pkg/pinger/config.go +++ b/pkg/pinger/config.go @@ -34,6 +34,7 @@ type Configuration struct { PodProtocols []string ExternalAddress string NetworkMode string + EnableMetrics bool // Used for OVS Monitor PollTimeout int @@ -64,6 +65,7 @@ func ParseFlags() (*Configuration, error) { argExternalDns = pflag.String("external-dns", "", "check external dns resolve from pod") argExternalAddress = pflag.String("external-address", "", "check ping connection to an external address, default: 114.114.114.114") argNetworkMode = pflag.String("network-mode", "kube-ovn", "The cni plugin current cluster used, default: kube-ovn") + argEnableMetrics = pflag.Bool("enable-metrics", true, "Whether to support metrics query") argPollTimeout = pflag.Int("ovs.timeout", 2, "Timeout on JSON-RPC requests to OVS.") argPollInterval = pflag.Int("ovs.poll-interval", 15, "The minimum interval (in seconds) between collections from OVS server.") @@ -115,6 +117,7 @@ func ParseFlags() (*Configuration, error) { PodName: os.Getenv("POD_NAME"), ExternalAddress: *argExternalAddress, NetworkMode: *argNetworkMode, + EnableMetrics: *argEnableMetrics, // OVS Monitor PollTimeout: *argPollTimeout,