windows_exporter/collector/mssql.go

4107 lines
135 KiB
Go

//go:build windows
// +build windows
package collector
import (
"errors"
"fmt"
"os"
"strings"
"sync"
"time"
"github.com/prometheus-community/windows_exporter/log"
"github.com/prometheus/client_golang/prometheus"
"golang.org/x/sys/windows/registry"
"gopkg.in/alecthomas/kingpin.v2"
)
var (
mssqlEnabledCollectors = kingpin.Flag(
"collectors.mssql.classes-enabled",
"Comma-separated list of mssql WMI classes to use.").
Default(mssqlAvailableClassCollectors()).String()
mssqlPrintCollectors = kingpin.Flag(
"collectors.mssql.class-print",
"If true, print available mssql WMI classes and exit. Only displays if the mssql collector is enabled.",
).Bool()
)
type mssqlInstancesType map[string]string
func getMSSQLInstances() mssqlInstancesType {
sqlInstances := make(mssqlInstancesType)
// in case querying the registry fails, return the default instance
sqlDefaultInstance := make(mssqlInstancesType)
sqlDefaultInstance["MSSQLSERVER"] = ""
regkey := `Software\Microsoft\Microsoft SQL Server\Instance Names\SQL`
k, err := registry.OpenKey(registry.LOCAL_MACHINE, regkey, registry.QUERY_VALUE)
if err != nil {
log.Warn("Couldn't open registry to determine SQL instances:", err)
return sqlDefaultInstance
}
defer func() {
err = k.Close()
if err != nil {
log.Warnf("Failed to close registry key: %v", err)
}
}()
instanceNames, err := k.ReadValueNames(0)
if err != nil {
log.Warnf("Can't ReadSubKeyNames %#v", err)
return sqlDefaultInstance
}
for _, instanceName := range instanceNames {
if instanceVersion, _, err := k.GetStringValue(instanceName); err == nil {
sqlInstances[instanceName] = instanceVersion
}
}
log.Debugf("Detected MSSQL Instances: %#v\n", sqlInstances)
return sqlInstances
}
type mssqlCollectorsMap map[string]mssqlCollectorFunc
func mssqlAvailableClassCollectors() string {
return "accessmethods,availreplica,bufman,databases,dbreplica,genstats,locks,memmgr,sqlstats,sqlerrors,transactions,waitstats"
}
func (c *MSSQLCollector) getMSSQLCollectors() mssqlCollectorsMap {
mssqlCollectors := make(mssqlCollectorsMap)
mssqlCollectors["accessmethods"] = c.collectAccessMethods
mssqlCollectors["availreplica"] = c.collectAvailabilityReplica
mssqlCollectors["bufman"] = c.collectBufferManager
mssqlCollectors["databases"] = c.collectDatabases
mssqlCollectors["dbreplica"] = c.collectDatabaseReplica
mssqlCollectors["genstats"] = c.collectGeneralStatistics
mssqlCollectors["locks"] = c.collectLocks
mssqlCollectors["memmgr"] = c.collectMemoryManager
mssqlCollectors["sqlstats"] = c.collectSQLStats
mssqlCollectors["sqlerrors"] = c.collectSQLErrors
mssqlCollectors["transactions"] = c.collectTransactions
mssqlCollectors["waitstats"] = c.collectWaitStats
return mssqlCollectors
}
// mssqlGetPerfObjectName - Returns the name of the Windows Performance
// Counter object for the given SQL instance and collector.
func mssqlGetPerfObjectName(sqlInstance string, collector string) string {
prefix := "SQLServer:"
if sqlInstance != "MSSQLSERVER" {
prefix = "MSSQL$" + sqlInstance + ":"
}
suffix := ""
switch collector {
case "accessmethods":
suffix = "Access Methods"
case "availreplica":
suffix = "Availability Replica"
case "bufman":
suffix = "Buffer Manager"
case "databases":
suffix = "Databases"
case "dbreplica":
suffix = "Database Replica"
case "genstats":
suffix = "General Statistics"
case "locks":
suffix = "Locks"
case "memmgr":
suffix = "Memory Manager"
case "sqlerrors":
suffix = "SQL Errors"
case "sqlstats":
suffix = "SQL Statistics"
case "transactions":
suffix = "Transactions"
case "waitstats":
suffix = "Wait Statistics"
}
return (prefix + suffix)
}
func init() {
registerCollector("mssql", NewMSSQLCollector)
}
// A MSSQLCollector is a Prometheus collector for various WMI Win32_PerfRawData_MSSQLSERVER_* metrics
type MSSQLCollector struct {
// meta
mssqlScrapeDurationDesc *prometheus.Desc
mssqlScrapeSuccessDesc *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerAccessMethods
AccessMethodsAUcleanupbatches *prometheus.Desc
AccessMethodsAUcleanups *prometheus.Desc
AccessMethodsByreferenceLobCreateCount *prometheus.Desc
AccessMethodsByreferenceLobUseCount *prometheus.Desc
AccessMethodsCountLobReadahead *prometheus.Desc
AccessMethodsCountPullInRow *prometheus.Desc
AccessMethodsCountPushOffRow *prometheus.Desc
AccessMethodsDeferreddroppedAUs *prometheus.Desc
AccessMethodsDeferredDroppedrowsets *prometheus.Desc
AccessMethodsDroppedrowsetcleanups *prometheus.Desc
AccessMethodsDroppedrowsetsskipped *prometheus.Desc
AccessMethodsExtentDeallocations *prometheus.Desc
AccessMethodsExtentsAllocated *prometheus.Desc
AccessMethodsFailedAUcleanupbatches *prometheus.Desc
AccessMethodsFailedleafpagecookie *prometheus.Desc
AccessMethodsFailedtreepagecookie *prometheus.Desc
AccessMethodsForwardedRecords *prometheus.Desc
AccessMethodsFreeSpacePageFetches *prometheus.Desc
AccessMethodsFreeSpaceScans *prometheus.Desc
AccessMethodsFullScans *prometheus.Desc
AccessMethodsIndexSearches *prometheus.Desc
AccessMethodsInSysXactwaits *prometheus.Desc
AccessMethodsLobHandleCreateCount *prometheus.Desc
AccessMethodsLobHandleDestroyCount *prometheus.Desc
AccessMethodsLobSSProviderCreateCount *prometheus.Desc
AccessMethodsLobSSProviderDestroyCount *prometheus.Desc
AccessMethodsLobSSProviderTruncationCount *prometheus.Desc
AccessMethodsMixedpageallocations *prometheus.Desc
AccessMethodsPagecompressionattempts *prometheus.Desc
AccessMethodsPageDeallocations *prometheus.Desc
AccessMethodsPagesAllocated *prometheus.Desc
AccessMethodsPagescompressed *prometheus.Desc
AccessMethodsPageSplits *prometheus.Desc
AccessMethodsProbeScans *prometheus.Desc
AccessMethodsRangeScans *prometheus.Desc
AccessMethodsScanPointRevalidations *prometheus.Desc
AccessMethodsSkippedGhostedRecords *prometheus.Desc
AccessMethodsTableLockEscalations *prometheus.Desc
AccessMethodsUsedleafpagecookie *prometheus.Desc
AccessMethodsUsedtreepagecookie *prometheus.Desc
AccessMethodsWorkfilesCreated *prometheus.Desc
AccessMethodsWorktablesCreated *prometheus.Desc
AccessMethodsWorktablesFromCacheHits *prometheus.Desc
AccessMethodsWorktablesFromCacheLookups *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica
AvailReplicaBytesReceivedfromReplica *prometheus.Desc
AvailReplicaBytesSenttoReplica *prometheus.Desc
AvailReplicaBytesSenttoTransport *prometheus.Desc
AvailReplicaFlowControl *prometheus.Desc
AvailReplicaFlowControlTimems *prometheus.Desc
AvailReplicaReceivesfromReplica *prometheus.Desc
AvailReplicaResentMessages *prometheus.Desc
AvailReplicaSendstoReplica *prometheus.Desc
AvailReplicaSendstoTransport *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerBufferManager
BufManBackgroundwriterpages *prometheus.Desc
BufManBuffercachehits *prometheus.Desc
BufManBuffercachelookups *prometheus.Desc
BufManCheckpointpages *prometheus.Desc
BufManDatabasepages *prometheus.Desc
BufManExtensionallocatedpages *prometheus.Desc
BufManExtensionfreepages *prometheus.Desc
BufManExtensioninuseaspercentage *prometheus.Desc
BufManExtensionoutstandingIOcounter *prometheus.Desc
BufManExtensionpageevictions *prometheus.Desc
BufManExtensionpagereads *prometheus.Desc
BufManExtensionpageunreferencedtime *prometheus.Desc
BufManExtensionpagewrites *prometheus.Desc
BufManFreeliststalls *prometheus.Desc
BufManIntegralControllerSlope *prometheus.Desc
BufManLazywrites *prometheus.Desc
BufManPagelifeexpectancy *prometheus.Desc
BufManPagelookups *prometheus.Desc
BufManPagereads *prometheus.Desc
BufManPagewrites *prometheus.Desc
BufManReadaheadpages *prometheus.Desc
BufManReadaheadtime *prometheus.Desc
BufManTargetpages *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerDatabaseReplica
DBReplicaDatabaseFlowControlDelay *prometheus.Desc
DBReplicaDatabaseFlowControls *prometheus.Desc
DBReplicaFileBytesReceived *prometheus.Desc
DBReplicaGroupCommits *prometheus.Desc
DBReplicaGroupCommitTime *prometheus.Desc
DBReplicaLogApplyPendingQueue *prometheus.Desc
DBReplicaLogApplyReadyQueue *prometheus.Desc
DBReplicaLogBytesCompressed *prometheus.Desc
DBReplicaLogBytesDecompressed *prometheus.Desc
DBReplicaLogBytesReceived *prometheus.Desc
DBReplicaLogCompressionCachehits *prometheus.Desc
DBReplicaLogCompressionCachemisses *prometheus.Desc
DBReplicaLogCompressions *prometheus.Desc
DBReplicaLogDecompressions *prometheus.Desc
DBReplicaLogremainingforundo *prometheus.Desc
DBReplicaLogSendQueue *prometheus.Desc
DBReplicaMirroredWriteTransactions *prometheus.Desc
DBReplicaRecoveryQueue *prometheus.Desc
DBReplicaRedoblocked *prometheus.Desc
DBReplicaRedoBytesRemaining *prometheus.Desc
DBReplicaRedoneBytes *prometheus.Desc
DBReplicaRedones *prometheus.Desc
DBReplicaTotalLogrequiringundo *prometheus.Desc
DBReplicaTransactionDelay *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerDatabases
DatabasesActiveParallelredothreads *prometheus.Desc
DatabasesActiveTransactions *prometheus.Desc
DatabasesBackupPerRestoreThroughput *prometheus.Desc
DatabasesBulkCopyRows *prometheus.Desc
DatabasesBulkCopyThroughput *prometheus.Desc
DatabasesCommittableentries *prometheus.Desc
DatabasesDataFilesSizeKB *prometheus.Desc
DatabasesDBCCLogicalScanBytes *prometheus.Desc
DatabasesGroupCommitTime *prometheus.Desc
DatabasesLogBytesFlushed *prometheus.Desc
DatabasesLogCacheHits *prometheus.Desc
DatabasesLogCacheLookups *prometheus.Desc
DatabasesLogCacheReads *prometheus.Desc
DatabasesLogFilesSizeKB *prometheus.Desc
DatabasesLogFilesUsedSizeKB *prometheus.Desc
DatabasesLogFlushes *prometheus.Desc
DatabasesLogFlushWaits *prometheus.Desc
DatabasesLogFlushWaitTime *prometheus.Desc
DatabasesLogFlushWriteTimems *prometheus.Desc
DatabasesLogGrowths *prometheus.Desc
DatabasesLogPoolCacheMisses *prometheus.Desc
DatabasesLogPoolDiskReads *prometheus.Desc
DatabasesLogPoolHashDeletes *prometheus.Desc
DatabasesLogPoolHashInserts *prometheus.Desc
DatabasesLogPoolInvalidHashEntry *prometheus.Desc
DatabasesLogPoolLogScanPushes *prometheus.Desc
DatabasesLogPoolLogWriterPushes *prometheus.Desc
DatabasesLogPoolPushEmptyFreePool *prometheus.Desc
DatabasesLogPoolPushLowMemory *prometheus.Desc
DatabasesLogPoolPushNoFreeBuffer *prometheus.Desc
DatabasesLogPoolReqBehindTrunc *prometheus.Desc
DatabasesLogPoolRequestsOldVLF *prometheus.Desc
DatabasesLogPoolRequests *prometheus.Desc
DatabasesLogPoolTotalActiveLogSize *prometheus.Desc
DatabasesLogPoolTotalSharedPoolSize *prometheus.Desc
DatabasesLogShrinks *prometheus.Desc
DatabasesLogTruncations *prometheus.Desc
DatabasesPercentLogUsed *prometheus.Desc
DatabasesReplPendingXacts *prometheus.Desc
DatabasesReplTransRate *prometheus.Desc
DatabasesShrinkDataMovementBytes *prometheus.Desc
DatabasesTrackedtransactions *prometheus.Desc
DatabasesTransactions *prometheus.Desc
DatabasesWriteTransactions *prometheus.Desc
DatabasesXTPControllerDLCLatencyPerFetch *prometheus.Desc
DatabasesXTPControllerDLCPeakLatency *prometheus.Desc
DatabasesXTPControllerLogProcessed *prometheus.Desc
DatabasesXTPMemoryUsedKB *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerGeneralStatistics
GenStatsActiveTempTables *prometheus.Desc
GenStatsConnectionReset *prometheus.Desc
GenStatsEventNotificationsDelayedDrop *prometheus.Desc
GenStatsHTTPAuthenticatedRequests *prometheus.Desc
GenStatsLogicalConnections *prometheus.Desc
GenStatsLogins *prometheus.Desc
GenStatsLogouts *prometheus.Desc
GenStatsMarsDeadlocks *prometheus.Desc
GenStatsNonatomicyieldrate *prometheus.Desc
GenStatsProcessesblocked *prometheus.Desc
GenStatsSOAPEmptyRequests *prometheus.Desc
GenStatsSOAPMethodInvocations *prometheus.Desc
GenStatsSOAPSessionInitiateRequests *prometheus.Desc
GenStatsSOAPSessionTerminateRequests *prometheus.Desc
GenStatsSOAPSQLRequests *prometheus.Desc
GenStatsSOAPWSDLRequests *prometheus.Desc
GenStatsSQLTraceIOProviderLockWaits *prometheus.Desc
GenStatsTempdbrecoveryunitid *prometheus.Desc
GenStatsTempdbrowsetid *prometheus.Desc
GenStatsTempTablesCreationRate *prometheus.Desc
GenStatsTempTablesForDestruction *prometheus.Desc
GenStatsTraceEventNotificationQueue *prometheus.Desc
GenStatsTransactions *prometheus.Desc
GenStatsUserConnections *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerLocks
LocksWaitTime *prometheus.Desc
LocksCount *prometheus.Desc
LocksLockRequests *prometheus.Desc
LocksLockTimeouts *prometheus.Desc
LocksLockTimeoutstimeout0 *prometheus.Desc
LocksLockWaits *prometheus.Desc
LocksLockWaitTimems *prometheus.Desc
LocksNumberofDeadlocks *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerMemoryManager
MemMgrConnectionMemoryKB *prometheus.Desc
MemMgrDatabaseCacheMemoryKB *prometheus.Desc
MemMgrExternalbenefitofmemory *prometheus.Desc
MemMgrFreeMemoryKB *prometheus.Desc
MemMgrGrantedWorkspaceMemoryKB *prometheus.Desc
MemMgrLockBlocks *prometheus.Desc
MemMgrLockBlocksAllocated *prometheus.Desc
MemMgrLockMemoryKB *prometheus.Desc
MemMgrLockOwnerBlocks *prometheus.Desc
MemMgrLockOwnerBlocksAllocated *prometheus.Desc
MemMgrLogPoolMemoryKB *prometheus.Desc
MemMgrMaximumWorkspaceMemoryKB *prometheus.Desc
MemMgrMemoryGrantsOutstanding *prometheus.Desc
MemMgrMemoryGrantsPending *prometheus.Desc
MemMgrOptimizerMemoryKB *prometheus.Desc
MemMgrReservedServerMemoryKB *prometheus.Desc
MemMgrSQLCacheMemoryKB *prometheus.Desc
MemMgrStolenServerMemoryKB *prometheus.Desc
MemMgrTargetServerMemoryKB *prometheus.Desc
MemMgrTotalServerMemoryKB *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerSQLStatistics
SQLStatsAutoParamAttempts *prometheus.Desc
SQLStatsBatchRequests *prometheus.Desc
SQLStatsFailedAutoParams *prometheus.Desc
SQLStatsForcedParameterizations *prometheus.Desc
SQLStatsGuidedplanexecutions *prometheus.Desc
SQLStatsMisguidedplanexecutions *prometheus.Desc
SQLStatsSafeAutoParams *prometheus.Desc
SQLStatsSQLAttentionrate *prometheus.Desc
SQLStatsSQLCompilations *prometheus.Desc
SQLStatsSQLReCompilations *prometheus.Desc
SQLStatsUnsafeAutoParams *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerSQLErrors
SQLErrorsTotal *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerTransactions
TransactionsTempDbFreeSpaceBytes *prometheus.Desc
TransactionsLongestTransactionRunningSeconds *prometheus.Desc
TransactionsNonSnapshotVersionActiveTotal *prometheus.Desc
TransactionsSnapshotActiveTotal *prometheus.Desc
TransactionsActive *prometheus.Desc
TransactionsUpdateConflictsTotal *prometheus.Desc
TransactionsUpdateSnapshotActiveTotal *prometheus.Desc
TransactionsVersionCleanupRateBytes *prometheus.Desc
TransactionsVersionGenerationRateBytes *prometheus.Desc
TransactionsVersionStoreSizeBytes *prometheus.Desc
TransactionsVersionStoreUnits *prometheus.Desc
TransactionsVersionStoreCreationUnits *prometheus.Desc
TransactionsVersionStoreTruncationUnits *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerWaitStatistics
WaitStatsLockWaits *prometheus.Desc
WaitStatsMemoryGrantQueueWaits *prometheus.Desc
WaitStatsThreadSafeMemoryObjectsWaits *prometheus.Desc
WaitStatsLogWriteWaits *prometheus.Desc
WaitStatsLogBufferWaits *prometheus.Desc
WaitStatsNetworkIOWaits *prometheus.Desc
WaitStatsPageIOLatchWaits *prometheus.Desc
WaitStatsPageLatchWaits *prometheus.Desc
WaitStatsNonpageLatchWaits *prometheus.Desc
WaitStatsWaitForTheWorkerWaits *prometheus.Desc
WaitStatsWorkspaceSynchronizationWaits *prometheus.Desc
WaitStatsTransactionOwnershipWaits *prometheus.Desc
mssqlInstances mssqlInstancesType
mssqlCollectors mssqlCollectorsMap
mssqlChildCollectorFailure int
}
// NewMSSQLCollector ...
func NewMSSQLCollector() (Collector, error) {
const subsystem = "mssql"
enabled := expandEnabledChildCollectors(*mssqlEnabledCollectors)
mssqlInstances := getMSSQLInstances()
perfCounters := make([]string, 0, len(mssqlInstances)*len(enabled))
for instance := range mssqlInstances {
for _, c := range enabled {
perfCounters = append(perfCounters, mssqlGetPerfObjectName(instance, c))
}
}
addPerfCounterDependencies(subsystem, perfCounters)
mssqlCollector := MSSQLCollector{
// meta
mssqlScrapeDurationDesc: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "collector_duration_seconds"),
"windows_exporter: Duration of an mssql child collection.",
[]string{"collector", "mssql_instance"},
nil,
),
mssqlScrapeSuccessDesc: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "collector_success"),
"windows_exporter: Whether a mssql child collector was successful.",
[]string{"collector", "mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerAccessMethods
AccessMethodsAUcleanupbatches: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_au_batch_cleanups"),
"(AccessMethods.AUcleanupbatches)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsAUcleanups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_au_cleanups"),
"(AccessMethods.AUcleanups)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsByreferenceLobCreateCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_by_reference_lob_creates"),
"(AccessMethods.ByreferenceLobCreateCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsByreferenceLobUseCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_by_reference_lob_uses"),
"(AccessMethods.ByreferenceLobUseCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsCountLobReadahead: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_read_aheads"),
"(AccessMethods.CountLobReadahead)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsCountPullInRow: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_column_value_pulls"),
"(AccessMethods.CountPullInRow)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsCountPushOffRow: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_column_value_pushes"),
"(AccessMethods.CountPushOffRow)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsDeferreddroppedAUs: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_deferred_dropped_aus"),
"(AccessMethods.DeferreddroppedAUs)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsDeferredDroppedrowsets: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_deferred_dropped_rowsets"),
"(AccessMethods.DeferredDroppedrowsets)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsDroppedrowsetcleanups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_dropped_rowset_cleanups"),
"(AccessMethods.Droppedrowsetcleanups)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsDroppedrowsetsskipped: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_dropped_rowset_skips"),
"(AccessMethods.Droppedrowsetsskipped)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsExtentDeallocations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_extent_deallocations"),
"(AccessMethods.ExtentDeallocations)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsExtentsAllocated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_extent_allocations"),
"(AccessMethods.ExtentsAllocated)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFailedAUcleanupbatches: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_au_batch_cleanup_failures"),
"(AccessMethods.FailedAUcleanupbatches)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFailedleafpagecookie: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_leaf_page_cookie_failures"),
"(AccessMethods.Failedleafpagecookie)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFailedtreepagecookie: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_tree_page_cookie_failures"),
"(AccessMethods.Failedtreepagecookie)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsForwardedRecords: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_forwarded_records"),
"(AccessMethods.ForwardedRecords)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFreeSpacePageFetches: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_free_space_page_fetches"),
"(AccessMethods.FreeSpacePageFetches)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFreeSpaceScans: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_free_space_scans"),
"(AccessMethods.FreeSpaceScans)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsFullScans: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_full_scans"),
"(AccessMethods.FullScans)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsIndexSearches: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_index_searches"),
"(AccessMethods.IndexSearches)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsInSysXactwaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_insysxact_waits"),
"(AccessMethods.InSysXactwaits)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsLobHandleCreateCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_handle_creates"),
"(AccessMethods.LobHandleCreateCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsLobHandleDestroyCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_handle_destroys"),
"(AccessMethods.LobHandleDestroyCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsLobSSProviderCreateCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_ss_provider_creates"),
"(AccessMethods.LobSSProviderCreateCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsLobSSProviderDestroyCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_ss_provider_destroys"),
"(AccessMethods.LobSSProviderDestroyCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsLobSSProviderTruncationCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_lob_ss_provider_truncations"),
"(AccessMethods.LobSSProviderTruncationCount)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsMixedpageallocations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_mixed_page_allocations"),
"(AccessMethods.MixedpageallocationsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsPagecompressionattempts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_page_compression_attempts"),
"(AccessMethods.PagecompressionattemptsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsPageDeallocations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_page_deallocations"),
"(AccessMethods.PageDeallocationsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsPagesAllocated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_page_allocations"),
"(AccessMethods.PagesAllocatedPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsPagescompressed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_page_compressions"),
"(AccessMethods.PagescompressedPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsPageSplits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_page_splits"),
"(AccessMethods.PageSplitsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsProbeScans: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_probe_scans"),
"(AccessMethods.ProbeScansPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsRangeScans: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_range_scans"),
"(AccessMethods.RangeScansPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsScanPointRevalidations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_scan_point_revalidations"),
"(AccessMethods.ScanPointRevalidationsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsSkippedGhostedRecords: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_ghost_record_skips"),
"(AccessMethods.SkippedGhostedRecordsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsTableLockEscalations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_table_lock_escalations"),
"(AccessMethods.TableLockEscalationsPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsUsedleafpagecookie: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_leaf_page_cookie_uses"),
"(AccessMethods.Usedleafpagecookie)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsUsedtreepagecookie: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_tree_page_cookie_uses"),
"(AccessMethods.Usedtreepagecookie)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsWorkfilesCreated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_workfile_creates"),
"(AccessMethods.WorkfilesCreatedPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsWorktablesCreated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_creates"),
"(AccessMethods.WorktablesCreatedPersec)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsWorktablesFromCacheHits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_from_cache_hits"),
"(AccessMethods.WorktablesFromCacheRatio)",
[]string{"mssql_instance"},
nil,
),
AccessMethodsWorktablesFromCacheLookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_from_cache_lookups"),
"(AccessMethods.WorktablesFromCacheRatio_Base)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica
AvailReplicaBytesReceivedfromReplica: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_received_from_replica_bytes"),
"(AvailabilityReplica.BytesReceivedfromReplica)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaBytesSenttoReplica: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sent_to_replica_bytes"),
"(AvailabilityReplica.BytesSenttoReplica)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaBytesSenttoTransport: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sent_to_transport_bytes"),
"(AvailabilityReplica.BytesSenttoTransport)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaFlowControl: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_initiated_flow_controls"),
"(AvailabilityReplica.FlowControl)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaFlowControlTimems: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_flow_control_wait_seconds"),
"(AvailabilityReplica.FlowControlTimems)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaReceivesfromReplica: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_receives_from_replica"),
"(AvailabilityReplica.ReceivesfromReplica)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaResentMessages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_resent_messages"),
"(AvailabilityReplica.ResentMessages)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaSendstoReplica: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sends_to_replica"),
"(AvailabilityReplica.SendstoReplica)",
[]string{"mssql_instance", "replica"},
nil,
),
AvailReplicaSendstoTransport: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sends_to_transport"),
"(AvailabilityReplica.SendstoTransport)",
[]string{"mssql_instance", "replica"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerBufferManager
BufManBackgroundwriterpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_background_writer_pages"),
"(BufferManager.Backgroundwriterpages)",
[]string{"mssql_instance"},
nil,
),
BufManBuffercachehits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_hits"),
"(BufferManager.Buffercachehitratio)",
[]string{"mssql_instance"},
nil,
),
BufManBuffercachelookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_lookups"),
"(BufferManager.Buffercachehitratio_Base)",
[]string{"mssql_instance"},
nil,
),
BufManCheckpointpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_checkpoint_pages"),
"(BufferManager.Checkpointpages)",
[]string{"mssql_instance"},
nil,
),
BufManDatabasepages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_database_pages"),
"(BufferManager.Databasepages)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionallocatedpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_allocated_pages"),
"(BufferManager.Extensionallocatedpages)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionfreepages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_free_pages"),
"(BufferManager.Extensionfreepages)",
[]string{"mssql_instance"},
nil,
),
BufManExtensioninuseaspercentage: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_in_use_as_percentage"),
"(BufferManager.Extensioninuseaspercentage)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionoutstandingIOcounter: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_outstanding_io"),
"(BufferManager.ExtensionoutstandingIOcounter)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionpageevictions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_evictions"),
"(BufferManager.Extensionpageevictions)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionpagereads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_reads"),
"(BufferManager.Extensionpagereads)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionpageunreferencedtime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_unreferenced_seconds"),
"(BufferManager.Extensionpageunreferencedtime)",
[]string{"mssql_instance"},
nil,
),
BufManExtensionpagewrites: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_writes"),
"(BufferManager.Extensionpagewrites)",
[]string{"mssql_instance"},
nil,
),
BufManFreeliststalls: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_free_list_stalls"),
"(BufferManager.Freeliststalls)",
[]string{"mssql_instance"},
nil,
),
BufManIntegralControllerSlope: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_integral_controller_slope"),
"(BufferManager.IntegralControllerSlope)",
[]string{"mssql_instance"},
nil,
),
BufManLazywrites: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_lazywrites"),
"(BufferManager.Lazywrites)",
[]string{"mssql_instance"},
nil,
),
BufManPagelifeexpectancy: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_life_expectancy_seconds"),
"(BufferManager.Pagelifeexpectancy)",
[]string{"mssql_instance"},
nil,
),
BufManPagelookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_lookups"),
"(BufferManager.Pagelookups)",
[]string{"mssql_instance"},
nil,
),
BufManPagereads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_reads"),
"(BufferManager.Pagereads)",
[]string{"mssql_instance"},
nil,
),
BufManPagewrites: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_writes"),
"(BufferManager.Pagewrites)",
[]string{"mssql_instance"},
nil,
),
BufManReadaheadpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_read_ahead_pages"),
"(BufferManager.Readaheadpages)",
[]string{"mssql_instance"},
nil,
),
BufManReadaheadtime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_read_ahead_issuing_seconds"),
"(BufferManager.Readaheadtime)",
[]string{"mssql_instance"},
nil,
),
BufManTargetpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_target_pages"),
"(BufferManager.Targetpages)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerDatabaseReplica
DBReplicaDatabaseFlowControlDelay: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_database_flow_control_wait_seconds"),
"(DatabaseReplica.DatabaseFlowControlDelay)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaDatabaseFlowControls: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_database_initiated_flow_controls"),
"(DatabaseReplica.DatabaseFlowControls)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaFileBytesReceived: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_received_file_bytes"),
"(DatabaseReplica.FileBytesReceived)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaGroupCommits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_group_commits"),
"(DatabaseReplica.GroupCommits)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaGroupCommitTime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_group_commit_stall_seconds"),
"(DatabaseReplica.GroupCommitTime)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogApplyPendingQueue: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_apply_pending_queue"),
"(DatabaseReplica.LogApplyPendingQueue)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogApplyReadyQueue: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_apply_ready_queue"),
"(DatabaseReplica.LogApplyReadyQueue)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogBytesCompressed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compressed_bytes"),
"(DatabaseReplica.LogBytesCompressed)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogBytesDecompressed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_decompressed_bytes"),
"(DatabaseReplica.LogBytesDecompressed)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogBytesReceived: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_received_bytes"),
"(DatabaseReplica.LogBytesReceived)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogCompressionCachehits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compression_cachehits"),
"(DatabaseReplica.LogCompressionCachehits)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogCompressionCachemisses: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compression_cachemisses"),
"(DatabaseReplica.LogCompressionCachemisses)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogCompressions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compressions"),
"(DatabaseReplica.LogCompressions)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogDecompressions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_decompressions"),
"(DatabaseReplica.LogDecompressions)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogremainingforundo: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_remaining_for_undo"),
"(DatabaseReplica.Logremainingforundo)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaLogSendQueue: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_send_queue"),
"(DatabaseReplica.LogSendQueue)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaMirroredWriteTransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_mirrored_write_transactions"),
"(DatabaseReplica.MirroredWriteTransactions)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaRecoveryQueue: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_recovery_queue_records"),
"(DatabaseReplica.RecoveryQueue)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaRedoblocked: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redo_blocks"),
"(DatabaseReplica.Redoblocked)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaRedoBytesRemaining: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redo_remaining_bytes"),
"(DatabaseReplica.RedoBytesRemaining)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaRedoneBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redone_bytes"),
"(DatabaseReplica.RedoneBytes)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaRedones: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redones"),
"(DatabaseReplica.Redones)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaTotalLogrequiringundo: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_total_log_requiring_undo"),
"(DatabaseReplica.TotalLogrequiringundo)",
[]string{"mssql_instance", "replica"},
nil,
),
DBReplicaTransactionDelay: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_transaction_delay_seconds"),
"(DatabaseReplica.TransactionDelay)",
[]string{"mssql_instance", "replica"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerDatabases
DatabasesActiveParallelredothreads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_active_parallel_redo_threads"),
"(Databases.ActiveParallelredothreads)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesActiveTransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_active_transactions"),
"(Databases.ActiveTransactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesBackupPerRestoreThroughput: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_backup_restore_operations"),
"(Databases.BackupPerRestoreThroughput)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesBulkCopyRows: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_bulk_copy_rows"),
"(Databases.BulkCopyRows)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesBulkCopyThroughput: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_bulk_copy_bytes"),
"(Databases.BulkCopyThroughput)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesCommittableentries: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_commit_table_entries"),
"(Databases.Committableentries)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesDataFilesSizeKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_data_files_size_bytes"),
"(Databases.DataFilesSizeKB)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesDBCCLogicalScanBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_dbcc_logical_scan_bytes"),
"(Databases.DBCCLogicalScanBytes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesGroupCommitTime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_group_commit_stall_seconds"),
"(Databases.GroupCommitTime)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogBytesFlushed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flushed_bytes"),
"(Databases.LogBytesFlushed)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogCacheHits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_hits"),
"(Databases.LogCacheHitRatio)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogCacheLookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_lookups"),
"(Databases.LogCacheHitRatio_Base)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogCacheReads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_reads"),
"(Databases.LogCacheReads)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFilesSizeKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_files_size_bytes"),
"(Databases.LogFilesSizeKB)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFilesUsedSizeKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_files_used_size_bytes"),
"(Databases.LogFilesUsedSizeKB)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFlushes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flushes"),
"(Databases.LogFlushes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFlushWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_waits"),
"(Databases.LogFlushWaits)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFlushWaitTime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_wait_seconds"),
"(Databases.LogFlushWaitTime)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogFlushWriteTimems: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_write_seconds"),
"(Databases.LogFlushWriteTimems)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogGrowths: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_growths"),
"(Databases.LogGrowths)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolCacheMisses: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_cache_misses"),
"(Databases.LogPoolCacheMisses)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolDiskReads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_disk_reads"),
"(Databases.LogPoolDiskReads)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolHashDeletes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_hash_deletes"),
"(Databases.LogPoolHashDeletes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolHashInserts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_hash_inserts"),
"(Databases.LogPoolHashInserts)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolInvalidHashEntry: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_invalid_hash_entries"),
"(Databases.LogPoolInvalidHashEntry)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolLogScanPushes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_log_scan_pushes"),
"(Databases.LogPoolLogScanPushes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolLogWriterPushes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_log_writer_pushes"),
"(Databases.LogPoolLogWriterPushes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolPushEmptyFreePool: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_empty_free_pool_pushes"),
"(Databases.LogPoolPushEmptyFreePool)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolPushLowMemory: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_low_memory_pushes"),
"(Databases.LogPoolPushLowMemory)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolPushNoFreeBuffer: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_no_free_buffer_pushes"),
"(Databases.LogPoolPushNoFreeBuffer)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolReqBehindTrunc: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_req_behind_trunc"),
"(Databases.LogPoolReqBehindTrunc)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolRequestsOldVLF: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_requests_old_vlf"),
"(Databases.LogPoolRequestsOldVLF)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_requests"),
"(Databases.LogPoolRequests)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolTotalActiveLogSize: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_total_active_log_bytes"),
"(Databases.LogPoolTotalActiveLogSize)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogPoolTotalSharedPoolSize: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_total_shared_pool_bytes"),
"(Databases.LogPoolTotalSharedPoolSize)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogShrinks: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_shrinks"),
"(Databases.LogShrinks)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesLogTruncations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_truncations"),
"(Databases.LogTruncations)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesPercentLogUsed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_used_percent"),
"(Databases.PercentLogUsed)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesReplPendingXacts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_pending_repl_transactions"),
"(Databases.ReplPendingTransactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesReplTransRate: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_repl_transactions"),
"(Databases.ReplTranactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesShrinkDataMovementBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_shrink_data_movement_bytes"),
"(Databases.ShrinkDataMovementBytes)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesTrackedtransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_tracked_transactions"),
"(Databases.Trackedtransactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesTransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_transactions"),
"(Databases.Transactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesWriteTransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_write_transactions"),
"(Databases.WriteTransactions)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesXTPControllerDLCLatencyPerFetch: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_dlc_fetch_latency_seconds"),
"(Databases.XTPControllerDLCLatencyPerFetch)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesXTPControllerDLCPeakLatency: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_dlc_peak_latency_seconds"),
"(Databases.XTPControllerDLCPeakLatency)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesXTPControllerLogProcessed: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_log_processed_bytes"),
"(Databases.XTPControllerLogProcessed)",
[]string{"mssql_instance", "database"},
nil,
),
DatabasesXTPMemoryUsedKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_memory_used_bytes"),
"(Databases.XTPMemoryUsedKB)",
[]string{"mssql_instance", "database"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerGeneralStatistics
GenStatsActiveTempTables: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_active_temp_tables"),
"(GeneralStatistics.ActiveTempTables)",
[]string{"mssql_instance"},
nil,
),
GenStatsConnectionReset: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_connection_resets"),
"(GeneralStatistics.ConnectionReset)",
[]string{"mssql_instance"},
nil,
),
GenStatsEventNotificationsDelayedDrop: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_event_notifications_delayed_drop"),
"(GeneralStatistics.EventNotificationsDelayedDrop)",
[]string{"mssql_instance"},
nil,
),
GenStatsHTTPAuthenticatedRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_http_authenticated_requests"),
"(GeneralStatistics.HTTPAuthenticatedRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsLogicalConnections: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_logical_connections"),
"(GeneralStatistics.LogicalConnections)",
[]string{"mssql_instance"},
nil,
),
GenStatsLogins: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_logins"),
"(GeneralStatistics.Logins)",
[]string{"mssql_instance"},
nil,
),
GenStatsLogouts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_logouts"),
"(GeneralStatistics.Logouts)",
[]string{"mssql_instance"},
nil,
),
GenStatsMarsDeadlocks: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_mars_deadlocks"),
"(GeneralStatistics.MarsDeadlocks)",
[]string{"mssql_instance"},
nil,
),
GenStatsNonatomicyieldrate: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_non_atomic_yields"),
"(GeneralStatistics.Nonatomicyields)",
[]string{"mssql_instance"},
nil,
),
GenStatsProcessesblocked: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_blocked_processes"),
"(GeneralStatistics.Processesblocked)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPEmptyRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_empty_requests"),
"(GeneralStatistics.SOAPEmptyRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPMethodInvocations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_method_invocations"),
"(GeneralStatistics.SOAPMethodInvocations)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPSessionInitiateRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_session_initiate_requests"),
"(GeneralStatistics.SOAPSessionInitiateRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPSessionTerminateRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_session_terminate_requests"),
"(GeneralStatistics.SOAPSessionTerminateRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPSQLRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soapsql_requests"),
"(GeneralStatistics.SOAPSQLRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsSOAPWSDLRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_soapwsdl_requests"),
"(GeneralStatistics.SOAPWSDLRequests)",
[]string{"mssql_instance"},
nil,
),
GenStatsSQLTraceIOProviderLockWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_sql_trace_io_provider_lock_waits"),
"(GeneralStatistics.SQLTraceIOProviderLockWaits)",
[]string{"mssql_instance"},
nil,
),
GenStatsTempdbrecoveryunitid: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_tempdb_recovery_unit_ids_generated"),
"(GeneralStatistics.Tempdbrecoveryunitid)",
[]string{"mssql_instance"},
nil,
),
GenStatsTempdbrowsetid: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_tempdb_rowset_ids_generated"),
"(GeneralStatistics.Tempdbrowsetid)",
[]string{"mssql_instance"},
nil,
),
GenStatsTempTablesCreationRate: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_temp_tables_creations"),
"(GeneralStatistics.TempTablesCreations)",
[]string{"mssql_instance"},
nil,
),
GenStatsTempTablesForDestruction: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_temp_tables_awaiting_destruction"),
"(GeneralStatistics.TempTablesForDestruction)",
[]string{"mssql_instance"},
nil,
),
GenStatsTraceEventNotificationQueue: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_trace_event_notification_queue_size"),
"(GeneralStatistics.TraceEventNotificationQueue)",
[]string{"mssql_instance"},
nil,
),
GenStatsTransactions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_transactions"),
"(GeneralStatistics.Transactions)",
[]string{"mssql_instance"},
nil,
),
GenStatsUserConnections: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "genstats_user_connections"),
"(GeneralStatistics.UserConnections)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerLocks
LocksWaitTime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_wait_time_seconds"),
"(Locks.AverageWaitTimems Total time in seconds which locks have been holding resources)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksCount: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_count"),
"(Locks.AverageWaitTimems_Base count of how often requests have run into locks)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksLockRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_requests"),
"(Locks.LockRequests)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksLockTimeouts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_timeouts"),
"(Locks.LockTimeouts)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksLockTimeoutstimeout0: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_timeouts_excluding_NOWAIT"),
"(Locks.LockTimeoutstimeout0)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksLockWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_waits"),
"(Locks.LockWaits)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksLockWaitTimems: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_wait_seconds"),
"(Locks.LockWaitTimems)",
[]string{"mssql_instance", "resource"},
nil,
),
LocksNumberofDeadlocks: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_deadlocks"),
"(Locks.NumberofDeadlocks)",
[]string{"mssql_instance", "resource"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerMemoryManager
MemMgrConnectionMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_connection_memory_bytes"),
"(MemoryManager.ConnectionMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrDatabaseCacheMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_database_cache_memory_bytes"),
"(MemoryManager.DatabaseCacheMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrExternalbenefitofmemory: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_external_benefit_of_memory"),
"(MemoryManager.Externalbenefitofmemory)",
[]string{"mssql_instance"},
nil,
),
MemMgrFreeMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_free_memory_bytes"),
"(MemoryManager.FreeMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrGrantedWorkspaceMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_granted_workspace_memory_bytes"),
"(MemoryManager.GrantedWorkspaceMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrLockBlocks: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_blocks"),
"(MemoryManager.LockBlocks)",
[]string{"mssql_instance"},
nil,
),
MemMgrLockBlocksAllocated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_allocated_lock_blocks"),
"(MemoryManager.LockBlocksAllocated)",
[]string{"mssql_instance"},
nil,
),
MemMgrLockMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_memory_bytes"),
"(MemoryManager.LockMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrLockOwnerBlocks: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_owner_blocks"),
"(MemoryManager.LockOwnerBlocks)",
[]string{"mssql_instance"},
nil,
),
MemMgrLockOwnerBlocksAllocated: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_allocated_lock_owner_blocks"),
"(MemoryManager.LockOwnerBlocksAllocated)",
[]string{"mssql_instance"},
nil,
),
MemMgrLogPoolMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_log_pool_memory_bytes"),
"(MemoryManager.LogPoolMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrMaximumWorkspaceMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_maximum_workspace_memory_bytes"),
"(MemoryManager.MaximumWorkspaceMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrMemoryGrantsOutstanding: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_outstanding_memory_grants"),
"(MemoryManager.MemoryGrantsOutstanding)",
[]string{"mssql_instance"},
nil,
),
MemMgrMemoryGrantsPending: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_pending_memory_grants"),
"(MemoryManager.MemoryGrantsPending)",
[]string{"mssql_instance"},
nil,
),
MemMgrOptimizerMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_optimizer_memory_bytes"),
"(MemoryManager.OptimizerMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrReservedServerMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_reserved_server_memory_bytes"),
"(MemoryManager.ReservedServerMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrSQLCacheMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_sql_cache_memory_bytes"),
"(MemoryManager.SQLCacheMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrStolenServerMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_stolen_server_memory_bytes"),
"(MemoryManager.StolenServerMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrTargetServerMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_target_server_memory_bytes"),
"(MemoryManager.TargetServerMemoryKB)",
[]string{"mssql_instance"},
nil,
),
MemMgrTotalServerMemoryKB: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "memmgr_total_server_memory_bytes"),
"(MemoryManager.TotalServerMemoryKB)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerSQLStatistics
SQLStatsAutoParamAttempts: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_auto_parameterization_attempts"),
"(SQLStatistics.AutoParamAttempts)",
[]string{"mssql_instance"},
nil,
),
SQLStatsBatchRequests: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_batch_requests"),
"(SQLStatistics.BatchRequests)",
[]string{"mssql_instance"},
nil,
),
SQLStatsFailedAutoParams: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_failed_auto_parameterization_attempts"),
"(SQLStatistics.FailedAutoParams)",
[]string{"mssql_instance"},
nil,
),
SQLStatsForcedParameterizations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_forced_parameterizations"),
"(SQLStatistics.ForcedParameterizations)",
[]string{"mssql_instance"},
nil,
),
SQLStatsGuidedplanexecutions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_guided_plan_executions"),
"(SQLStatistics.Guidedplanexecutions)",
[]string{"mssql_instance"},
nil,
),
SQLStatsMisguidedplanexecutions: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_misguided_plan_executions"),
"(SQLStatistics.Misguidedplanexecutions)",
[]string{"mssql_instance"},
nil,
),
SQLStatsSafeAutoParams: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_safe_auto_parameterization_attempts"),
"(SQLStatistics.SafeAutoParams)",
[]string{"mssql_instance"},
nil,
),
SQLStatsSQLAttentionrate: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_attentions"),
"(SQLStatistics.SQLAttentions)",
[]string{"mssql_instance"},
nil,
),
SQLStatsSQLCompilations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_compilations"),
"(SQLStatistics.SQLCompilations)",
[]string{"mssql_instance"},
nil,
),
SQLStatsSQLReCompilations: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_recompilations"),
"(SQLStatistics.SQLReCompilations)",
[]string{"mssql_instance"},
nil,
),
SQLStatsUnsafeAutoParams: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_unsafe_auto_parameterization_attempts"),
"(SQLStatistics.UnsafeAutoParams)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerSQLErrors
SQLErrorsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "sql_errors_total"),
"(SQLErrors.Total)",
[]string{"mssql_instance", "resource"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerTransactions
TransactionsTempDbFreeSpaceBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_tempdb_free_space_bytes"),
"(Transactions.FreeSpaceInTempDbKB)",
[]string{"mssql_instance"},
nil,
),
TransactionsLongestTransactionRunningSeconds: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_longest_transaction_running_seconds"),
"(Transactions.LongestTransactionRunningTime)",
[]string{"mssql_instance"},
nil,
),
TransactionsNonSnapshotVersionActiveTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_nonsnapshot_version_active_total"),
"(Transactions.NonSnapshotVersionTransactions)",
[]string{"mssql_instance"},
nil,
),
TransactionsSnapshotActiveTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_snapshot_active_total"),
"(Transactions.SnapshotTransactions)",
[]string{"mssql_instance"},
nil,
),
TransactionsActive: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_active"),
"(Transactions.Transactions)",
[]string{"mssql_instance"},
nil,
),
TransactionsUpdateConflictsTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_update_conflicts_total"),
"(Transactions.UpdateConflictRatio)",
[]string{"mssql_instance"},
nil,
),
TransactionsUpdateSnapshotActiveTotal: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_update_snapshot_active_total"),
"(Transactions.UpdateSnapshotTransactions)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionCleanupRateBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_cleanup_rate_bytes"),
"(Transactions.VersionCleanupRateKBs)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionGenerationRateBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_generation_rate_bytes"),
"(Transactions.VersionGenerationRateKBs)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionStoreSizeBytes: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_store_size_bytes"),
"(Transactions.VersionStoreSizeKB)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionStoreUnits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_store_units"),
"(Transactions.VersionStoreUnitCount)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionStoreCreationUnits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_store_creation_units"),
"(Transactions.VersionStoreUnitCreation)",
[]string{"mssql_instance"},
nil,
),
TransactionsVersionStoreTruncationUnits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "transactions_version_store_truncation_units"),
"(Transactions.VersionStoreUnitTruncation)",
[]string{"mssql_instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerWaitStatistics
WaitStatsLockWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_lock_waits"),
"(WaitStats.LockWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsMemoryGrantQueueWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_memory_grant_queue_waits"),
"(WaitStats.MemoryGrantQueueWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsThreadSafeMemoryObjectsWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_thread_safe_memory_objects_waits"),
"(WaitStats.ThreadSafeMemoryObjectsWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsLogWriteWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_log_write_waits"),
"(WaitStats.LogWriteWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsLogBufferWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_log_buffer_waits"),
"(WaitStats.LogBufferWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsNetworkIOWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_network_io_waits"),
"(WaitStats.NetworkIOWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsPageIOLatchWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_page_io_latch_waits"),
"(WaitStats.PageIOLatchWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsPageLatchWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_page_latch_waits"),
"(WaitStats.PageLatchWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsNonpageLatchWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_nonpage_latch_waits"),
"(WaitStats.NonpageLatchWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsWaitForTheWorkerWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_wait_for_the_worker_waits"),
"(WaitStats.WaitForTheWorkerWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsWorkspaceSynchronizationWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_workspace_synchronization_waits"),
"(WaitStats.WorkspaceSynchronizationWaits)",
[]string{"mssql_instance", "item"},
nil,
),
WaitStatsTransactionOwnershipWaits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "waitstats_transaction_ownership_waits"),
"(WaitStats.TransactionOwnershipWaits)",
[]string{"mssql_instance", "item"},
nil,
),
mssqlInstances: mssqlInstances,
}
mssqlCollector.mssqlCollectors = mssqlCollector.getMSSQLCollectors()
if *mssqlPrintCollectors {
fmt.Printf("Available SQLServer Classes:\n")
for name := range mssqlCollector.mssqlCollectors {
fmt.Printf(" - %s\n", name)
}
os.Exit(0)
}
return &mssqlCollector, nil
}
type mssqlCollectorFunc func(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error)
func (c *MSSQLCollector) execute(ctx *ScrapeContext, name string, fn mssqlCollectorFunc, ch chan<- prometheus.Metric, sqlInstance string, wg *sync.WaitGroup) {
// Reset failure counter on each scrape
c.mssqlChildCollectorFailure = 0
defer wg.Done()
begin := time.Now()
_, err := fn(ctx, ch, sqlInstance)
duration := time.Since(begin)
var success float64
if err != nil {
log.Errorf("mssql class collector %s failed after %fs: %s", name, duration.Seconds(), err)
success = 0
c.mssqlChildCollectorFailure++
} else {
log.Debugf("mssql class collector %s succeeded after %fs.", name, duration.Seconds())
success = 1
}
ch <- prometheus.MustNewConstMetric(
c.mssqlScrapeDurationDesc,
prometheus.GaugeValue,
duration.Seconds(),
name, sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.mssqlScrapeSuccessDesc,
prometheus.GaugeValue,
success,
name, sqlInstance,
)
}
// Collect sends the metric values for each metric
// to the provided prometheus Metric channel.
func (c *MSSQLCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
wg := sync.WaitGroup{}
enabled := expandEnabledChildCollectors(*mssqlEnabledCollectors)
for sqlInstance := range c.mssqlInstances {
for _, name := range enabled {
function := c.mssqlCollectors[name]
wg.Add(1)
go c.execute(ctx, name, function, ch, sqlInstance, &wg)
}
}
wg.Wait()
// this should return an error if any? some? children errord.
if c.mssqlChildCollectorFailure > 0 {
return errors.New("at least one child collector failed")
}
return nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerAccessMethods docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-access-methods-object
type mssqlAccessMethods struct {
AUcleanupbatchesPersec float64 `perflib:"AU cleanup batches/sec"`
AUcleanupsPersec float64 `perflib:"AU cleanups/sec"`
ByreferenceLobCreateCount float64 `perflib:"By-reference Lob Create Count"`
ByreferenceLobUseCount float64 `perflib:"By-reference Lob Use Count"`
CountLobReadahead float64 `perflib:"Count Lob Readahead"`
CountPullInRow float64 `perflib:"Count Pull In Row"`
CountPushOffRow float64 `perflib:"Count Push Off Row"`
DeferreddroppedAUs float64 `perflib:"Deferred dropped AUs"`
DeferredDroppedrowsets float64 `perflib:"Deferred Dropped rowsets"`
DroppedrowsetcleanupsPersec float64 `perflib:"Dropped rowset cleanups/sec"`
DroppedrowsetsskippedPersec float64 `perflib:"Dropped rowsets skipped/sec"`
ExtentDeallocationsPersec float64 `perflib:"Extent Deallocations/sec"`
ExtentsAllocatedPersec float64 `perflib:"Extents Allocated/sec"`
FailedAUcleanupbatchesPersec float64 `perflib:"Failed AU cleanup batches/sec"`
Failedleafpagecookie float64 `perflib:"Failed leaf page cookie"`
Failedtreepagecookie float64 `perflib:"Failed tree page cookie"`
ForwardedRecordsPersec float64 `perflib:"Forwarded Records/sec"`
FreeSpacePageFetchesPersec float64 `perflib:"FreeSpace Page Fetches/sec"`
FreeSpaceScansPersec float64 `perflib:"FreeSpace Scans/sec"`
FullScansPersec float64 `perflib:"Full Scans/sec"`
IndexSearchesPersec float64 `perflib:"Index Searches/sec"`
InSysXactwaitsPersec float64 `perflib:"InSysXact waits/sec"`
LobHandleCreateCount float64 `perflib:"LobHandle Create Count"`
LobHandleDestroyCount float64 `perflib:"LobHandle Destroy Count"`
LobSSProviderCreateCount float64 `perflib:"LobSS Provider Create Count"`
LobSSProviderDestroyCount float64 `perflib:"LobSS Provider Destroy Count"`
LobSSProviderTruncationCount float64 `perflib:"LobSS Provider Truncation Count"`
MixedpageallocationsPersec float64 `perflib:"Mixed page allocations/sec"`
PagecompressionattemptsPersec float64 `perflib:"Page compression attempts/sec"`
PageDeallocationsPersec float64 `perflib:"Page Deallocations/sec"`
PagesAllocatedPersec float64 `perflib:"Pages Allocated/sec"`
PagescompressedPersec float64 `perflib:"Pages compressed/sec"`
PageSplitsPersec float64 `perflib:"Page Splits/sec"`
ProbeScansPersec float64 `perflib:"Probe Scans/sec"`
RangeScansPersec float64 `perflib:"Range Scans/sec"`
ScanPointRevalidationsPersec float64 `perflib:"Scan Point Revalidations/sec"`
SkippedGhostedRecordsPersec float64 `perflib:"Skipped Ghosted Records/sec"`
TableLockEscalationsPersec float64 `perflib:"Table Lock Escalations/sec"`
Usedleafpagecookie float64 `perflib:"Used leaf page cookie"`
Usedtreepagecookie float64 `perflib:"Used tree page cookie"`
WorkfilesCreatedPersec float64 `perflib:"Workfiles Created/sec"`
WorktablesCreatedPersec float64 `perflib:"Worktables Created/sec"`
WorktablesFromCacheRatio float64 `perflib:"Worktables From Cache Ratio"`
WorktablesFromCacheRatio_Base float64 `perflib:"Worktables From Cache Base_Base"`
}
func (c *MSSQLCollector) collectAccessMethods(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlAccessMethods
log.Debugf("mssql_accessmethods collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "accessmethods")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsAUcleanupbatches,
prometheus.CounterValue,
v.AUcleanupbatchesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsAUcleanups,
prometheus.CounterValue,
v.AUcleanupsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsByreferenceLobCreateCount,
prometheus.CounterValue,
v.ByreferenceLobCreateCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsByreferenceLobUseCount,
prometheus.CounterValue,
v.ByreferenceLobUseCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsCountLobReadahead,
prometheus.CounterValue,
v.CountLobReadahead,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsCountPullInRow,
prometheus.CounterValue,
v.CountPullInRow,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsCountPushOffRow,
prometheus.CounterValue,
v.CountPushOffRow,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsDeferreddroppedAUs,
prometheus.GaugeValue,
v.DeferreddroppedAUs,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsDeferredDroppedrowsets,
prometheus.GaugeValue,
v.DeferredDroppedrowsets,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsDroppedrowsetcleanups,
prometheus.CounterValue,
v.DroppedrowsetcleanupsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsDroppedrowsetsskipped,
prometheus.CounterValue,
v.DroppedrowsetsskippedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsExtentDeallocations,
prometheus.CounterValue,
v.ExtentDeallocationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsExtentsAllocated,
prometheus.CounterValue,
v.ExtentsAllocatedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFailedAUcleanupbatches,
prometheus.CounterValue,
v.FailedAUcleanupbatchesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFailedleafpagecookie,
prometheus.CounterValue,
v.Failedleafpagecookie,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFailedtreepagecookie,
prometheus.CounterValue,
v.Failedtreepagecookie,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsForwardedRecords,
prometheus.CounterValue,
v.ForwardedRecordsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFreeSpacePageFetches,
prometheus.CounterValue,
v.FreeSpacePageFetchesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFreeSpaceScans,
prometheus.CounterValue,
v.FreeSpaceScansPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsFullScans,
prometheus.CounterValue,
v.FullScansPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsIndexSearches,
prometheus.CounterValue,
v.IndexSearchesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsInSysXactwaits,
prometheus.CounterValue,
v.InSysXactwaitsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsLobHandleCreateCount,
prometheus.CounterValue,
v.LobHandleCreateCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsLobHandleDestroyCount,
prometheus.CounterValue,
v.LobHandleDestroyCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsLobSSProviderCreateCount,
prometheus.CounterValue,
v.LobSSProviderCreateCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsLobSSProviderDestroyCount,
prometheus.CounterValue,
v.LobSSProviderDestroyCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsLobSSProviderTruncationCount,
prometheus.CounterValue,
v.LobSSProviderTruncationCount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsMixedpageallocations,
prometheus.CounterValue,
v.MixedpageallocationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsPagecompressionattempts,
prometheus.CounterValue,
v.PagecompressionattemptsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsPageDeallocations,
prometheus.CounterValue,
v.PageDeallocationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsPagesAllocated,
prometheus.CounterValue,
v.PagesAllocatedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsPagescompressed,
prometheus.CounterValue,
v.PagescompressedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsPageSplits,
prometheus.CounterValue,
v.PageSplitsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsProbeScans,
prometheus.CounterValue,
v.ProbeScansPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsRangeScans,
prometheus.CounterValue,
v.RangeScansPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsScanPointRevalidations,
prometheus.CounterValue,
v.ScanPointRevalidationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsSkippedGhostedRecords,
prometheus.CounterValue,
v.SkippedGhostedRecordsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsTableLockEscalations,
prometheus.CounterValue,
v.TableLockEscalationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsUsedleafpagecookie,
prometheus.CounterValue,
v.Usedleafpagecookie,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsUsedtreepagecookie,
prometheus.CounterValue,
v.Usedtreepagecookie,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorkfilesCreated,
prometheus.CounterValue,
v.WorkfilesCreatedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorktablesCreated,
prometheus.CounterValue,
v.WorktablesCreatedPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorktablesFromCacheHits,
prometheus.CounterValue,
v.WorktablesFromCacheRatio,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorktablesFromCacheLookups,
prometheus.CounterValue,
v.WorktablesFromCacheRatio_Base,
sqlInstance,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerAvailabilityReplica docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-availability-replica
type mssqlAvailabilityReplica struct {
Name string
BytesReceivedfromReplicaPersec float64 `perflib:"Bytes Received from Replica/sec"`
BytesSenttoReplicaPersec float64 `perflib:"Bytes Sent to Replica/sec"`
BytesSenttoTransportPersec float64 `perflib:"Bytes Sent to Transport/sec"`
FlowControlPersec float64 `perflib:"Flow Control/sec"`
FlowControlTimemsPersec float64 `perflib:"Flow Control Time (ms/sec)"`
ReceivesfromReplicaPersec float64 `perflib:"Receives from Replica/sec"`
ResentMessagesPersec float64 `perflib:"Resent Messages/sec"`
SendstoReplicaPersec float64 `perflib:"Sends to Replica/sec"`
SendstoTransportPersec float64 `perflib:"Sends to Transport/sec"`
}
func (c *MSSQLCollector) collectAvailabilityReplica(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlAvailabilityReplica
log.Debugf("mssql_availreplica collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "availreplica")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
if strings.ToLower(v.Name) == "_total" {
continue
}
replicaName := v.Name
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaBytesReceivedfromReplica,
prometheus.CounterValue,
v.BytesReceivedfromReplicaPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaBytesSenttoReplica,
prometheus.CounterValue,
v.BytesSenttoReplicaPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaBytesSenttoTransport,
prometheus.CounterValue,
v.BytesSenttoTransportPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaFlowControl,
prometheus.CounterValue,
v.FlowControlPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaFlowControlTimems,
prometheus.CounterValue,
v.FlowControlTimemsPersec/1000.0,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaReceivesfromReplica,
prometheus.CounterValue,
v.ReceivesfromReplicaPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaResentMessages,
prometheus.CounterValue,
v.ResentMessagesPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaSendstoReplica,
prometheus.CounterValue,
v.SendstoReplicaPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.AvailReplicaSendstoTransport,
prometheus.CounterValue,
v.SendstoTransportPersec,
sqlInstance, replicaName,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-manager-object
type mssqlBufferManager struct {
BackgroundwriterpagesPersec float64 `perflib:"Background writer pages/sec"`
Buffercachehitratio float64 `perflib:"Buffer cache hit ratio"`
Buffercachehitratio_Base float64 `perflib:"Buffer cache hit ratio base_Base"`
CheckpointpagesPersec float64 `perflib:"Checkpoint pages/sec"`
Databasepages float64 `perflib:"Database pages"`
Extensionallocatedpages float64 `perflib:"Extension allocated pages"`
Extensionfreepages float64 `perflib:"Extension free pages"`
Extensioninuseaspercentage float64 `perflib:"Extension in use as percentage"`
ExtensionoutstandingIOcounter float64 `perflib:"Extension outstanding IO counter"`
ExtensionpageevictionsPersec float64 `perflib:"Extension page evictions/sec"`
ExtensionpagereadsPersec float64 `perflib:"Extension page reads/sec"`
Extensionpageunreferencedtime float64 `perflib:"Extension page unreferenced time"`
ExtensionpagewritesPersec float64 `perflib:"Extension page writes/sec"`
FreeliststallsPersec float64 `perflib:"Free list stalls/sec"`
IntegralControllerSlope float64 `perflib:"Integral Controller Slope"`
LazywritesPersec float64 `perflib:"Lazy writes/sec"`
Pagelifeexpectancy float64 `perflib:"Page life expectancy"`
PagelookupsPersec float64 `perflib:"Page lookups/sec"`
PagereadsPersec float64 `perflib:"Page reads/sec"`
PagewritesPersec float64 `perflib:"Page writes/sec"`
ReadaheadpagesPersec float64 `perflib:"Readahead pages/sec"`
ReadaheadtimePersec float64 `perflib:"Readahead time/sec"`
Targetpages float64 `perflib:"Target pages"`
}
func (c *MSSQLCollector) collectBufferManager(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlBufferManager
log.Debugf("mssql_bufman collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "bufman")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.BufManBackgroundwriterpages,
prometheus.CounterValue,
v.BackgroundwriterpagesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManBuffercachehits,
prometheus.GaugeValue,
v.Buffercachehitratio,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManBuffercachelookups,
prometheus.GaugeValue,
v.Buffercachehitratio_Base,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManCheckpointpages,
prometheus.CounterValue,
v.CheckpointpagesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManDatabasepages,
prometheus.GaugeValue,
v.Databasepages,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionallocatedpages,
prometheus.GaugeValue,
v.Extensionallocatedpages,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionfreepages,
prometheus.GaugeValue,
v.Extensionfreepages,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensioninuseaspercentage,
prometheus.GaugeValue,
v.Extensioninuseaspercentage,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionoutstandingIOcounter,
prometheus.GaugeValue,
v.ExtensionoutstandingIOcounter,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionpageevictions,
prometheus.CounterValue,
v.ExtensionpageevictionsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionpagereads,
prometheus.CounterValue,
v.ExtensionpagereadsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionpageunreferencedtime,
prometheus.GaugeValue,
v.Extensionpageunreferencedtime,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManExtensionpagewrites,
prometheus.CounterValue,
v.ExtensionpagewritesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManFreeliststalls,
prometheus.CounterValue,
v.FreeliststallsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManIntegralControllerSlope,
prometheus.GaugeValue,
v.IntegralControllerSlope,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManLazywrites,
prometheus.CounterValue,
v.LazywritesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManPagelifeexpectancy,
prometheus.GaugeValue,
v.Pagelifeexpectancy,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManPagelookups,
prometheus.CounterValue,
v.PagelookupsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManPagereads,
prometheus.CounterValue,
v.PagereadsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManPagewrites,
prometheus.CounterValue,
v.PagewritesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManReadaheadpages,
prometheus.CounterValue,
v.ReadaheadpagesPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManReadaheadtime,
prometheus.CounterValue,
v.ReadaheadtimePersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.BufManTargetpages,
prometheus.GaugeValue,
v.Targetpages,
sqlInstance,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerDatabaseReplica docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-database-replica
type mssqlDatabaseReplica struct {
Name string
DatabaseFlowControlDelay float64 `perflib:"Database Flow Control Delay"`
DatabaseFlowControlsPersec float64 `perflib:"Database Flow Controls/sec"`
FileBytesReceivedPersec float64 `perflib:"File Bytes Received/sec"`
GroupCommitsPerSec float64 `perflib:"Group Commits/Sec"`
GroupCommitTime float64 `perflib:"Group Commit Time"`
LogApplyPendingQueue float64 `perflib:"Log Apply Pending Queue"`
LogApplyReadyQueue float64 `perflib:"Log Apply Ready Queue"`
LogBytesCompressedPersec float64 `perflib:"Log Bytes Compressed/sec"`
LogBytesDecompressedPersec float64 `perflib:"Log Bytes Decompressed/sec"`
LogBytesReceivedPersec float64 `perflib:"Log Bytes Received/sec"`
LogCompressionCachehitsPersec float64 `perflib:"Log Compression Cache hits/sec"`
LogCompressionCachemissesPersec float64 `perflib:"Log Compression Cache misses/sec"`
LogCompressionsPersec float64 `perflib:"Log Compressions/sec"`
LogDecompressionsPersec float64 `perflib:"Log Decompressions/sec"`
Logremainingforundo float64 `perflib:"Log remaining for undo"`
LogSendQueue float64 `perflib:"Log Send Queue"`
MirroredWriteTransactionsPersec float64 `perflib:"Mirrored Write Transactions/sec"`
RecoveryQueue float64 `perflib:"Recovery Queue"`
RedoblockedPersec float64 `perflib:"Redo blocked/sec"`
RedoBytesRemaining float64 `perflib:"Redo Bytes Remaining"`
RedoneBytesPersec float64 `perflib:"Redone Bytes/sec"`
RedonesPersec float64 `perflib:"Redones/sec"`
TotalLogrequiringundo float64 `perflib:"Total Log requiring undo"`
TransactionDelay float64 `perflib:"Transaction Delay"`
}
func (c *MSSQLCollector) collectDatabaseReplica(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlDatabaseReplica
log.Debugf("mssql_dbreplica collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "dbreplica")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
if strings.ToLower(v.Name) == "_total" {
continue
}
replicaName := v.Name
ch <- prometheus.MustNewConstMetric(
c.DBReplicaDatabaseFlowControlDelay,
prometheus.GaugeValue,
v.DatabaseFlowControlDelay,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaDatabaseFlowControls,
prometheus.CounterValue,
v.DatabaseFlowControlsPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaFileBytesReceived,
prometheus.CounterValue,
v.FileBytesReceivedPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaGroupCommits,
prometheus.CounterValue,
v.GroupCommitsPerSec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaGroupCommitTime,
prometheus.GaugeValue,
v.GroupCommitTime,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogApplyPendingQueue,
prometheus.GaugeValue,
v.LogApplyPendingQueue,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogApplyReadyQueue,
prometheus.GaugeValue,
v.LogApplyReadyQueue,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogBytesCompressed,
prometheus.CounterValue,
v.LogBytesCompressedPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogBytesDecompressed,
prometheus.CounterValue,
v.LogBytesDecompressedPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogBytesReceived,
prometheus.CounterValue,
v.LogBytesReceivedPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogCompressionCachehits,
prometheus.CounterValue,
v.LogCompressionCachehitsPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogCompressionCachemisses,
prometheus.CounterValue,
v.LogCompressionCachemissesPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogCompressions,
prometheus.CounterValue,
v.LogCompressionsPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogDecompressions,
prometheus.CounterValue,
v.LogDecompressionsPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogremainingforundo,
prometheus.GaugeValue,
v.Logremainingforundo,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaLogSendQueue,
prometheus.GaugeValue,
v.LogSendQueue,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaMirroredWriteTransactions,
prometheus.CounterValue,
v.MirroredWriteTransactionsPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaRecoveryQueue,
prometheus.GaugeValue,
v.RecoveryQueue,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaRedoblocked,
prometheus.CounterValue,
v.RedoblockedPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaRedoBytesRemaining,
prometheus.GaugeValue,
v.RedoBytesRemaining,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaRedoneBytes,
prometheus.CounterValue,
v.RedoneBytesPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaRedones,
prometheus.CounterValue,
v.RedonesPersec,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaTotalLogrequiringundo,
prometheus.GaugeValue,
v.TotalLogrequiringundo,
sqlInstance, replicaName,
)
ch <- prometheus.MustNewConstMetric(
c.DBReplicaTransactionDelay,
prometheus.GaugeValue,
v.TransactionDelay/1000.0,
sqlInstance, replicaName,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object?view=sql-server-2017
type mssqlDatabases struct {
Name string
Activeparallelredothreads float64 `perflib:"Active parallel redo threads"`
ActiveTransactions float64 `perflib:"Active Transactions"`
BackupPerRestoreThroughputPersec float64 `perflib:"Backup/Restore Throughput/sec"`
BulkCopyRowsPersec float64 `perflib:"Bulk Copy Rows/sec"`
BulkCopyThroughputPersec float64 `perflib:"Bulk Copy Throughput/sec"`
Committableentries float64 `perflib:"Commit table entries"`
DataFilesSizeKB float64 `perflib:"Data File(s) Size (KB)"`
DBCCLogicalScanBytesPersec float64 `perflib:"DBCC Logical Scan Bytes/sec"`
GroupCommitTimePersec float64 `perflib:"Group Commit Time/sec"`
LogBytesFlushedPersec float64 `perflib:"Log Bytes Flushed/sec"`
LogCacheHitRatio float64 `perflib:"Log Cache Hit Ratio"`
LogCacheHitRatio_Base float64 `perflib:"Log Cache Hit Ratio Base_Base"`
LogCacheReadsPersec float64 `perflib:"Log Cache Reads/sec"`
LogFilesSizeKB float64 `perflib:"Log File(s) Size (KB)"`
LogFilesUsedSizeKB float64 `perflib:"Log File(s) Used Size (KB)"`
LogFlushesPersec float64 `perflib:"Log Flushes/sec"`
LogFlushWaitsPersec float64 `perflib:"Log Flush Waits/sec"`
LogFlushWaitTime float64 `perflib:"Log Flush Wait Time"`
LogFlushWriteTimems float64 `perflib:"Log Flush Write Time (ms)"`
LogGrowths float64 `perflib:"Log Growths"`
LogPoolCacheMissesPersec float64 `perflib:"Log Pool Cache Misses/sec"`
LogPoolDiskReadsPersec float64 `perflib:"Log Pool Disk Reads/sec"`
LogPoolHashDeletesPersec float64 `perflib:"Log Pool Hash Deletes/sec"`
LogPoolHashInsertsPersec float64 `perflib:"Log Pool Hash Inserts/sec"`
LogPoolInvalidHashEntryPersec float64 `perflib:"Log Pool Invalid Hash Entry/sec"`
LogPoolLogScanPushesPersec float64 `perflib:"Log Pool Log Scan Pushes/sec"`
LogPoolLogWriterPushesPersec float64 `perflib:"Log Pool LogWriter Pushes/sec"`
LogPoolPushEmptyFreePoolPersec float64 `perflib:"Log Pool Push Empty FreePool/sec"`
LogPoolPushLowMemoryPersec float64 `perflib:"Log Pool Push Low Memory/sec"`
LogPoolPushNoFreeBufferPersec float64 `perflib:"Log Pool Push No Free Buffer/sec"`
LogPoolReqBehindTruncPersec float64 `perflib:"Log Pool Req. Behind Trunc/sec"`
LogPoolRequestsOldVLFPersec float64 `perflib:"Log Pool Requests Old VLF/sec"`
LogPoolRequestsPersec float64 `perflib:"Log Pool Requests/sec"`
LogPoolTotalActiveLogSize float64 `perflib:"Log Pool Total Active Log Size"`
LogPoolTotalSharedPoolSize float64 `perflib:"Log Pool Total Shared Pool Size"`
LogShrinks float64 `perflib:"Log Shrinks"`
LogTruncations float64 `perflib:"Log Truncations"`
PercentLogUsed float64 `perflib:"Percent Log Used"`
ReplPendingXacts float64 `perflib:"Repl. Pending Xacts"`
ReplTransRate float64 `perflib:"Repl. Trans. Rate"`
ShrinkDataMovementBytesPersec float64 `perflib:"Shrink Data Movement Bytes/sec"`
TrackedtransactionsPersec float64 `perflib:"Tracked transactions/sec"`
TransactionsPersec float64 `perflib:"Transactions/sec"`
WriteTransactionsPersec float64 `perflib:"Write Transactions/sec"`
XTPControllerDLCLatencyPerFetch float64 `perflib:"XTP Controller DLC Latency/Fetch"`
XTPControllerDLCPeakLatency float64 `perflib:"XTP Controller DLC Peak Latency"`
XTPControllerLogProcessedPersec float64 `perflib:"XTP Controller Log Processed/sec"`
XTPMemoryUsedKB float64 `perflib:"XTP Memory Used (KB)"`
}
func (c *MSSQLCollector) collectDatabases(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlDatabases
log.Debugf("mssql_databases collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "databases")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
if strings.ToLower(v.Name) == "_total" {
continue
}
dbName := v.Name
ch <- prometheus.MustNewConstMetric(
c.DatabasesActiveParallelredothreads,
prometheus.GaugeValue,
v.Activeparallelredothreads,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesActiveTransactions,
prometheus.GaugeValue,
v.ActiveTransactions,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesBackupPerRestoreThroughput,
prometheus.CounterValue,
v.BackupPerRestoreThroughputPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesBulkCopyRows,
prometheus.CounterValue,
v.BulkCopyRowsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesBulkCopyThroughput,
prometheus.CounterValue,
v.BulkCopyThroughputPersec*1024,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesCommittableentries,
prometheus.GaugeValue,
v.Committableentries,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesDataFilesSizeKB,
prometheus.GaugeValue,
v.DataFilesSizeKB*1024,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesDBCCLogicalScanBytes,
prometheus.CounterValue,
v.DBCCLogicalScanBytesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesGroupCommitTime,
prometheus.CounterValue,
v.GroupCommitTimePersec/1000000.0,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogBytesFlushed,
prometheus.CounterValue,
v.LogBytesFlushedPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheHits,
prometheus.GaugeValue,
v.LogCacheHitRatio,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheLookups,
prometheus.GaugeValue,
v.LogCacheHitRatio_Base,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheReads,
prometheus.CounterValue,
v.LogCacheReadsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFilesSizeKB,
prometheus.GaugeValue,
v.LogFilesSizeKB*1024,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFilesUsedSizeKB,
prometheus.GaugeValue,
v.LogFilesUsedSizeKB*1024,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFlushes,
prometheus.CounterValue,
v.LogFlushesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFlushWaits,
prometheus.CounterValue,
v.LogFlushWaitsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFlushWaitTime,
prometheus.GaugeValue,
v.LogFlushWaitTime/1000.0,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogFlushWriteTimems,
prometheus.GaugeValue,
v.LogFlushWriteTimems/1000.0,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogGrowths,
prometheus.GaugeValue,
v.LogGrowths,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolCacheMisses,
prometheus.CounterValue,
v.LogPoolCacheMissesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolDiskReads,
prometheus.CounterValue,
v.LogPoolDiskReadsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolHashDeletes,
prometheus.CounterValue,
v.LogPoolHashDeletesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolHashInserts,
prometheus.CounterValue,
v.LogPoolHashInsertsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolInvalidHashEntry,
prometheus.CounterValue,
v.LogPoolInvalidHashEntryPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolLogScanPushes,
prometheus.CounterValue,
v.LogPoolLogScanPushesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolLogWriterPushes,
prometheus.CounterValue,
v.LogPoolLogWriterPushesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolPushEmptyFreePool,
prometheus.CounterValue,
v.LogPoolPushEmptyFreePoolPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolPushLowMemory,
prometheus.CounterValue,
v.LogPoolPushLowMemoryPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolPushNoFreeBuffer,
prometheus.CounterValue,
v.LogPoolPushNoFreeBufferPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolReqBehindTrunc,
prometheus.CounterValue,
v.LogPoolReqBehindTruncPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolRequestsOldVLF,
prometheus.CounterValue,
v.LogPoolRequestsOldVLFPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolRequests,
prometheus.CounterValue,
v.LogPoolRequestsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolTotalActiveLogSize,
prometheus.GaugeValue,
v.LogPoolTotalActiveLogSize,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogPoolTotalSharedPoolSize,
prometheus.GaugeValue,
v.LogPoolTotalSharedPoolSize,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogShrinks,
prometheus.GaugeValue,
v.LogShrinks,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogTruncations,
prometheus.GaugeValue,
v.LogTruncations,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesPercentLogUsed,
prometheus.GaugeValue,
v.PercentLogUsed,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesReplPendingXacts,
prometheus.GaugeValue,
v.ReplPendingXacts,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesReplTransRate,
prometheus.CounterValue,
v.ReplTransRate,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesShrinkDataMovementBytes,
prometheus.CounterValue,
v.ShrinkDataMovementBytesPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesTrackedtransactions,
prometheus.CounterValue,
v.TrackedtransactionsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesTransactions,
prometheus.CounterValue,
v.TransactionsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesWriteTransactions,
prometheus.CounterValue,
v.WriteTransactionsPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesXTPControllerDLCLatencyPerFetch,
prometheus.GaugeValue,
v.XTPControllerDLCLatencyPerFetch,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesXTPControllerDLCPeakLatency,
prometheus.GaugeValue,
v.XTPControllerDLCPeakLatency*1000000.0,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesXTPControllerLogProcessed,
prometheus.CounterValue,
v.XTPControllerLogProcessedPersec,
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric(
c.DatabasesXTPMemoryUsedKB,
prometheus.GaugeValue,
v.XTPMemoryUsedKB*1024,
sqlInstance, dbName,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object
type mssqlGeneralStatistics struct {
ActiveTempTables float64 `perflib:"Active Temp Tables"`
ConnectionResetPersec float64 `perflib:"Connection Reset/sec"`
EventNotificationsDelayedDrop float64 `perflib:"Event Notifications Delayed Drop"`
HTTPAuthenticatedRequests float64 `perflib:"HTTP Authenticated Requests"`
LogicalConnections float64 `perflib:"Logical Connections"`
LoginsPersec float64 `perflib:"Logins/sec"`
LogoutsPersec float64 `perflib:"Logouts/sec"`
MarsDeadlocks float64 `perflib:"Mars Deadlocks"`
Nonatomicyieldrate float64 `perflib:"Non-atomic yield rate"`
Processesblocked float64 `perflib:"Processes blocked"`
SOAPEmptyRequests float64 `perflib:"SOAP Empty Requests"`
SOAPMethodInvocations float64 `perflib:"SOAP Method Invocations"`
SOAPSessionInitiateRequests float64 `perflib:"SOAP Session Initiate Requests"`
SOAPSessionTerminateRequests float64 `perflib:"SOAP Session Terminate Requests"`
SOAPSQLRequests float64 `perflib:"SOAP SQL Requests"`
SOAPWSDLRequests float64 `perflib:"SOAP WSDL Requests"`
SQLTraceIOProviderLockWaits float64 `perflib:"SQL Trace IO Provider Lock Waits"`
Tempdbrecoveryunitid float64 `perflib:"Tempdb recovery unit id"`
Tempdbrowsetid float64 `perflib:"Tempdb rowset id"`
TempTablesCreationRate float64 `perflib:"Temp Tables Creation Rate"`
TempTablesForDestruction float64 `perflib:"Temp Tables For Destruction"`
TraceEventNotificationQueue float64 `perflib:"Trace Event Notification Queue"`
Transactions float64 `perflib:"Transactions"`
UserConnections float64 `perflib:"User Connections"`
}
func (c *MSSQLCollector) collectGeneralStatistics(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlGeneralStatistics
log.Debugf("mssql_genstats collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "genstats")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.GenStatsActiveTempTables,
prometheus.GaugeValue,
v.ActiveTempTables,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsConnectionReset,
prometheus.CounterValue,
v.ConnectionResetPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsEventNotificationsDelayedDrop,
prometheus.GaugeValue,
v.EventNotificationsDelayedDrop,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsHTTPAuthenticatedRequests,
prometheus.GaugeValue,
v.HTTPAuthenticatedRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsLogicalConnections,
prometheus.GaugeValue,
v.LogicalConnections,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsLogins,
prometheus.CounterValue,
v.LoginsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsLogouts,
prometheus.CounterValue,
v.LogoutsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsMarsDeadlocks,
prometheus.GaugeValue,
v.MarsDeadlocks,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsNonatomicyieldrate,
prometheus.CounterValue,
v.Nonatomicyieldrate,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsProcessesblocked,
prometheus.GaugeValue,
v.Processesblocked,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPEmptyRequests,
prometheus.GaugeValue,
v.SOAPEmptyRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPMethodInvocations,
prometheus.GaugeValue,
v.SOAPMethodInvocations,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPSessionInitiateRequests,
prometheus.GaugeValue,
v.SOAPSessionInitiateRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPSessionTerminateRequests,
prometheus.GaugeValue,
v.SOAPSessionTerminateRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPSQLRequests,
prometheus.GaugeValue,
v.SOAPSQLRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSOAPWSDLRequests,
prometheus.GaugeValue,
v.SOAPWSDLRequests,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsSQLTraceIOProviderLockWaits,
prometheus.GaugeValue,
v.SQLTraceIOProviderLockWaits,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTempdbrecoveryunitid,
prometheus.GaugeValue,
v.Tempdbrecoveryunitid,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTempdbrowsetid,
prometheus.GaugeValue,
v.Tempdbrowsetid,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTempTablesCreationRate,
prometheus.CounterValue,
v.TempTablesCreationRate,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTempTablesForDestruction,
prometheus.GaugeValue,
v.TempTablesForDestruction,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTraceEventNotificationQueue,
prometheus.GaugeValue,
v.TraceEventNotificationQueue,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsTransactions,
prometheus.GaugeValue,
v.Transactions,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.GenStatsUserConnections,
prometheus.GaugeValue,
v.UserConnections,
sqlInstance,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerLocks docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object
type mssqlLocks struct {
Name string
AverageWaitTimems float64 `perflib:"Average Wait Time (ms)"`
AverageWaitTimems_Base float64 `perflib:"Average Wait Time Base_Base"`
LockRequestsPersec float64 `perflib:"Lock Requests/sec"`
LockTimeoutsPersec float64 `perflib:"Lock Timeouts/sec"`
LockTimeoutstimeout0Persec float64 `perflib:"Lock Timeouts (timeout > 0)/sec"`
LockWaitsPersec float64 `perflib:"Lock Waits/sec"`
LockWaitTimems float64 `perflib:"Lock Wait Time (ms)"`
NumberofDeadlocksPersec float64 `perflib:"Number of Deadlocks/sec"`
}
func (c *MSSQLCollector) collectLocks(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlLocks
log.Debugf("mssql_locks collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "locks")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
if strings.ToLower(v.Name) == "_total" {
continue
}
lockResourceName := v.Name
ch <- prometheus.MustNewConstMetric(
c.LocksWaitTime,
prometheus.GaugeValue,
v.AverageWaitTimems/1000.0,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksCount,
prometheus.GaugeValue,
v.AverageWaitTimems_Base/1000.0,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksLockRequests,
prometheus.CounterValue,
v.LockRequestsPersec,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksLockTimeouts,
prometheus.CounterValue,
v.LockTimeoutsPersec,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksLockTimeoutstimeout0,
prometheus.CounterValue,
v.LockTimeoutstimeout0Persec,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksLockWaits,
prometheus.CounterValue,
v.LockWaitsPersec,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksLockWaitTimems,
prometheus.GaugeValue,
v.LockWaitTimems/1000.0,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric(
c.LocksNumberofDeadlocks,
prometheus.CounterValue,
v.NumberofDeadlocksPersec,
sqlInstance, lockResourceName,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object
type mssqlMemoryManager struct {
ConnectionMemoryKB float64 `perflib:"Connection Memory (KB)"`
DatabaseCacheMemoryKB float64 `perflib:"Database Cache Memory (KB)"`
Externalbenefitofmemory float64 `perflib:"External benefit of memory"`
FreeMemoryKB float64 `perflib:"Free Memory (KB)"`
GrantedWorkspaceMemoryKB float64 `perflib:"Granted Workspace Memory (KB)"`
LockBlocks float64 `perflib:"Lock Blocks"`
LockBlocksAllocated float64 `perflib:"Lock Blocks Allocated"`
LockMemoryKB float64 `perflib:"Lock Memory (KB)"`
LockOwnerBlocks float64 `perflib:"Lock Owner Blocks"`
LockOwnerBlocksAllocated float64 `perflib:"Lock Owner Blocks Allocated"`
LogPoolMemoryKB float64 `perflib:"Log Pool Memory (KB)"`
MaximumWorkspaceMemoryKB float64 `perflib:"Maximum Workspace Memory (KB)"`
MemoryGrantsOutstanding float64 `perflib:"Memory Grants Outstanding"`
MemoryGrantsPending float64 `perflib:"Memory Grants Pending"`
OptimizerMemoryKB float64 `perflib:"Optimizer Memory (KB)"`
ReservedServerMemoryKB float64 `perflib:"Reserved Server Memory (KB)"`
SQLCacheMemoryKB float64 `perflib:"SQL Cache Memory (KB)"`
StolenServerMemoryKB float64 `perflib:"Stolen Server Memory (KB)"`
TargetServerMemoryKB float64 `perflib:"Target Server Memory (KB)"`
TotalServerMemoryKB float64 `perflib:"Total Server Memory (KB)"`
}
func (c *MSSQLCollector) collectMemoryManager(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlMemoryManager
log.Debugf("mssql_memmgr collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "memmgr")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.MemMgrConnectionMemoryKB,
prometheus.GaugeValue,
v.ConnectionMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrDatabaseCacheMemoryKB,
prometheus.GaugeValue,
v.DatabaseCacheMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrExternalbenefitofmemory,
prometheus.GaugeValue,
v.Externalbenefitofmemory,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrFreeMemoryKB,
prometheus.GaugeValue,
v.FreeMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrGrantedWorkspaceMemoryKB,
prometheus.GaugeValue,
v.GrantedWorkspaceMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLockBlocks,
prometheus.GaugeValue,
v.LockBlocks,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLockBlocksAllocated,
prometheus.GaugeValue,
v.LockBlocksAllocated,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLockMemoryKB,
prometheus.GaugeValue,
v.LockMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLockOwnerBlocks,
prometheus.GaugeValue,
v.LockOwnerBlocks,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLockOwnerBlocksAllocated,
prometheus.GaugeValue,
v.LockOwnerBlocksAllocated,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrLogPoolMemoryKB,
prometheus.GaugeValue,
v.LogPoolMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrMaximumWorkspaceMemoryKB,
prometheus.GaugeValue,
v.MaximumWorkspaceMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrMemoryGrantsOutstanding,
prometheus.GaugeValue,
v.MemoryGrantsOutstanding,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrMemoryGrantsPending,
prometheus.GaugeValue,
v.MemoryGrantsPending,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrOptimizerMemoryKB,
prometheus.GaugeValue,
v.OptimizerMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrReservedServerMemoryKB,
prometheus.GaugeValue,
v.ReservedServerMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrSQLCacheMemoryKB,
prometheus.GaugeValue,
v.SQLCacheMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrStolenServerMemoryKB,
prometheus.GaugeValue,
v.StolenServerMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrTargetServerMemoryKB,
prometheus.GaugeValue,
v.TargetServerMemoryKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.MemMgrTotalServerMemoryKB,
prometheus.GaugeValue,
v.TotalServerMemoryKB*1024,
sqlInstance,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object
type mssqlSQLStatistics struct {
AutoParamAttemptsPersec float64 `perflib:"Auto-Param Attempts/sec"`
BatchRequestsPersec float64 `perflib:"Batch Requests/sec"`
FailedAutoParamsPersec float64 `perflib:"Failed Auto-Params/sec"`
ForcedParameterizationsPersec float64 `perflib:"Forced Parameterizations/sec"`
GuidedplanexecutionsPersec float64 `perflib:"Guided plan executions/sec"`
MisguidedplanexecutionsPersec float64 `perflib:"Misguided plan executions/sec"`
SafeAutoParamsPersec float64 `perflib:"Safe Auto-Params/sec"`
SQLAttentionrate float64 `perflib:"SQL Attention rate"`
SQLCompilationsPersec float64 `perflib:"SQL Compilations/sec"`
SQLReCompilationsPersec float64 `perflib:"SQL Re-Compilations/sec"`
UnsafeAutoParamsPersec float64 `perflib:"Unsafe Auto-Params/sec"`
}
func (c *MSSQLCollector) collectSQLStats(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlSQLStatistics
log.Debugf("mssql_sqlstats collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlstats")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.SQLStatsAutoParamAttempts,
prometheus.CounterValue,
v.AutoParamAttemptsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsBatchRequests,
prometheus.CounterValue,
v.BatchRequestsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsFailedAutoParams,
prometheus.CounterValue,
v.FailedAutoParamsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsForcedParameterizations,
prometheus.CounterValue,
v.ForcedParameterizationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsGuidedplanexecutions,
prometheus.CounterValue,
v.GuidedplanexecutionsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsMisguidedplanexecutions,
prometheus.CounterValue,
v.MisguidedplanexecutionsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsSafeAutoParams,
prometheus.CounterValue,
v.SafeAutoParamsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsSQLAttentionrate,
prometheus.CounterValue,
v.SQLAttentionrate,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsSQLCompilations,
prometheus.CounterValue,
v.SQLCompilationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsSQLReCompilations,
prometheus.CounterValue,
v.SQLReCompilationsPersec,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.SQLStatsUnsafeAutoParams,
prometheus.CounterValue,
v.UnsafeAutoParamsPersec,
sqlInstance,
)
}
return nil, nil
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerWaitStatistics docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-wait-statistics-object
type mssqlWaitStatistics struct {
Name string
WaitStatsLockWaits float64 `perflib:"Lock waits"`
WaitStatsMemoryGrantQueueWaits float64 `perflib:"Memory grant queue waits"`
WaitStatsThreadSafeMemoryObjectsWaits float64 `perflib:"Thread-safe memory objects waits"`
WaitStatsLogWriteWaits float64 `perflib:"Log write waits"`
WaitStatsLogBufferWaits float64 `perflib:"Log buffer waits"`
WaitStatsNetworkIOWaits float64 `perflib:"Network IO waits"`
WaitStatsPageIOLatchWaits float64 `perflib:"Page IO latch waits"`
WaitStatsPageLatchWaits float64 `perflib:"Page latch waits"`
WaitStatsNonpageLatchWaits float64 `perflib:"Non-Page latch waits"`
WaitStatsWaitForTheWorkerWaits float64 `perflib:"Wait for the worker"`
WaitStatsWorkspaceSynchronizationWaits float64 `perflib:"Workspace synchronization waits"`
WaitStatsTransactionOwnershipWaits float64 `perflib:"Transaction ownership waits"`
}
func (c *MSSQLCollector) collectWaitStats(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlWaitStatistics
log.Debugf("mssql_waitstats collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "waitstats")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
item := v.Name
ch <- prometheus.MustNewConstMetric(
c.WaitStatsLockWaits,
prometheus.CounterValue,
v.WaitStatsLockWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsMemoryGrantQueueWaits,
prometheus.CounterValue,
v.WaitStatsMemoryGrantQueueWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsThreadSafeMemoryObjectsWaits,
prometheus.CounterValue,
v.WaitStatsThreadSafeMemoryObjectsWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsLogWriteWaits,
prometheus.CounterValue,
v.WaitStatsLogWriteWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsLogBufferWaits,
prometheus.CounterValue,
v.WaitStatsLogBufferWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsNetworkIOWaits,
prometheus.CounterValue,
v.WaitStatsNetworkIOWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsPageIOLatchWaits,
prometheus.CounterValue,
v.WaitStatsPageIOLatchWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsPageLatchWaits,
prometheus.CounterValue,
v.WaitStatsPageLatchWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsNonpageLatchWaits,
prometheus.CounterValue,
v.WaitStatsNonpageLatchWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsWaitForTheWorkerWaits,
prometheus.CounterValue,
v.WaitStatsWaitForTheWorkerWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsWorkspaceSynchronizationWaits,
prometheus.CounterValue,
v.WaitStatsWorkspaceSynchronizationWaits,
sqlInstance, item,
)
ch <- prometheus.MustNewConstMetric(
c.WaitStatsTransactionOwnershipWaits,
prometheus.CounterValue,
v.WaitStatsTransactionOwnershipWaits,
sqlInstance, item,
)
}
return nil, nil
}
type mssqlSQLErrors struct {
Name string
ErrorsPersec float64 `perflib:"Errors/sec"`
}
// Win32_PerfRawData_MSSQLSERVER_SQLServerErrors docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object
func (c *MSSQLCollector) collectSQLErrors(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlSQLErrors
log.Debugf("mssql_sqlerrors collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "sqlerrors")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
if strings.ToLower(v.Name) == "_total" {
continue
}
resource := v.Name
ch <- prometheus.MustNewConstMetric(
c.SQLErrorsTotal,
prometheus.CounterValue,
v.ErrorsPersec,
sqlInstance, resource,
)
}
return nil, nil
}
type mssqlTransactions struct {
FreeSpaceintempdbKB float64 `perflib:"Free Space in tempdb (KB)"`
LongestTransactionRunningTime float64 `perflib:"Longest Transaction Running Time"`
NonSnapshotVersionTransactions float64 `perflib:"NonSnapshot Version Transactions"`
SnapshotTransactions float64 `perflib:"Snapshot Transactions"`
Transactions float64 `perflib:"Transactions"`
Updateconflictratio float64 `perflib:"Update conflict ratio"`
UpdateSnapshotTransactions float64 `perflib:"Update Snapshot Transactions"`
VersionCleanuprateKBPers float64 `perflib:"Version Cleanup rate (KB/s)"`
VersionGenerationrateKBPers float64 `perflib:"Version Generation rate (KB/s)"`
VersionStoreSizeKB float64 `perflib:"Version Store Size (KB)"`
VersionStoreunitcount float64 `perflib:"Version Store unit count"`
VersionStoreunitcreation float64 `perflib:"Version Store unit creation"`
VersionStoreunittruncation float64 `perflib:"Version Store unit truncation"`
}
// Win32_PerfRawData_MSSQLSERVER_Transactions docs:
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object
func (c *MSSQLCollector) collectTransactions(ctx *ScrapeContext, ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
var dst []mssqlTransactions
log.Debugf("mssql_transactions collector iterating sql instance %s.", sqlInstance)
if err := unmarshalObject(ctx.perfObjects[mssqlGetPerfObjectName(sqlInstance, "transactions")], &dst); err != nil {
return nil, err
}
for _, v := range dst {
ch <- prometheus.MustNewConstMetric(
c.TransactionsTempDbFreeSpaceBytes,
prometheus.GaugeValue,
v.FreeSpaceintempdbKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsLongestTransactionRunningSeconds,
prometheus.GaugeValue,
v.LongestTransactionRunningTime,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsNonSnapshotVersionActiveTotal,
prometheus.CounterValue,
v.NonSnapshotVersionTransactions,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsSnapshotActiveTotal,
prometheus.CounterValue,
v.SnapshotTransactions,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsActive,
prometheus.GaugeValue,
v.Transactions,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsUpdateConflictsTotal,
prometheus.CounterValue,
v.Updateconflictratio,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsUpdateSnapshotActiveTotal,
prometheus.CounterValue,
v.UpdateSnapshotTransactions,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionCleanupRateBytes,
prometheus.GaugeValue,
v.VersionCleanuprateKBPers*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionGenerationRateBytes,
prometheus.GaugeValue,
v.VersionGenerationrateKBPers*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionStoreSizeBytes,
prometheus.GaugeValue,
v.VersionStoreSizeKB*1024,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionStoreUnits,
prometheus.CounterValue,
v.VersionStoreunitcount,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionStoreCreationUnits,
prometheus.CounterValue,
v.VersionStoreunitcreation,
sqlInstance,
)
ch <- prometheus.MustNewConstMetric(
c.TransactionsVersionStoreTruncationUnits,
prometheus.CounterValue,
v.VersionStoreunittruncation,
sqlInstance,
)
}
return nil, nil
}