Add Hyper-V Hypervisor Logical Processor metrics
Signed-off-by: Anton Akhmedzyanov <gloin@gloin.ru>
This commit is contained in:
parent
b2ed5f61b4
commit
b43978eeb4
|
@ -53,6 +53,11 @@ type HyperVCollector struct {
|
||||||
LogicalProcessors *prometheus.Desc
|
LogicalProcessors *prometheus.Desc
|
||||||
VirtualProcessors *prometheus.Desc
|
VirtualProcessors *prometheus.Desc
|
||||||
|
|
||||||
|
// Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor
|
||||||
|
HostLPGuestRunTime *prometheus.Desc
|
||||||
|
HostLPHypervisorRunTime *prometheus.Desc
|
||||||
|
HostLPTotalRunTime *prometheus.Desc
|
||||||
|
|
||||||
// Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor
|
// Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor
|
||||||
HostGuestRunTime *prometheus.Desc
|
HostGuestRunTime *prometheus.Desc
|
||||||
HostHypervisorRunTime *prometheus.Desc
|
HostHypervisorRunTime *prometheus.Desc
|
||||||
|
@ -309,6 +314,27 @@ func NewHyperVCollector() (Collector, error) {
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
HostLPGuestRunTime: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, buildSubsystemName("host_lp"), "guest_run_time"),
|
||||||
|
"The percentage of time spent by the processor in guest code",
|
||||||
|
[]string{"core"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
HostLPHypervisorRunTime: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, buildSubsystemName("host_lp"), "hypervisor_run_time"),
|
||||||
|
"The percentage of time spent by the processor in hypervisor code",
|
||||||
|
[]string{"core"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
HostLPTotalRunTime: prometheus.NewDesc(
|
||||||
|
prometheus.BuildFQName(Namespace, buildSubsystemName("host_lp"), "total_run_time"),
|
||||||
|
"The percentage of time spent by the processor in guest and hypervisor code",
|
||||||
|
[]string{"core"},
|
||||||
|
nil,
|
||||||
|
),
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
HostGuestRunTime: prometheus.NewDesc(
|
HostGuestRunTime: prometheus.NewDesc(
|
||||||
prometheus.BuildFQName(Namespace, buildSubsystemName("host_cpu"), "guest_run_time"),
|
prometheus.BuildFQName(Namespace, buildSubsystemName("host_cpu"), "guest_run_time"),
|
||||||
"The time spent by the virtual processor in guest code",
|
"The time spent by the virtual processor in guest code",
|
||||||
|
@ -694,6 +720,11 @@ func (c *HyperVCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metri
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if desc, err := c.collectHostLPUsage(ch); err != nil {
|
||||||
|
log.Error("failed collecting hyperV host logical processors metrics:", desc, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if desc, err := c.collectHostCpuUsage(ch); err != nil {
|
if desc, err := c.collectHostCpuUsage(ch); err != nil {
|
||||||
log.Error("failed collecting hyperV host CPU metrics:", desc, err)
|
log.Error("failed collecting hyperV host CPU metrics:", desc, err)
|
||||||
return err
|
return err
|
||||||
|
@ -999,6 +1030,59 @@ func (c *HyperVCollector) collectVmProcessor(ch chan<- prometheus.Metric) (*prom
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor ...
|
||||||
|
type Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor struct {
|
||||||
|
Name string
|
||||||
|
PercentGuestRunTime uint64
|
||||||
|
PercentHypervisorRunTime uint64
|
||||||
|
PercentTotalRunTime uint
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *HyperVCollector) collectHostLPUsage(ch chan<- prometheus.Metric) (*prometheus.Desc, error) {
|
||||||
|
var dst []Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor
|
||||||
|
q := queryAll(&dst)
|
||||||
|
if err := wmi.Query(q, &dst); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, obj := range dst {
|
||||||
|
if strings.Contains(obj.Name, "_Total") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// The name format is Hv LP <core id>
|
||||||
|
parts := strings.Split(obj.Name, " ")
|
||||||
|
if len(parts) != 3 {
|
||||||
|
log.Warnf("Unexpected format of Name in collectHostLPUsage: %q", obj.Name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
coreId := parts[2]
|
||||||
|
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.HostLPGuestRunTime,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(obj.PercentGuestRunTime),
|
||||||
|
coreId,
|
||||||
|
)
|
||||||
|
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.HostLPHypervisorRunTime,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(obj.PercentHypervisorRunTime),
|
||||||
|
coreId,
|
||||||
|
)
|
||||||
|
|
||||||
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
c.HostLPTotalRunTime,
|
||||||
|
prometheus.GaugeValue,
|
||||||
|
float64(obj.PercentTotalRunTime),
|
||||||
|
coreId,
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor ...
|
// Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor ...
|
||||||
type Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor struct {
|
type Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor struct {
|
||||||
Name string
|
Name string
|
||||||
|
|
|
@ -5,7 +5,7 @@ The hyperv collector exposes metrics about the Hyper-V hypervisor
|
||||||
|||
|
|||
|
||||||
-|-
|
-|-
|
||||||
Metric name prefix | `hyperv`
|
Metric name prefix | `hyperv`
|
||||||
Classes | `Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary`<br/>`Win32_PerfRawData_VidPerfProvider_HyperVVMVidPartition`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorRootPartition`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisor`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorVirtualProcessor`<br/>`Win32_PerfRawData_NvspSwitchStats_HyperVVirtualSwitch`<br/>`Win32_PerfRawData_EthernetPerfProvider_HyperVLegacyNetworkAdapter`<br/>`Win32_PerfRawData_Counters_HyperVVirtualStorageDevice`<br/>`Win32_PerfRawData_NvspNicStats_HyperVVirtualNetworkAdapter`
|
Classes | `Win32_PerfRawData_VmmsVirtualMachineStats_HyperVVirtualMachineHealthSummary`<br/>`Win32_PerfRawData_VidPerfProvider_HyperVVMVidPartition`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorRootPartition`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisor`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorRootVirtualProcessor`<br/>`Win32_PerfRawData_HvStats_HyperVHypervisorVirtualProcessor`<br/>`Win32_PerfRawData_NvspSwitchStats_HyperVVirtualSwitch`<br/>`Win32_PerfRawData_EthernetPerfProvider_HyperVLegacyNetworkAdapter`<br/>`Win32_PerfRawData_Counters_HyperVVirtualStorageDevice`<br/>`Win32_PerfRawData_NvspNicStats_HyperVVirtualNetworkAdapter`
|
||||||
Enabled by default? | No
|
Enabled by default? | No
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
|
@ -44,6 +44,9 @@ Name | Description | Type | Labels
|
||||||
`windows_hyperv_root_partition_virtual_tlb_pages` | _Not yet documented_ | counter | None
|
`windows_hyperv_root_partition_virtual_tlb_pages` | _Not yet documented_ | counter | None
|
||||||
`windows_hyperv_hypervisor_virtual_processors` | _Not yet documented_ | counter | None
|
`windows_hyperv_hypervisor_virtual_processors` | _Not yet documented_ | counter | None
|
||||||
`windows_hyperv_hypervisor_logical_processors` | _Not yet documented_ | counter | None
|
`windows_hyperv_hypervisor_logical_processors` | _Not yet documented_ | counter | None
|
||||||
|
`windows_hyperv_host_lp_guest_run_time` | _Not yet documented_ | counter | `core`
|
||||||
|
`windows_hyperv_host_lp_hypervisor_run_time` | _Not yet documented_ | counter | `core`
|
||||||
|
`windows_hyperv_host_lp_total_run_time` | _Not yet documented_ | counter | `core`
|
||||||
`windows_hyperv_host_cpu_guest_run_time` | _Not yet documented_ | counter | `core`
|
`windows_hyperv_host_cpu_guest_run_time` | _Not yet documented_ | counter | `core`
|
||||||
`windows_hyperv_host_cpu_hypervisor_run_time` | _Not yet documented_ | counter | `core`
|
`windows_hyperv_host_cpu_hypervisor_run_time` | _Not yet documented_ | counter | `core`
|
||||||
`windows_hyperv_host_cpu_remote_run_time` | _Not yet documented_ | counter | `core`
|
`windows_hyperv_host_cpu_remote_run_time` | _Not yet documented_ | counter | `core`
|
||||||
|
|
Loading…
Reference in New Issue