mssql: support initial non default instances names (#1958)

This commit is contained in:
Jan-Otto Kröpke
2025-03-31 22:20:26 +02:00
committed by GitHub
parent ad98d11326
commit fa8af098c8
14 changed files with 310 additions and 308 deletions

View File

@@ -333,7 +333,7 @@ func (c *Collector) getMSSQLInstances() ([]mssqlInstance, error) {
return nil, fmt.Errorf("couldn't get instance info: %w", err) return nil, fmt.Errorf("couldn't get instance info: %w", err)
} }
instance, err := newMssqlInstance(instanceVersion) instance, err := newMssqlInstance(instanceName, instanceVersion)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -348,14 +348,14 @@ func (c *Collector) getMSSQLInstances() ([]mssqlInstance, error) {
// mssqlGetPerfObjectName returns the name of the Windows Performance // mssqlGetPerfObjectName returns the name of the Windows Performance
// Counter object for the given SQL instance and Collector. // Counter object for the given SQL instance and Collector.
func (c *Collector) mssqlGetPerfObjectName(sqlInstance string, collector string) string { func (c *Collector) mssqlGetPerfObjectName(sqlInstance mssqlInstance, collector string) string {
sb := strings.Builder{} sb := strings.Builder{}
if sqlInstance == "MSSQLSERVER" { if sqlInstance.isFirstInstance {
sb.WriteString("SQLServer:") sb.WriteString("SQLServer:")
} else { } else {
sb.WriteString("MSSQL$") sb.WriteString("MSSQL$")
sb.WriteString(sqlInstance) sb.WriteString(sqlInstance.name)
sb.WriteString(":") sb.WriteString(":")
} }
@@ -369,8 +369,8 @@ func (c *Collector) mssqlGetPerfObjectName(sqlInstance string, collector string)
func (c *Collector) collect( func (c *Collector) collect(
ch chan<- prometheus.Metric, ch chan<- prometheus.Metric,
collector string, collector string,
perfDataCollectors map[string]*pdh.Collector, perfDataCollectors map[mssqlInstance]*pdh.Collector,
collectFn func(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error, collectFn func(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error,
) error { ) error {
errs := make([]error, 0, len(perfDataCollectors)) errs := make([]error, 0, len(perfDataCollectors))
@@ -386,11 +386,11 @@ func (c *Collector) collect(
errs = append(errs, err) errs = append(errs, err)
success = 0.0 success = 0.0
c.logger.LogAttrs(ctx, slog.LevelDebug, fmt.Sprintf("mssql class collector %s for instance %s failed after %s", collector, sqlInstance, duration), c.logger.LogAttrs(ctx, slog.LevelDebug, fmt.Sprintf("mssql class collector %s for instance %s failed after %s", collector, sqlInstance.name, duration),
slog.Any("err", err), slog.Any("err", err),
) )
} else { } else {
c.logger.LogAttrs(ctx, slog.LevelDebug, fmt.Sprintf("mssql class collector %s for instance %s succeeded after %s", collector, sqlInstance, duration)) c.logger.LogAttrs(ctx, slog.LevelDebug, fmt.Sprintf("mssql class collector %s for instance %s succeeded after %s", collector, sqlInstance.name, duration))
} }
if collector == "" { if collector == "" {
@@ -401,13 +401,13 @@ func (c *Collector) collect(
c.mssqlScrapeDurationDesc, c.mssqlScrapeDurationDesc,
prometheus.GaugeValue, prometheus.GaugeValue,
duration.Seconds(), duration.Seconds(),
collector, sqlInstance, collector, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.mssqlScrapeSuccessDesc, c.mssqlScrapeSuccessDesc,
prometheus.GaugeValue, prometheus.GaugeValue,
success, success,
collector, sqlInstance, collector, sqlInstance.name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorAccessMethods struct { type collectorAccessMethods struct {
accessMethodsPerfDataCollectors map[string]*pdh.Collector accessMethodsPerfDataCollectors map[mssqlInstance]*pdh.Collector
accessMethodsPerfDataObject []perfDataCounterValuesAccessMethods accessMethodsPerfDataObject []perfDataCounterValuesAccessMethods
accessMethodsAUcleanupbatches *prometheus.Desc accessMethodsAUcleanupbatches *prometheus.Desc
@@ -124,11 +124,11 @@ type perfDataCounterValuesAccessMethods struct {
func (c *Collector) buildAccessMethods() error { func (c *Collector) buildAccessMethods() error {
var err error var err error
c.accessMethodsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.accessMethodsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.accessMethodsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesAccessMethods](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Access Methods"), nil) c.accessMethodsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAccessMethods](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Access Methods"), nil)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create AccessMethods collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create AccessMethods collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -407,7 +407,7 @@ func (c *Collector) collectAccessMethods(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorAccessMethods, c.accessMethodsPerfDataCollectors, c.collectAccessMethodsInstance) return c.collect(ch, subCollectorAccessMethods, c.accessMethodsPerfDataCollectors, c.collectAccessMethodsInstance)
} }
func (c *Collector) collectAccessMethodsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectAccessMethodsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.accessMethodsPerfDataObject) err := perfDataCollector.Collect(&c.accessMethodsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "AccessMethods"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "AccessMethods"), err)
@@ -417,308 +417,308 @@ func (c *Collector) collectAccessMethodsInstance(ch chan<- prometheus.Metric, sq
c.accessMethodsAUcleanupbatches, c.accessMethodsAUcleanupbatches,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsAUCleanupbatchesPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsAUCleanupbatchesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsAUcleanups, c.accessMethodsAUcleanups,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsAUCleanupsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsAUCleanupsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsByReferenceLobCreateCount, c.accessMethodsByReferenceLobCreateCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsByReferenceLobCreateCount, c.accessMethodsPerfDataObject[0].AccessMethodsByReferenceLobCreateCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsByReferenceLobUseCount, c.accessMethodsByReferenceLobUseCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsByReferenceLobUseCount, c.accessMethodsPerfDataObject[0].AccessMethodsByReferenceLobUseCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsCountLobReadahead, c.accessMethodsCountLobReadahead,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsCountLobReadahead, c.accessMethodsPerfDataObject[0].AccessMethodsCountLobReadahead,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsCountPullInRow, c.accessMethodsCountPullInRow,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsCountPullInRow, c.accessMethodsPerfDataObject[0].AccessMethodsCountPullInRow,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsCountPushOffRow, c.accessMethodsCountPushOffRow,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsCountPushOffRow, c.accessMethodsPerfDataObject[0].AccessMethodsCountPushOffRow,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsDeferreddroppedAUs, c.accessMethodsDeferreddroppedAUs,
prometheus.GaugeValue, prometheus.GaugeValue,
c.accessMethodsPerfDataObject[0].AccessMethodsDeferredDroppedAUs, c.accessMethodsPerfDataObject[0].AccessMethodsDeferredDroppedAUs,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsDeferredDroppedrowsets, c.accessMethodsDeferredDroppedrowsets,
prometheus.GaugeValue, prometheus.GaugeValue,
c.accessMethodsPerfDataObject[0].AccessMethodsDeferredDroppedRowsets, c.accessMethodsPerfDataObject[0].AccessMethodsDeferredDroppedRowsets,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsDroppedrowsetcleanups, c.accessMethodsDroppedrowsetcleanups,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsDroppedRowsetCleanupsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsDroppedRowsetCleanupsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsDroppedrowsetsskipped, c.accessMethodsDroppedrowsetsskipped,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsDroppedRowsetsSkippedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsDroppedRowsetsSkippedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsExtentDeallocations, c.accessMethodsExtentDeallocations,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsExtentDeallocationsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsExtentDeallocationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsExtentsAllocated, c.accessMethodsExtentsAllocated,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsExtentsAllocatedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsExtentsAllocatedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFailedAUcleanupbatches, c.accessMethodsFailedAUcleanupbatches,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFailedAUCleanupBatchesPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsFailedAUCleanupBatchesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFailedleafpagecookie, c.accessMethodsFailedleafpagecookie,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFailedLeafPageCookie, c.accessMethodsPerfDataObject[0].AccessMethodsFailedLeafPageCookie,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFailedtreepagecookie, c.accessMethodsFailedtreepagecookie,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFailedTreePageCookie, c.accessMethodsPerfDataObject[0].AccessMethodsFailedTreePageCookie,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsForwardedRecords, c.accessMethodsForwardedRecords,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsForwardedRecordsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsForwardedRecordsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFreeSpacePageFetches, c.accessMethodsFreeSpacePageFetches,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFreeSpacePageFetchesPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsFreeSpacePageFetchesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFreeSpaceScans, c.accessMethodsFreeSpaceScans,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFreeSpaceScansPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsFreeSpaceScansPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsFullScans, c.accessMethodsFullScans,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsFullScansPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsFullScansPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsIndexSearches, c.accessMethodsIndexSearches,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsIndexSearchesPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsIndexSearchesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsInSysXactwaits, c.accessMethodsInSysXactwaits,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsInSysXactWaitsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsInSysXactWaitsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsLobHandleCreateCount, c.accessMethodsLobHandleCreateCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsLobHandleCreateCount, c.accessMethodsPerfDataObject[0].AccessMethodsLobHandleCreateCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsLobHandleDestroyCount, c.accessMethodsLobHandleDestroyCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsLobHandleDestroyCount, c.accessMethodsPerfDataObject[0].AccessMethodsLobHandleDestroyCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsLobSSProviderCreateCount, c.accessMethodsLobSSProviderCreateCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderCreateCount, c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderCreateCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsLobSSProviderDestroyCount, c.accessMethodsLobSSProviderDestroyCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderDestroyCount, c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderDestroyCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsLobSSProviderTruncationCount, c.accessMethodsLobSSProviderTruncationCount,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderTruncationCount, c.accessMethodsPerfDataObject[0].AccessMethodsLobSSProviderTruncationCount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsMixedPageAllocations, c.accessMethodsMixedPageAllocations,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsMixedPageAllocationsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsMixedPageAllocationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsPageCompressionAttempts, c.accessMethodsPageCompressionAttempts,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsPageCompressionAttemptsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsPageCompressionAttemptsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsPageDeallocations, c.accessMethodsPageDeallocations,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsPageDeallocationsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsPageDeallocationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsPagesAllocated, c.accessMethodsPagesAllocated,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsPagesAllocatedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsPagesAllocatedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsPagesCompressed, c.accessMethodsPagesCompressed,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsPagesCompressedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsPagesCompressedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsPageSplits, c.accessMethodsPageSplits,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsPageSplitsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsPageSplitsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsProbeScans, c.accessMethodsProbeScans,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsProbeScansPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsProbeScansPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsRangeScans, c.accessMethodsRangeScans,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsRangeScansPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsRangeScansPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsScanPointRevalidations, c.accessMethodsScanPointRevalidations,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsScanPointRevalidationsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsScanPointRevalidationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsSkippedGhostedRecords, c.accessMethodsSkippedGhostedRecords,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsSkippedGhostedRecordsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsSkippedGhostedRecordsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsTableLockEscalations, c.accessMethodsTableLockEscalations,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsTableLockEscalationsPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsTableLockEscalationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsUsedleafpagecookie, c.accessMethodsUsedleafpagecookie,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsUsedLeafPageCookie, c.accessMethodsPerfDataObject[0].AccessMethodsUsedLeafPageCookie,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsUsedtreepagecookie, c.accessMethodsUsedtreepagecookie,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsUsedTreePageCookie, c.accessMethodsPerfDataObject[0].AccessMethodsUsedTreePageCookie,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsWorkfilesCreated, c.accessMethodsWorkfilesCreated,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsWorkfilesCreatedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsWorkfilesCreatedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsWorktablesCreated, c.accessMethodsWorktablesCreated,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesCreatedPerSec, c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesCreatedPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsWorktablesFromCacheHits, c.accessMethodsWorktablesFromCacheHits,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesFromCacheRatio, c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesFromCacheRatio,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.accessMethodsWorktablesFromCacheLookups, c.accessMethodsWorktablesFromCacheLookups,
prometheus.CounterValue, prometheus.CounterValue,
c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesFromCacheRatioBase, c.accessMethodsPerfDataObject[0].AccessMethodsWorktablesFromCacheRatioBase,
sqlInstance, sqlInstance.name,
) )
return nil return nil

View File

@@ -26,7 +26,7 @@ import (
) )
type collectorAvailabilityReplica struct { type collectorAvailabilityReplica struct {
availabilityReplicaPerfDataCollectors map[string]*pdh.Collector availabilityReplicaPerfDataCollectors map[mssqlInstance]*pdh.Collector
availabilityReplicaPerfDataObject []perfDataCounterValuesAvailabilityReplica availabilityReplicaPerfDataObject []perfDataCounterValuesAvailabilityReplica
availReplicaBytesReceivedFromReplica *prometheus.Desc availReplicaBytesReceivedFromReplica *prometheus.Desc
@@ -57,11 +57,11 @@ type perfDataCounterValuesAvailabilityReplica struct {
func (c *Collector) buildAvailabilityReplica() error { func (c *Collector) buildAvailabilityReplica() error {
var err error var err error
c.availabilityReplicaPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.availabilityReplicaPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.availabilityReplicaPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesAvailabilityReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Availability Replica"), pdh.InstancesAll) c.availabilityReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAvailabilityReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Availability Replica collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Availability Replica collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -130,7 +130,7 @@ func (c *Collector) collectAvailabilityReplica(ch chan<- prometheus.Metric) erro
return c.collect(ch, subCollectorAvailabilityReplica, c.availabilityReplicaPerfDataCollectors, c.collectAvailabilityReplicaInstance) return c.collect(ch, subCollectorAvailabilityReplica, c.availabilityReplicaPerfDataCollectors, c.collectAvailabilityReplicaInstance)
} }
func (c *Collector) collectAvailabilityReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectAvailabilityReplicaInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.availabilityReplicaPerfDataObject) err := perfDataCollector.Collect(&c.availabilityReplicaPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), err)
@@ -141,63 +141,63 @@ func (c *Collector) collectAvailabilityReplicaInstance(ch chan<- prometheus.Metr
c.availReplicaBytesReceivedFromReplica, c.availReplicaBytesReceivedFromReplica,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaBytesReceivedFromReplicaPerSec, data.AvailReplicaBytesReceivedFromReplicaPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaBytesSentToReplica, c.availReplicaBytesSentToReplica,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaBytesSentToReplicaPerSec, data.AvailReplicaBytesSentToReplicaPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaBytesSentToTransport, c.availReplicaBytesSentToTransport,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaBytesSentToTransportPerSec, data.AvailReplicaBytesSentToTransportPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaFlowControl, c.availReplicaFlowControl,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaFlowControlPerSec, data.AvailReplicaFlowControlPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaFlowControlTimeMS, c.availReplicaFlowControlTimeMS,
prometheus.CounterValue, prometheus.CounterValue,
utils.MilliSecToSec(data.AvailReplicaFlowControlTimeMSPerSec), utils.MilliSecToSec(data.AvailReplicaFlowControlTimeMSPerSec),
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaReceivesFromReplica, c.availReplicaReceivesFromReplica,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaReceivesFromReplicaPerSec, data.AvailReplicaReceivesFromReplicaPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaResentMessages, c.availReplicaResentMessages,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaResentMessagesPerSec, data.AvailReplicaResentMessagesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaSendsToReplica, c.availReplicaSendsToReplica,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaSendsToReplicaPerSec, data.AvailReplicaSendsToReplicaPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.availReplicaSendsToTransport, c.availReplicaSendsToTransport,
prometheus.CounterValue, prometheus.CounterValue,
data.AvailReplicaSendsToTransportPerSec, data.AvailReplicaSendsToTransportPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorBufferManager struct { type collectorBufferManager struct {
bufManPerfDataCollectors map[string]*pdh.Collector bufManPerfDataCollectors map[mssqlInstance]*pdh.Collector
bufManPerfDataObject []perfDataCounterValuesBufMan bufManPerfDataObject []perfDataCounterValuesBufMan
bufManBackgroundwriterpages *prometheus.Desc bufManBackgroundwriterpages *prometheus.Desc
@@ -82,11 +82,11 @@ type perfDataCounterValuesBufMan struct {
func (c *Collector) buildBufferManager() error { func (c *Collector) buildBufferManager() error {
var err error var err error
c.bufManPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.bufManPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.bufManPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesBufMan](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Buffer Manager"), nil) c.bufManPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesBufMan](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), nil)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Buffer Manager collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Buffer Manager collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -238,7 +238,7 @@ func (c *Collector) collectBufferManager(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorBufferManager, c.bufManPerfDataCollectors, c.collectBufferManagerInstance) return c.collect(ch, subCollectorBufferManager, c.bufManPerfDataCollectors, c.collectBufferManagerInstance)
} }
func (c *Collector) collectBufferManagerInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectBufferManagerInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.bufManPerfDataObject) err := perfDataCollector.Collect(&c.bufManPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), err)
@@ -249,161 +249,161 @@ func (c *Collector) collectBufferManagerInstance(ch chan<- prometheus.Metric, sq
c.bufManBackgroundwriterpages, c.bufManBackgroundwriterpages,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManBackgroundWriterPagesPerSec, data.BufManBackgroundWriterPagesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManBuffercachehits, c.bufManBuffercachehits,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManBufferCacheHitRatio, data.BufManBufferCacheHitRatio,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManBuffercachelookups, c.bufManBuffercachelookups,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManBufferCacheHitRatioBase, data.BufManBufferCacheHitRatioBase,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManCheckpointpages, c.bufManCheckpointpages,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManCheckpointPagesPerSec, data.BufManCheckpointPagesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManDatabasepages, c.bufManDatabasepages,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManDatabasePages, data.BufManDatabasePages,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionallocatedpages, c.bufManExtensionallocatedpages,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManExtensionAllocatedPages, data.BufManExtensionAllocatedPages,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionfreepages, c.bufManExtensionfreepages,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManExtensionFreePages, data.BufManExtensionFreePages,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensioninuseaspercentage, c.bufManExtensioninuseaspercentage,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManExtensionInUseAsPercentage, data.BufManExtensionInUseAsPercentage,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionoutstandingIOcounter, c.bufManExtensionoutstandingIOcounter,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManExtensionOutstandingIOCounter, data.BufManExtensionOutstandingIOCounter,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionpageevictions, c.bufManExtensionpageevictions,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManExtensionPageEvictionsPerSec, data.BufManExtensionPageEvictionsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionpagereads, c.bufManExtensionpagereads,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManExtensionPageReadsPerSec, data.BufManExtensionPageReadsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionpageunreferencedtime, c.bufManExtensionpageunreferencedtime,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManExtensionPageUnreferencedTime, data.BufManExtensionPageUnreferencedTime,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManExtensionpagewrites, c.bufManExtensionpagewrites,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManExtensionPageWritesPerSec, data.BufManExtensionPageWritesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManFreeliststalls, c.bufManFreeliststalls,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManFreeListStallsPerSec, data.BufManFreeListStallsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManIntegralControllerSlope, c.bufManIntegralControllerSlope,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManIntegralControllerSlope, data.BufManIntegralControllerSlope,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManLazywrites, c.bufManLazywrites,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManLazyWritesPerSec, data.BufManLazyWritesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManPagelifeexpectancy, c.bufManPagelifeexpectancy,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManPageLifeExpectancy, data.BufManPageLifeExpectancy,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManPagelookups, c.bufManPagelookups,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManPageLookupsPerSec, data.BufManPageLookupsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManPagereads, c.bufManPagereads,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManPageReadsPerSec, data.BufManPageReadsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManPagewrites, c.bufManPagewrites,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManPageWritesPerSec, data.BufManPageWritesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManReadaheadpages, c.bufManReadaheadpages,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManReadaheadPagesPerSec, data.BufManReadaheadPagesPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManReadaheadtime, c.bufManReadaheadtime,
prometheus.CounterValue, prometheus.CounterValue,
data.BufManReadaheadTimePerSec, data.BufManReadaheadTimePerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.bufManTargetpages, c.bufManTargetpages,
prometheus.GaugeValue, prometheus.GaugeValue,
data.BufManTargetPages, data.BufManTargetPages,
sqlInstance, sqlInstance.name,
) )
} }

View File

@@ -25,8 +25,8 @@ import (
) )
type collectorDatabases struct { type collectorDatabases struct {
databasesPerfDataCollectors map[string]*pdh.Collector databasesPerfDataCollectors map[mssqlInstance]*pdh.Collector
databasesPerfDataCollectors2019 map[string]*pdh.Collector databasesPerfDataCollectors2019 map[mssqlInstance]*pdh.Collector
databasesPerfDataObject []perfDataCounterValuesDatabases databasesPerfDataObject []perfDataCounterValuesDatabases
databasesPerfDataObject2019 []perfDataCounterValuesDatabases2019 databasesPerfDataObject2019 []perfDataCounterValuesDatabases2019
@@ -141,18 +141,18 @@ type perfDataCounterValuesDatabases2019 struct {
func (c *Collector) buildDatabases() error { func (c *Collector) buildDatabases() error {
var err error var err error
c.databasesPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.databasesPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
c.databasesPerfDataCollectors2019 = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.databasesPerfDataCollectors2019 = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.databasesPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesDatabases](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Databases"), pdh.InstancesAll) c.databasesPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance.name, err))
} }
if sqlInstance.isVersionGreaterOrEqualThan(serverVersion2019) { if sqlInstance.isVersionGreaterOrEqualThan(serverVersion2019) {
c.databasesPerfDataCollectors2019[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesDatabases2019](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Databases"), pdh.InstancesAll) c.databasesPerfDataCollectors2019[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases2019](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Databases 2019 collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Databases 2019 collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -458,7 +458,7 @@ func (c *Collector) collectDatabases(ch chan<- prometheus.Metric) error {
) )
} }
func (c *Collector) collectDatabasesInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectDatabasesInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.databasesPerfDataObject) err := perfDataCollector.Collect(&c.databasesPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err)
@@ -469,336 +469,336 @@ func (c *Collector) collectDatabasesInstance(ch chan<- prometheus.Metric, sqlIns
c.databasesActiveTransactions, c.databasesActiveTransactions,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesActiveTransactions, data.DatabasesActiveTransactions,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesBackupPerRestoreThroughput, c.databasesBackupPerRestoreThroughput,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesBackupPerRestoreThroughputPerSec, data.DatabasesBackupPerRestoreThroughputPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesBulkCopyRows, c.databasesBulkCopyRows,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesBulkCopyRowsPerSec, data.DatabasesBulkCopyRowsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesBulkCopyThroughput, c.databasesBulkCopyThroughput,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesBulkCopyThroughputPerSec*1024, data.DatabasesBulkCopyThroughputPerSec*1024,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesCommitTableEntries, c.databasesCommitTableEntries,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesCommitTableEntries, data.DatabasesCommitTableEntries,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesDataFilesSizeKB, c.databasesDataFilesSizeKB,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesDataFilesSizeKB*1024, data.DatabasesDataFilesSizeKB*1024,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesDBCCLogicalScanBytes, c.databasesDBCCLogicalScanBytes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesDBCCLogicalScanBytesPerSec, data.DatabasesDBCCLogicalScanBytesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesGroupCommitTime, c.databasesGroupCommitTime,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesGroupCommitTimePerSec/1000000.0, data.DatabasesGroupCommitTimePerSec/1000000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogBytesFlushed, c.databasesLogBytesFlushed,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogBytesFlushedPerSec, data.DatabasesLogBytesFlushedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogCacheHits, c.databasesLogCacheHits,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogCacheHitRatio, data.DatabasesLogCacheHitRatio,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogCacheLookups, c.databasesLogCacheLookups,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogCacheHitRatioBase, data.DatabasesLogCacheHitRatioBase,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogCacheReads, c.databasesLogCacheReads,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogCacheReadsPerSec, data.DatabasesLogCacheReadsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFilesSizeKB, c.databasesLogFilesSizeKB,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogFilesSizeKB*1024, data.DatabasesLogFilesSizeKB*1024,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFilesUsedSizeKB, c.databasesLogFilesUsedSizeKB,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogFilesUsedSizeKB*1024, data.DatabasesLogFilesUsedSizeKB*1024,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFlushes, c.databasesLogFlushes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogFlushesPerSec, data.DatabasesLogFlushesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFlushWaits, c.databasesLogFlushWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogFlushWaitsPerSec, data.DatabasesLogFlushWaitsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFlushWaitTime, c.databasesLogFlushWaitTime,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogFlushWaitTime/1000.0, data.DatabasesLogFlushWaitTime/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogFlushWriteTimeMS, c.databasesLogFlushWriteTimeMS,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogFlushWriteTimeMS/1000.0, data.DatabasesLogFlushWriteTimeMS/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogGrowths, c.databasesLogGrowths,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogGrowths, data.DatabasesLogGrowths,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolCacheMisses, c.databasesLogPoolCacheMisses,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolCacheMissesPerSec, data.DatabasesLogPoolCacheMissesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolDiskReads, c.databasesLogPoolDiskReads,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolDiskReadsPerSec, data.DatabasesLogPoolDiskReadsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolHashDeletes, c.databasesLogPoolHashDeletes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolHashDeletesPerSec, data.DatabasesLogPoolHashDeletesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolHashInserts, c.databasesLogPoolHashInserts,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolHashInsertsPerSec, data.DatabasesLogPoolHashInsertsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolInvalidHashEntry, c.databasesLogPoolInvalidHashEntry,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolInvalidHashEntryPerSec, data.DatabasesLogPoolInvalidHashEntryPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolLogScanPushes, c.databasesLogPoolLogScanPushes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolLogScanPushesPerSec, data.DatabasesLogPoolLogScanPushesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolLogWriterPushes, c.databasesLogPoolLogWriterPushes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolLogWriterPushesPerSec, data.DatabasesLogPoolLogWriterPushesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolPushEmptyFreePool, c.databasesLogPoolPushEmptyFreePool,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolPushEmptyFreePoolPerSec, data.DatabasesLogPoolPushEmptyFreePoolPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolPushLowMemory, c.databasesLogPoolPushLowMemory,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolPushLowMemoryPerSec, data.DatabasesLogPoolPushLowMemoryPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolPushNoFreeBuffer, c.databasesLogPoolPushNoFreeBuffer,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolPushNoFreeBufferPerSec, data.DatabasesLogPoolPushNoFreeBufferPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolReqBehindTrunc, c.databasesLogPoolReqBehindTrunc,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolReqBehindTruncPerSec, data.DatabasesLogPoolReqBehindTruncPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolRequestsOldVLF, c.databasesLogPoolRequestsOldVLF,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolRequestsOldVLFPerSec, data.DatabasesLogPoolRequestsOldVLFPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolRequests, c.databasesLogPoolRequests,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesLogPoolRequestsPerSec, data.DatabasesLogPoolRequestsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolTotalActiveLogSize, c.databasesLogPoolTotalActiveLogSize,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogPoolTotalActiveLogSize, data.DatabasesLogPoolTotalActiveLogSize,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogPoolTotalSharedPoolSize, c.databasesLogPoolTotalSharedPoolSize,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogPoolTotalSharedPoolSize, data.DatabasesLogPoolTotalSharedPoolSize,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogShrinks, c.databasesLogShrinks,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogShrinks, data.DatabasesLogShrinks,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesLogTruncations, c.databasesLogTruncations,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesLogTruncations, data.DatabasesLogTruncations,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesPercentLogUsed, c.databasesPercentLogUsed,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesPercentLogUsed, data.DatabasesPercentLogUsed,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesReplPendingXacts, c.databasesReplPendingXacts,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesReplPendingXacts, data.DatabasesReplPendingXacts,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesReplTransRate, c.databasesReplTransRate,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesReplTransRate, data.DatabasesReplTransRate,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesShrinkDataMovementBytes, c.databasesShrinkDataMovementBytes,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesShrinkDataMovementBytesPerSec, data.DatabasesShrinkDataMovementBytesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesTrackedTransactions, c.databasesTrackedTransactions,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesTrackedTransactionsPerSec, data.DatabasesTrackedTransactionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesTransactions, c.databasesTransactions,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesTransactionsPerSec, data.DatabasesTransactionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesWriteTransactions, c.databasesWriteTransactions,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesWriteTransactionsPerSec, data.DatabasesWriteTransactionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesXTPControllerDLCLatencyPerFetch, c.databasesXTPControllerDLCLatencyPerFetch,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesXTPControllerDLCLatencyPerFetch, data.DatabasesXTPControllerDLCLatencyPerFetch,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesXTPControllerDLCPeakLatency, c.databasesXTPControllerDLCPeakLatency,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesXTPControllerDLCPeakLatency*1000000.0, data.DatabasesXTPControllerDLCPeakLatency*1000000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesXTPControllerLogProcessed, c.databasesXTPControllerLogProcessed,
prometheus.CounterValue, prometheus.CounterValue,
data.DatabasesXTPControllerLogProcessedPerSec, data.DatabasesXTPControllerLogProcessedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.databasesXTPMemoryUsedKB, c.databasesXTPMemoryUsedKB,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesXTPMemoryUsedKB*1024, data.DatabasesXTPMemoryUsedKB*1024,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }
return nil return nil
} }
func (c *Collector) collectDatabasesInstance2019(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectDatabasesInstance2019(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.databasesPerfDataObject2019) err := perfDataCollector.Collect(&c.databasesPerfDataObject2019)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err)
@@ -809,7 +809,7 @@ func (c *Collector) collectDatabasesInstance2019(ch chan<- prometheus.Metric, sq
c.databasesActiveParallelRedoThreads, c.databasesActiveParallelRedoThreads,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DatabasesActiveParallelRedoThreads, data.DatabasesActiveParallelRedoThreads,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorDatabaseReplica struct { type collectorDatabaseReplica struct {
dbReplicaPerfDataCollectors map[string]*pdh.Collector dbReplicaPerfDataCollectors map[mssqlInstance]*pdh.Collector
dbReplicaPerfDataObject []perfDataCounterValuesDBReplica dbReplicaPerfDataObject []perfDataCounterValuesDBReplica
dbReplicaDatabaseFlowControlDelay *prometheus.Desc dbReplicaDatabaseFlowControlDelay *prometheus.Desc
@@ -86,11 +86,11 @@ type perfDataCounterValuesDBReplica struct {
func (c *Collector) buildDatabaseReplica() error { func (c *Collector) buildDatabaseReplica() error {
var err error var err error
c.dbReplicaPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.dbReplicaPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.dbReplicaPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesDBReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Database Replica"), pdh.InstancesAll) c.dbReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDBReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -249,7 +249,7 @@ func (c *Collector) collectDatabaseReplica(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorDatabaseReplica, c.dbReplicaPerfDataCollectors, c.collectDatabaseReplicaInstance) return c.collect(ch, subCollectorDatabaseReplica, c.dbReplicaPerfDataCollectors, c.collectDatabaseReplicaInstance)
} }
func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.dbReplicaPerfDataObject) err := perfDataCollector.Collect(&c.dbReplicaPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), err)
@@ -260,168 +260,168 @@ func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric,
c.dbReplicaDatabaseFlowControlDelay, c.dbReplicaDatabaseFlowControlDelay,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaDatabaseFlowControlDelay, data.DbReplicaDatabaseFlowControlDelay,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaDatabaseFlowControls, c.dbReplicaDatabaseFlowControls,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaDatabaseFlowControlsPerSec, data.DbReplicaDatabaseFlowControlsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaFileBytesReceived, c.dbReplicaFileBytesReceived,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaFileBytesReceivedPerSec, data.DbReplicaFileBytesReceivedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaGroupCommits, c.dbReplicaGroupCommits,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaGroupCommitsPerSec, data.DbReplicaGroupCommitsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaGroupCommitTime, c.dbReplicaGroupCommitTime,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaGroupCommitTime, data.DbReplicaGroupCommitTime,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogApplyPendingQueue, c.dbReplicaLogApplyPendingQueue,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaLogApplyPendingQueue, data.DbReplicaLogApplyPendingQueue,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogApplyReadyQueue, c.dbReplicaLogApplyReadyQueue,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaLogApplyReadyQueue, data.DbReplicaLogApplyReadyQueue,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesCompressed, c.dbReplicaLogBytesCompressed,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogBytesCompressedPerSec, data.DbReplicaLogBytesCompressedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesDecompressed, c.dbReplicaLogBytesDecompressed,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogBytesDecompressedPerSec, data.DbReplicaLogBytesDecompressedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogBytesReceived, c.dbReplicaLogBytesReceived,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogBytesReceivedPerSec, data.DbReplicaLogBytesReceivedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressionCachehits, c.dbReplicaLogCompressionCachehits,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogCompressionCacheHitsPerSec, data.DbReplicaLogCompressionCacheHitsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressionCachemisses, c.dbReplicaLogCompressionCachemisses,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogCompressionCacheMissesPerSec, data.DbReplicaLogCompressionCacheMissesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogCompressions, c.dbReplicaLogCompressions,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogCompressionsPerSec, data.DbReplicaLogCompressionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogDecompressions, c.dbReplicaLogDecompressions,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaLogDecompressionsPerSec, data.DbReplicaLogDecompressionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogremainingforundo, c.dbReplicaLogremainingforundo,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaLogRemainingForUndo, data.DbReplicaLogRemainingForUndo,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaLogSendQueue, c.dbReplicaLogSendQueue,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaLogSendQueue, data.DbReplicaLogSendQueue,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaMirroredWritetransactions, c.dbReplicaMirroredWritetransactions,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaMirroredWriteTransactionsPerSec, data.DbReplicaMirroredWriteTransactionsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaRecoveryQueue, c.dbReplicaRecoveryQueue,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaRecoveryQueue, data.DbReplicaRecoveryQueue,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoblocked, c.dbReplicaRedoblocked,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaRedoBlockedPerSec, data.DbReplicaRedoBlockedPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoBytesRemaining, c.dbReplicaRedoBytesRemaining,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaRedoBytesRemaining, data.DbReplicaRedoBytesRemaining,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedoneBytes, c.dbReplicaRedoneBytes,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaRedoneBytesPerSec, data.DbReplicaRedoneBytesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaRedones, c.dbReplicaRedones,
prometheus.CounterValue, prometheus.CounterValue,
data.DbReplicaRedonesPerSec, data.DbReplicaRedonesPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaTotalLogrequiringundo, c.dbReplicaTotalLogrequiringundo,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaTotalLogRequiringUndo, data.DbReplicaTotalLogRequiringUndo,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.dbReplicaTransactionDelay, c.dbReplicaTransactionDelay,
prometheus.GaugeValue, prometheus.GaugeValue,
data.DbReplicaTransactionDelay/1000.0, data.DbReplicaTransactionDelay/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorGeneralStatistics struct { type collectorGeneralStatistics struct {
genStatsPerfDataCollectors map[string]*pdh.Collector genStatsPerfDataCollectors map[mssqlInstance]*pdh.Collector
genStatsPerfDataObject []perfDataCounterValuesGenStats genStatsPerfDataObject []perfDataCounterValuesGenStats
genStatsActiveTempTables *prometheus.Desc genStatsActiveTempTables *prometheus.Desc
@@ -84,11 +84,11 @@ type perfDataCounterValuesGenStats struct {
func (c *Collector) buildGeneralStatistics() error { func (c *Collector) buildGeneralStatistics() error {
var err error var err error
c.genStatsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.genStatsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.genStatsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesGenStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "General Statistics"), nil) c.genStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesGenStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), nil)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create General Statistics collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create General Statistics collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -247,7 +247,7 @@ func (c *Collector) collectGeneralStatistics(ch chan<- prometheus.Metric) error
return c.collect(ch, subCollectorGeneralStatistics, c.genStatsPerfDataCollectors, c.collectGeneralStatisticsInstance) return c.collect(ch, subCollectorGeneralStatistics, c.genStatsPerfDataCollectors, c.collectGeneralStatisticsInstance)
} }
func (c *Collector) collectGeneralStatisticsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectGeneralStatisticsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.genStatsPerfDataObject) err := perfDataCollector.Collect(&c.genStatsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), err)
@@ -257,168 +257,168 @@ func (c *Collector) collectGeneralStatisticsInstance(ch chan<- prometheus.Metric
c.genStatsActiveTempTables, c.genStatsActiveTempTables,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsActiveTempTables, c.genStatsPerfDataObject[0].GenStatsActiveTempTables,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsConnectionReset, c.genStatsConnectionReset,
prometheus.CounterValue, prometheus.CounterValue,
c.genStatsPerfDataObject[0].GenStatsConnectionResetPerSec, c.genStatsPerfDataObject[0].GenStatsConnectionResetPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsEventNotificationsDelayedDrop, c.genStatsEventNotificationsDelayedDrop,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsEventNotificationsDelayedDrop, c.genStatsPerfDataObject[0].GenStatsEventNotificationsDelayedDrop,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsHTTPAuthenticatedRequests, c.genStatsHTTPAuthenticatedRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsHTTPAuthenticatedRequests, c.genStatsPerfDataObject[0].GenStatsHTTPAuthenticatedRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsLogicalConnections, c.genStatsLogicalConnections,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsLogicalConnections, c.genStatsPerfDataObject[0].GenStatsLogicalConnections,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsLogins, c.genStatsLogins,
prometheus.CounterValue, prometheus.CounterValue,
c.genStatsPerfDataObject[0].GenStatsLoginsPerSec, c.genStatsPerfDataObject[0].GenStatsLoginsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsLogouts, c.genStatsLogouts,
prometheus.CounterValue, prometheus.CounterValue,
c.genStatsPerfDataObject[0].GenStatsLogoutsPerSec, c.genStatsPerfDataObject[0].GenStatsLogoutsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsMarsDeadlocks, c.genStatsMarsDeadlocks,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsMarsDeadlocks, c.genStatsPerfDataObject[0].GenStatsMarsDeadlocks,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsNonAtomicYieldRate, c.genStatsNonAtomicYieldRate,
prometheus.CounterValue, prometheus.CounterValue,
c.genStatsPerfDataObject[0].GenStatsNonatomicYieldRate, c.genStatsPerfDataObject[0].GenStatsNonatomicYieldRate,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsProcessesBlocked, c.genStatsProcessesBlocked,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsProcessesBlocked, c.genStatsPerfDataObject[0].GenStatsProcessesBlocked,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPEmptyRequests, c.genStatsSOAPEmptyRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPEmptyRequests, c.genStatsPerfDataObject[0].GenStatsSOAPEmptyRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPMethodInvocations, c.genStatsSOAPMethodInvocations,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPMethodInvocations, c.genStatsPerfDataObject[0].GenStatsSOAPMethodInvocations,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPSessionInitiateRequests, c.genStatsSOAPSessionInitiateRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPSessionInitiateRequests, c.genStatsPerfDataObject[0].GenStatsSOAPSessionInitiateRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPSessionTerminateRequests, c.genStatsSOAPSessionTerminateRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPSessionTerminateRequests, c.genStatsPerfDataObject[0].GenStatsSOAPSessionTerminateRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPSQLRequests, c.genStatsSOAPSQLRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPSQLRequests, c.genStatsPerfDataObject[0].GenStatsSOAPSQLRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSOAPWSDLRequests, c.genStatsSOAPWSDLRequests,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSOAPWSDLRequests, c.genStatsPerfDataObject[0].GenStatsSOAPWSDLRequests,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsSQLTraceIOProviderLockWaits, c.genStatsSQLTraceIOProviderLockWaits,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsSQLTraceIOProviderLockWaits, c.genStatsPerfDataObject[0].GenStatsSQLTraceIOProviderLockWaits,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTempDBRecoveryUnitID, c.genStatsTempDBRecoveryUnitID,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsTempdbRecoveryUnitID, c.genStatsPerfDataObject[0].GenStatsTempdbRecoveryUnitID,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTempDBrowSetID, c.genStatsTempDBrowSetID,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsTempdbRowsetID, c.genStatsPerfDataObject[0].GenStatsTempdbRowsetID,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTempTablesCreationRate, c.genStatsTempTablesCreationRate,
prometheus.CounterValue, prometheus.CounterValue,
c.genStatsPerfDataObject[0].GenStatsTempTablesCreationRate, c.genStatsPerfDataObject[0].GenStatsTempTablesCreationRate,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTempTablesForDestruction, c.genStatsTempTablesForDestruction,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsTempTablesForDestruction, c.genStatsPerfDataObject[0].GenStatsTempTablesForDestruction,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTraceEventNotificationQueue, c.genStatsTraceEventNotificationQueue,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsTraceEventNotificationQueue, c.genStatsPerfDataObject[0].GenStatsTraceEventNotificationQueue,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsTransactions, c.genStatsTransactions,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsTransactions, c.genStatsPerfDataObject[0].GenStatsTransactions,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.genStatsUserConnections, c.genStatsUserConnections,
prometheus.GaugeValue, prometheus.GaugeValue,
c.genStatsPerfDataObject[0].GenStatsUserConnections, c.genStatsPerfDataObject[0].GenStatsUserConnections,
sqlInstance, sqlInstance.name,
) )
return nil return nil

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorLocks struct { type collectorLocks struct {
locksPerfDataCollectors map[string]*pdh.Collector locksPerfDataCollectors map[mssqlInstance]*pdh.Collector
locksPerfDataObject []perfDataCounterValuesLocks locksPerfDataObject []perfDataCounterValuesLocks
// Win32_PerfRawData_{instance}_SQLServerLocks // Win32_PerfRawData_{instance}_SQLServerLocks
@@ -55,11 +55,11 @@ type perfDataCounterValuesLocks struct {
func (c *Collector) buildLocks() error { func (c *Collector) buildLocks() error {
var err error var err error
c.locksPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.locksPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.locksPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesLocks](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Locks"), pdh.InstancesAll) c.locksPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesLocks](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Locks"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -121,7 +121,7 @@ func (c *Collector) collectLocks(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorLocks, c.locksPerfDataCollectors, c.collectLocksInstance) return c.collect(ch, subCollectorLocks, c.locksPerfDataCollectors, c.collectLocksInstance)
} }
func (c *Collector) collectLocksInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectLocksInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.locksPerfDataObject) err := perfDataCollector.Collect(&c.locksPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Locks"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Locks"), err)
@@ -132,56 +132,56 @@ func (c *Collector) collectLocksInstance(ch chan<- prometheus.Metric, sqlInstanc
c.locksWaitTime, c.locksWaitTime,
prometheus.GaugeValue, prometheus.GaugeValue,
data.LocksAverageWaitTimeMS/1000.0, data.LocksAverageWaitTimeMS/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksCount, c.locksCount,
prometheus.GaugeValue, prometheus.GaugeValue,
data.LocksAverageWaitTimeMSBase/1000.0, data.LocksAverageWaitTimeMSBase/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksLockRequests, c.locksLockRequests,
prometheus.CounterValue, prometheus.CounterValue,
data.LocksLockRequestsPerSec, data.LocksLockRequestsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksLockTimeouts, c.locksLockTimeouts,
prometheus.CounterValue, prometheus.CounterValue,
data.LocksLockTimeoutsPerSec, data.LocksLockTimeoutsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksLockTimeoutstimeout0, c.locksLockTimeoutstimeout0,
prometheus.CounterValue, prometheus.CounterValue,
data.LocksLockTimeoutsTimeout0PerSec, data.LocksLockTimeoutsTimeout0PerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksLockWaits, c.locksLockWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.LocksLockWaitsPerSec, data.LocksLockWaitsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksLockWaitTimeMS, c.locksLockWaitTimeMS,
prometheus.GaugeValue, prometheus.GaugeValue,
data.LocksLockWaitTimeMS/1000.0, data.LocksLockWaitTimeMS/1000.0,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.locksNumberOfDeadlocks, c.locksNumberOfDeadlocks,
prometheus.CounterValue, prometheus.CounterValue,
data.LocksNumberOfDeadlocksPerSec, data.LocksNumberOfDeadlocksPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorMemoryManager struct { type collectorMemoryManager struct {
memMgrPerfDataCollectors map[string]*pdh.Collector memMgrPerfDataCollectors map[mssqlInstance]*pdh.Collector
memMgrPerfDataObject []perfDataCounterValuesMemMgr memMgrPerfDataObject []perfDataCounterValuesMemMgr
memMgrConnectionMemoryKB *prometheus.Desc memMgrConnectionMemoryKB *prometheus.Desc
@@ -76,11 +76,11 @@ type perfDataCounterValuesMemMgr struct {
func (c *Collector) buildMemoryManager() error { func (c *Collector) buildMemoryManager() error {
var err error var err error
c.memMgrPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.memMgrPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.memMgrPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesMemMgr](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Memory Manager"), pdh.InstancesAll) c.memMgrPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesMemMgr](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Memory Manager collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Memory Manager collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -214,7 +214,7 @@ func (c *Collector) collectMemoryManager(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorMemoryManager, c.memMgrPerfDataCollectors, c.collectMemoryManagerInstance) return c.collect(ch, subCollectorMemoryManager, c.memMgrPerfDataCollectors, c.collectMemoryManagerInstance)
} }
func (c *Collector) collectMemoryManagerInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectMemoryManagerInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.memMgrPerfDataObject) err := perfDataCollector.Collect(&c.memMgrPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), err)
@@ -224,140 +224,140 @@ func (c *Collector) collectMemoryManagerInstance(ch chan<- prometheus.Metric, sq
c.memMgrConnectionMemoryKB, c.memMgrConnectionMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrConnectionMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrConnectionMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrDatabaseCacheMemoryKB, c.memMgrDatabaseCacheMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrDatabaseCacheMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrDatabaseCacheMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrExternalBenefitOfMemory, c.memMgrExternalBenefitOfMemory,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrExternalBenefitOfMemory, c.memMgrPerfDataObject[0].MemMgrExternalBenefitOfMemory,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrFreeMemoryKB, c.memMgrFreeMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrFreeMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrFreeMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrGrantedWorkspaceMemoryKB, c.memMgrGrantedWorkspaceMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrGrantedWorkspaceMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrGrantedWorkspaceMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLockBlocks, c.memMgrLockBlocks,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLockBlocks, c.memMgrPerfDataObject[0].MemMgrLockBlocks,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLockBlocksAllocated, c.memMgrLockBlocksAllocated,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLockBlocksAllocated, c.memMgrPerfDataObject[0].MemMgrLockBlocksAllocated,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLockMemoryKB, c.memMgrLockMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLockMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrLockMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLockOwnerBlocks, c.memMgrLockOwnerBlocks,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLockOwnerBlocks, c.memMgrPerfDataObject[0].MemMgrLockOwnerBlocks,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLockOwnerBlocksAllocated, c.memMgrLockOwnerBlocksAllocated,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLockOwnerBlocksAllocated, c.memMgrPerfDataObject[0].MemMgrLockOwnerBlocksAllocated,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrLogPoolMemoryKB, c.memMgrLogPoolMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrLogPoolMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrLogPoolMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrMaximumWorkspaceMemoryKB, c.memMgrMaximumWorkspaceMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrMaximumWorkspaceMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrMaximumWorkspaceMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrMemoryGrantsOutstanding, c.memMgrMemoryGrantsOutstanding,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrMemoryGrantsOutstanding, c.memMgrPerfDataObject[0].MemMgrMemoryGrantsOutstanding,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrMemoryGrantsPending, c.memMgrMemoryGrantsPending,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrMemoryGrantsPending, c.memMgrPerfDataObject[0].MemMgrMemoryGrantsPending,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrOptimizerMemoryKB, c.memMgrOptimizerMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrOptimizerMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrOptimizerMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrReservedServerMemoryKB, c.memMgrReservedServerMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrReservedServerMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrReservedServerMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrSQLCacheMemoryKB, c.memMgrSQLCacheMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrSQLCacheMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrSQLCacheMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrStolenServerMemoryKB, c.memMgrStolenServerMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrStolenServerMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrStolenServerMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrTargetServerMemoryKB, c.memMgrTargetServerMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrTargetServerMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrTargetServerMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.memMgrTotalServerMemoryKB, c.memMgrTotalServerMemoryKB,
prometheus.GaugeValue, prometheus.GaugeValue,
c.memMgrPerfDataObject[0].MemMgrTotalServerMemoryKB*1024, c.memMgrPerfDataObject[0].MemMgrTotalServerMemoryKB*1024,
sqlInstance, sqlInstance.name,
) )
return nil return nil

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorSQLErrors struct { type collectorSQLErrors struct {
sqlErrorsPerfDataCollectors map[string]*pdh.Collector sqlErrorsPerfDataCollectors map[mssqlInstance]*pdh.Collector
sqlErrorsPerfDataObject []perfDataCounterValuesSqlErrors sqlErrorsPerfDataObject []perfDataCounterValuesSqlErrors
// Win32_PerfRawData_{instance}_SQLServerSQLErrors // Win32_PerfRawData_{instance}_SQLServerSQLErrors
@@ -41,11 +41,11 @@ type perfDataCounterValuesSqlErrors struct {
func (c *Collector) buildSQLErrors() error { func (c *Collector) buildSQLErrors() error {
var err error var err error
c.sqlErrorsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.sqlErrorsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.sqlErrorsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesSqlErrors](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "SQL Errors"), pdh.InstancesAll) c.sqlErrorsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlErrors](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create SQL Errors collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create SQL Errors collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -66,7 +66,7 @@ func (c *Collector) collectSQLErrors(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorSQLErrors, c.sqlErrorsPerfDataCollectors, c.collectSQLErrorsInstance) return c.collect(ch, subCollectorSQLErrors, c.sqlErrorsPerfDataCollectors, c.collectSQLErrorsInstance)
} }
func (c *Collector) collectSQLErrorsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectSQLErrorsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.sqlErrorsPerfDataObject) err := perfDataCollector.Collect(&c.sqlErrorsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), err)
@@ -77,7 +77,7 @@ func (c *Collector) collectSQLErrorsInstance(ch chan<- prometheus.Metric, sqlIns
c.sqlErrorsTotal, c.sqlErrorsTotal,
prometheus.CounterValue, prometheus.CounterValue,
data.SqlErrorsErrorsPerSec, data.SqlErrorsErrorsPerSec,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorSQLStats struct { type collectorSQLStats struct {
sqlStatsPerfDataCollectors map[string]*pdh.Collector sqlStatsPerfDataCollectors map[mssqlInstance]*pdh.Collector
sqlStatsPerfDataObject []perfDataCounterValuesSqlStats sqlStatsPerfDataObject []perfDataCounterValuesSqlStats
sqlStatsAutoParamAttempts *prometheus.Desc sqlStatsAutoParamAttempts *prometheus.Desc
@@ -58,11 +58,11 @@ type perfDataCounterValuesSqlStats struct {
func (c *Collector) buildSQLStats() error { func (c *Collector) buildSQLStats() error {
var err error var err error
c.sqlStatsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.sqlStatsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.sqlStatsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesSqlStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "SQL Statistics"), nil) c.sqlStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), nil)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create SQL Statistics collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create SQL Statistics collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -142,7 +142,7 @@ func (c *Collector) collectSQLStats(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorSQLStats, c.sqlStatsPerfDataCollectors, c.collectSQLStatsInstance) return c.collect(ch, subCollectorSQLStats, c.sqlStatsPerfDataCollectors, c.collectSQLStatsInstance)
} }
func (c *Collector) collectSQLStatsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectSQLStatsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.sqlStatsPerfDataObject) err := perfDataCollector.Collect(&c.sqlStatsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), err)
@@ -152,77 +152,77 @@ func (c *Collector) collectSQLStatsInstance(ch chan<- prometheus.Metric, sqlInst
c.sqlStatsAutoParamAttempts, c.sqlStatsAutoParamAttempts,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsAutoParamAttemptsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsAutoParamAttemptsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsBatchRequests, c.sqlStatsBatchRequests,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsBatchRequestsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsBatchRequestsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsFailedAutoParams, c.sqlStatsFailedAutoParams,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsFailedAutoParamsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsFailedAutoParamsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsForcedParameterizations, c.sqlStatsForcedParameterizations,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsForcedParameterizationsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsForcedParameterizationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsGuidedplanexecutions, c.sqlStatsGuidedplanexecutions,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsGuidedplanexecutionsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsGuidedplanexecutionsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsMisguidedplanexecutions, c.sqlStatsMisguidedplanexecutions,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsMisguidedplanexecutionsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsMisguidedplanexecutionsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsSafeAutoParams, c.sqlStatsSafeAutoParams,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsSafeAutoParamsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsSafeAutoParamsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsSQLAttentionrate, c.sqlStatsSQLAttentionrate,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsSQLAttentionrate, c.sqlStatsPerfDataObject[0].SqlStatsSQLAttentionrate,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsSQLCompilations, c.sqlStatsSQLCompilations,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsSQLCompilationsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsSQLCompilationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsSQLReCompilations, c.sqlStatsSQLReCompilations,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsSQLReCompilationsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsSQLReCompilationsPerSec,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.sqlStatsUnsafeAutoParams, c.sqlStatsUnsafeAutoParams,
prometheus.CounterValue, prometheus.CounterValue,
c.sqlStatsPerfDataObject[0].SqlStatsUnsafeAutoParamsPerSec, c.sqlStatsPerfDataObject[0].SqlStatsUnsafeAutoParamsPerSec,
sqlInstance, sqlInstance.name,
) )
return nil return nil

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorTransactions struct { type collectorTransactions struct {
transactionsPerfDataCollectors map[string]*pdh.Collector transactionsPerfDataCollectors map[mssqlInstance]*pdh.Collector
transactionsPerfDataObject []perfDataCounterValuesTransactions transactionsPerfDataObject []perfDataCounterValuesTransactions
transactionsTempDbFreeSpaceBytes *prometheus.Desc transactionsTempDbFreeSpaceBytes *prometheus.Desc
@@ -62,11 +62,11 @@ type perfDataCounterValuesTransactions struct {
func (c *Collector) buildTransactions() error { func (c *Collector) buildTransactions() error {
var err error var err error
c.transactionsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.transactionsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.transactionsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesTransactions](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Transactions"), nil) c.transactionsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesTransactions](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), nil)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Transactions collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Transactions collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -160,7 +160,7 @@ func (c *Collector) collectTransactions(ch chan<- prometheus.Metric) error {
// Win32_PerfRawData_MSSQLSERVER_Transactions docs: // Win32_PerfRawData_MSSQLSERVER_Transactions docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object // - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object
func (c *Collector) collectTransactionsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectTransactionsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.transactionsPerfDataObject) err := perfDataCollector.Collect(&c.transactionsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), err)
@@ -170,91 +170,91 @@ func (c *Collector) collectTransactionsInstance(ch chan<- prometheus.Metric, sql
c.transactionsTempDbFreeSpaceBytes, c.transactionsTempDbFreeSpaceBytes,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsFreeSpaceintempdbKB*1024, c.transactionsPerfDataObject[0].TransactionsFreeSpaceintempdbKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsLongestTransactionRunningSeconds, c.transactionsLongestTransactionRunningSeconds,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsLongestTransactionRunningTime, c.transactionsPerfDataObject[0].TransactionsLongestTransactionRunningTime,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsNonSnapshotVersionActiveTotal, c.transactionsNonSnapshotVersionActiveTotal,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsNonSnapshotVersionTransactions, c.transactionsPerfDataObject[0].TransactionsNonSnapshotVersionTransactions,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsSnapshotActiveTotal, c.transactionsSnapshotActiveTotal,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsSnapshotTransactions, c.transactionsPerfDataObject[0].TransactionsSnapshotTransactions,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsActive, c.transactionsActive,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsTransactions, c.transactionsPerfDataObject[0].TransactionsTransactions,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsUpdateConflictsTotal, c.transactionsUpdateConflictsTotal,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsUpdateconflictratio, c.transactionsPerfDataObject[0].TransactionsUpdateconflictratio,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsUpdateSnapshotActiveTotal, c.transactionsUpdateSnapshotActiveTotal,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsUpdateSnapshotTransactions, c.transactionsPerfDataObject[0].TransactionsUpdateSnapshotTransactions,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionCleanupRateBytes, c.transactionsVersionCleanupRateBytes,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsVersionCleanuprateKBPers*1024, c.transactionsPerfDataObject[0].TransactionsVersionCleanuprateKBPers*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionGenerationRateBytes, c.transactionsVersionGenerationRateBytes,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsVersionGenerationrateKBPers*1024, c.transactionsPerfDataObject[0].TransactionsVersionGenerationrateKBPers*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionStoreSizeBytes, c.transactionsVersionStoreSizeBytes,
prometheus.GaugeValue, prometheus.GaugeValue,
c.transactionsPerfDataObject[0].TransactionsVersionStoreSizeKB*1024, c.transactionsPerfDataObject[0].TransactionsVersionStoreSizeKB*1024,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionStoreUnits, c.transactionsVersionStoreUnits,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsVersionStoreunitcount, c.transactionsPerfDataObject[0].TransactionsVersionStoreunitcount,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionStoreCreationUnits, c.transactionsVersionStoreCreationUnits,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsVersionStoreunitcreation, c.transactionsPerfDataObject[0].TransactionsVersionStoreunitcreation,
sqlInstance, sqlInstance.name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.transactionsVersionStoreTruncationUnits, c.transactionsVersionStoreTruncationUnits,
prometheus.CounterValue, prometheus.CounterValue,
c.transactionsPerfDataObject[0].TransactionsVersionStoreunittruncation, c.transactionsPerfDataObject[0].TransactionsVersionStoreunittruncation,
sqlInstance, sqlInstance.name,
) )
return nil return nil

View File

@@ -25,7 +25,7 @@ import (
) )
type collectorWaitStats struct { type collectorWaitStats struct {
waitStatsPerfDataCollectors map[string]*pdh.Collector waitStatsPerfDataCollectors map[mssqlInstance]*pdh.Collector
waitStatsPerfDataObject []perfDataCounterValuesWaitStats waitStatsPerfDataObject []perfDataCounterValuesWaitStats
waitStatsLockWaits *prometheus.Desc waitStatsLockWaits *prometheus.Desc
@@ -62,11 +62,11 @@ type perfDataCounterValuesWaitStats struct {
func (c *Collector) buildWaitStats() error { func (c *Collector) buildWaitStats() error {
var err error var err error
c.waitStatsPerfDataCollectors = make(map[string]*pdh.Collector, len(c.mssqlInstances)) c.waitStatsPerfDataCollectors = make(map[mssqlInstance]*pdh.Collector, len(c.mssqlInstances))
errs := make([]error, 0, len(c.mssqlInstances)) errs := make([]error, 0, len(c.mssqlInstances))
for _, sqlInstance := range c.mssqlInstances { for _, sqlInstance := range c.mssqlInstances {
c.waitStatsPerfDataCollectors[sqlInstance.name], err = pdh.NewCollector[perfDataCounterValuesWaitStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance.name, "Wait Statistics"), pdh.InstancesAll) c.waitStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesWaitStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), pdh.InstancesAll)
if err != nil { if err != nil {
errs = append(errs, fmt.Errorf("failed to create Wait Statistics collector for instance %s: %w", sqlInstance.name, err)) errs = append(errs, fmt.Errorf("failed to create Wait Statistics collector for instance %s: %w", sqlInstance.name, err))
} }
@@ -153,7 +153,7 @@ func (c *Collector) collectWaitStats(ch chan<- prometheus.Metric) error {
return c.collect(ch, subCollectorWaitStats, c.waitStatsPerfDataCollectors, c.collectWaitStatsInstance) return c.collect(ch, subCollectorWaitStats, c.waitStatsPerfDataCollectors, c.collectWaitStatsInstance)
} }
func (c *Collector) collectWaitStatsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *pdh.Collector) error { func (c *Collector) collectWaitStatsInstance(ch chan<- prometheus.Metric, sqlInstance mssqlInstance, perfDataCollector *pdh.Collector) error {
err := perfDataCollector.Collect(&c.waitStatsPerfDataObject) err := perfDataCollector.Collect(&c.waitStatsPerfDataObject)
if err != nil { if err != nil {
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), err) return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), err)
@@ -164,84 +164,84 @@ func (c *Collector) collectWaitStatsInstance(ch chan<- prometheus.Metric, sqlIns
c.waitStatsLockWaits, c.waitStatsLockWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsLockWaits, data.WaitStatsLockWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsMemoryGrantQueueWaits, c.waitStatsMemoryGrantQueueWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsMemoryGrantQueueWaits, data.WaitStatsMemoryGrantQueueWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsThreadSafeMemoryObjectsWaits, c.waitStatsThreadSafeMemoryObjectsWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsThreadSafeMemoryObjectsWaits, data.WaitStatsThreadSafeMemoryObjectsWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsLogWriteWaits, c.waitStatsLogWriteWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsLogWriteWaits, data.WaitStatsLogWriteWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsLogBufferWaits, c.waitStatsLogBufferWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsLogBufferWaits, data.WaitStatsLogBufferWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsNetworkIOWaits, c.waitStatsNetworkIOWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsNetworkIOWaits, data.WaitStatsNetworkIOWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsPageIOLatchWaits, c.waitStatsPageIOLatchWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsPageIOLatchWaits, data.WaitStatsPageIOLatchWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsPageLatchWaits, c.waitStatsPageLatchWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsPageLatchWaits, data.WaitStatsPageLatchWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsNonPageLatchWaits, c.waitStatsNonPageLatchWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsNonpageLatchWaits, data.WaitStatsNonpageLatchWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsWaitForTheWorkerWaits, c.waitStatsWaitForTheWorkerWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsWaitForTheWorkerWaits, data.WaitStatsWaitForTheWorkerWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsWorkspaceSynchronizationWaits, c.waitStatsWorkspaceSynchronizationWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsWorkspaceSynchronizationWaits, data.WaitStatsWorkspaceSynchronizationWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.waitStatsTransactionOwnershipWaits, c.waitStatsTransactionOwnershipWaits,
prometheus.CounterValue, prometheus.CounterValue,
data.WaitStatsTransactionOwnershipWaits, data.WaitStatsTransactionOwnershipWaits,
sqlInstance, data.Name, sqlInstance.name, data.Name,
) )
} }

View File

@@ -8,13 +8,14 @@ import (
) )
type mssqlInstance struct { type mssqlInstance struct {
name string name string
majorVersion mssqlServerMajorVersion majorVersion mssqlServerMajorVersion
patchVersion string patchVersion string
edition string edition string
isFirstInstance bool
} }
func newMssqlInstance(name string) (mssqlInstance, error) { func newMssqlInstance(key, name string) (mssqlInstance, error) {
regKey := fmt.Sprintf(`Software\Microsoft\Microsoft SQL Server\%s\Setup`, name) regKey := fmt.Sprintf(`Software\Microsoft\Microsoft SQL Server\%s\Setup`, name)
k, err := registry.OpenKey(registry.LOCAL_MACHINE, regKey, registry.QUERY_VALUE) k, err := registry.OpenKey(registry.LOCAL_MACHINE, regKey, registry.QUERY_VALUE)
@@ -39,10 +40,11 @@ func newMssqlInstance(name string) (mssqlInstance, error) {
_, name, _ = strings.Cut(name, ".") _, name, _ = strings.Cut(name, ".")
return mssqlInstance{ return mssqlInstance{
edition: edition, edition: edition,
name: name, name: name,
majorVersion: newMajorVersion(patchVersion), majorVersion: newMajorVersion(patchVersion),
patchVersion: patchVersion, patchVersion: patchVersion,
isFirstInstance: key == "MSSQLSERVER",
}, nil }, nil
} }