mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-03 09:06:35 +00:00
hyperv: fix Windows Server 2016 compatibility (#1925)
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
@@ -148,7 +148,7 @@ func (c *Collector) Close() error {
|
|||||||
return nil
|
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.collectorFns = make([]func(ch chan<- prometheus.Metric) error, 0, len(c.config.CollectorsEnabled))
|
||||||
c.closeFns = make([]func(), 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,
|
close: c.perfDataCollectorVirtualNetworkAdapterDropReasons.Close,
|
||||||
},
|
},
|
||||||
subCollectorVirtualSMB: {
|
subCollectorVirtualSMB: {
|
||||||
build: c.buildVirtualSMB,
|
build: c.buildVirtualSMB,
|
||||||
collect: c.collectVirtualSMB,
|
collect: c.collectVirtualSMB,
|
||||||
close: c.perfDataCollectorVirtualSMB.Close,
|
close: c.perfDataCollectorVirtualSMB.Close,
|
||||||
|
minBuildNumber: osversion.LTSC2022,
|
||||||
},
|
},
|
||||||
subCollectorVirtualStorageDevice: {
|
subCollectorVirtualStorageDevice: {
|
||||||
build: c.buildVirtualStorageDevice,
|
build: c.buildVirtualStorageDevice,
|
||||||
@@ -253,7 +254,10 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if buildNumber < subCollectors[name].minBuildNumber {
|
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
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package hyperv
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/osversion"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/types"
|
"github.com/prometheus-community/windows_exporter/internal/types"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/utils"
|
"github.com/prometheus-community/windows_exporter/internal/utils"
|
||||||
@@ -40,7 +41,7 @@ type perfDataCounterValuesDynamicMemoryBalancer struct {
|
|||||||
|
|
||||||
// Hyper-V Dynamic Memory Balancer metrics
|
// Hyper-V Dynamic Memory Balancer metrics
|
||||||
VmDynamicMemoryBalancerAvailableMemory float64 `perfdata:"Available Memory"`
|
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"`
|
VmDynamicMemoryBalancerAveragePressure float64 `perfdata:"Average Pressure"`
|
||||||
VmDynamicMemoryBalancerSystemCurrentPressure float64 `perfdata:"System Current Pressure"`
|
VmDynamicMemoryBalancerSystemCurrentPressure float64 `perfdata:"System Current Pressure"`
|
||||||
}
|
}
|
||||||
@@ -96,12 +97,14 @@ func (c *Collector) collectDynamicMemoryBalancer(ch chan<- prometheus.Metric) er
|
|||||||
data.Name,
|
data.Name,
|
||||||
)
|
)
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
if osversion.Build() >= osversion.LTSC2019 {
|
||||||
c.vmDynamicMemoryBalancerAvailableMemoryForBalancing,
|
ch <- prometheus.MustNewConstMetric(
|
||||||
prometheus.GaugeValue,
|
c.vmDynamicMemoryBalancerAvailableMemoryForBalancing,
|
||||||
utils.MBToBytes(data.VmDynamicMemoryBalancerAvailableMemoryForBalancing),
|
prometheus.GaugeValue,
|
||||||
data.Name,
|
utils.MBToBytes(data.VmDynamicMemoryBalancerAvailableMemoryForBalancing),
|
||||||
)
|
data.Name,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.vmDynamicMemoryBalancerAveragePressure,
|
c.vmDynamicMemoryBalancerAveragePressure,
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package hyperv
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/osversion"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
"github.com/prometheus-community/windows_exporter/internal/pdh"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/types"
|
"github.com/prometheus-community/windows_exporter/internal/types"
|
||||||
"github.com/prometheus-community/windows_exporter/internal/utils"
|
"github.com/prometheus-community/windows_exporter/internal/utils"
|
||||||
@@ -47,7 +48,7 @@ type perfDataCounterValuesDynamicMemoryVM struct {
|
|||||||
// Hyper-V Dynamic Memory VM metrics
|
// Hyper-V Dynamic Memory VM metrics
|
||||||
VmMemoryAddedMemory float64 `perfdata:"Added Memory"`
|
VmMemoryAddedMemory float64 `perfdata:"Added Memory"`
|
||||||
VmMemoryCurrentPressure float64 `perfdata:"Current Pressure"`
|
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"`
|
VmMemoryGuestVisiblePhysicalMemory float64 `perfdata:"Guest Visible Physical Memory"`
|
||||||
VmMemoryMaximumPressure float64 `perfdata:"Maximum Pressure"`
|
VmMemoryMaximumPressure float64 `perfdata:"Maximum Pressure"`
|
||||||
VmMemoryMemoryAddOperations float64 `perfdata:"Memory Add Operations"`
|
VmMemoryMemoryAddOperations float64 `perfdata:"Memory Add Operations"`
|
||||||
@@ -150,12 +151,14 @@ func (c *Collector) collectDynamicMemoryVM(ch chan<- prometheus.Metric) error {
|
|||||||
data.Name,
|
data.Name,
|
||||||
)
|
)
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
if osversion.Build() >= osversion.LTSC2019 {
|
||||||
c.vmMemoryGuestAvailableMemory,
|
ch <- prometheus.MustNewConstMetric(
|
||||||
prometheus.GaugeValue,
|
c.vmMemoryGuestAvailableMemory,
|
||||||
utils.MBToBytes(data.VmMemoryGuestAvailableMemory),
|
prometheus.GaugeValue,
|
||||||
data.Name,
|
utils.MBToBytes(data.VmMemoryGuestAvailableMemory),
|
||||||
)
|
data.Name,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.vmMemoryGuestVisiblePhysicalMemory,
|
c.vmMemoryGuestVisiblePhysicalMemory,
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ type collectorHypervisorVirtualProcessor struct {
|
|||||||
type perfDataCounterValuesHypervisorVirtualProcessor struct {
|
type perfDataCounterValuesHypervisorVirtualProcessor struct {
|
||||||
Name string
|
Name string
|
||||||
|
|
||||||
HypervisorVirtualProcessorGuestIdleTimePercent float64 `perfdata:"% Guest Idle Time"`
|
HypervisorVirtualProcessorGuestRunTimePercent float64 `perfdata:"% Guest Run Time"`
|
||||||
HypervisorVirtualProcessorHypervisorRunTimePercent float64 `perfdata:"% Hypervisor Run Time"`
|
HypervisorVirtualProcessorHypervisorRunTimePercent float64 `perfdata:"% Hypervisor Run Time"`
|
||||||
HypervisorVirtualProcessorTotalRunTimePercent float64 `perfdata:"% Total Run Time"`
|
HypervisorVirtualProcessorTotalRunTimePercent float64 `perfdata:"% Total Run Time"`
|
||||||
HypervisorVirtualProcessorRemoteRunTimePercent float64 `perfdata:"% Remote Run Time"`
|
HypervisorVirtualProcessorRemoteRunTimePercent float64 `perfdata:"% Remote Run Time"`
|
||||||
@@ -108,15 +108,15 @@ func (c *Collector) collectHypervisorVirtualProcessor(ch chan<- prometheus.Metri
|
|||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.hypervisorVirtualProcessorTimeTotal,
|
c.hypervisorVirtualProcessorTimeTotal,
|
||||||
prometheus.CounterValue,
|
prometheus.CounterValue,
|
||||||
data.HypervisorVirtualProcessorGuestIdleTimePercent,
|
data.HypervisorVirtualProcessorGuestRunTimePercent,
|
||||||
vmName, coreID, "guest_idle",
|
vmName, coreID, "guest",
|
||||||
)
|
)
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
c.hypervisorVirtualProcessorTimeTotal,
|
c.hypervisorVirtualProcessorTimeTotal,
|
||||||
prometheus.CounterValue,
|
prometheus.CounterValue,
|
||||||
data.HypervisorVirtualProcessorGuestIdleTimePercent,
|
data.HypervisorVirtualProcessorRemoteRunTimePercent,
|
||||||
vmName, coreID, "guest_idle",
|
vmName, coreID, "remote",
|
||||||
)
|
)
|
||||||
|
|
||||||
ch <- prometheus.MustNewConstMetric(
|
ch <- prometheus.MustNewConstMetric(
|
||||||
|
|||||||
Reference in New Issue
Block a user