1
0
mirror of https://github.com/prometheus-community/windows_exporter.git synced 2025-04-18 19:24:05 +03:00

hyperv: fix Windows Server 2016 compatibility (#1925)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke 2025-03-14 19:28:48 +01:00 committed by GitHub
parent d58f8c59c6
commit bc1b40c679
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 34 additions and 24 deletions

View File

@ -148,7 +148,7 @@ func (c *Collector) Close() error {
return nil
}
func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
c.collectorFns = make([]func(ch chan<- prometheus.Metric) error, 0, len(c.config.CollectorsEnabled))
c.closeFns = make([]func(), 0, len(c.config.CollectorsEnabled))
@ -224,9 +224,10 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
close: c.perfDataCollectorVirtualNetworkAdapterDropReasons.Close,
},
subCollectorVirtualSMB: {
build: c.buildVirtualSMB,
collect: c.collectVirtualSMB,
close: c.perfDataCollectorVirtualSMB.Close,
build: c.buildVirtualSMB,
collect: c.collectVirtualSMB,
close: c.perfDataCollectorVirtualSMB.Close,
minBuildNumber: osversion.LTSC2022,
},
subCollectorVirtualStorageDevice: {
build: c.buildVirtualStorageDevice,
@ -253,7 +254,10 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
}
if buildNumber < subCollectors[name].minBuildNumber {
errs = append(errs, fmt.Errorf("collector %s requires Windows Server 2022 or newer", name))
logger.Warn(fmt.Sprintf(
"collector %s requires windows build version %d. Current build version: %d",
name, subCollectors[name].minBuildNumber, buildNumber,
), slog.String("collector", name))
continue
}

View File

@ -18,6 +18,7 @@ package hyperv
import (
"fmt"
"github.com/Microsoft/hcsshim/osversion"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus-community/windows_exporter/internal/utils"
@ -40,7 +41,7 @@ type perfDataCounterValuesDynamicMemoryBalancer struct {
// Hyper-V Dynamic Memory Balancer metrics
VmDynamicMemoryBalancerAvailableMemory float64 `perfdata:"Available Memory"`
VmDynamicMemoryBalancerAvailableMemoryForBalancing float64 `perfdata:"Available Memory For Balancing"`
VmDynamicMemoryBalancerAvailableMemoryForBalancing float64 `perfdata:"Available Memory For Balancing" perfdata_min_build:"17763"`
VmDynamicMemoryBalancerAveragePressure float64 `perfdata:"Average Pressure"`
VmDynamicMemoryBalancerSystemCurrentPressure float64 `perfdata:"System Current Pressure"`
}
@ -96,12 +97,14 @@ func (c *Collector) collectDynamicMemoryBalancer(ch chan<- prometheus.Metric) er
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.vmDynamicMemoryBalancerAvailableMemoryForBalancing,
prometheus.GaugeValue,
utils.MBToBytes(data.VmDynamicMemoryBalancerAvailableMemoryForBalancing),
data.Name,
)
if osversion.Build() >= osversion.LTSC2019 {
ch <- prometheus.MustNewConstMetric(
c.vmDynamicMemoryBalancerAvailableMemoryForBalancing,
prometheus.GaugeValue,
utils.MBToBytes(data.VmDynamicMemoryBalancerAvailableMemoryForBalancing),
data.Name,
)
}
ch <- prometheus.MustNewConstMetric(
c.vmDynamicMemoryBalancerAveragePressure,

View File

@ -18,6 +18,7 @@ package hyperv
import (
"fmt"
"github.com/Microsoft/hcsshim/osversion"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus-community/windows_exporter/internal/utils"
@ -47,7 +48,7 @@ type perfDataCounterValuesDynamicMemoryVM struct {
// Hyper-V Dynamic Memory VM metrics
VmMemoryAddedMemory float64 `perfdata:"Added Memory"`
VmMemoryCurrentPressure float64 `perfdata:"Current Pressure"`
VmMemoryGuestAvailableMemory float64 `perfdata:"Guest Available Memory"`
VmMemoryGuestAvailableMemory float64 `perfdata:"Guest Available Memory" perfdata_min_build:"17763"`
VmMemoryGuestVisiblePhysicalMemory float64 `perfdata:"Guest Visible Physical Memory"`
VmMemoryMaximumPressure float64 `perfdata:"Maximum Pressure"`
VmMemoryMemoryAddOperations float64 `perfdata:"Memory Add Operations"`
@ -150,12 +151,14 @@ func (c *Collector) collectDynamicMemoryVM(ch chan<- prometheus.Metric) error {
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.vmMemoryGuestAvailableMemory,
prometheus.GaugeValue,
utils.MBToBytes(data.VmMemoryGuestAvailableMemory),
data.Name,
)
if osversion.Build() >= osversion.LTSC2019 {
ch <- prometheus.MustNewConstMetric(
c.vmMemoryGuestAvailableMemory,
prometheus.GaugeValue,
utils.MBToBytes(data.VmMemoryGuestAvailableMemory),
data.Name,
)
}
ch <- prometheus.MustNewConstMetric(
c.vmMemoryGuestVisiblePhysicalMemory,

View File

@ -40,7 +40,7 @@ type collectorHypervisorVirtualProcessor struct {
type perfDataCounterValuesHypervisorVirtualProcessor struct {
Name string
HypervisorVirtualProcessorGuestIdleTimePercent float64 `perfdata:"% Guest Idle Time"`
HypervisorVirtualProcessorGuestRunTimePercent float64 `perfdata:"% Guest Run Time"`
HypervisorVirtualProcessorHypervisorRunTimePercent float64 `perfdata:"% Hypervisor Run Time"`
HypervisorVirtualProcessorTotalRunTimePercent float64 `perfdata:"% Total Run Time"`
HypervisorVirtualProcessorRemoteRunTimePercent float64 `perfdata:"% Remote Run Time"`
@ -108,15 +108,15 @@ func (c *Collector) collectHypervisorVirtualProcessor(ch chan<- prometheus.Metri
ch <- prometheus.MustNewConstMetric(
c.hypervisorVirtualProcessorTimeTotal,
prometheus.CounterValue,
data.HypervisorVirtualProcessorGuestIdleTimePercent,
vmName, coreID, "guest_idle",
data.HypervisorVirtualProcessorGuestRunTimePercent,
vmName, coreID, "guest",
)
ch <- prometheus.MustNewConstMetric(
c.hypervisorVirtualProcessorTimeTotal,
prometheus.CounterValue,
data.HypervisorVirtualProcessorGuestIdleTimePercent,
vmName, coreID, "guest_idle",
data.HypervisorVirtualProcessorRemoteRunTimePercent,
vmName, coreID, "remote",
)
ch <- prometheus.MustNewConstMetric(