Merge pull request #463 from secustor/implement-mssql-base-counters

WIP: Implement mssql base counters
This commit is contained in:
Calle Pettersson
2020-03-03 19:40:10 +01:00
committed by GitHub
2 changed files with 98 additions and 18 deletions

View File

@@ -179,7 +179,8 @@ type MSSQLCollector struct {
AccessMethodsUsedtreepagecookie *prometheus.Desc AccessMethodsUsedtreepagecookie *prometheus.Desc
AccessMethodsWorkfilesCreated *prometheus.Desc AccessMethodsWorkfilesCreated *prometheus.Desc
AccessMethodsWorktablesCreated *prometheus.Desc AccessMethodsWorktablesCreated *prometheus.Desc
AccessMethodsWorktablesFromCacheRatio *prometheus.Desc AccessMethodsWorktablesFromCacheHits *prometheus.Desc
AccessMethodsWorktablesFromCacheLookups *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica // Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica
AvailReplicaBytesReceivedfromReplica *prometheus.Desc AvailReplicaBytesReceivedfromReplica *prometheus.Desc
@@ -194,7 +195,8 @@ type MSSQLCollector struct {
// Win32_PerfRawData_{instance}_SQLServerBufferManager // Win32_PerfRawData_{instance}_SQLServerBufferManager
BufManBackgroundwriterpages *prometheus.Desc BufManBackgroundwriterpages *prometheus.Desc
BufManBuffercachehitratio *prometheus.Desc BufManBuffercachehits *prometheus.Desc
BufManBuffercachelookups *prometheus.Desc
BufManCheckpointpages *prometheus.Desc BufManCheckpointpages *prometheus.Desc
BufManDatabasepages *prometheus.Desc BufManDatabasepages *prometheus.Desc
BufManExtensionallocatedpages *prometheus.Desc BufManExtensionallocatedpages *prometheus.Desc
@@ -252,7 +254,8 @@ type MSSQLCollector struct {
DatabasesDBCCLogicalScanBytes *prometheus.Desc DatabasesDBCCLogicalScanBytes *prometheus.Desc
DatabasesGroupCommitTime *prometheus.Desc DatabasesGroupCommitTime *prometheus.Desc
DatabasesLogBytesFlushed *prometheus.Desc DatabasesLogBytesFlushed *prometheus.Desc
DatabasesLogCacheHitRatio *prometheus.Desc DatabasesLogCacheHits *prometheus.Desc
DatabasesLogCacheLookups *prometheus.Desc
DatabasesLogCacheReads *prometheus.Desc DatabasesLogCacheReads *prometheus.Desc
DatabasesLogFilesSizeKB *prometheus.Desc DatabasesLogFilesSizeKB *prometheus.Desc
DatabasesLogFilesUsedSizeKB *prometheus.Desc DatabasesLogFilesUsedSizeKB *prometheus.Desc
@@ -317,7 +320,8 @@ type MSSQLCollector struct {
GenStatsUserConnections *prometheus.Desc GenStatsUserConnections *prometheus.Desc
// Win32_PerfRawData_{instance}_SQLServerLocks // Win32_PerfRawData_{instance}_SQLServerLocks
LocksAverageWaitTimems *prometheus.Desc LocksWaitTime *prometheus.Desc
LocksCount *prometheus.Desc
LocksLockRequests *prometheus.Desc LocksLockRequests *prometheus.Desc
LocksLockTimeouts *prometheus.Desc LocksLockTimeouts *prometheus.Desc
LocksLockTimeoutstimeout0 *prometheus.Desc LocksLockTimeoutstimeout0 *prometheus.Desc
@@ -656,12 +660,18 @@ func NewMSSQLCollector() (Collector, error) {
[]string{"instance"}, []string{"instance"},
nil, nil,
), ),
AccessMethodsWorktablesFromCacheRatio: prometheus.NewDesc( AccessMethodsWorktablesFromCacheHits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_from_cache_ratio"), prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_from_cache_hits"),
"(AccessMethods.WorktablesFromCacheRatio)", "(AccessMethods.WorktablesFromCacheRatio)",
[]string{"instance"}, []string{"instance"},
nil, nil,
), ),
AccessMethodsWorktablesFromCacheLookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "accessmethods_worktables_from_cache_lookups"),
"(AccessMethods.WorktablesFromCacheRatio_Base)",
[]string{"instance"},
nil,
),
// Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica // Win32_PerfRawData_{instance}_SQLServerAvailabilityReplica
AvailReplicaBytesReceivedfromReplica: prometheus.NewDesc( AvailReplicaBytesReceivedfromReplica: prometheus.NewDesc(
@@ -726,12 +736,18 @@ func NewMSSQLCollector() (Collector, error) {
[]string{"instance"}, []string{"instance"},
nil, nil,
), ),
BufManBuffercachehitratio: prometheus.NewDesc( BufManBuffercachehits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_hit_ratio"), prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_hits"),
"(BufferManager.Buffercachehitratio)", "(BufferManager.Buffercachehitratio)",
[]string{"instance"}, []string{"instance"},
nil, nil,
), ),
BufManBuffercachelookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_buffer_cache_lookups"),
"(BufferManager.Buffercachehitratio_Base)",
[]string{"instance"},
nil,
),
BufManCheckpointpages: prometheus.NewDesc( BufManCheckpointpages: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "bufman_checkpoint_pages"), prometheus.BuildFQName(Namespace, subsystem, "bufman_checkpoint_pages"),
"(BufferManager.Checkpointpages)", "(BufferManager.Checkpointpages)",
@@ -1054,12 +1070,18 @@ func NewMSSQLCollector() (Collector, error) {
[]string{"instance", "database"}, []string{"instance", "database"},
nil, nil,
), ),
DatabasesLogCacheHitRatio: prometheus.NewDesc( DatabasesLogCacheHits: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_hit_ratio"), prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_hits"),
"(Databases.LogCacheHitRatio)", "(Databases.LogCacheHitRatio)",
[]string{"instance", "database"}, []string{"instance", "database"},
nil, nil,
), ),
DatabasesLogCacheLookups: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_lookups"),
"(Databases.LogCacheHitRatio_Base)",
[]string{"instance", "database"},
nil,
),
DatabasesLogCacheReads: prometheus.NewDesc( DatabasesLogCacheReads: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_reads"), prometheus.BuildFQName(Namespace, subsystem, "databases_log_cache_reads"),
"(Databases.LogCacheReads)", "(Databases.LogCacheReads)",
@@ -1424,9 +1446,15 @@ func NewMSSQLCollector() (Collector, error) {
), ),
// Win32_PerfRawData_{instance}_SQLServerLocks // Win32_PerfRawData_{instance}_SQLServerLocks
LocksAverageWaitTimems: prometheus.NewDesc( LocksWaitTime: prometheus.NewDesc(
prometheus.BuildFQName(Namespace, subsystem, "locks_average_wait_seconds"), prometheus.BuildFQName(Namespace, subsystem, "locks_wait_time_seconds"),
"(Locks.AverageWaitTimems)", "(Locks.AverageWaitTimems Total time in seconds which locks have been holding resources)",
[]string{"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{"instance", "resource"}, []string{"instance", "resource"},
nil, nil,
), ),
@@ -1863,6 +1891,7 @@ type win32PerfRawDataSQLServerAccessMethods struct {
WorkfilesCreatedPersec uint64 WorkfilesCreatedPersec uint64
WorktablesCreatedPersec uint64 WorktablesCreatedPersec uint64
WorktablesFromCacheRatio uint64 WorktablesFromCacheRatio uint64
WorktablesFromCacheRatio_Base uint64
} }
func (c *MSSQLCollector) collectAccessMethods(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) { func (c *MSSQLCollector) collectAccessMethods(ch chan<- prometheus.Metric, sqlInstance string) (*prometheus.Desc, error) {
@@ -2175,11 +2204,18 @@ func (c *MSSQLCollector) collectAccessMethods(ch chan<- prometheus.Metric, sqlIn
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorktablesFromCacheRatio, c.AccessMethodsWorktablesFromCacheHits,
prometheus.CounterValue, prometheus.CounterValue,
float64(v.WorktablesFromCacheRatio), float64(v.WorktablesFromCacheRatio),
sqlInstance, sqlInstance,
) )
ch <- prometheus.MustNewConstMetric(
c.AccessMethodsWorktablesFromCacheLookups,
prometheus.CounterValue,
float64(v.WorktablesFromCacheRatio_Base),
sqlInstance,
)
return nil, nil return nil, nil
} }
@@ -2282,6 +2318,7 @@ func (c *MSSQLCollector) collectAvailabilityReplica(ch chan<- prometheus.Metric,
type win32PerfRawDataSQLServerBufferManager struct { type win32PerfRawDataSQLServerBufferManager struct {
BackgroundwriterpagesPersec uint64 BackgroundwriterpagesPersec uint64
Buffercachehitratio uint64 Buffercachehitratio uint64
Buffercachehitratio_Base uint64
CheckpointpagesPersec uint64 CheckpointpagesPersec uint64
Databasepages uint64 Databasepages uint64
Extensionallocatedpages uint64 Extensionallocatedpages uint64
@@ -2327,12 +2364,19 @@ func (c *MSSQLCollector) collectBufferManager(ch chan<- prometheus.Metric, sqlIn
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.BufManBuffercachehitratio, c.BufManBuffercachehits,
prometheus.GaugeValue, prometheus.GaugeValue,
float64(v.Buffercachehitratio), float64(v.Buffercachehitratio),
sqlInstance, sqlInstance,
) )
ch <- prometheus.MustNewConstMetric(
c.BufManBuffercachelookups,
prometheus.GaugeValue,
float64(v.Buffercachehitratio_Base),
sqlInstance,
)
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.BufManCheckpointpages, c.BufManCheckpointpages,
prometheus.CounterValue, prometheus.CounterValue,
@@ -2704,6 +2748,7 @@ type win32PerfRawDataSQLServerDatabases struct {
GroupCommitTimePersec uint64 GroupCommitTimePersec uint64
LogBytesFlushedPersec uint64 LogBytesFlushedPersec uint64
LogCacheHitRatio uint64 LogCacheHitRatio uint64
LogCacheHitRatio_Base uint64
LogCacheReadsPersec uint64 LogCacheReadsPersec uint64
LogFilesSizeKB uint64 LogFilesSizeKB uint64
LogFilesUsedSizeKB uint64 LogFilesUsedSizeKB uint64
@@ -2819,12 +2864,19 @@ func (c *MSSQLCollector) collectDatabases(ch chan<- prometheus.Metric, sqlInstan
) )
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheHitRatio, c.DatabasesLogCacheHits,
prometheus.GaugeValue, prometheus.GaugeValue,
float64(v.LogCacheHitRatio), float64(v.LogCacheHitRatio),
sqlInstance, dbName, sqlInstance, dbName,
) )
ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheLookups,
prometheus.GaugeValue,
float64(v.LogCacheHitRatio_Base),
sqlInstance, dbName,
)
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.DatabasesLogCacheReads, c.DatabasesLogCacheReads,
prometheus.CounterValue, prometheus.CounterValue,
@@ -3299,6 +3351,7 @@ func (c *MSSQLCollector) collectGeneralStatistics(ch chan<- prometheus.Metric, s
type win32PerfRawDataSQLServerLocks struct { type win32PerfRawDataSQLServerLocks struct {
Name string Name string
AverageWaitTimems uint64 AverageWaitTimems uint64
AverageWaitTimems_Base uint64
LockRequestsPersec uint64 LockRequestsPersec uint64
LockTimeoutsPersec uint64 LockTimeoutsPersec uint64
LockTimeoutstimeout0Persec uint64 LockTimeoutstimeout0Persec uint64
@@ -3321,12 +3374,19 @@ func (c *MSSQLCollector) collectLocks(ch chan<- prometheus.Metric, sqlInstance s
lockResourceName := v.Name lockResourceName := v.Name
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.LocksAverageWaitTimems, c.LocksWaitTime,
prometheus.GaugeValue, prometheus.GaugeValue,
float64(v.AverageWaitTimems)/1000.0, float64(v.AverageWaitTimems)/1000.0,
sqlInstance, lockResourceName, sqlInstance, lockResourceName,
) )
ch <- prometheus.MustNewConstMetric(
c.LocksCount,
prometheus.GaugeValue,
float64(v.AverageWaitTimems_Base)/1000.0,
sqlInstance, lockResourceName,
)
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.LocksLockRequests, c.LocksLockRequests,
prometheus.CounterValue, prometheus.CounterValue,

View File

@@ -249,7 +249,27 @@ Name | Description | Type | Labels
_This collector does not yet have explained examples, we would appreciate your help adding them!_ _This collector does not yet have explained examples, we would appreciate your help adding them!_
## Useful queries ## Useful queries
_This collector does not yet have any useful queries added, we would appreciate your help adding them!_
### Buffer Cache Hit Ratio
When you read the counter in perfmon you will get the the percentage pages found in the buffer cache. This percentage is calculated internally based on the total number of cache hits divided by the total number of cache lookups over the last few thousand page accesses.
This collector retrieves the two internal values separately. In order to calculate the Buffer Cache Hit Ratio in PromQL.
```
wmi_mssql_bufman_buffer_cache_hits{instance="host:9182", exported_instance="MSSQLSERVER"} /
wmi_mssql_bufman_buffer_cache_lookups{instance="host:9182", exported_instance="MSSQLSERVER"}
```
This principal can be used for following metrics too:
- AccessMethodsWorktablesFromCacheHitRatio
- accessmethods_worktables_from_cache_hits
- accessmethods_worktables_from_cache_lookups
- LogCacheHitRatio
- databases_log_cache_hits
- databases_log_cache_lookups
- AverageLockWaitTime
- locks_wait_time_seconds
- locks_count
## Alerting examples ## Alerting examples
_This collector does not yet have alerting examples, we would appreciate your help adding them!_ _This collector does not yet have alerting examples, we would appreciate your help adding them!_