mirror of
https://github.com/prometheus-community/windows_exporter.git
synced 2026-03-07 19:16:36 +00:00
feat: Tolerate collector failures (#1769)
Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
@@ -59,6 +59,7 @@ type Config struct {
|
||||
Port uint16 `yaml:"port"`
|
||||
}
|
||||
|
||||
//nolint:gochecknoglobals
|
||||
var ConfigDefaults = Config{
|
||||
CollectorsEnabled: []string{
|
||||
subCollectorAccessMethods,
|
||||
@@ -175,7 +176,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
|
||||
|
||||
fileVersion, productVersion, err := c.getMSSQLServerVersion(c.config.Port)
|
||||
if err != nil {
|
||||
logger.Warn("Failed to get MSSQL server version",
|
||||
logger.Warn("failed to get MSSQL server version",
|
||||
slog.Any("err", err),
|
||||
slog.String("collector", Name),
|
||||
)
|
||||
@@ -334,7 +335,7 @@ func (c *Collector) getMSSQLInstances() mssqlInstancesType {
|
||||
|
||||
k, err := registry.OpenKey(registry.LOCAL_MACHINE, regKey, registry.QUERY_VALUE)
|
||||
if err != nil {
|
||||
c.logger.Warn("Couldn't open registry to determine SQL instances",
|
||||
c.logger.Warn("couldn't open registry to determine SQL instances",
|
||||
slog.Any("err", err),
|
||||
)
|
||||
|
||||
@@ -343,7 +344,7 @@ func (c *Collector) getMSSQLInstances() mssqlInstancesType {
|
||||
|
||||
defer func(key registry.Key) {
|
||||
if err := key.Close(); err != nil {
|
||||
c.logger.Warn("Failed to close registry key",
|
||||
c.logger.Warn("failed to close registry key",
|
||||
slog.Any("err", err),
|
||||
)
|
||||
}
|
||||
@@ -351,7 +352,7 @@ func (c *Collector) getMSSQLInstances() mssqlInstancesType {
|
||||
|
||||
instanceNames, err := k.ReadValueNames(0)
|
||||
if err != nil {
|
||||
c.logger.Warn("Can't ReadSubKeyNames",
|
||||
c.logger.Warn("can't ReadSubKeyNames",
|
||||
slog.Any("err", err),
|
||||
)
|
||||
|
||||
@@ -364,7 +365,7 @@ func (c *Collector) getMSSQLInstances() mssqlInstancesType {
|
||||
}
|
||||
}
|
||||
|
||||
c.logger.Debug(fmt.Sprintf("Detected MSSQL Instances: %#v\n", sqlInstances))
|
||||
c.logger.Debug(fmt.Sprintf("detected MSSQL Instances: %#v\n", sqlInstances))
|
||||
|
||||
return sqlInstances
|
||||
}
|
||||
@@ -401,23 +402,23 @@ func (c *Collector) collect(
|
||||
begin := time.Now()
|
||||
success := 1.0
|
||||
err := collectFn(ch, sqlInstance, perfDataCollector)
|
||||
duration := time.Since(begin).Seconds()
|
||||
duration := time.Since(begin)
|
||||
|
||||
if err != nil {
|
||||
if err != nil && !errors.Is(err, perfdata.ErrNoData) {
|
||||
errs = append(errs, err)
|
||||
success = 0.0
|
||||
|
||||
c.logger.Error(fmt.Sprintf("mssql class collector %s failed after %fs", collector, duration),
|
||||
c.logger.Error(fmt.Sprintf("mssql class collector %s for instance %s failed after %s", collector, sqlInstance, duration),
|
||||
slog.Any("err", err),
|
||||
)
|
||||
} else {
|
||||
c.logger.Debug(fmt.Sprintf("mssql class collector %s succeeded after %fs.", collector, duration))
|
||||
c.logger.Debug(fmt.Sprintf("mssql class collector %s for instance %s succeeded after %s.", collector, sqlInstance, duration))
|
||||
}
|
||||
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
c.mssqlScrapeDurationDesc,
|
||||
prometheus.GaugeValue,
|
||||
duration,
|
||||
duration.Seconds(),
|
||||
collector, sqlInstance,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -123,6 +124,7 @@ func (c *Collector) buildAccessMethods() error {
|
||||
var err error
|
||||
|
||||
c.accessMethodsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
accessMethodsAUCleanupbatchesPerSec,
|
||||
accessMethodsAUCleanupsPerSec,
|
||||
@@ -173,7 +175,7 @@ func (c *Collector) buildAccessMethods() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.accessMethodsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Access Methods"), nil, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create AccessMethods collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create AccessMethods collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -443,7 +445,7 @@ func (c *Collector) buildAccessMethods() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectAccessMethods(ch chan<- prometheus.Metric) error {
|
||||
@@ -451,6 +453,10 @@ func (c *Collector) collectAccessMethods(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectAccessMethodsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "AccessMethods"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -54,6 +55,7 @@ func (c *Collector) buildAvailabilityReplica() error {
|
||||
var err error
|
||||
|
||||
c.availabilityReplicaPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
availReplicaBytesReceivedFromReplicaPerSec,
|
||||
availReplicaBytesSentToReplicaPerSec,
|
||||
@@ -69,7 +71,7 @@ func (c *Collector) buildAvailabilityReplica() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.availabilityReplicaPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Availability Replica collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Availability Replica collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,7 +131,7 @@ func (c *Collector) buildAvailabilityReplica() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectAvailabilityReplica(ch chan<- prometheus.Metric) error {
|
||||
@@ -137,6 +139,10 @@ func (c *Collector) collectAvailabilityReplica(ch chan<- prometheus.Metric) erro
|
||||
}
|
||||
|
||||
func (c *Collector) collectAvailabilityReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -81,6 +82,7 @@ func (c *Collector) buildBufferManager() error {
|
||||
var err error
|
||||
|
||||
c.bufManPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
bufManBackgroundWriterPagesPerSec,
|
||||
bufManBufferCacheHitRatio,
|
||||
@@ -110,7 +112,7 @@ func (c *Collector) buildBufferManager() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.bufManPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), nil, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Buffer Manager collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Buffer Manager collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,7 +255,7 @@ func (c *Collector) buildBufferManager() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectBufferManager(ch chan<- prometheus.Metric) error {
|
||||
@@ -261,6 +263,10 @@ func (c *Collector) collectBufferManager(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectBufferManagerInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -131,6 +132,7 @@ func (c *Collector) buildDatabases() error {
|
||||
var err error
|
||||
|
||||
c.databasesPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
databasesActiveParallelRedoThreads,
|
||||
databasesActiveTransactions,
|
||||
@@ -185,7 +187,7 @@ func (c *Collector) buildDatabases() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.databasesPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Databases"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -478,7 +480,7 @@ func (c *Collector) buildDatabases() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectDatabases(ch chan<- prometheus.Metric) error {
|
||||
@@ -486,6 +488,10 @@ func (c *Collector) collectDatabases(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectDatabasesInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Databases"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -83,6 +84,7 @@ func (c *Collector) buildDatabaseReplica() error {
|
||||
var err error
|
||||
|
||||
c.dbReplicaPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
dbReplicaDatabaseFlowControlDelay,
|
||||
dbReplicaDatabaseFlowControlsPerSec,
|
||||
@@ -113,7 +115,7 @@ func (c *Collector) buildDatabaseReplica() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.dbReplicaPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +265,7 @@ func (c *Collector) buildDatabaseReplica() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectDatabaseReplica(ch chan<- prometheus.Metric) error {
|
||||
@@ -271,6 +273,10 @@ func (c *Collector) collectDatabaseReplica(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectDatabaseReplicaInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -83,6 +84,7 @@ func (c *Collector) buildGeneralStatistics() error {
|
||||
var err error
|
||||
|
||||
c.genStatsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
genStatsActiveTempTables,
|
||||
genStatsConnectionResetPerSec,
|
||||
@@ -113,7 +115,7 @@ func (c *Collector) buildGeneralStatistics() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.genStatsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), nil, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create General Statistics collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create General Statistics collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +265,7 @@ func (c *Collector) buildGeneralStatistics() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectGeneralStatistics(ch chan<- prometheus.Metric) error {
|
||||
@@ -271,6 +273,10 @@ func (c *Collector) collectGeneralStatistics(ch chan<- prometheus.Metric) error
|
||||
}
|
||||
|
||||
func (c *Collector) collectGeneralStatisticsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -52,6 +53,7 @@ func (c *Collector) buildLocks() error {
|
||||
var err error
|
||||
|
||||
c.locksPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
locksAverageWaitTimeMS,
|
||||
locksAverageWaitTimeMSBase,
|
||||
@@ -66,7 +68,7 @@ func (c *Collector) buildLocks() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.locksPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Locks"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,7 +121,7 @@ func (c *Collector) buildLocks() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectLocks(ch chan<- prometheus.Metric) error {
|
||||
@@ -127,6 +129,10 @@ func (c *Collector) collectLocks(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectLocksInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Locks"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -75,6 +76,7 @@ func (c *Collector) buildMemoryManager() error {
|
||||
var err error
|
||||
|
||||
c.memMgrPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
memMgrConnectionMemoryKB,
|
||||
memMgrDatabaseCacheMemoryKB,
|
||||
@@ -101,7 +103,7 @@ func (c *Collector) buildMemoryManager() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.memMgrPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Memory Manager collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,7 +228,7 @@ func (c *Collector) buildMemoryManager() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectMemoryManager(ch chan<- prometheus.Metric) error {
|
||||
@@ -234,6 +236,10 @@ func (c *Collector) collectMemoryManager(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectMemoryManagerInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -38,6 +39,7 @@ func (c *Collector) buildSQLErrors() error {
|
||||
var err error
|
||||
|
||||
c.genStatsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
sqlErrorsErrorsPerSec,
|
||||
}
|
||||
@@ -45,7 +47,7 @@ func (c *Collector) buildSQLErrors() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.genStatsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create SQL Errors collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create SQL Errors collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +59,7 @@ func (c *Collector) buildSQLErrors() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectSQLErrors(ch chan<- prometheus.Metric) error {
|
||||
@@ -65,6 +67,10 @@ func (c *Collector) collectSQLErrors(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectSQLErrorsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -57,6 +58,7 @@ func (c *Collector) buildSQLStats() error {
|
||||
var err error
|
||||
|
||||
c.genStatsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
sqlStatsAutoParamAttemptsPerSec,
|
||||
sqlStatsBatchRequestsPerSec,
|
||||
@@ -74,7 +76,7 @@ func (c *Collector) buildSQLStats() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.genStatsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), nil, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create SQL Statistics collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create SQL Statistics collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,7 +147,7 @@ func (c *Collector) buildSQLStats() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectSQLStats(ch chan<- prometheus.Metric) error {
|
||||
@@ -153,6 +155,10 @@ func (c *Collector) collectSQLStats(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectSQLStatsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -61,6 +62,7 @@ func (c *Collector) buildTransactions() error {
|
||||
var err error
|
||||
|
||||
c.transactionsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
transactionsFreeSpaceintempdbKB,
|
||||
transactionsLongestTransactionRunningTime,
|
||||
@@ -80,7 +82,7 @@ func (c *Collector) buildTransactions() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.transactionsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), nil, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Transactions collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Transactions collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +165,7 @@ func (c *Collector) buildTransactions() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectTransactions(ch chan<- prometheus.Metric) error {
|
||||
@@ -173,6 +175,10 @@ func (c *Collector) collectTransactions(ch chan<- prometheus.Metric) error {
|
||||
// Win32_PerfRawData_MSSQLSERVER_Transactions docs:
|
||||
// - https://docs.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-transactions-object
|
||||
func (c *Collector) collectTransactionsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), err)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package mssql
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/prometheus-community/windows_exporter/internal/perfdata"
|
||||
@@ -59,6 +60,7 @@ func (c *Collector) buildWaitStats() error {
|
||||
var err error
|
||||
|
||||
c.waitStatsPerfDataCollectors = make(map[string]*perfdata.Collector, len(c.mssqlInstances))
|
||||
errs := make([]error, 0, len(c.mssqlInstances))
|
||||
counters := []string{
|
||||
waitStatsLockWaits,
|
||||
waitStatsMemoryGrantQueueWaits,
|
||||
@@ -77,7 +79,7 @@ func (c *Collector) buildWaitStats() error {
|
||||
for sqlInstance := range c.mssqlInstances {
|
||||
c.waitStatsPerfDataCollectors[sqlInstance], err = perfdata.NewCollector(c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), perfdata.InstancesAll, counters)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create Wait Statistics collector for instance %s: %w", sqlInstance, err)
|
||||
errs = append(errs, fmt.Errorf("failed to create Wait Statistics collector for instance %s: %w", sqlInstance, err))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,7 +157,7 @@ func (c *Collector) buildWaitStats() error {
|
||||
nil,
|
||||
)
|
||||
|
||||
return nil
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
func (c *Collector) collectWaitStats(ch chan<- prometheus.Metric) error {
|
||||
@@ -163,6 +165,10 @@ func (c *Collector) collectWaitStats(ch chan<- prometheus.Metric) error {
|
||||
}
|
||||
|
||||
func (c *Collector) collectWaitStatsInstance(ch chan<- prometheus.Metric, sqlInstance string, perfDataCollector *perfdata.Collector) error {
|
||||
if perfDataCollector == nil {
|
||||
return types.ErrCollectorNotInitialized
|
||||
}
|
||||
|
||||
perfData, err := perfDataCollector.Collect()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to collect %s metrics: %w", c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), err)
|
||||
|
||||
Reference in New Issue
Block a user