process: Use registry collector for V1 data (#1814)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2024-12-21 22:58:47 +01:00
committed by GitHub
parent 39c929eefe
commit a9f8b3b722
158 changed files with 7793 additions and 7748 deletions

View File

@@ -1,39 +0,0 @@
// Copyright 2024 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build windows
package vmware
const (
couEffectiveVMSpeedMHz = "Effective VM Speed in MHz" // \VM Processor(*)\Effective VM Speed in MHz
cpuHostProcessorSpeedMHz = "Host processor speed in MHz" // \VM Processor(*)\Host processor speed in MHz
cpuLimitMHz = "Limit in MHz" // \VM Processor(*)\Limit in MHz
cpuReservationMHz = "Reservation in MHz" // \VM Processor(*)\Reservation in MHz
cpuShares = "Shares" // \VM Processor(*)\Shares
cpuStolenMs = "CPU stolen time" // \VM Processor(*)\CPU stolen time
cpuTimePercents = "% Processor Time" // \VM Processor(*)\% Processor Time
memActiveMB = "Memory Active in MB" // \VM Memory\Memory Active in MB
memBalloonedMB = "Memory Ballooned in MB" // \VM Memory\Memory Ballooned in MB
memLimitMB = "Memory Limit in MB" // \VM Memory\Memory Limit in MB
memMappedMB = "Memory Mapped in MB" // \VM Memory\Memory Mapped in MB
memOverheadMB = "Memory Overhead in MB" // \VM Memory\Memory Overhead in MB
memReservationMB = "Memory Reservation in MB" // \VM Memory\Memory Reservation in MB
memSharedMB = "Memory Shared in MB" // \VM Memory\Memory Shared in MB
memSharedSavedMB = "Memory Shared Saved in MB" // \VM Memory\Memory Shared Saved in MB
memShares = "Memory Shares" // \VM Memory\Memory Shares
memSwappedMB = "Memory Swapped in MB" // \VM Memory\Memory Swapped in MB
memTargetSizeMB = "Memory Target Size" // \VM Memory\Memory Target Size
memUsedMB = "Memory Used in MB" // \VM Memory\Memory Used in MB
)

View File

@@ -0,0 +1,41 @@
// Copyright 2024 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build windows
package vmware
type perfDataCounterValuesCPU struct {
CouEffectiveVMSpeedMHz float64 `perfdata:"Effective VM Speed in MHz"` // \VM Processor(*)\Effective VM Speed in MHz
CpuHostProcessorSpeedMHz float64 `perfdata:"Host processor speed in MHz"` // \VM Processor(*)\Host processor speed in MHz
CpuLimitMHz float64 `perfdata:"Limit in MHz"` // \VM Processor(*)\Limit in MHz
CpuReservationMHz float64 `perfdata:"Reservation in MHz"` // \VM Processor(*)\Reservation in MHz
CpuShares float64 `perfdata:"Shares"` // \VM Processor(*)\Shares
CpuStolenMs float64 `perfdata:"CPU stolen time"` // \VM Processor(*)\CPU stolen time
CpuTimePercents float64 `perfdata:"% Processor Time"` // \VM Processor(*)\% Processor Time
}
type perfDataCounterValuesMemory struct {
MemActiveMB float64 `perfdata:"Memory Active in MB"` // \VM Memory\Memory Active in MB
MemBalloonedMB float64 `perfdata:"Memory Ballooned in MB"` // \VM Memory\Memory Ballooned in MB
MemLimitMB float64 `perfdata:"Memory Limit in MB"` // \VM Memory\Memory Limit in MB
MemMappedMB float64 `perfdata:"Memory Mapped in MB"` // \VM Memory\Memory Mapped in MB
MemOverheadMB float64 `perfdata:"Memory Overhead in MB"` // \VM Memory\Memory Overhead in MB
MemReservationMB float64 `perfdata:"Memory Reservation in MB"` // \VM Memory\Memory Reservation in MB
MemSharedMB float64 `perfdata:"Memory Shared in MB"` // \VM Memory\Memory Shared in MB
MemSharedSavedMB float64 `perfdata:"Memory Shared Saved in MB"` // \VM Memory\Memory Shared Saved in MB
MemShares float64 `perfdata:"Memory Shares"` // \VM Memory\Memory Shares
MemSwappedMB float64 `perfdata:"Memory Swapped in MB"` // \VM Memory\Memory Swapped in MB
MemTargetSizeMB float64 `perfdata:"Memory Target Size"` // \VM Memory\Memory Target Size
MemUsedMB float64 `perfdata:"Memory Used in MB"` // \VM Memory\Memory Used in MB
}

View File

@@ -22,7 +22,7 @@ import (
"github.com/alecthomas/kingpin/v2"
"github.com/prometheus-community/windows_exporter/internal/mi"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus-community/windows_exporter/internal/utils"
"github.com/prometheus/client_golang/prometheus"
@@ -38,8 +38,10 @@ var ConfigDefaults = Config{}
// A Collector is a Prometheus Collector for WMI Win32_PerfRawData_vmGuestLib_VMem/Win32_PerfRawData_vmGuestLib_VCPU metrics.
type Collector struct {
config Config
perfDataCollectorCPU *perfdata.Collector
perfDataCollectorMemory *perfdata.Collector
perfDataCollectorCPU *pdh.Collector
perfDataCollectorMemory *pdh.Collector
perfDataObjectCPU []perfDataCounterValuesCPU
perfDataObjectMemory []perfDataCounterValuesMemory
memActive *prometheus.Desc
memBallooned *prometheus.Desc
@@ -93,15 +95,7 @@ func (c *Collector) Close() error {
func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
var err error
c.perfDataCollectorCPU, err = perfdata.NewCollector("VM Processor", perfdata.InstancesTotal, []string{
cpuLimitMHz,
cpuReservationMHz,
cpuShares,
cpuStolenMs,
cpuTimePercents,
couEffectiveVMSpeedMHz,
cpuHostProcessorSpeedMHz,
})
c.perfDataCollectorCPU, err = pdh.NewCollector[perfDataCounterValuesCPU]("VM Processor", pdh.InstancesTotal)
if err != nil {
return fmt.Errorf("failed to create VM Processor collector: %w", err)
}
@@ -149,20 +143,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error {
nil,
)
c.perfDataCollectorMemory, err = perfdata.NewCollector("VM Memory", nil, []string{
memActiveMB,
memBalloonedMB,
memLimitMB,
memMappedMB,
memOverheadMB,
memReservationMB,
memSharedMB,
memSharedSavedMB,
memShares,
memSwappedMB,
memTargetSizeMB,
memUsedMB,
})
c.perfDataCollectorMemory, err = pdh.NewCollector[perfDataCounterValuesMemory]("VM Memory", nil)
if err != nil {
return fmt.Errorf("failed to create VM Memory collector: %w", err)
}
@@ -260,142 +241,132 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
}
func (c *Collector) collectMem(ch chan<- prometheus.Metric) error {
perfData, err := c.perfDataCollectorMemory.Collect()
err := c.perfDataCollectorMemory.Collect(&c.perfDataObjectMemory)
if err != nil {
return fmt.Errorf("failed to collect VM Memory metrics: %w", err)
}
data, ok := perfData[perfdata.InstanceEmpty]
if !ok {
return fmt.Errorf("failed to collect VM Memory metrics: %w", types.ErrNoData)
}
ch <- prometheus.MustNewConstMetric(
c.memActive,
prometheus.GaugeValue,
utils.MBToBytes(data[memActiveMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemActiveMB),
)
ch <- prometheus.MustNewConstMetric(
c.memBallooned,
prometheus.GaugeValue,
utils.MBToBytes(data[memBalloonedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemBalloonedMB),
)
ch <- prometheus.MustNewConstMetric(
c.memLimit,
prometheus.GaugeValue,
utils.MBToBytes(data[memLimitMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemLimitMB),
)
ch <- prometheus.MustNewConstMetric(
c.memMapped,
prometheus.GaugeValue,
utils.MBToBytes(data[memMappedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemMappedMB),
)
ch <- prometheus.MustNewConstMetric(
c.memOverhead,
prometheus.GaugeValue,
utils.MBToBytes(data[memOverheadMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemOverheadMB),
)
ch <- prometheus.MustNewConstMetric(
c.memReservation,
prometheus.GaugeValue,
utils.MBToBytes(data[memReservationMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemReservationMB),
)
ch <- prometheus.MustNewConstMetric(
c.memShared,
prometheus.GaugeValue,
utils.MBToBytes(data[memSharedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemSharedMB),
)
ch <- prometheus.MustNewConstMetric(
c.memSharedSaved,
prometheus.GaugeValue,
utils.MBToBytes(data[memSharedSavedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemSharedSavedMB),
)
ch <- prometheus.MustNewConstMetric(
c.memShares,
prometheus.GaugeValue,
data[memShares].FirstValue,
c.perfDataObjectMemory[0].MemShares,
)
ch <- prometheus.MustNewConstMetric(
c.memSwapped,
prometheus.GaugeValue,
utils.MBToBytes(data[memSwappedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemSwappedMB),
)
ch <- prometheus.MustNewConstMetric(
c.memTargetSize,
prometheus.GaugeValue,
utils.MBToBytes(data[memTargetSizeMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemTargetSizeMB),
)
ch <- prometheus.MustNewConstMetric(
c.memUsed,
prometheus.GaugeValue,
utils.MBToBytes(data[memUsedMB].FirstValue),
utils.MBToBytes(c.perfDataObjectMemory[0].MemUsedMB),
)
return nil
}
func (c *Collector) collectCpu(ch chan<- prometheus.Metric) error {
perfData, err := c.perfDataCollectorCPU.Collect()
err := c.perfDataCollectorCPU.Collect(&c.perfDataObjectCPU)
if err != nil {
return fmt.Errorf("failed to collect VM CPU metrics: %w", err)
}
data, ok := perfData[perfdata.InstanceTotal]
if !ok {
return fmt.Errorf("failed to collect VM CPU metrics: %w", types.ErrNoData)
}
ch <- prometheus.MustNewConstMetric(
c.cpuLimitMHz,
prometheus.GaugeValue,
data[cpuLimitMHz].FirstValue,
c.perfDataObjectCPU[0].CpuLimitMHz,
)
ch <- prometheus.MustNewConstMetric(
c.cpuReservationMHz,
prometheus.GaugeValue,
data[cpuReservationMHz].FirstValue,
c.perfDataObjectCPU[0].CpuReservationMHz,
)
ch <- prometheus.MustNewConstMetric(
c.cpuShares,
prometheus.GaugeValue,
data[cpuShares].FirstValue,
c.perfDataObjectCPU[0].CpuShares,
)
ch <- prometheus.MustNewConstMetric(
c.cpuStolenTotal,
prometheus.CounterValue,
utils.MilliSecToSec(data[cpuStolenMs].FirstValue),
utils.MilliSecToSec(c.perfDataObjectCPU[0].CpuStolenMs),
)
ch <- prometheus.MustNewConstMetric(
c.cpuTimeTotal,
prometheus.CounterValue,
utils.MilliSecToSec(data[cpuTimePercents].FirstValue),
utils.MilliSecToSec(c.perfDataObjectCPU[0].CpuTimePercents),
)
ch <- prometheus.MustNewConstMetric(
c.cpuEffectiveVMSpeedMHz,
prometheus.GaugeValue,
data[couEffectiveVMSpeedMHz].FirstValue,
c.perfDataObjectCPU[0].CouEffectiveVMSpeedMHz,
)
ch <- prometheus.MustNewConstMetric(
c.hostProcessorSpeedMHz,
prometheus.GaugeValue,
data[cpuHostProcessorSpeedMHz].FirstValue,
c.perfDataObjectCPU[0].CpuHostProcessorSpeedMHz,
)
return nil