mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-02-11 23:46:44 +00:00
so that the two functions that list available child collectors are next to each other - should make less likely to not miss editing one of those when adding additional wmi classes also removed the 'filter' from the `mssqlFilterAvailableClassCollectors` function as it's not filtering anyting.
2857 lines
85 KiB
Go
2857 lines
85 KiB
Go
// returns data points from the following classes:
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerAvailabilityReplica
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-availability-replica
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerBufferManager
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-manager-object
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerDatabaseReplica
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-database-replica
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerDatabases
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object?view=sql-server-2017
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerGeneralStatistics
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerLocks
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerMemoryManager
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object
|
|
// - Win32_PerfRawData_MSSQLSERVER_SQLServerSQLStatistics
|
|
// https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object
|
|
|
|
package collector
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/StackExchange/wmi"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/common/log"
|
|
"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, initialize list to the default instance
|
|
sqlInstances["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 sqlInstances
|
|
}
|
|
defer k.Close()
|
|
|
|
instanceNames, err := k.ReadValueNames(0)
|
|
if err != nil {
|
|
log.Warn("Can't ReadSubKeyNames %#v", err)
|
|
return sqlInstances
|
|
}
|
|
|
|
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 "availreplica,bufman,databases,dbreplica,genstats,locks,memmgr,sqlstats"
|
|
}
|
|
|
|
func (c *MSSQLCollector) getMSSQLCollectors() mssqlCollectorsMap {
|
|
mssqlCollectors := make(mssqlCollectorsMap)
|
|
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
|
|
|
|
return mssqlCollectors
|
|
}
|
|
|
|
func mssqlExpandEnabledCollectors(enabled string) []string {
|
|
separated := strings.Split(enabled, ",")
|
|
unique := map[string]bool{}
|
|
for _, s := range separated {
|
|
if s != "" {
|
|
unique[s] = true
|
|
}
|
|
}
|
|
result := make([]string, 0, len(unique))
|
|
for s := range unique {
|
|
result = append(result, s)
|
|
}
|
|
return result
|
|
}
|
|
|
|
func init() {
|
|
Factories["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}_SQLServerAvailabilityReplica
|
|
BytesReceivedfromReplicaPersec *prometheus.Desc
|
|
BytesSenttoReplicaPersec *prometheus.Desc
|
|
BytesSenttoTransportPersec *prometheus.Desc
|
|
FlowControlPersec *prometheus.Desc
|
|
FlowControlTimemsPersec *prometheus.Desc
|
|
ReceivesfromReplicaPersec *prometheus.Desc
|
|
ResentMessagesPersec *prometheus.Desc
|
|
SendstoReplicaPersec *prometheus.Desc
|
|
SendstoTransportPersec *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerBufferManager
|
|
BackgroundwriterpagesPersec *prometheus.Desc
|
|
Buffercachehitratio *prometheus.Desc
|
|
CheckpointpagesPersec *prometheus.Desc
|
|
Databasepages *prometheus.Desc
|
|
Extensionallocatedpages *prometheus.Desc
|
|
Extensionfreepages *prometheus.Desc
|
|
Extensioninuseaspercentage *prometheus.Desc
|
|
ExtensionoutstandingIOcounter *prometheus.Desc
|
|
ExtensionpageevictionsPersec *prometheus.Desc
|
|
ExtensionpagereadsPersec *prometheus.Desc
|
|
Extensionpageunreferencedtime *prometheus.Desc
|
|
ExtensionpagewritesPersec *prometheus.Desc
|
|
FreeliststallsPersec *prometheus.Desc
|
|
IntegralControllerSlope *prometheus.Desc
|
|
LazywritesPersec *prometheus.Desc
|
|
Pagelifeexpectancy *prometheus.Desc
|
|
PagelookupsPersec *prometheus.Desc
|
|
PagereadsPersec *prometheus.Desc
|
|
PagewritesPersec *prometheus.Desc
|
|
ReadaheadpagesPersec *prometheus.Desc
|
|
ReadaheadtimePersec *prometheus.Desc
|
|
Targetpages *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerDatabaseReplica
|
|
DatabaseFlowControlDelay *prometheus.Desc
|
|
DatabaseFlowControlsPersec *prometheus.Desc
|
|
FileBytesReceivedPersec *prometheus.Desc
|
|
GroupCommitsPerSec *prometheus.Desc
|
|
GroupCommitTime *prometheus.Desc
|
|
LogApplyPendingQueue *prometheus.Desc
|
|
LogApplyReadyQueue *prometheus.Desc
|
|
LogBytesCompressedPersec *prometheus.Desc
|
|
LogBytesDecompressedPersec *prometheus.Desc
|
|
LogBytesReceivedPersec *prometheus.Desc
|
|
LogCompressionCachehitsPersec *prometheus.Desc
|
|
LogCompressionCachemissesPersec *prometheus.Desc
|
|
LogCompressionsPersec *prometheus.Desc
|
|
LogDecompressionsPersec *prometheus.Desc
|
|
Logremainingforundo *prometheus.Desc
|
|
LogSendQueue *prometheus.Desc
|
|
MirroredWriteTransactionsPersec *prometheus.Desc
|
|
RecoveryQueue *prometheus.Desc
|
|
RedoblockedPersec *prometheus.Desc
|
|
RedoBytesRemaining *prometheus.Desc
|
|
RedoneBytesPersec *prometheus.Desc
|
|
RedonesPersec *prometheus.Desc
|
|
TotalLogrequiringundo *prometheus.Desc
|
|
TransactionDelay *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerDatabases
|
|
ActiveTransactions *prometheus.Desc
|
|
BackupPerRestoreThroughputPersec *prometheus.Desc
|
|
BulkCopyRowsPersec *prometheus.Desc
|
|
BulkCopyThroughputPersec *prometheus.Desc
|
|
Committableentries *prometheus.Desc
|
|
DataFilesSizeKB *prometheus.Desc
|
|
DBCCLogicalScanBytesPersec *prometheus.Desc
|
|
GroupCommitTimePersec *prometheus.Desc
|
|
LogBytesFlushedPersec *prometheus.Desc
|
|
LogCacheHitRatio *prometheus.Desc
|
|
LogCacheReadsPersec *prometheus.Desc
|
|
LogFilesSizeKB *prometheus.Desc
|
|
LogFilesUsedSizeKB *prometheus.Desc
|
|
LogFlushesPersec *prometheus.Desc
|
|
LogFlushWaitsPersec *prometheus.Desc
|
|
LogFlushWaitTime *prometheus.Desc
|
|
LogFlushWriteTimems *prometheus.Desc
|
|
LogGrowths *prometheus.Desc
|
|
LogPoolCacheMissesPersec *prometheus.Desc
|
|
LogPoolDiskReadsPersec *prometheus.Desc
|
|
LogPoolHashDeletesPersec *prometheus.Desc
|
|
LogPoolHashInsertsPersec *prometheus.Desc
|
|
LogPoolInvalidHashEntryPersec *prometheus.Desc
|
|
LogPoolLogScanPushesPersec *prometheus.Desc
|
|
LogPoolLogWriterPushesPersec *prometheus.Desc
|
|
LogPoolPushEmptyFreePoolPersec *prometheus.Desc
|
|
LogPoolPushLowMemoryPersec *prometheus.Desc
|
|
LogPoolPushNoFreeBufferPersec *prometheus.Desc
|
|
LogPoolReqBehindTruncPersec *prometheus.Desc
|
|
LogPoolRequestsOldVLFPersec *prometheus.Desc
|
|
LogPoolRequestsPersec *prometheus.Desc
|
|
LogPoolTotalActiveLogSize *prometheus.Desc
|
|
LogPoolTotalSharedPoolSize *prometheus.Desc
|
|
LogShrinks *prometheus.Desc
|
|
LogTruncations *prometheus.Desc
|
|
PercentLogUsed *prometheus.Desc
|
|
ReplPendingXacts *prometheus.Desc
|
|
ReplTransRate *prometheus.Desc
|
|
ShrinkDataMovementBytesPersec *prometheus.Desc
|
|
TrackedtransactionsPersec *prometheus.Desc
|
|
TransactionsPersec *prometheus.Desc
|
|
WriteTransactionsPersec *prometheus.Desc
|
|
XTPControllerDLCLatencyPerFetch *prometheus.Desc
|
|
XTPControllerDLCPeakLatency *prometheus.Desc
|
|
XTPControllerLogProcessedPersec *prometheus.Desc
|
|
XTPMemoryUsedKB *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerGeneralStatistics
|
|
ActiveTempTables *prometheus.Desc
|
|
ConnectionResetPersec *prometheus.Desc
|
|
EventNotificationsDelayedDrop *prometheus.Desc
|
|
HTTPAuthenticatedRequests *prometheus.Desc
|
|
LogicalConnections *prometheus.Desc
|
|
LoginsPersec *prometheus.Desc
|
|
LogoutsPersec *prometheus.Desc
|
|
MarsDeadlocks *prometheus.Desc
|
|
Nonatomicyieldrate *prometheus.Desc
|
|
Processesblocked *prometheus.Desc
|
|
SOAPEmptyRequests *prometheus.Desc
|
|
SOAPMethodInvocations *prometheus.Desc
|
|
SOAPSessionInitiateRequests *prometheus.Desc
|
|
SOAPSessionTerminateRequests *prometheus.Desc
|
|
SOAPSQLRequests *prometheus.Desc
|
|
SOAPWSDLRequests *prometheus.Desc
|
|
SQLTraceIOProviderLockWaits *prometheus.Desc
|
|
Tempdbrecoveryunitid *prometheus.Desc
|
|
Tempdbrowsetid *prometheus.Desc
|
|
TempTablesCreationRate *prometheus.Desc
|
|
TempTablesForDestruction *prometheus.Desc
|
|
TraceEventNotificationQueue *prometheus.Desc
|
|
Transactions *prometheus.Desc
|
|
UserConnections *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerLocks
|
|
AverageWaitTimems *prometheus.Desc
|
|
LockRequestsPersec *prometheus.Desc
|
|
LockTimeoutsPersec *prometheus.Desc
|
|
LockTimeoutstimeout0Persec *prometheus.Desc
|
|
LockWaitsPersec *prometheus.Desc
|
|
LockWaitTimems *prometheus.Desc
|
|
NumberofDeadlocksPersec *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerMemoryManager
|
|
ConnectionMemoryKB *prometheus.Desc
|
|
DatabaseCacheMemoryKB *prometheus.Desc
|
|
Externalbenefitofmemory *prometheus.Desc
|
|
FreeMemoryKB *prometheus.Desc
|
|
GrantedWorkspaceMemoryKB *prometheus.Desc
|
|
LockBlocks *prometheus.Desc
|
|
LockBlocksAllocated *prometheus.Desc
|
|
LockMemoryKB *prometheus.Desc
|
|
LockOwnerBlocks *prometheus.Desc
|
|
LockOwnerBlocksAllocated *prometheus.Desc
|
|
LogPoolMemoryKB *prometheus.Desc
|
|
MaximumWorkspaceMemoryKB *prometheus.Desc
|
|
MemoryGrantsOutstanding *prometheus.Desc
|
|
MemoryGrantsPending *prometheus.Desc
|
|
OptimizerMemoryKB *prometheus.Desc
|
|
ReservedServerMemoryKB *prometheus.Desc
|
|
SQLCacheMemoryKB *prometheus.Desc
|
|
StolenServerMemoryKB *prometheus.Desc
|
|
TargetServerMemoryKB *prometheus.Desc
|
|
TotalServerMemoryKB *prometheus.Desc
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerSQLStatistics
|
|
AutoParamAttemptsPersec *prometheus.Desc
|
|
BatchRequestsPersec *prometheus.Desc
|
|
FailedAutoParamsPersec *prometheus.Desc
|
|
ForcedParameterizationsPersec *prometheus.Desc
|
|
GuidedplanexecutionsPersec *prometheus.Desc
|
|
MisguidedplanexecutionsPersec *prometheus.Desc
|
|
SafeAutoParamsPersec *prometheus.Desc
|
|
SQLAttentionrate *prometheus.Desc
|
|
SQLCompilationsPersec *prometheus.Desc
|
|
SQLReCompilationsPersec *prometheus.Desc
|
|
|
|
UnsafeAutoParamsPersec *prometheus.Desc
|
|
|
|
mssqlInstances mssqlInstancesType
|
|
mssqlCollectors mssqlCollectorsMap
|
|
mssqlChildCollectorFailure int
|
|
}
|
|
|
|
// NewMSSQLCollector ...
|
|
func NewMSSQLCollector() (Collector, error) {
|
|
|
|
const subsystem = "mssql"
|
|
|
|
MSSQLCollector := MSSQLCollector{
|
|
// meta
|
|
mssqlScrapeDurationDesc: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "collector_duration_seconds"),
|
|
"wmi_exporter: Duration of an mssql child collection.",
|
|
[]string{"collector", "instance"},
|
|
nil,
|
|
),
|
|
mssqlScrapeSuccessDesc: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "collector_success"),
|
|
"wmi_exporter: Whether a mssql child collector was successful.",
|
|
[]string{"collector", "instance"},
|
|
nil,
|
|
),
|
|
// Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica
|
|
BytesReceivedfromReplicaPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_received_from_replica_bytes"),
|
|
"(AvailabilityReplica.BytesReceivedfromReplica)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
BytesSenttoReplicaPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sent_to_replica_bytes"),
|
|
"(AvailabilityReplica.BytesSenttoReplica)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
BytesSenttoTransportPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sent_to_transport_bytes"),
|
|
"(AvailabilityReplica.BytesSenttoTransport)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
FlowControlPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_initiated_flow_controls"),
|
|
"(AvailabilityReplica.FlowControl)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
FlowControlTimemsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_flow_control_wait_seconds"),
|
|
"(AvailabilityReplica.FlowControlTimems)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
ReceivesfromReplicaPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_receives_from_replica"),
|
|
"(AvailabilityReplica.ReceivesfromReplica)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
ResentMessagesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_resent_messages"),
|
|
"(AvailabilityReplica.ResentMessages)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
SendstoReplicaPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sends_to_replica"),
|
|
"(AvailabilityReplica.SendstoReplica)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
SendstoTransportPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "availreplica_sends_to_transport"),
|
|
"(AvailabilityReplica.SendstoTransport)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerBufferManager
|
|
BackgroundwriterpagesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_background_writer_pages"),
|
|
"(BufferManager.Backgroundwriterpages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Buffercachehitratio: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_hit_ratio"),
|
|
"(BufferManager.Buffercachehitratio)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
CheckpointpagesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_checkpoint_pages"),
|
|
"(BufferManager.Checkpointpages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Databasepages: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_database_pages"),
|
|
"(BufferManager.Databasepages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Extensionallocatedpages: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_allocated_pages"),
|
|
"(BufferManager.Extensionallocatedpages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Extensionfreepages: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_free_pages"),
|
|
"(BufferManager.Extensionfreepages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Extensioninuseaspercentage: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_in_use_as_percentage"),
|
|
"(BufferManager.Extensioninuseaspercentage)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ExtensionoutstandingIOcounter: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_outstanding_io"),
|
|
"(BufferManager.ExtensionoutstandingIOcounter)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ExtensionpageevictionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_evictions"),
|
|
"(BufferManager.Extensionpageevictions)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ExtensionpagereadsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_reads"),
|
|
"(BufferManager.Extensionpagereads)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Extensionpageunreferencedtime: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_unreferenced_seconds"),
|
|
"(BufferManager.Extensionpageunreferencedtime)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ExtensionpagewritesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_extension_page_writes"),
|
|
"(BufferManager.Extensionpagewrites)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
FreeliststallsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_free_list_stalls"),
|
|
"(BufferManager.Freeliststalls)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
IntegralControllerSlope: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_integral_controller_slope"),
|
|
"(BufferManager.IntegralControllerSlope)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LazywritesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_lazywrites"),
|
|
"(BufferManager.Lazywrites)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Pagelifeexpectancy: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_life_expectancy_seconds"),
|
|
"(BufferManager.Pagelifeexpectancy)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
PagelookupsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_lookups"),
|
|
"(BufferManager.Pagelookups)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
PagereadsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_reads"),
|
|
"(BufferManager.Pagereads)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
PagewritesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_page_writes"),
|
|
"(BufferManager.Pagewrites)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ReadaheadpagesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_read_ahead_pages"),
|
|
"(BufferManager.Readaheadpages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ReadaheadtimePersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_read_ahead_issuing_seconds"),
|
|
"(BufferManager.Readaheadtime)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Targetpages: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bufman_target_pages"),
|
|
"(BufferManager.Targetpages)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerDatabaseReplica
|
|
DatabaseFlowControlDelay: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_database_flow_control_wait_seconds"),
|
|
"(DatabaseReplica.DatabaseFlowControlDelay)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
DatabaseFlowControlsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_database_initiated_flow_controls"),
|
|
"(DatabaseReplica.DatabaseFlowControls)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
FileBytesReceivedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_received_file_bytes"),
|
|
"(DatabaseReplica.FileBytesReceived)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
GroupCommitsPerSec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_group_commits"),
|
|
"(DatabaseReplica.GroupCommits)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
GroupCommitTime: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_group_commit_stall_seconds"),
|
|
"(DatabaseReplica.GroupCommitTime)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogApplyPendingQueue: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_apply_pending_queue"),
|
|
"(DatabaseReplica.LogApplyPendingQueue)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogApplyReadyQueue: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_apply_ready_queue"),
|
|
"(DatabaseReplica.LogApplyReadyQueue)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogBytesCompressedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compressed_bytes"),
|
|
"(DatabaseReplica.LogBytesCompressed)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogBytesDecompressedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_decompressed_bytes"),
|
|
"(DatabaseReplica.LogBytesDecompressed)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogBytesReceivedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_received_bytes"),
|
|
"(DatabaseReplica.LogBytesReceived)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogCompressionCachehitsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compression_cachehits"),
|
|
"(DatabaseReplica.LogCompressionCachehits)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogCompressionCachemissesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compression_cachemisses"),
|
|
"(DatabaseReplica.LogCompressionCachemisses)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogCompressionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_compressions"),
|
|
"(DatabaseReplica.LogCompressions)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogDecompressionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_decompressions"),
|
|
"(DatabaseReplica.LogDecompressions)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
Logremainingforundo: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_remaining_for_undo"),
|
|
"(DatabaseReplica.Logremainingforundo)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
LogSendQueue: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_log_send_queue"),
|
|
"(DatabaseReplica.LogSendQueue)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
MirroredWriteTransactionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_mirrored_write_transactions"),
|
|
"(DatabaseReplica.MirroredWriteTransactions)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
RecoveryQueue: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_recovery_queue_records"),
|
|
"(DatabaseReplica.RecoveryQueue)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
RedoblockedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redo_blocks"),
|
|
"(DatabaseReplica.Redoblocked)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
RedoBytesRemaining: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redo_remaining_bytes"),
|
|
"(DatabaseReplica.RedoBytesRemaining)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
RedoneBytesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redone_bytes"),
|
|
"(DatabaseReplica.RedoneBytes)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
RedonesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_redones"),
|
|
"(DatabaseReplica.Redones)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
TotalLogrequiringundo: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_total_log_requiring_undo"),
|
|
"(DatabaseReplica.TotalLogrequiringundo)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
TransactionDelay: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dbreplica_transaction_delay_seconds"),
|
|
"(DatabaseReplica.TransactionDelay)",
|
|
[]string{"instance", "replica"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerDatabases
|
|
ActiveTransactions: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_active_transactions"),
|
|
"(Databases.ActiveTransactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
BackupPerRestoreThroughputPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_backup_restore_operations"),
|
|
"(Databases.BackupPerRestoreThroughput)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
BulkCopyRowsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_bulk_copy_rows"),
|
|
"(Databases.BulkCopyRows)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
BulkCopyThroughputPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_bulk_copy_bytes"),
|
|
"(Databases.BulkCopyThroughput)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
Committableentries: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_commit_table_entries"),
|
|
"(Databases.Committableentries)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
DataFilesSizeKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_data_files_size_bytes"),
|
|
"(Databases.DataFilesSizeKB)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
DBCCLogicalScanBytesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_dbcc_logical_scan_bytes"),
|
|
"(Databases.DBCCLogicalScanBytes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
GroupCommitTimePersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_group_commit_stall_seconds"),
|
|
"(Databases.GroupCommitTime)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogBytesFlushedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flushed_bytes"),
|
|
"(Databases.LogBytesFlushed)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogCacheHitRatio: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_hit_ratio"),
|
|
"(Databases.LogCacheHitRatio)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogCacheReadsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_reads"),
|
|
"(Databases.LogCacheReads)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFilesSizeKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_files_size_bytes"),
|
|
"(Databases.LogFilesSizeKB)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFilesUsedSizeKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_files_used_size_bytes"),
|
|
"(Databases.LogFilesUsedSizeKB)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFlushesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flushes"),
|
|
"(Databases.LogFlushes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFlushWaitsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_waits"),
|
|
"(Databases.LogFlushWaits)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFlushWaitTime: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_wait_seconds"),
|
|
"(Databases.LogFlushWaitTime)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogFlushWriteTimems: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_flush_write_seconds"),
|
|
"(Databases.LogFlushWriteTimems)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogGrowths: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_growths"),
|
|
"(Databases.LogGrowths)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolCacheMissesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_cache_misses"),
|
|
"(Databases.LogPoolCacheMisses)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolDiskReadsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_disk_reads"),
|
|
"(Databases.LogPoolDiskReads)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolHashDeletesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_hash_deletes"),
|
|
"(Databases.LogPoolHashDeletes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolHashInsertsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_hash_inserts"),
|
|
"(Databases.LogPoolHashInserts)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolInvalidHashEntryPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_invalid_hash_entries"),
|
|
"(Databases.LogPoolInvalidHashEntry)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolLogScanPushesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_log_scan_pushes"),
|
|
"(Databases.LogPoolLogScanPushes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolLogWriterPushesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_log_writer_pushes"),
|
|
"(Databases.LogPoolLogWriterPushes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolPushEmptyFreePoolPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_empty_free_pool_pushes"),
|
|
"(Databases.LogPoolPushEmptyFreePool)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolPushLowMemoryPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_low_memory_pushes"),
|
|
"(Databases.LogPoolPushLowMemory)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolPushNoFreeBufferPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_no_free_buffer_pushes"),
|
|
"(Databases.LogPoolPushNoFreeBuffer)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolReqBehindTruncPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_req_behind_trunc"),
|
|
"(Databases.LogPoolReqBehindTrunc)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolRequestsOldVLFPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_requests_old_vlf"),
|
|
"(Databases.LogPoolRequestsOldVLF)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolRequestsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_requests"),
|
|
"(Databases.LogPoolRequests)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolTotalActiveLogSize: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_total_active_log_bytes"),
|
|
"(Databases.LogPoolTotalActiveLogSize)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogPoolTotalSharedPoolSize: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_pool_total_shared_pool_bytes"),
|
|
"(Databases.LogPoolTotalSharedPoolSize)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogShrinks: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_shrinks"),
|
|
"(Databases.LogShrinks)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
LogTruncations: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_truncations"),
|
|
"(Databases.LogTruncations)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
PercentLogUsed: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_log_used_percent"),
|
|
"(Databases.PercentLogUsed)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
ReplPendingXacts: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_pending_repl_transactions"),
|
|
"(Databases.ReplPendingTransactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
ReplTransRate: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_repl_transactions"),
|
|
"(Databases.ReplTranactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
ShrinkDataMovementBytesPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_shrink_data_movement_bytes"),
|
|
"(Databases.ShrinkDataMovementBytes)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
TrackedtransactionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_tracked_transactions"),
|
|
"(Databases.Trackedtransactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
TransactionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_transactions"),
|
|
"(Databases.Transactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
WriteTransactionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_write_transactions"),
|
|
"(Databases.WriteTransactions)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
XTPControllerDLCLatencyPerFetch: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_dlc_fetch_latency_seconds"),
|
|
"(Databases.XTPControllerDLCLatencyPerFetch)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
XTPControllerDLCPeakLatency: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_dlc_peak_latency_seconds"),
|
|
"(Databases.XTPControllerDLCPeakLatency)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
XTPControllerLogProcessedPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_controller_log_processed_bytes"),
|
|
"(Databases.XTPControllerLogProcessed)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
XTPMemoryUsedKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "databases_xtp_memory_used_bytes"),
|
|
"(Databases.XTPMemoryUsedKB)",
|
|
[]string{"instance", "database"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerGeneralStatistics
|
|
ActiveTempTables: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_active_temp_tables"),
|
|
"(GeneralStatistics.ActiveTempTables)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ConnectionResetPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_connection_resets"),
|
|
"(GeneralStatistics.ConnectionReset)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
EventNotificationsDelayedDrop: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_event_notifications_delayed_drop"),
|
|
"(GeneralStatistics.EventNotificationsDelayedDrop)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
HTTPAuthenticatedRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_http_authenticated_requests"),
|
|
"(GeneralStatistics.HTTPAuthenticatedRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LogicalConnections: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_logical_connections"),
|
|
"(GeneralStatistics.LogicalConnections)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LoginsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_logins"),
|
|
"(GeneralStatistics.Logins)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LogoutsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_logouts"),
|
|
"(GeneralStatistics.Logouts)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
MarsDeadlocks: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_mars_deadlocks"),
|
|
"(GeneralStatistics.MarsDeadlocks)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Nonatomicyieldrate: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_non_atomic_yields"),
|
|
"(GeneralStatistics.Nonatomicyields)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Processesblocked: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstatss_blocked_processes"),
|
|
"(GeneralStatistics.Processesblocked)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPEmptyRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_empty_requests"),
|
|
"(GeneralStatistics.SOAPEmptyRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPMethodInvocations: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_method_invocations"),
|
|
"(GeneralStatistics.SOAPMethodInvocations)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPSessionInitiateRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_session_initiate_requests"),
|
|
"(GeneralStatistics.SOAPSessionInitiateRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPSessionTerminateRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soap_session_terminate_requests"),
|
|
"(GeneralStatistics.SOAPSessionTerminateRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPSQLRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soapsql_requests"),
|
|
"(GeneralStatistics.SOAPSQLRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SOAPWSDLRequests: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_soapwsdl_requests"),
|
|
"(GeneralStatistics.SOAPWSDLRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SQLTraceIOProviderLockWaits: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_sql_trace_io_provider_lock_waits"),
|
|
"(GeneralStatistics.SQLTraceIOProviderLockWaits)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Tempdbrecoveryunitid: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_tempdb_recovery_unit_ids_generated"),
|
|
"(GeneralStatistics.Tempdbrecoveryunitid)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Tempdbrowsetid: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_tempdb_rowset_ids_generated"),
|
|
"(GeneralStatistics.Tempdbrowsetid)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
TempTablesCreationRate: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_temp_tables_creations"),
|
|
"(GeneralStatistics.TempTablesCreations)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
TempTablesForDestruction: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_temp_tables_awaiting_destruction"),
|
|
"(GeneralStatistics.TempTablesForDestruction)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
TraceEventNotificationQueue: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_trace_event_notification_queue_size"),
|
|
"(GeneralStatistics.TraceEventNotificationQueue)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Transactions: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_transactions"),
|
|
"(GeneralStatistics.Transactions)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
UserConnections: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "genstats_user_connections"),
|
|
"(GeneralStatistics.UserConnections)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerLocks
|
|
AverageWaitTimems: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_average_wait_seconds"),
|
|
"(Locks.AverageWaitTimems)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
LockRequestsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_requests"),
|
|
"(Locks.LockRequests)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
LockTimeoutsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_timeouts"),
|
|
"(Locks.LockTimeouts)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
LockTimeoutstimeout0Persec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_timeouts_excluding_NOWAIT"),
|
|
"(Locks.LockTimeoutstimeout0)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
LockWaitsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_waits"),
|
|
"(Locks.LockWaits)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
LockWaitTimems: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_lock_wait_seconds"),
|
|
"(Locks.LockWaitTimems)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
NumberofDeadlocksPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "locks_deadlocks"),
|
|
"(Locks.NumberofDeadlocks)",
|
|
[]string{"instance", "resource"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerMemoryManager
|
|
ConnectionMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_connection_memory_bytes"),
|
|
"(MemoryManager.ConnectionMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
DatabaseCacheMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_database_cache_memory_bytes"),
|
|
"(MemoryManager.DatabaseCacheMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
Externalbenefitofmemory: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_external_benefit_of_memory"),
|
|
"(MemoryManager.Externalbenefitofmemory)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
FreeMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_free_memory_bytes"),
|
|
"(MemoryManager.FreeMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
GrantedWorkspaceMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_granted_workspace_memory_bytes"),
|
|
"(MemoryManager.GrantedWorkspaceMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LockBlocks: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_blocks"),
|
|
"(MemoryManager.LockBlocks)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LockBlocksAllocated: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_allocated_lock_blocks"),
|
|
"(MemoryManager.LockBlocksAllocated)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LockMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_memory_bytes"),
|
|
"(MemoryManager.LockMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LockOwnerBlocks: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_lock_owner_blocks"),
|
|
"(MemoryManager.LockOwnerBlocks)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LockOwnerBlocksAllocated: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_allocated_lock_owner_blocks"),
|
|
"(MemoryManager.LockOwnerBlocksAllocated)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
LogPoolMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_log_pool_memory_bytes"),
|
|
"(MemoryManager.LogPoolMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
MaximumWorkspaceMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_maximum_workspace_memory_bytes"),
|
|
"(MemoryManager.MaximumWorkspaceMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
MemoryGrantsOutstanding: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_outstanding_memory_grants"),
|
|
"(MemoryManager.MemoryGrantsOutstanding)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
MemoryGrantsPending: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_pending_memory_grants"),
|
|
"(MemoryManager.MemoryGrantsPending)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
OptimizerMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_optimizer_memory_bytes"),
|
|
"(MemoryManager.OptimizerMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ReservedServerMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_reserved_server_memory_bytes"),
|
|
"(MemoryManager.ReservedServerMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SQLCacheMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_sql_cache_memory_bytes"),
|
|
"(MemoryManager.SQLCacheMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
StolenServerMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_stolen_server_memory_bytes"),
|
|
"(MemoryManager.StolenServerMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
TargetServerMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_target_server_memory_bytes"),
|
|
"(MemoryManager.TargetServerMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
TotalServerMemoryKB: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "memmgr_total_server_memory_bytes"),
|
|
"(MemoryManager.TotalServerMemoryKB)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
|
|
// Win32_PerfRawData_{instance}_SQLServerSQLStatistics
|
|
AutoParamAttemptsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_auto_parameterization_attempts"),
|
|
"(SQLStatistics.AutoParamAttempts)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
BatchRequestsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_batch_requests"),
|
|
"(SQLStatistics.BatchRequests)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
FailedAutoParamsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_failed_auto_parameterization_attempts"),
|
|
"(SQLStatistics.FailedAutoParams)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
ForcedParameterizationsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_forced_parameterizations"),
|
|
"(SQLStatistics.ForcedParameterizations)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
GuidedplanexecutionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_guided_plan_executions"),
|
|
"(SQLStatistics.Guidedplanexecutions)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
MisguidedplanexecutionsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_misguided_plan_executions"),
|
|
"(SQLStatistics.Misguidedplanexecutions)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SafeAutoParamsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_safe_auto_parameterization_attempts"),
|
|
"(SQLStatistics.SafeAutoParams)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SQLAttentionrate: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_attentions"),
|
|
"(SQLStatistics.SQLAttentions)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SQLCompilationsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_compilations"),
|
|
"(SQLStatistics.SQLCompilations)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
SQLReCompilationsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_sql_recompilations"),
|
|
"(SQLStatistics.SQLReCompilations)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
UnsafeAutoParamsPersec: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "sqlstats_unsafe_auto_parameterization_attempts"),
|
|
"(SQLStatistics.UnsafeAutoParams)",
|
|
[]string{"instance"},
|
|
nil,
|
|
),
|
|
|
|
mssqlInstances: getMSSQLInstances(),
|
|
}
|
|
|
|
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(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error)
|
|
|
|
func (c *MSSQLCollector) execute(name string, fn mssqlCollectorFunc, ch chan<- prometheus.Metric, sqlInstance string, wg *sync.WaitGroup) {
|
|
defer wg.Done()
|
|
|
|
begin := time.Now()
|
|
_, err := fn(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(ch chan<- prometheus.Metric) error {
|
|
wg := sync.WaitGroup{}
|
|
|
|
enabled := mssqlExpandEnabledCollectors(*mssqlEnabledCollectors)
|
|
for sqlInstance := range c.mssqlInstances {
|
|
for _, name := range enabled {
|
|
function := c.mssqlCollectors[name]
|
|
|
|
wg.Add(1)
|
|
go c.execute(name, function, ch, sqlInstance, &wg)
|
|
}
|
|
}
|
|
wg.Wait()
|
|
|
|
// this shoud return an error if any? some? children errord.
|
|
if c.mssqlChildCollectorFailure > 0 {
|
|
return errors.New("at least one child collector failed")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerAvailabilityReplica struct {
|
|
Name string
|
|
BytesReceivedfromReplicaPersec uint64
|
|
BytesSenttoReplicaPersec uint64
|
|
BytesSenttoTransportPersec uint64
|
|
FlowControlPersec uint64
|
|
FlowControlTimemsPersec uint64
|
|
ReceivesfromReplicaPersec uint64
|
|
ResentMessagesPersec uint64
|
|
SendstoReplicaPersec uint64
|
|
SendstoTransportPersec uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectAvailabilityReplica(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerAvailabilityReplica
|
|
log.Debugf("mssql_availreplica collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerAvailabilityReplica", sqlInstance)
|
|
q := queryAllForClassWhere(&dst, class, `Name <> '_Total'`)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, v := range dst {
|
|
replicaName := v.Name
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BytesReceivedfromReplicaPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BytesReceivedfromReplicaPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BytesSenttoReplicaPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BytesSenttoReplicaPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BytesSenttoTransportPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BytesSenttoTransportPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FlowControlPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.FlowControlPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FlowControlTimemsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.FlowControlTimemsPersec)/1000.0,
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReceivesfromReplicaPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ReceivesfromReplicaPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ResentMessagesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ResentMessagesPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SendstoReplicaPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.SendstoReplicaPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SendstoTransportPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.SendstoTransportPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerBufferManager struct {
|
|
BackgroundwriterpagesPersec uint64
|
|
Buffercachehitratio uint64
|
|
CheckpointpagesPersec uint64
|
|
Databasepages uint64
|
|
Extensionallocatedpages uint64
|
|
Extensionfreepages uint64
|
|
Extensioninuseaspercentage uint64
|
|
ExtensionoutstandingIOcounter uint64
|
|
ExtensionpageevictionsPersec uint64
|
|
ExtensionpagereadsPersec uint64
|
|
Extensionpageunreferencedtime uint64
|
|
ExtensionpagewritesPersec uint64
|
|
FreeliststallsPersec uint64
|
|
IntegralControllerSlope uint64
|
|
LazywritesPersec uint64
|
|
Pagelifeexpectancy uint64
|
|
PagelookupsPersec uint64
|
|
PagereadsPersec uint64
|
|
PagewritesPersec uint64
|
|
ReadaheadpagesPersec uint64
|
|
ReadaheadtimePersec uint64
|
|
Targetpages uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectBufferManager(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerBufferManager
|
|
log.Debugf("mssql_bufman collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerBufferManager", sqlInstance)
|
|
q := queryAllForClass(&dst, class)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(dst) > 0 {
|
|
v := dst[0]
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BackgroundwriterpagesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BackgroundwriterpagesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Buffercachehitratio,
|
|
prometheus.GaugeValue,
|
|
float64(v.Buffercachehitratio),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.CheckpointpagesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.CheckpointpagesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Databasepages,
|
|
prometheus.GaugeValue,
|
|
float64(v.Databasepages),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Extensionallocatedpages,
|
|
prometheus.GaugeValue,
|
|
float64(v.Extensionallocatedpages),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Extensionfreepages,
|
|
prometheus.GaugeValue,
|
|
float64(v.Extensionfreepages),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Extensioninuseaspercentage,
|
|
prometheus.GaugeValue,
|
|
float64(v.Extensioninuseaspercentage),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ExtensionoutstandingIOcounter,
|
|
prometheus.GaugeValue,
|
|
float64(v.ExtensionoutstandingIOcounter),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ExtensionpageevictionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ExtensionpageevictionsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ExtensionpagereadsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ExtensionpagereadsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Extensionpageunreferencedtime,
|
|
prometheus.GaugeValue,
|
|
float64(v.Extensionpageunreferencedtime),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ExtensionpagewritesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ExtensionpagewritesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FreeliststallsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.FreeliststallsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.IntegralControllerSlope,
|
|
prometheus.GaugeValue,
|
|
float64(v.IntegralControllerSlope),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LazywritesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LazywritesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Pagelifeexpectancy,
|
|
prometheus.GaugeValue,
|
|
float64(v.Pagelifeexpectancy),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.PagelookupsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.PagelookupsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.PagereadsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.PagereadsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.PagewritesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.PagewritesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReadaheadpagesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ReadaheadpagesPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReadaheadtimePersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ReadaheadtimePersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Targetpages,
|
|
prometheus.GaugeValue,
|
|
float64(v.Targetpages),
|
|
sqlInstance,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerDatabaseReplica struct {
|
|
Name string
|
|
DatabaseFlowControlDelay uint64
|
|
DatabaseFlowControlsPersec uint64
|
|
FileBytesReceivedPersec uint64
|
|
GroupCommitsPerSec uint64
|
|
GroupCommitTime uint64
|
|
LogApplyPendingQueue uint64
|
|
LogApplyReadyQueue uint64
|
|
LogBytesCompressedPersec uint64
|
|
LogBytesDecompressedPersec uint64
|
|
LogBytesReceivedPersec uint64
|
|
LogCompressionCachehitsPersec uint64
|
|
LogCompressionCachemissesPersec uint64
|
|
LogCompressionsPersec uint64
|
|
LogDecompressionsPersec uint64
|
|
Logremainingforundo uint64
|
|
LogSendQueue uint64
|
|
MirroredWriteTransactionsPersec uint64
|
|
RecoveryQueue uint64
|
|
RedoblockedPersec uint64
|
|
RedoBytesRemaining uint64
|
|
RedoneBytesPersec uint64
|
|
RedonesPersec uint64
|
|
TotalLogrequiringundo uint64
|
|
TransactionDelay uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectDatabaseReplica(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerDatabaseReplica
|
|
log.Debugf("mssql_dbreplica collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerDatabaseReplica", sqlInstance)
|
|
q := queryAllForClassWhere(&dst, class, `Name <> '_Total'`)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, v := range dst {
|
|
replicaName := v.Name
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.DatabaseFlowControlDelay,
|
|
prometheus.GaugeValue,
|
|
float64(v.DatabaseFlowControlDelay),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.DatabaseFlowControlsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.DatabaseFlowControlsPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FileBytesReceivedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.FileBytesReceivedPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.GroupCommitsPerSec,
|
|
prometheus.CounterValue,
|
|
float64(v.GroupCommitsPerSec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.GroupCommitTime,
|
|
prometheus.GaugeValue,
|
|
float64(v.GroupCommitTime),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogApplyPendingQueue,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogApplyPendingQueue),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogApplyReadyQueue,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogApplyReadyQueue),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogBytesCompressedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogBytesCompressedPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogBytesDecompressedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogBytesDecompressedPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogBytesReceivedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogBytesReceivedPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogCompressionCachehitsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogCompressionCachehitsPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogCompressionCachemissesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogCompressionCachemissesPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogCompressionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogCompressionsPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogDecompressionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogDecompressionsPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Logremainingforundo,
|
|
prometheus.GaugeValue,
|
|
float64(v.Logremainingforundo),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogSendQueue,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogSendQueue),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MirroredWriteTransactionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.MirroredWriteTransactionsPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.RecoveryQueue,
|
|
prometheus.GaugeValue,
|
|
float64(v.RecoveryQueue),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.RedoblockedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.RedoblockedPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.RedoBytesRemaining,
|
|
prometheus.GaugeValue,
|
|
float64(v.RedoBytesRemaining),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.RedoneBytesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.RedoneBytesPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.RedonesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.RedonesPersec),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TotalLogrequiringundo,
|
|
prometheus.GaugeValue,
|
|
float64(v.TotalLogrequiringundo),
|
|
sqlInstance, replicaName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TransactionDelay,
|
|
prometheus.GaugeValue,
|
|
float64(v.TransactionDelay)*1000.0,
|
|
sqlInstance, replicaName,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerDatabases struct {
|
|
Name string
|
|
ActiveTransactions uint64
|
|
BackupPerRestoreThroughputPersec uint64
|
|
BulkCopyRowsPersec uint64
|
|
BulkCopyThroughputPersec uint64
|
|
Committableentries uint64
|
|
DataFilesSizeKB uint64
|
|
DBCCLogicalScanBytesPersec uint64
|
|
GroupCommitTimePersec uint64
|
|
LogBytesFlushedPersec uint64
|
|
LogCacheHitRatio uint64
|
|
LogCacheReadsPersec uint64
|
|
LogFilesSizeKB uint64
|
|
LogFilesUsedSizeKB uint64
|
|
LogFlushesPersec uint64
|
|
LogFlushWaitsPersec uint64
|
|
LogFlushWaitTime uint64
|
|
LogFlushWriteTimems uint64
|
|
LogGrowths uint64
|
|
LogPoolCacheMissesPersec uint64
|
|
LogPoolDiskReadsPersec uint64
|
|
LogPoolHashDeletesPersec uint64
|
|
LogPoolHashInsertsPersec uint64
|
|
LogPoolInvalidHashEntryPersec uint64
|
|
LogPoolLogScanPushesPersec uint64
|
|
LogPoolLogWriterPushesPersec uint64
|
|
LogPoolPushEmptyFreePoolPersec uint64
|
|
LogPoolPushLowMemoryPersec uint64
|
|
LogPoolPushNoFreeBufferPersec uint64
|
|
LogPoolReqBehindTruncPersec uint64
|
|
LogPoolRequestsOldVLFPersec uint64
|
|
LogPoolRequestsPersec uint64
|
|
LogPoolTotalActiveLogSize uint64
|
|
LogPoolTotalSharedPoolSize uint64
|
|
LogShrinks uint64
|
|
LogTruncations uint64
|
|
PercentLogUsed uint64
|
|
ReplPendingXacts uint64
|
|
ReplTransRate uint64
|
|
ShrinkDataMovementBytesPersec uint64
|
|
TrackedtransactionsPersec uint64
|
|
TransactionsPersec uint64
|
|
WriteTransactionsPersec uint64
|
|
XTPControllerDLCLatencyPerFetch uint64
|
|
XTPControllerDLCPeakLatency uint64
|
|
XTPControllerLogProcessedPersec uint64
|
|
XTPMemoryUsedKB uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectDatabases(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerDatabases
|
|
log.Debugf("mssql_databases collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerDatabases", sqlInstance)
|
|
|
|
q := queryAllForClassWhere(&dst, class, `Name <> '_Total'`)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, v := range dst {
|
|
dbName := v.Name
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ActiveTransactions,
|
|
prometheus.GaugeValue,
|
|
float64(v.ActiveTransactions),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BackupPerRestoreThroughputPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BackupPerRestoreThroughputPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BulkCopyRowsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BulkCopyRowsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BulkCopyThroughputPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BulkCopyThroughputPersec)*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Committableentries,
|
|
prometheus.GaugeValue,
|
|
float64(v.Committableentries),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.DataFilesSizeKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.DataFilesSizeKB*1024),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.DBCCLogicalScanBytesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.DBCCLogicalScanBytesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.GroupCommitTimePersec,
|
|
prometheus.CounterValue,
|
|
float64(v.GroupCommitTimePersec)/1000000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogBytesFlushedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogBytesFlushedPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogCacheHitRatio,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogCacheHitRatio),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogCacheReadsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogCacheReadsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFilesSizeKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogFilesSizeKB*1024),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFilesUsedSizeKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogFilesUsedSizeKB*1024),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFlushesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogFlushesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFlushWaitsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogFlushWaitsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFlushWaitTime,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogFlushWaitTime)/1000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogFlushWriteTimems,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogFlushWriteTimems)/1000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogGrowths,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogGrowths),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolCacheMissesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolCacheMissesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolDiskReadsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolDiskReadsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolHashDeletesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolHashDeletesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolHashInsertsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolHashInsertsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolInvalidHashEntryPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolInvalidHashEntryPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolLogScanPushesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolLogScanPushesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolLogWriterPushesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolLogWriterPushesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolPushEmptyFreePoolPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolPushEmptyFreePoolPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolPushLowMemoryPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolPushLowMemoryPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolPushNoFreeBufferPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolPushNoFreeBufferPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolReqBehindTruncPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolReqBehindTruncPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolRequestsOldVLFPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolRequestsOldVLFPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolRequestsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogPoolRequestsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolTotalActiveLogSize,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogPoolTotalActiveLogSize),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolTotalSharedPoolSize,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogPoolTotalSharedPoolSize),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogShrinks,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogShrinks),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogTruncations,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogTruncations),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.PercentLogUsed,
|
|
prometheus.GaugeValue,
|
|
float64(v.PercentLogUsed),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReplPendingXacts,
|
|
prometheus.GaugeValue,
|
|
float64(v.ReplPendingXacts),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReplTransRate,
|
|
prometheus.CounterValue,
|
|
float64(v.ReplTransRate),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ShrinkDataMovementBytesPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ShrinkDataMovementBytesPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TrackedtransactionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.TrackedtransactionsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TransactionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.TransactionsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.WriteTransactionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.WriteTransactionsPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.XTPControllerDLCLatencyPerFetch,
|
|
prometheus.GaugeValue,
|
|
float64(v.XTPControllerDLCLatencyPerFetch),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.XTPControllerDLCPeakLatency,
|
|
prometheus.GaugeValue,
|
|
float64(v.XTPControllerDLCPeakLatency)*1000000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.XTPControllerLogProcessedPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.XTPControllerLogProcessedPersec),
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.XTPMemoryUsedKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.XTPMemoryUsedKB*1024),
|
|
sqlInstance, dbName,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerGeneralStatistics struct {
|
|
ActiveTempTables uint64
|
|
ConnectionResetPersec uint64
|
|
EventNotificationsDelayedDrop uint64
|
|
HTTPAuthenticatedRequests uint64
|
|
LogicalConnections uint64
|
|
LoginsPersec uint64
|
|
LogoutsPersec uint64
|
|
MarsDeadlocks uint64
|
|
Nonatomicyieldrate uint64
|
|
Processesblocked uint64
|
|
SOAPEmptyRequests uint64
|
|
SOAPMethodInvocations uint64
|
|
SOAPSessionInitiateRequests uint64
|
|
SOAPSessionTerminateRequests uint64
|
|
SOAPSQLRequests uint64
|
|
SOAPWSDLRequests uint64
|
|
SQLTraceIOProviderLockWaits uint64
|
|
Tempdbrecoveryunitid uint64
|
|
Tempdbrowsetid uint64
|
|
TempTablesCreationRate uint64
|
|
TempTablesForDestruction uint64
|
|
TraceEventNotificationQueue uint64
|
|
Transactions uint64
|
|
UserConnections uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectGeneralStatistics(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerGeneralStatistics
|
|
log.Debugf("mssql_genstats collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerGeneralStatistics", sqlInstance)
|
|
q := queryAllForClass(&dst, class)
|
|
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(dst) > 0 {
|
|
v := dst[0]
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ActiveTempTables,
|
|
prometheus.GaugeValue,
|
|
float64(v.ActiveTempTables),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionResetPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ConnectionResetPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.EventNotificationsDelayedDrop,
|
|
prometheus.GaugeValue,
|
|
float64(v.EventNotificationsDelayedDrop),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.HTTPAuthenticatedRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.HTTPAuthenticatedRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogicalConnections,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogicalConnections),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LoginsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LoginsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogoutsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LogoutsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MarsDeadlocks,
|
|
prometheus.GaugeValue,
|
|
float64(v.MarsDeadlocks),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Nonatomicyieldrate,
|
|
prometheus.CounterValue,
|
|
float64(v.Nonatomicyieldrate),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Processesblocked,
|
|
prometheus.GaugeValue,
|
|
float64(v.Processesblocked),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPEmptyRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPEmptyRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPMethodInvocations,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPMethodInvocations),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPSessionInitiateRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPSessionInitiateRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPSessionTerminateRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPSessionTerminateRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPSQLRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPSQLRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SOAPWSDLRequests,
|
|
prometheus.GaugeValue,
|
|
float64(v.SOAPWSDLRequests),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SQLTraceIOProviderLockWaits,
|
|
prometheus.GaugeValue,
|
|
float64(v.SQLTraceIOProviderLockWaits),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Tempdbrecoveryunitid,
|
|
prometheus.GaugeValue,
|
|
float64(v.Tempdbrecoveryunitid),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Tempdbrowsetid,
|
|
prometheus.GaugeValue,
|
|
float64(v.Tempdbrowsetid),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TempTablesCreationRate,
|
|
prometheus.CounterValue,
|
|
float64(v.TempTablesCreationRate),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TempTablesForDestruction,
|
|
prometheus.GaugeValue,
|
|
float64(v.TempTablesForDestruction),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TraceEventNotificationQueue,
|
|
prometheus.GaugeValue,
|
|
float64(v.TraceEventNotificationQueue),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Transactions,
|
|
prometheus.GaugeValue,
|
|
float64(v.Transactions),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.UserConnections,
|
|
prometheus.GaugeValue,
|
|
float64(v.UserConnections),
|
|
sqlInstance,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerLocks struct {
|
|
Name string
|
|
AverageWaitTimems uint64
|
|
LockRequestsPersec uint64
|
|
LockTimeoutsPersec uint64
|
|
LockTimeoutstimeout0Persec uint64
|
|
LockWaitsPersec uint64
|
|
LockWaitTimems uint64
|
|
NumberofDeadlocksPersec uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectLocks(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerLocks
|
|
log.Debugf("mssql_locks collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerLocks", sqlInstance)
|
|
q := queryAllForClassWhere(&dst, class, `Name <> '_Total'`)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, v := range dst {
|
|
lockResourceName := v.Name
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.AverageWaitTimems,
|
|
prometheus.GaugeValue,
|
|
float64(v.AverageWaitTimems)/1000.0,
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockRequestsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LockRequestsPersec),
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockTimeoutsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LockTimeoutsPersec),
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockTimeoutstimeout0Persec,
|
|
prometheus.CounterValue,
|
|
float64(v.LockTimeoutstimeout0Persec),
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockWaitsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.LockWaitsPersec),
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockWaitTimems,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockWaitTimems)/1000.0,
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.NumberofDeadlocksPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.NumberofDeadlocksPersec),
|
|
sqlInstance, lockResourceName,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerMemoryManager struct {
|
|
ConnectionMemoryKB uint64
|
|
DatabaseCacheMemoryKB uint64
|
|
Externalbenefitofmemory uint64
|
|
FreeMemoryKB uint64
|
|
GrantedWorkspaceMemoryKB uint64
|
|
LockBlocks uint64
|
|
LockBlocksAllocated uint64
|
|
LockMemoryKB uint64
|
|
LockOwnerBlocks uint64
|
|
LockOwnerBlocksAllocated uint64
|
|
LogPoolMemoryKB uint64
|
|
MaximumWorkspaceMemoryKB uint64
|
|
MemoryGrantsOutstanding uint64
|
|
MemoryGrantsPending uint64
|
|
OptimizerMemoryKB uint64
|
|
ReservedServerMemoryKB uint64
|
|
SQLCacheMemoryKB uint64
|
|
StolenServerMemoryKB uint64
|
|
TargetServerMemoryKB uint64
|
|
TotalServerMemoryKB uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectMemoryManager(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerMemoryManager
|
|
log.Debugf("mssql_memmgr collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerMemoryManager", sqlInstance)
|
|
q := queryAllForClass(&dst, class)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(dst) > 0 {
|
|
v := dst[0]
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.ConnectionMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.DatabaseCacheMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.DatabaseCacheMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.Externalbenefitofmemory,
|
|
prometheus.GaugeValue,
|
|
float64(v.Externalbenefitofmemory),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FreeMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.FreeMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.GrantedWorkspaceMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.GrantedWorkspaceMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockBlocks,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockBlocks),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockBlocksAllocated,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockBlocksAllocated),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockOwnerBlocks,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockOwnerBlocks),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LockOwnerBlocksAllocated,
|
|
prometheus.GaugeValue,
|
|
float64(v.LockOwnerBlocksAllocated),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.LogPoolMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.LogPoolMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MaximumWorkspaceMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.MaximumWorkspaceMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MemoryGrantsOutstanding,
|
|
prometheus.GaugeValue,
|
|
float64(v.MemoryGrantsOutstanding),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MemoryGrantsPending,
|
|
prometheus.GaugeValue,
|
|
float64(v.MemoryGrantsPending),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.OptimizerMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.OptimizerMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ReservedServerMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.ReservedServerMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SQLCacheMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.SQLCacheMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.StolenServerMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.StolenServerMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TargetServerMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.TargetServerMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.TotalServerMemoryKB,
|
|
prometheus.GaugeValue,
|
|
float64(v.TotalServerMemoryKB*1024),
|
|
sqlInstance,
|
|
)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type win32PerfRawDataSQLServerSQLStatistics struct {
|
|
AutoParamAttemptsPersec uint64
|
|
BatchRequestsPersec uint64
|
|
FailedAutoParamsPersec uint64
|
|
ForcedParameterizationsPersec uint64
|
|
GuidedplanexecutionsPersec uint64
|
|
MisguidedplanexecutionsPersec uint64
|
|
SafeAutoParamsPersec uint64
|
|
SQLAttentionrate uint64
|
|
SQLCompilationsPersec uint64
|
|
SQLReCompilationsPersec uint64
|
|
UnsafeAutoParamsPersec uint64
|
|
}
|
|
|
|
func (c *MSSQLCollector) collectSQLStats(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
|
|
var dst []win32PerfRawDataSQLServerSQLStatistics
|
|
log.Debugf("mssql_sqlstats collector iterating sql instance %s.", sqlInstance)
|
|
|
|
class := fmt.Sprintf("Win32_PerfRawData_%s_SQLServerSQLStatistics", sqlInstance)
|
|
q := queryAllForClass(&dst, class)
|
|
if err := wmi.Query(q, &dst); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if len(dst) > 0 {
|
|
v := dst[0]
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.AutoParamAttemptsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.AutoParamAttemptsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.BatchRequestsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.BatchRequestsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FailedAutoParamsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.FailedAutoParamsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ForcedParameterizationsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.ForcedParameterizationsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.GuidedplanexecutionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.GuidedplanexecutionsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.MisguidedplanexecutionsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.MisguidedplanexecutionsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SafeAutoParamsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.SafeAutoParamsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SQLAttentionrate,
|
|
prometheus.CounterValue,
|
|
float64(v.SQLAttentionrate),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SQLCompilationsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.SQLCompilationsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.SQLReCompilationsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.SQLReCompilationsPersec),
|
|
sqlInstance,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.UnsafeAutoParamsPersec,
|
|
prometheus.CounterValue,
|
|
float64(v.UnsafeAutoParamsPersec),
|
|
sqlInstance,
|
|
)
|
|
}
|
|
|
|
return nil, nil
|
|
}
|