mirror of
https://github.com/prometheus-community/windows_exporter
synced 2025-02-16 03:57:37 +00:00
827 lines
28 KiB
Go
827 lines
28 KiB
Go
//go:build windows
|
|
|
|
package mssql
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
|
"github.com/prometheus-community/windows_exporter/internal/types"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
type collectorDatabases struct {
|
|
databasesPerfDataCollectors map[string]*perfdata.Collector
|
|
|
|
databasesActiveParallelRedoThreads *prometheus.Desc
|
|
databasesActiveTransactions *prometheus.Desc
|
|
databasesBackupPerRestoreThroughput *prometheus.Desc
|
|
databasesBulkCopyRows *prometheus.Desc
|
|
databasesBulkCopyThroughput *prometheus.Desc
|
|
databasesCommitTableEntries *prometheus.Desc
|
|
databasesDataFilesSizeKB *prometheus.Desc
|
|
databasesDBCCLogicalScanBytes *prometheus.Desc
|
|
databasesGroupCommitTime *prometheus.Desc
|
|
databasesLogBytesFlushed *prometheus.Desc
|
|
databasesLogCacheHits *prometheus.Desc
|
|
databasesLogCacheLookups *prometheus.Desc
|
|
databasesLogCacheReads *prometheus.Desc
|
|
databasesLogFilesSizeKB *prometheus.Desc
|
|
databasesLogFilesUsedSizeKB *prometheus.Desc
|
|
databasesLogFlushes *prometheus.Desc
|
|
databasesLogFlushWaits *prometheus.Desc
|
|
databasesLogFlushWaitTime *prometheus.Desc
|
|
databasesLogFlushWriteTimeMS *prometheus.Desc
|
|
databasesLogGrowths *prometheus.Desc
|
|
databasesLogPoolCacheMisses *prometheus.Desc
|
|
databasesLogPoolDiskReads *prometheus.Desc
|
|
databasesLogPoolHashDeletes *prometheus.Desc
|
|
databasesLogPoolHashInserts *prometheus.Desc
|
|
databasesLogPoolInvalidHashEntry *prometheus.Desc
|
|
databasesLogPoolLogScanPushes *prometheus.Desc
|
|
databasesLogPoolLogWriterPushes *prometheus.Desc
|
|
databasesLogPoolPushEmptyFreePool *prometheus.Desc
|
|
databasesLogPoolPushLowMemory *prometheus.Desc
|
|
databasesLogPoolPushNoFreeBuffer *prometheus.Desc
|
|
databasesLogPoolReqBehindTrunc *prometheus.Desc
|
|
databasesLogPoolRequestsOldVLF *prometheus.Desc
|
|
databasesLogPoolRequests *prometheus.Desc
|
|
databasesLogPoolTotalActiveLogSize *prometheus.Desc
|
|
databasesLogPoolTotalSharedPoolSize *prometheus.Desc
|
|
databasesLogShrinks *prometheus.Desc
|
|
databasesLogTruncations *prometheus.Desc
|
|
databasesPercentLogUsed *prometheus.Desc
|
|
databasesReplPendingXacts *prometheus.Desc
|
|
databasesReplTransRate *prometheus.Desc
|
|
databasesShrinkDataMovementBytes *prometheus.Desc
|
|
databasesTrackedTransactions *prometheus.Desc
|
|
databasesTransactions *prometheus.Desc
|
|
databasesWriteTransactions *prometheus.Desc
|
|
databasesXTPControllerDLCLatencyPerFetch *prometheus.Desc
|
|
databasesXTPControllerDLCPeakLatency *prometheus.Desc
|
|
databasesXTPControllerLogProcessed *prometheus.Desc
|
|
databasesXTPMemoryUsedKB *prometheus.Desc
|
|
}
|
|
|
|
const (
|
|
databasesActiveParallelRedoThreads = "Active parallel redo threads"
|
|
databasesActiveTransactions = "Active Transactions"
|
|
databasesBackupPerRestoreThroughputPerSec = "Backup/Restore Throughput/sec"
|
|
databasesBulkCopyRowsPerSec = "Bulk Copy Rows/sec"
|
|
databasesBulkCopyThroughputPerSec = "Bulk Copy Throughput/sec"
|
|
databasesCommitTableEntries = "Commit table entries"
|
|
databasesDataFilesSizeKB = "Data File(s) Size (KB)"
|
|
databasesDBCCLogicalScanBytesPerSec = "DBCC Logical Scan Bytes/sec"
|
|
databasesGroupCommitTimePerSec = "Group Commit Time/sec"
|
|
databasesLogBytesFlushedPerSec = "Log Bytes Flushed/sec"
|
|
databasesLogCacheHitRatio = "Log Cache Hit Ratio"
|
|
databasesLogCacheHitRatioBase = "Log Cache Hit Ratio Base"
|
|
databasesLogCacheReadsPerSec = "Log Cache Reads/sec"
|
|
databasesLogFilesSizeKB = "Log File(s) Size (KB)"
|
|
databasesLogFilesUsedSizeKB = "Log File(s) Used Size (KB)"
|
|
databasesLogFlushesPerSec = "Log Flushes/sec"
|
|
databasesLogFlushWaitsPerSec = "Log Flush Waits/sec"
|
|
databasesLogFlushWaitTime = "Log Flush Wait Time"
|
|
databasesLogFlushWriteTimeMS = "Log Flush Write Time (ms)"
|
|
databasesLogGrowths = "Log Growths"
|
|
databasesLogPoolCacheMissesPerSec = "Log Pool Cache Misses/sec"
|
|
databasesLogPoolDiskReadsPerSec = "Log Pool Disk Reads/sec"
|
|
databasesLogPoolHashDeletesPerSec = "Log Pool Hash Deletes/sec"
|
|
databasesLogPoolHashInsertsPerSec = "Log Pool Hash Inserts/sec"
|
|
databasesLogPoolInvalidHashEntryPerSec = "Log Pool Invalid Hash Entry/sec"
|
|
databasesLogPoolLogScanPushesPerSec = "Log Pool Log Scan Pushes/sec"
|
|
databasesLogPoolLogWriterPushesPerSec = "Log Pool LogWriter Pushes/sec"
|
|
databasesLogPoolPushEmptyFreePoolPerSec = "Log Pool Push Empty FreePool/sec"
|
|
databasesLogPoolPushLowMemoryPerSec = "Log Pool Push Low Memory/sec"
|
|
databasesLogPoolPushNoFreeBufferPerSec = "Log Pool Push No Free Buffer/sec"
|
|
databasesLogPoolReqBehindTruncPerSec = "Log Pool Req. Behind Trunc/sec"
|
|
databasesLogPoolRequestsOldVLFPerSec = "Log Pool Requests Old VLF/sec"
|
|
databasesLogPoolRequestsPerSec = "Log Pool Requests/sec"
|
|
databasesLogPoolTotalActiveLogSize = "Log Pool Total Active Log Size"
|
|
databasesLogPoolTotalSharedPoolSize = "Log Pool Total Shared Pool Size"
|
|
databasesLogShrinks = "Log Shrinks"
|
|
databasesLogTruncations = "Log Truncations"
|
|
databasesPercentLogUsed = "Percent Log Used"
|
|
databasesReplPendingXacts = "Repl. Pending Xacts"
|
|
databasesReplTransRate = "Repl. Trans. Rate"
|
|
databasesShrinkDataMovementBytesPerSec = "Shrink Data Movement Bytes/sec"
|
|
databasesTrackedTransactionsPerSec = "Tracked transactions/sec"
|
|
databasesTransactionsPerSec = "Transactions/sec"
|
|
databasesWriteTransactionsPerSec = "Write Transactions/sec"
|
|
databasesXTPControllerDLCLatencyPerFetch = "XTP Controller DLC Latency/Fetch"
|
|
databasesXTPControllerDLCPeakLatency = "XTP Controller DLC Peak Latency"
|
|
databasesXTPControllerLogProcessedPerSec = "XTP Controller Log Processed/sec"
|
|
databasesXTPMemoryUsedKB = "XTP Memory Used (KB)"
|
|
)
|
|
|
|
func (c *Collector) buildDatabases() error {
|
|
var err error
|
|
|
|
c.databasesPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
|
counters := []string{
|
|
databasesActiveParallelRedoThreads,
|
|
databasesActiveTransactions,
|
|
databasesBackupPerRestoreThroughputPerSec,
|
|
databasesBulkCopyRowsPerSec,
|
|
databasesBulkCopyThroughputPerSec,
|
|
databasesCommitTableEntries,
|
|
databasesDataFilesSizeKB,
|
|
databasesDBCCLogicalScanBytesPerSec,
|
|
databasesGroupCommitTimePerSec,
|
|
databasesLogBytesFlushedPerSec,
|
|
databasesLogCacheHitRatio,
|
|
databasesLogCacheHitRatioBase,
|
|
databasesLogCacheReadsPerSec,
|
|
databasesLogFilesSizeKB,
|
|
databasesLogFilesUsedSizeKB,
|
|
databasesLogFlushesPerSec,
|
|
databasesLogFlushWaitsPerSec,
|
|
databasesLogFlushWaitTime,
|
|
databasesLogFlushWriteTimeMS,
|
|
databasesLogGrowths,
|
|
databasesLogPoolCacheMissesPerSec,
|
|
databasesLogPoolDiskReadsPerSec,
|
|
databasesLogPoolHashDeletesPerSec,
|
|
databasesLogPoolHashInsertsPerSec,
|
|
databasesLogPoolInvalidHashEntryPerSec,
|
|
databasesLogPoolLogScanPushesPerSec,
|
|
databasesLogPoolLogWriterPushesPerSec,
|
|
databasesLogPoolPushEmptyFreePoolPerSec,
|
|
databasesLogPoolPushLowMemoryPerSec,
|
|
databasesLogPoolPushNoFreeBufferPerSec,
|
|
databasesLogPoolReqBehindTruncPerSec,
|
|
databasesLogPoolRequestsOldVLFPerSec,
|
|
databasesLogPoolRequestsPerSec,
|
|
databasesLogPoolTotalActiveLogSize,
|
|
databasesLogPoolTotalSharedPoolSize,
|
|
databasesLogShrinks,
|
|
databasesLogTruncations,
|
|
databasesPercentLogUsed,
|
|
databasesReplPendingXacts,
|
|
databasesReplTransRate,
|
|
databasesShrinkDataMovementBytesPerSec,
|
|
databasesTrackedTransactionsPerSec,
|
|
databasesTransactionsPerSec,
|
|
databasesWriteTransactionsPerSec,
|
|
databasesXTPControllerDLCLatencyPerFetch,
|
|
databasesXTPControllerDLCPeakLatency,
|
|
databasesXTPControllerLogProcessedPerSec,
|
|
databasesXTPMemoryUsedKB,
|
|
}
|
|
|
|
for sqlInstance := range c.mssqlInstances {
|
|
c.databasesPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Databases"), perfdata.InstanceAll, counters)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance, err)
|
|
}
|
|
}
|
|
|
|
c.databasesActiveParallelRedoThreads = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_active_parallel_redo_threads"),
|
|
"(Databases.ActiveParallelredothreads)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesActiveTransactions = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_active_transactions"),
|
|
"(Databases.ActiveTransactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesBackupPerRestoreThroughput = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_backup_restore_operations"),
|
|
"(Databases.BackupPerRestoreThroughput)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesBulkCopyRows = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_bulk_copy_rows"),
|
|
"(Databases.BulkCopyRows)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesBulkCopyThroughput = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_bulk_copy_bytes"),
|
|
"(Databases.BulkCopyThroughput)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesCommitTableEntries = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_commit_table_entries"),
|
|
"(Databases.Committableentries)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesDataFilesSizeKB = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_data_files_size_bytes"),
|
|
"(Databases.DataFilesSizeKB)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesDBCCLogicalScanBytes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_dbcc_logical_scan_bytes"),
|
|
"(Databases.DBCCLogicalScanBytes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesGroupCommitTime = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_group_commit_stall_seconds"),
|
|
"(Databases.GroupCommitTime)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogBytesFlushed = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_flushed_bytes"),
|
|
"(Databases.LogBytesFlushed)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogCacheHits = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_cache_hits"),
|
|
"(Databases.LogCacheHitRatio)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogCacheLookups = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_cache_lookups"),
|
|
"(Databases.LogCacheHitRatio_Base)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogCacheReads = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_cache_reads"),
|
|
"(Databases.LogCacheReads)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFilesSizeKB = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_files_size_bytes"),
|
|
"(Databases.LogFilesSizeKB)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFilesUsedSizeKB = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_files_used_size_bytes"),
|
|
"(Databases.LogFilesUsedSizeKB)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFlushes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_flushes"),
|
|
"(Databases.LogFlushes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFlushWaits = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_flush_waits"),
|
|
"(Databases.LogFlushWaits)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFlushWaitTime = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_flush_wait_seconds"),
|
|
"(Databases.LogFlushWaitTime)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogFlushWriteTimeMS = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_flush_write_seconds"),
|
|
"(Databases.LogFlushWriteTimems)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogGrowths = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_growths"),
|
|
"(Databases.LogGrowths)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolCacheMisses = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_cache_misses"),
|
|
"(Databases.LogPoolCacheMisses)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolDiskReads = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_disk_reads"),
|
|
"(Databases.LogPoolDiskReads)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolHashDeletes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_hash_deletes"),
|
|
"(Databases.LogPoolHashDeletes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolHashInserts = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_hash_inserts"),
|
|
"(Databases.LogPoolHashInserts)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolInvalidHashEntry = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_invalid_hash_entries"),
|
|
"(Databases.LogPoolInvalidHashEntry)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolLogScanPushes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_log_scan_pushes"),
|
|
"(Databases.LogPoolLogScanPushes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolLogWriterPushes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_log_writer_pushes"),
|
|
"(Databases.LogPoolLogWriterPushes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolPushEmptyFreePool = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_empty_free_pool_pushes"),
|
|
"(Databases.LogPoolPushEmptyFreePool)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolPushLowMemory = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_low_memory_pushes"),
|
|
"(Databases.LogPoolPushLowMemory)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolPushNoFreeBuffer = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_no_free_buffer_pushes"),
|
|
"(Databases.LogPoolPushNoFreeBuffer)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolReqBehindTrunc = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_req_behind_trunc"),
|
|
"(Databases.LogPoolReqBehindTrunc)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolRequestsOldVLF = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_requests_old_vlf"),
|
|
"(Databases.LogPoolRequestsOldVLF)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolRequests = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_requests"),
|
|
"(Databases.LogPoolRequests)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolTotalActiveLogSize = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_total_active_log_bytes"),
|
|
"(Databases.LogPoolTotalActiveLogSize)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogPoolTotalSharedPoolSize = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_pool_total_shared_pool_bytes"),
|
|
"(Databases.LogPoolTotalSharedPoolSize)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogShrinks = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_shrinks"),
|
|
"(Databases.LogShrinks)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesLogTruncations = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_truncations"),
|
|
"(Databases.LogTruncations)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesPercentLogUsed = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_log_used_percent"),
|
|
"(Databases.PercentLogUsed)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesReplPendingXacts = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_pending_repl_transactions"),
|
|
"(Databases.ReplPendingTransactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesReplTransRate = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_repl_transactions"),
|
|
"(Databases.ReplTranactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesShrinkDataMovementBytes = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_shrink_data_movement_bytes"),
|
|
"(Databases.ShrinkDataMovementBytes)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesTrackedTransactions = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_tracked_transactions"),
|
|
"(Databases.Trackedtransactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesTransactions = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_transactions"),
|
|
"(Databases.Transactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesWriteTransactions = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_write_transactions"),
|
|
"(Databases.WriteTransactions)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesXTPControllerDLCLatencyPerFetch = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_xtp_controller_dlc_fetch_latency_seconds"),
|
|
"(Databases.XTPControllerDLCLatencyPerFetch)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesXTPControllerDLCPeakLatency = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_xtp_controller_dlc_peak_latency_seconds"),
|
|
"(Databases.XTPControllerDLCPeakLatency)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesXTPControllerLogProcessed = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_xtp_controller_log_processed_bytes"),
|
|
"(Databases.XTPControllerLogProcessed)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
c.databasesXTPMemoryUsedKB = prometheus.NewDesc(
|
|
prometheus.BuildFQName(types.Namespace, Name, "databases_xtp_memory_used_bytes"),
|
|
"(Databases.XTPMemoryUsedKB)",
|
|
[]string{"mssql_instance", "database"},
|
|
nil,
|
|
)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Collector) collectDatabases(ch chan<- prometheus.Metric) error {
|
|
return c.collect(ch, subCollectorDatabases, c.databasesPerfDataCollectors, c.collectDatabasesInstance)
|
|
}
|
|
|
|
func (c *Collector) collectDatabasesInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
|
perfData, err := perfDataCollector.Collect()
|
|
if err != nil {
|
|
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err)
|
|
}
|
|
|
|
for dbName, data := range perfData {
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesActiveParallelRedoThreads,
|
|
prometheus.GaugeValue,
|
|
data[databasesActiveParallelRedoThreads].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesActiveTransactions,
|
|
prometheus.GaugeValue,
|
|
data[databasesActiveTransactions].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesBackupPerRestoreThroughput,
|
|
prometheus.CounterValue,
|
|
data[databasesBackupPerRestoreThroughputPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesBulkCopyRows,
|
|
prometheus.CounterValue,
|
|
data[databasesBulkCopyRowsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesBulkCopyThroughput,
|
|
prometheus.CounterValue,
|
|
data[databasesBulkCopyThroughputPerSec].FirstValue*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesCommitTableEntries,
|
|
prometheus.GaugeValue,
|
|
data[databasesCommitTableEntries].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesDataFilesSizeKB,
|
|
prometheus.GaugeValue,
|
|
data[databasesDataFilesSizeKB].FirstValue*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesDBCCLogicalScanBytes,
|
|
prometheus.CounterValue,
|
|
data[databasesDBCCLogicalScanBytesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesGroupCommitTime,
|
|
prometheus.CounterValue,
|
|
data[databasesGroupCommitTimePerSec].FirstValue/1000000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogBytesFlushed,
|
|
prometheus.CounterValue,
|
|
data[databasesLogBytesFlushedPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogCacheHits,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogCacheHitRatio].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogCacheLookups,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogCacheHitRatioBase].SecondValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogCacheReads,
|
|
prometheus.CounterValue,
|
|
data[databasesLogCacheReadsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFilesSizeKB,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogFilesSizeKB].FirstValue*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFilesUsedSizeKB,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogFilesUsedSizeKB].FirstValue*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFlushes,
|
|
prometheus.CounterValue,
|
|
data[databasesLogFlushesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFlushWaits,
|
|
prometheus.CounterValue,
|
|
data[databasesLogFlushWaitsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFlushWaitTime,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogFlushWaitTime].FirstValue/1000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogFlushWriteTimeMS,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogFlushWriteTimeMS].FirstValue/1000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogGrowths,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogGrowths].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolCacheMisses,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolCacheMissesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolDiskReads,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolDiskReadsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolHashDeletes,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolHashDeletesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolHashInserts,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolHashInsertsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolInvalidHashEntry,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolInvalidHashEntryPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolLogScanPushes,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolLogScanPushesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolLogWriterPushes,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolLogWriterPushesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolPushEmptyFreePool,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolPushEmptyFreePoolPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolPushLowMemory,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolPushLowMemoryPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolPushNoFreeBuffer,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolPushNoFreeBufferPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolReqBehindTrunc,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolReqBehindTruncPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolRequestsOldVLF,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolRequestsOldVLFPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolRequests,
|
|
prometheus.CounterValue,
|
|
data[databasesLogPoolRequestsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolTotalActiveLogSize,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogPoolTotalActiveLogSize].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogPoolTotalSharedPoolSize,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogPoolTotalSharedPoolSize].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogShrinks,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogShrinks].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesLogTruncations,
|
|
prometheus.GaugeValue,
|
|
data[databasesLogTruncations].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesPercentLogUsed,
|
|
prometheus.GaugeValue,
|
|
data[databasesPercentLogUsed].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesReplPendingXacts,
|
|
prometheus.GaugeValue,
|
|
data[databasesReplPendingXacts].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesReplTransRate,
|
|
prometheus.CounterValue,
|
|
data[databasesReplTransRate].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesShrinkDataMovementBytes,
|
|
prometheus.CounterValue,
|
|
data[databasesShrinkDataMovementBytesPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesTrackedTransactions,
|
|
prometheus.CounterValue,
|
|
data[databasesTrackedTransactionsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesTransactions,
|
|
prometheus.CounterValue,
|
|
data[databasesTransactionsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesWriteTransactions,
|
|
prometheus.CounterValue,
|
|
data[databasesWriteTransactionsPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesXTPControllerDLCLatencyPerFetch,
|
|
prometheus.GaugeValue,
|
|
data[databasesXTPControllerDLCLatencyPerFetch].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesXTPControllerDLCPeakLatency,
|
|
prometheus.GaugeValue,
|
|
data[databasesXTPControllerDLCPeakLatency].FirstValue*1000000.0,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesXTPControllerLogProcessed,
|
|
prometheus.CounterValue,
|
|
data[databasesXTPControllerLogProcessedPerSec].FirstValue,
|
|
sqlInstance, dbName,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.databasesXTPMemoryUsedKB,
|
|
prometheus.GaugeValue,
|
|
data[databasesXTPMemoryUsedKB].FirstValue*1024,
|
|
sqlInstance, dbName,
|
|
)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Collector) closeDatabases() {
|
|
for _, collector := range c.databasesPerfDataCollectors {
|
|
collector.Close()
|
|
}
|
|
}
|