From 84b36c4fd876f39d559c3df2d19faf4cb656bdae Mon Sep 17 00:00:00 2001 From: Ben Kochie Date: Tue, 17 Aug 2021 11:51:19 +0200 Subject: [PATCH] Add flag to disable guest CPU metrics In high scale virtualized / cloud environments there are typically no guest VMs. Add a boolean flag to allow disabling the Linux guest CPU metrics. Signed-off-by: Ben Kochie --- CHANGELOG.md | 2 ++ collector/cpu_linux.go | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa75820c..7d6884f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ * [ENHANCEMENT] * [BUGFIX] +* [ENHANCEMENT] Add flag to disable guest CPU metrics #2123 + ## 1.2.2 / 2021-08-06 * [BUGFIX] Fix processes collector long int parsing #2112 diff --git a/collector/cpu_linux.go b/collector/cpu_linux.go index d1f93540..cbd8f71d 100644 --- a/collector/cpu_linux.go +++ b/collector/cpu_linux.go @@ -50,6 +50,7 @@ type cpuCollector struct { const jumpBackSeconds = 3.0 var ( + enableCPUGuest = kingpin.Flag("collector.cpu.guest", "Enables metric node_cpu_guest_seconds_total").Default("true").Bool() enableCPUInfo = kingpin.Flag("collector.cpu.info", "Enables metric cpu_info").Bool() flagsInclude = kingpin.Flag("collector.cpu.info.flags-include", "Filter the `flags` field in cpuInfo with a value that must be a regular expression").String() bugsInclude = kingpin.Flag("collector.cpu.info.bugs-include", "Filter the `bugs` field in cpuInfo with a value that must be a regular expression").String() @@ -296,9 +297,11 @@ func (c *cpuCollector) updateStat(ch chan<- prometheus.Metric) error { ch <- prometheus.MustNewConstMetric(c.cpu, prometheus.CounterValue, cpuStat.SoftIRQ, cpuNum, "softirq") ch <- prometheus.MustNewConstMetric(c.cpu, prometheus.CounterValue, cpuStat.Steal, cpuNum, "steal") - // Guest CPU is also accounted for in cpuStat.User and cpuStat.Nice, expose these as separate metrics. - ch <- prometheus.MustNewConstMetric(c.cpuGuest, prometheus.CounterValue, cpuStat.Guest, cpuNum, "user") - ch <- prometheus.MustNewConstMetric(c.cpuGuest, prometheus.CounterValue, cpuStat.GuestNice, cpuNum, "nice") + if *enableCPUGuest { + // Guest CPU is also accounted for in cpuStat.User and cpuStat.Nice, expose these as separate metrics. + ch <- prometheus.MustNewConstMetric(c.cpuGuest, prometheus.CounterValue, cpuStat.Guest, cpuNum, "user") + ch <- prometheus.MustNewConstMetric(c.cpuGuest, prometheus.CounterValue, cpuStat.GuestNice, cpuNum, "nice") + } } return nil