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

@@ -19,13 +19,14 @@ import (
"errors"
"fmt"
"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/client_golang/prometheus"
)
type collectorDatabaseReplica struct {
dbReplicaPerfDataCollectors map[string]*perfdata.Collector
dbReplicaPerfDataCollectors map[string]*pdh.Collector
dbReplicaPerfDataObject []perfDataCounterValuesDBReplica
dbReplicaDatabaseFlowControlDelay *prometheus.Desc
dbReplicaDatabaseFlowControls *prometheus.Desc
@@ -53,67 +54,45 @@ type collectorDatabaseReplica struct {
dbReplicaTransactionDelay *prometheus.Desc
}
const (
dbReplicaDatabaseFlowControlDelay = "Database Flow Control Delay"
dbReplicaDatabaseFlowControlsPerSec = "Database Flow Controls/sec"
dbReplicaFileBytesReceivedPerSec = "File Bytes Received/sec"
dbReplicaGroupCommitsPerSec = "Group Commits/Sec"
dbReplicaGroupCommitTime = "Group Commit Time"
dbReplicaLogApplyPendingQueue = "Log Apply Pending Queue"
dbReplicaLogApplyReadyQueue = "Log Apply Ready Queue"
dbReplicaLogBytesCompressedPerSec = "Log Bytes Compressed/sec"
dbReplicaLogBytesDecompressedPerSec = "Log Bytes Decompressed/sec"
dbReplicaLogBytesReceivedPerSec = "Log Bytes Received/sec"
dbReplicaLogCompressionCacheHitsPerSec = "Log Compression Cache hits/sec"
dbReplicaLogCompressionCacheMissesPerSec = "Log Compression Cache misses/sec"
dbReplicaLogCompressionsPerSec = "Log Compressions/sec"
dbReplicaLogDecompressionsPerSec = "Log Decompressions/sec"
dbReplicaLogRemainingForUndo = "Log remaining for undo"
dbReplicaLogSendQueue = "Log Send Queue"
dbReplicaMirroredWriteTransactionsPerSec = "Mirrored Write Transactions/sec"
dbReplicaRecoveryQueue = "Recovery Queue"
dbReplicaRedoBlockedPerSec = "Redo blocked/sec"
dbReplicaRedoBytesRemaining = "Redo Bytes Remaining"
dbReplicaRedoneBytesPerSec = "Redone Bytes/sec"
dbReplicaRedonesPerSec = "Redones/sec"
dbReplicaTotalLogRequiringUndo = "Total Log requiring undo"
dbReplicaTransactionDelay = "Transaction Delay"
)
type perfDataCounterValuesDBReplica struct {
Name string
DbReplicaDatabaseFlowControlDelay float64 `perfdata:"Database Flow Control Delay"`
DbReplicaDatabaseFlowControlsPerSec float64 `perfdata:"Database Flow Controls/sec"`
DbReplicaFileBytesReceivedPerSec float64 `perfdata:"File Bytes Received/sec"`
DbReplicaGroupCommitsPerSec float64 `perfdata:"Group Commits/Sec"`
DbReplicaGroupCommitTime float64 `perfdata:"Group Commit Time"`
DbReplicaLogApplyPendingQueue float64 `perfdata:"Log Apply Pending Queue"`
DbReplicaLogApplyReadyQueue float64 `perfdata:"Log Apply Ready Queue"`
DbReplicaLogBytesCompressedPerSec float64 `perfdata:"Log Bytes Compressed/sec"`
DbReplicaLogBytesDecompressedPerSec float64 `perfdata:"Log Bytes Decompressed/sec"`
DbReplicaLogBytesReceivedPerSec float64 `perfdata:"Log Bytes Received/sec"`
DbReplicaLogCompressionCacheHitsPerSec float64 `perfdata:"Log Compression Cache hits/sec"`
DbReplicaLogCompressionCacheMissesPerSec float64 `perfdata:"Log Compression Cache misses/sec"`
DbReplicaLogCompressionsPerSec float64 `perfdata:"Log Compressions/sec"`
DbReplicaLogDecompressionsPerSec float64 `perfdata:"Log Decompressions/sec"`
DbReplicaLogRemainingForUndo float64 `perfdata:"Log remaining for undo"`
DbReplicaLogSendQueue float64 `perfdata:"Log Send Queue"`
DbReplicaMirroredWriteTransactionsPerSec float64 `perfdata:"Mirrored Write Transactions/sec"`
DbReplicaRecoveryQueue float64 `perfdata:"Recovery Queue"`
DbReplicaRedoBlockedPerSec float64 `perfdata:"Redo blocked/sec"`
DbReplicaRedoBytesRemaining float64 `perfdata:"Redo Bytes Remaining"`
DbReplicaRedoneBytesPerSec float64 `perfdata:"Redone Bytes/sec"`
DbReplicaRedonesPerSec float64 `perfdata:"Redones/sec"`
DbReplicaTotalLogRequiringUndo float64 `perfdata:"Total Log requiring undo"`
DbReplicaTransactionDelay float64 `perfdata:"Transaction Delay"`
}
func (c *Collector) buildDatabaseReplica() error {
var err error
c.dbReplicaPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
c.dbReplicaPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances))
counters := []string{
dbReplicaDatabaseFlowControlDelay,
dbReplicaDatabaseFlowControlsPerSec,
dbReplicaFileBytesReceivedPerSec,
dbReplicaGroupCommitsPerSec,
dbReplicaGroupCommitTime,
dbReplicaLogApplyPendingQueue,
dbReplicaLogApplyReadyQueue,
dbReplicaLogBytesCompressedPerSec,
dbReplicaLogBytesDecompressedPerSec,
dbReplicaLogBytesReceivedPerSec,
dbReplicaLogCompressionCacheHitsPerSec,
dbReplicaLogCompressionCacheMissesPerSec,
dbReplicaLogCompressionsPerSec,
dbReplicaLogDecompressionsPerSec,
dbReplicaLogRemainingForUndo,
dbReplicaLogSendQueue,
dbReplicaMirroredWriteTransactionsPerSec,
dbReplicaRecoveryQueue,
dbReplicaRedoBlockedPerSec,
dbReplicaRedoBytesRemaining,
dbReplicaRedoneBytesPerSec,
dbReplicaRedonesPerSec,
dbReplicaTotalLogRequiringUndo,
dbReplicaTransactionDelay,
}
for _, sqlInstance := range c.mssqlInstances {
c.dbReplicaPerfDataCollectors[sqlInstance.name], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance.name, "Database Replica"), perfdata.InstancesAll, counters)
c.dbReplicaPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesDBReplica](
c.mssqlGetPerfObjectName(sqlInstance.name, "Database Replica"), pdh.InstancesAll,
)
if err != nil {
errs = append(errs, fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance.name, err))
}
@@ -272,183 +251,179 @@ func (c *Collector) collectDatabaseReplica(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorDatabaseReplica, c.dbReplicaPerfDataCollectors, c.collectDatabaseReplicaInstance)
}
func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
if perfDataCollector == nil {
return types.ErrCollectorNotInitialized
}
perfData, err := perfDataCollector.Collect()
func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.dbReplicaPerfDataObject)
if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), err)
}
for replicaName, data := range perfData {
for _, data := range c.dbReplicaPerfDataObject {
ch <- prometheus.MustNewConstMetric(
c.dbReplicaDatabaseFlowControlDelay,
prometheus.GaugeValue,
data[dbReplicaDatabaseFlowControlDelay].FirstValue,
sqlInstance, replicaName,
data.DbReplicaDatabaseFlowControlDelay,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaDatabaseFlowControls,
prometheus.CounterValue,
data[dbReplicaDatabaseFlowControlsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaDatabaseFlowControlsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaFileBytesReceived,
prometheus.CounterValue,
data[dbReplicaFileBytesReceivedPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaFileBytesReceivedPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaGroupCommits,
prometheus.CounterValue,
data[dbReplicaGroupCommitsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaGroupCommitsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaGroupCommitTime,
prometheus.GaugeValue,
data[dbReplicaGroupCommitTime].FirstValue,
sqlInstance, replicaName,
data.DbReplicaGroupCommitTime,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogApplyPendingQueue,
prometheus.GaugeValue,
data[dbReplicaLogApplyPendingQueue].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogApplyPendingQueue,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogApplyReadyQueue,
prometheus.GaugeValue,
data[dbReplicaLogApplyReadyQueue].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogApplyReadyQueue,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesCompressed,
prometheus.CounterValue,
data[dbReplicaLogBytesCompressedPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogBytesCompressedPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesDecompressed,
prometheus.CounterValue,
data[dbReplicaLogBytesDecompressedPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogBytesDecompressedPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesReceived,
prometheus.CounterValue,
data[dbReplicaLogBytesReceivedPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogBytesReceivedPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressionCachehits,
prometheus.CounterValue,
data[dbReplicaLogCompressionCacheHitsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogCompressionCacheHitsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressionCachemisses,
prometheus.CounterValue,
data[dbReplicaLogCompressionCacheMissesPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogCompressionCacheMissesPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressions,
prometheus.CounterValue,
data[dbReplicaLogCompressionsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogCompressionsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogDecompressions,
prometheus.CounterValue,
data[dbReplicaLogDecompressionsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogDecompressionsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogremainingforundo,
prometheus.GaugeValue,
data[dbReplicaLogRemainingForUndo].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogRemainingForUndo,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogSendQueue,
prometheus.GaugeValue,
data[dbReplicaLogSendQueue].FirstValue,
sqlInstance, replicaName,
data.DbReplicaLogSendQueue,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaMirroredWritetransactions,
prometheus.CounterValue,
data[dbReplicaMirroredWriteTransactionsPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaMirroredWriteTransactionsPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaRecoveryQueue,
prometheus.GaugeValue,
data[dbReplicaRecoveryQueue].FirstValue,
sqlInstance, replicaName,
data.DbReplicaRecoveryQueue,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoblocked,
prometheus.CounterValue,
data[dbReplicaRedoBlockedPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaRedoBlockedPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoBytesRemaining,
prometheus.GaugeValue,
data[dbReplicaRedoBytesRemaining].FirstValue,
sqlInstance, replicaName,
data.DbReplicaRedoBytesRemaining,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoneBytes,
prometheus.CounterValue,
data[dbReplicaRedoneBytesPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaRedoneBytesPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedones,
prometheus.CounterValue,
data[dbReplicaRedonesPerSec].FirstValue,
sqlInstance, replicaName,
data.DbReplicaRedonesPerSec,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaTotalLogrequiringundo,
prometheus.GaugeValue,
data[dbReplicaTotalLogRequiringUndo].FirstValue,
sqlInstance, replicaName,
data.DbReplicaTotalLogRequiringUndo,
sqlInstance, data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.dbReplicaTransactionDelay,
prometheus.GaugeValue,
data[dbReplicaTransactionDelay].FirstValue/1000.0,
sqlInstance, replicaName,
data.DbReplicaTransactionDelay/1000.0,
sqlInstance, data.Name,
)
}