diff --git a/cmd/controller/controller.go b/cmd/controller/controller.go index b255b8fb194..48717d31124 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 a3f41502250..08e8d7700c2 100644 --- a/cmd/daemon/cniserver.go +++ b/cmd/daemon/cniserver.go @@ -87,7 +87,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 4c68acea01f..26cf8be59a9 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 c7abedeb8ea..e43b5f2d9e2 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() { server := &http.Server{ Addr: fmt.Sprintf("0.0.0.0:%d", config.Port), diff --git a/pkg/controller/config.go b/pkg/controller/config.go index 3ed716b4384..5f521566f22 100644 --- a/pkg/controller/config.go +++ b/pkg/controller/config.go @@ -80,6 +80,7 @@ type Configuration struct { EnableExternalVpc bool EnableEcmp bool EnableKeepVmIP bool + EnableMetrics bool ExternalGatewayConfigNS string ExternalGatewayNet string @@ -136,6 +137,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") @@ -205,6 +207,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 16fd008db32..1ed83214bc3 100644 --- a/pkg/daemon/config.go +++ b/pkg/daemon/config.go @@ -55,6 +55,7 @@ type Configuration struct { DefaultProviderName string DefaultInterfaceName string ExternalGatewayConfigNS string + EnableMetrics bool } // ParseFlags will parse cmd args then init kubeClient and configuration @@ -84,6 +85,7 @@ func ParseFlags() *Configuration { 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 @@ -130,6 +132,7 @@ func ParseFlags() *Configuration { DefaultProviderName: *argsDefaultProviderName, DefaultInterfaceName: *argsDefaultInterfaceName, ExternalGatewayConfigNS: *argExternalGatewayConfigNS, + EnableMetrics: *argEnableMetrics, } return config } 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,