From 4bd8307c11dd2f102148127731365edb1eda7ed5 Mon Sep 17 00:00:00 2001 From: Dominik Eisenberg <64131471+Dominik-esb@users.noreply.github.com> Date: Thu, 19 Feb 2026 22:19:30 +0100 Subject: [PATCH] mscluster: rename `windows_hyperv_hypervisor_virtual_processor_time_total` -> `windows_hyperv_hypervisor_virtual_processor_mode_time_total` (#2322) Signed-off-by: Dominik Eisenberg Signed-off-by: EisenbergD Co-authored-by: EisenbergD --- docs/collector.hyperv.md | 18 +++---- .../hyperv_hypervisor_virtual_processor.go | 48 ++++++++++++++++++- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/docs/collector.hyperv.md b/docs/collector.hyperv.md index 23c8e204..2fbd6ec3 100644 --- a/docs/collector.hyperv.md +++ b/docs/collector.hyperv.md @@ -154,11 +154,11 @@ Some metrics explained: https://learn.microsoft.com/en-us/archive/blogs/chrisavi ### Hyper-V Hypervisor Virtual Processor -| Name | Description | Type | Labels | -|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------|--------------| -| `windows_hyperv_hypervisor_virtual_processor_time_total` | Time that processor spent in different modes (hypervisor, guest_run, guest_idle, remote) | counter | `vm`, `core` | -| `windows_hyperv_hypervisor_virtual_processor_total_run_time_total` | Time that processor spent | counter | `vm`, `core` | -| `windows_hyperv_hypervisor_virtual_processor_cpu_wait_time_per_dispatch_total` | The average time (in nanoseconds) spent waiting for a virtual processor to be dispatched onto a logical processor. | counter | `vm`, `core` | +| Name | Description | Type | Labels | +|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|---------|-----------------------| +| `windows_hyperv_hypervisor_virtual_processor_mode_time_total` | Time that processor spent in different modes (hypervisor, guest_run, guest_idle, remote) | counter | `vm`, `core`, `state` | +| `windows_hyperv_hypervisor_virtual_processor_run_time_total` | Time that processor spent | counter | `vm`, `core` | +| `windows_hyperv_hypervisor_virtual_processor_cpu_wait_time_per_dispatch_total` | The average time (in nanoseconds) spent waiting for a virtual processor to be dispatched onto a logical processor. | counter | `vm`, `core` | ### Hyper-V Virtual Network Adapter @@ -265,19 +265,19 @@ _This collector does not yet have explained examples, we would appreciate your h ## Useful queries Percent of physical CPU resources used per VM (on instance "localhost") ``` -(sum (rate(windows_hyperv_hypervisor_virtual_processor_time_total{state="hypervisor",instance="localhost"}[1m]))) / ignoring(state,vm) group_left max (windows_cpu_logical_processor{instance="localhost"}) / 100000 +(sum (rate(windows_hyperv_hypervisor_virtual_processor_mode_time_total{state="hypervisor",instance="localhost"}[1m]))) / ignoring(state,vm) group_left max (windows_cpu_logical_processor{instance="localhost"}) / 100000 ``` Percent of physical CPU resources used by all VMs (on all monitored hosts) ``` -(sum by (instance)(rate(windows_hyperv_hypervisor_virtual_processor_total_run_time_total{}[1m]))) / max by (instance)(windows_cpu_logical_processor{}) / 100000 +(sum by (instance)(rate(windows_hyperv_hypervisor_virtual_processor_run_time_total{}[1m]))) / max by (instance)(windows_cpu_logical_processor{}) / 100000 ``` Percent of physical CPU resources by the hosts themselves (on all monitored hosts) ``` -(sum by (instance)(rate(windows_hyperv_hypervisor_root_virtual_processor_total_run_time_total{state="total"}[1m]))) / sum by (instance)(windows_cpu_logical_processor{}) / 100000 +(sum by (instance)(rate(windows_hyperv_hypervisor_root_virtual_processor_time_total{state="total"}[1m]))) / sum by (instance)(windows_cpu_logical_processor{}) / 100000 ``` Percent of physical CPU resources by the hypervisor (on all monitored hosts) ``` -(sum by (instance)(rate(windows_hyperv_hypervisor_logical_processor_total_run_time_total{}[1m]))) / sum by (instance)(windows_cpu_logical_processor{}) / 100000 +(sum by (instance)(rate(windows_hyperv_hypervisor_logical_processor_time_total{}[1m]))) / sum by (instance)(windows_cpu_logical_processor{}) / 100000 ``` ## Alerting examples diff --git a/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go b/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go index 7cda5eb5..d6e3048b 100644 --- a/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go +++ b/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go @@ -35,7 +35,9 @@ type collectorHypervisorVirtualProcessor struct { // \Hyper-V Hypervisor Virtual Processor(*)\% Hypervisor Run Time // \Hyper-V Hypervisor Virtual Processor(*)\% Remote Run Time hypervisorVirtualProcessorTimeTotal *prometheus.Desc + hypervisorVirtualProcessorModeTimeTotal *prometheus.Desc // New name for better clarity hypervisorVirtualProcessorTotalRunTimeTotal *prometheus.Desc // \Hyper-V Hypervisor Virtual Processor(*)\% Total Run Time + hypervisorVirtualProcessorRunTimeTotal *prometheus.Desc // New name for better clarity hypervisorVirtualProcessorContextSwitches *prometheus.Desc // \Hyper-V Hypervisor Virtual Processor(*)\CPU Wait Time Per Dispatch } @@ -59,16 +61,32 @@ func (c *Collector) buildHypervisorVirtualProcessor() error { c.hypervisorVirtualProcessorTimeTotal = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "hypervisor_virtual_processor_time_total"), + "DEPRECATED: use hypervisor_virtual_processor_mode_time_total. Time that processor spent in different modes (hypervisor, guest_run, guest_idle, remote)", + []string{"vm", "core", "state"}, + nil, + ) + // New metric with better name for clarity, old one is kept for backward compatibility + c.hypervisorVirtualProcessorModeTimeTotal = prometheus.NewDesc( + prometheus.BuildFQName(types.Namespace, Name, "hypervisor_virtual_processor_mode_time_total"), "Time that processor spent in different modes (hypervisor, guest_run, guest_idle, remote)", []string{"vm", "core", "state"}, nil, ) + // end same metric c.hypervisorVirtualProcessorTotalRunTimeTotal = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "hypervisor_virtual_processor_total_run_time_total"), + "DEPRECATED: use hypervisor_virtual_processor_run_time_total. Time that processor spent", + []string{"vm", "core"}, + nil, + ) + // New metric with better name for clarity, old one is kept for backward compatibility + c.hypervisorVirtualProcessorRunTimeTotal = prometheus.NewDesc( + prometheus.BuildFQName(types.Namespace, Name, "hypervisor_virtual_processor_run_time_total"), "Time that processor spent", []string{"vm", "core"}, nil, ) + // end same metric c.hypervisorVirtualProcessorContextSwitches = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "hypervisor_virtual_processor_cpu_wait_time_per_dispatch_total"), "The average time (in nanoseconds) spent waiting for a virtual processor to be dispatched onto a logical processor.", @@ -120,14 +138,42 @@ func (c *Collector) collectHypervisorVirtualProcessor(ch chan<- prometheus.Metri data.HypervisorVirtualProcessorRemoteRunTimePercent, vmName, coreID, "remote", ) + // Same metric with new name for better clarity, old one is kept for backward compatibility + ch <- prometheus.MustNewConstMetric( + c.hypervisorVirtualProcessorModeTimeTotal, + prometheus.CounterValue, + data.HypervisorVirtualProcessorHypervisorRunTimePercent, + vmName, coreID, "hypervisor", + ) + ch <- prometheus.MustNewConstMetric( + c.hypervisorVirtualProcessorModeTimeTotal, + prometheus.CounterValue, + data.HypervisorVirtualProcessorGuestRunTimePercent, + vmName, coreID, "guest", + ) + + ch <- prometheus.MustNewConstMetric( + c.hypervisorVirtualProcessorModeTimeTotal, + prometheus.CounterValue, + data.HypervisorVirtualProcessorRemoteRunTimePercent, + vmName, coreID, "remote", + ) + // end same metric ch <- prometheus.MustNewConstMetric( c.hypervisorVirtualProcessorTotalRunTimeTotal, prometheus.CounterValue, data.HypervisorVirtualProcessorTotalRunTimePercent, vmName, coreID, ) - + // Same metric with new name for better clarity, old one is kept for backward compatibility + ch <- prometheus.MustNewConstMetric( + c.hypervisorVirtualProcessorRunTimeTotal, + prometheus.CounterValue, + data.HypervisorVirtualProcessorTotalRunTimePercent, + vmName, coreID, + ) + // end same metric ch <- prometheus.MustNewConstMetric( c.hypervisorVirtualProcessorContextSwitches, prometheus.CounterValue,