From f1772a742f0adabff1d8290750ce43377d36be0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Sun, 7 Sep 2025 13:31:29 +0200 Subject: [PATCH] pdh: added logging, if PDH CStatus is not valid (#2203) --- internal/collector/ad/ad.go | 4 ++-- internal/collector/adcs/adcs.go | 4 ++-- internal/collector/adfs/adfs.go | 4 ++-- internal/collector/cache/cache.go | 4 ++-- internal/collector/cpu/cpu.go | 4 ++-- internal/collector/dfsr/dfsr.go | 6 +++--- internal/collector/dhcp/dhcp.go | 2 +- internal/collector/dns/dns.go | 8 ++++---- internal/collector/exchange/exchange.go | 5 ++++- .../collector/exchange/exchange_active_sync.go | 2 +- .../exchange/exchange_ad_access_processes.go | 2 +- .../collector/exchange/exchange_autodiscover.go | 2 +- .../exchange/exchange_availability_service.go | 2 +- .../collector/exchange/exchange_http_proxy.go | 2 +- .../exchange/exchange_mapi_http_emsmdb.go | 2 +- .../exchange/exchange_outlook_web_access.go | 2 +- .../exchange/exchange_rpc_client_access.go | 2 +- .../exchange/exchange_transport_queues.go | 2 +- .../exchange/exchange_workload_management.go | 2 +- internal/collector/gpu/gpu.go | 12 ++++++------ internal/collector/hyperv/hyperv.go | 6 ++++-- internal/collector/hyperv/hyperv_datastore.go | 2 +- .../hyperv/hyperv_dynamic_memory_balancer.go | 2 +- .../collector/hyperv/hyperv_dynamic_memory_vm.go | 2 +- .../hyperv/hyperv_hypervisor_logical_processor.go | 2 +- .../hyperv/hyperv_hypervisor_root_partition.go | 2 +- .../hyperv_hypervisor_root_virtual_processor.go | 2 +- .../hyperv/hyperv_hypervisor_virtual_processor.go | 2 +- .../hyperv/hyperv_legacy_network_adapter.go | 2 +- .../hyperv_virtual_machine_health_summary.go | 2 +- .../hyperv_virtual_machine_vid_partition.go | 2 +- .../hyperv/hyperv_virtual_network_adapter.go | 2 +- ...hyperv_virtual_network_adapter_drop_reasons.go | 2 +- internal/collector/hyperv/hyperv_virtual_smb.go | 2 +- .../hyperv/hyperv_virtual_storage_device.go | 2 +- .../collector/hyperv/hyperv_virtual_switch.go | 2 +- internal/collector/iis/iis_app_pool_was.go | 2 +- .../iis/iis_http_service_request_queues.go | 2 +- internal/collector/iis/iis_w3svc_w3wp.go | 4 ++-- internal/collector/iis/iis_web_service.go | 2 +- internal/collector/iis/iis_web_service_cache.go | 2 +- internal/collector/logical_disk/logical_disk.go | 2 +- internal/collector/memory/memory.go | 4 ++-- internal/collector/msmq/msmq.go | 4 ++-- internal/collector/mssql/mssql_access_methods.go | 2 +- .../collector/mssql/mssql_availability_replica.go | 2 +- internal/collector/mssql/mssql_buffer_manager.go | 2 +- internal/collector/mssql/mssql_database.go | 4 ++-- .../collector/mssql/mssql_database_replica.go | 2 +- .../collector/mssql/mssql_general_statistics.go | 2 +- internal/collector/mssql/mssql_locks.go | 2 +- internal/collector/mssql/mssql_memory_manager.go | 2 +- internal/collector/mssql/mssql_sql_errors.go | 2 +- internal/collector/mssql/mssql_sql_stats.go | 2 +- internal/collector/mssql/mssql_transactions.go | 2 +- internal/collector/mssql/mssql_wait_stats.go | 2 +- internal/collector/net/net.go | 2 +- internal/collector/nps/nps.go | 6 +++--- internal/collector/pagefile/pagefile.go | 4 ++-- .../performancecounter/performancecounter.go | 2 +- internal/collector/physical_disk/physical_disk.go | 4 ++-- internal/collector/process/process.go | 4 ++-- internal/collector/remote_fx/remote_fx.go | 6 +++--- internal/collector/smb/smb.go | 4 ++-- internal/collector/smbclient/smbclient.go | 4 ++-- internal/collector/smtp/smtp.go | 2 +- internal/collector/system/system.go | 4 ++-- internal/collector/tcp/tcp.go | 6 +++--- .../terminal_services/terminal_services.go | 4 ++-- internal/collector/thermalzone/thermalzone.go | 4 ++-- internal/collector/time/time.go | 2 +- internal/collector/udp/udp.go | 6 +++--- internal/collector/vmware/vmware.go | 6 +++--- internal/pdh/collector.go | 15 ++++++++++++--- internal/pdh/collector_bench_test.go | 3 ++- internal/pdh/collector_test.go | 3 ++- 76 files changed, 132 insertions(+), 116 deletions(-) diff --git a/internal/collector/ad/ad.go b/internal/collector/ad/ad.go index c3f3b142..43747d2c 100644 --- a/internal/collector/ad/ad.go +++ b/internal/collector/ad/ad.go @@ -131,7 +131,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.addressBookOperationsTotal = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "address_book_operations_total"), "", @@ -508,7 +508,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "DirectoryServices", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DirectoryServices", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create DirectoryServices collector: %w", err) } diff --git a/internal/collector/adcs/adcs.go b/internal/collector/adcs/adcs.go index 9ec98305..849c25c9 100644 --- a/internal/collector/adcs/adcs.go +++ b/internal/collector/adcs/adcs.go @@ -83,7 +83,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.requestsPerSecond = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "requests_total"), "Total certificate requests processed", @@ -165,7 +165,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Certification Authority", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Certification Authority", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Certification Authority collector: %w", err) } diff --git a/internal/collector/adfs/adfs.go b/internal/collector/adfs/adfs.go index 38a092a1..079b02b0 100644 --- a/internal/collector/adfs/adfs.go +++ b/internal/collector/adfs/adfs.go @@ -113,7 +113,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.adLoginConnectionFailures = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "ad_login_connection_failures_total"), "Total number of connection failures to an Active Directory domain controller", @@ -375,7 +375,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "AD FS", nil) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "AD FS", nil) if err != nil { return fmt.Errorf("failed to create AD FS collector: %w", err) } diff --git a/internal/collector/cache/cache.go b/internal/collector/cache/cache.go index 86072c0b..f0a1294f 100644 --- a/internal/collector/cache/cache.go +++ b/internal/collector/cache/cache.go @@ -99,7 +99,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.asyncCopyReadsTotal = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "async_copy_reads_total"), "(AsyncCopyReadsTotal)", @@ -277,7 +277,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Cache", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Cache", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Cache collector: %w", err) } diff --git a/internal/collector/cpu/cpu.go b/internal/collector/cpu/cpu.go index 31266ef1..72a7606a 100644 --- a/internal/collector/cpu/cpu.go +++ b/internal/collector/cpu/cpu.go @@ -90,7 +90,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.mu = sync.Mutex{} c.logicalProcessors = prometheus.NewDesc( @@ -183,7 +183,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Processor Information", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Processor Information", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Processor Information collector: %w", err) } diff --git a/internal/collector/dfsr/dfsr.go b/internal/collector/dfsr/dfsr.go index 1c281574..05ae82b4 100644 --- a/internal/collector/dfsr/dfsr.go +++ b/internal/collector/dfsr/dfsr.go @@ -455,21 +455,21 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var err error if slices.Contains(c.config.CollectorsEnabled, "connection") { - c.perfDataCollectorConnection, err = pdh.NewCollector[perfDataCounterValuesConnection](pdh.CounterTypeRaw, "DFS Replication Connections", pdh.InstancesAll) + c.perfDataCollectorConnection, err = pdh.NewCollector[perfDataCounterValuesConnection](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Connections", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create DFS Replication Connections collector: %w", err) } } if slices.Contains(c.config.CollectorsEnabled, "folder") { - c.perfDataCollectorFolder, err = pdh.NewCollector[perfDataCounterValuesFolder](pdh.CounterTypeRaw, "DFS Replicated Folders", pdh.InstancesAll) + c.perfDataCollectorFolder, err = pdh.NewCollector[perfDataCounterValuesFolder](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replicated Folders", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create DFS Replicated Folders collector: %w", err) } } if slices.Contains(c.config.CollectorsEnabled, "volume") { - c.perfDataCollectorVolume, err = pdh.NewCollector[perfDataCounterValuesVolume](pdh.CounterTypeRaw, "DFS Replication Service Volumes", pdh.InstancesAll) + c.perfDataCollectorVolume, err = pdh.NewCollector[perfDataCounterValuesVolume](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Service Volumes", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create DFS Replication Service Volumes collector: %w", err) } diff --git a/internal/collector/dhcp/dhcp.go b/internal/collector/dhcp/dhcp.go index 8d8046b4..3eff7ce5 100644 --- a/internal/collector/dhcp/dhcp.go +++ b/internal/collector/dhcp/dhcp.go @@ -378,7 +378,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { nil, ) - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "DHCP Server", nil) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](c.logger, pdh.CounterTypeRaw, "DHCP Server", nil) if err != nil { return fmt.Errorf("failed to create DHCP Server collector: %w", err) } diff --git a/internal/collector/dns/dns.go b/internal/collector/dns/dns.go index 5d444bec..5f6eec0a 100644 --- a/internal/collector/dns/dns.go +++ b/internal/collector/dns/dns.go @@ -132,7 +132,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, miSession *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error { for _, collector := range c.config.CollectorsEnabled { if !slices.Contains([]string{subCollectorMetrics, subCollectorWMIStats}, collector) { return fmt.Errorf("unknown sub collector: %s. Possible values: %s", collector, @@ -142,7 +142,7 @@ func (c *Collector) Build(_ *slog.Logger, miSession *mi.Session) error { } if slices.Contains(c.config.CollectorsEnabled, subCollectorMetrics) { - if err := c.buildMetricsCollector(); err != nil { + if err := c.buildMetricsCollector(logger); err != nil { return err } } @@ -156,7 +156,7 @@ func (c *Collector) Build(_ *slog.Logger, miSession *mi.Session) error { return nil } -func (c *Collector) buildMetricsCollector() error { +func (c *Collector) buildMetricsCollector(logger *slog.Logger) error { c.zoneTransferRequestsReceived = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "zone_transfer_requests_received_total"), "Number of zone transfer requests (AXFR/IXFR) received by the master DNS server", @@ -299,7 +299,7 @@ func (c *Collector) buildMetricsCollector() error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "DNS", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DNS", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create DNS collector: %w", err) } diff --git a/internal/collector/exchange/exchange.go b/internal/collector/exchange/exchange.go index 3daea496..195b7912 100644 --- a/internal/collector/exchange/exchange.go +++ b/internal/collector/exchange/exchange.go @@ -78,6 +78,7 @@ type Collector struct { collectorWorkloadManagementWorkloads config Config + logger *slog.Logger collectorFns []func(ch chan<- prometheus.Metric) error closeFns []func() @@ -170,7 +171,9 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { + c.logger = logger.With(slog.String("collector", Name)) + subCollectors := map[string]struct { build func() error collect func(ch chan<- prometheus.Metric) error diff --git a/internal/collector/exchange/exchange_active_sync.go b/internal/collector/exchange/exchange_active_sync.go index 4e4317b0..21408d5b 100644 --- a/internal/collector/exchange/exchange_active_sync.go +++ b/internal/collector/exchange/exchange_active_sync.go @@ -43,7 +43,7 @@ type perfDataCounterValuesActiveSync struct { func (c *Collector) buildActiveSync() error { var err error - c.perfDataCollectorActiveSync, err = pdh.NewCollector[perfDataCounterValuesActiveSync](pdh.CounterTypeRaw, "MSExchange ActiveSync", pdh.InstancesAll) + c.perfDataCollectorActiveSync, err = pdh.NewCollector[perfDataCounterValuesActiveSync](c.logger, pdh.CounterTypeRaw, "MSExchange ActiveSync", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange ActiveSync collector: %w", err) } diff --git a/internal/collector/exchange/exchange_ad_access_processes.go b/internal/collector/exchange/exchange_ad_access_processes.go index e8b81137..4dfc645c 100644 --- a/internal/collector/exchange/exchange_ad_access_processes.go +++ b/internal/collector/exchange/exchange_ad_access_processes.go @@ -50,7 +50,7 @@ type perfDataCounterValuesADAccessProcesses struct { func (c *Collector) buildADAccessProcesses() error { var err error - c.perfDataCollectorADAccessProcesses, err = pdh.NewCollector[perfDataCounterValuesADAccessProcesses](pdh.CounterTypeRaw, "MSExchange ADAccess Processes", pdh.InstancesAll) + c.perfDataCollectorADAccessProcesses, err = pdh.NewCollector[perfDataCounterValuesADAccessProcesses](c.logger, pdh.CounterTypeRaw, "MSExchange ADAccess Processes", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange ADAccess Processes collector: %w", err) } diff --git a/internal/collector/exchange/exchange_autodiscover.go b/internal/collector/exchange/exchange_autodiscover.go index 534227e6..99a8232d 100644 --- a/internal/collector/exchange/exchange_autodiscover.go +++ b/internal/collector/exchange/exchange_autodiscover.go @@ -39,7 +39,7 @@ type perfDataCounterValuesAutoDiscover struct { func (c *Collector) buildAutoDiscover() error { var err error - c.perfDataCollectorAutoDiscover, err = pdh.NewCollector[perfDataCounterValuesAutoDiscover](pdh.CounterTypeRaw, "MSExchangeAutodiscover", nil) + c.perfDataCollectorAutoDiscover, err = pdh.NewCollector[perfDataCounterValuesAutoDiscover](c.logger, pdh.CounterTypeRaw, "MSExchangeAutodiscover", nil) if err != nil { return fmt.Errorf("failed to create MSExchange Autodiscover collector: %w", err) } diff --git a/internal/collector/exchange/exchange_availability_service.go b/internal/collector/exchange/exchange_availability_service.go index 44322212..1d74146a 100644 --- a/internal/collector/exchange/exchange_availability_service.go +++ b/internal/collector/exchange/exchange_availability_service.go @@ -39,7 +39,7 @@ type perfDataCounterValuesAvailabilityService struct { func (c *Collector) buildAvailabilityService() error { var err error - c.perfDataCollectorAvailabilityService, err = pdh.NewCollector[perfDataCounterValuesAvailabilityService](pdh.CounterTypeRaw, "MSExchange Availability Service", pdh.InstancesAll) + c.perfDataCollectorAvailabilityService, err = pdh.NewCollector[perfDataCounterValuesAvailabilityService](c.logger, pdh.CounterTypeRaw, "MSExchange Availability Service", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange Availability Service collector: %w", err) } diff --git a/internal/collector/exchange/exchange_http_proxy.go b/internal/collector/exchange/exchange_http_proxy.go index eb4ddf45..e2a14e04 100644 --- a/internal/collector/exchange/exchange_http_proxy.go +++ b/internal/collector/exchange/exchange_http_proxy.go @@ -52,7 +52,7 @@ type perfDataCounterValuesHTTPProxy struct { func (c *Collector) buildHTTPProxy() error { var err error - c.perfDataCollectorHTTPProxy, err = pdh.NewCollector[perfDataCounterValuesHTTPProxy](pdh.CounterTypeRaw, "MSExchange HttpProxy", pdh.InstancesAll) + c.perfDataCollectorHTTPProxy, err = pdh.NewCollector[perfDataCounterValuesHTTPProxy](c.logger, pdh.CounterTypeRaw, "MSExchange HttpProxy", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange HttpProxy collector: %w", err) } diff --git a/internal/collector/exchange/exchange_mapi_http_emsmdb.go b/internal/collector/exchange/exchange_mapi_http_emsmdb.go index 609adf69..67ea1283 100644 --- a/internal/collector/exchange/exchange_mapi_http_emsmdb.go +++ b/internal/collector/exchange/exchange_mapi_http_emsmdb.go @@ -39,7 +39,7 @@ type perfDataCounterValuesMapiHTTPEmsMDB struct { func (c *Collector) buildMapiHTTPEmsMDB() error { var err error - c.perfDataCollectorMapiHTTPEmsMDB, err = pdh.NewCollector[perfDataCounterValuesMapiHTTPEmsMDB](pdh.CounterTypeRaw, "MSExchange MapiHttp Emsmdb", pdh.InstancesAll) + c.perfDataCollectorMapiHTTPEmsMDB, err = pdh.NewCollector[perfDataCounterValuesMapiHTTPEmsMDB](c.logger, pdh.CounterTypeRaw, "MSExchange MapiHttp Emsmdb", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange MapiHttp Emsmdb: %w", err) } diff --git a/internal/collector/exchange/exchange_outlook_web_access.go b/internal/collector/exchange/exchange_outlook_web_access.go index 8467ac4b..62c1b0b2 100644 --- a/internal/collector/exchange/exchange_outlook_web_access.go +++ b/internal/collector/exchange/exchange_outlook_web_access.go @@ -41,7 +41,7 @@ type perfDataCounterValuesOWA struct { func (c *Collector) buildOWA() error { var err error - c.perfDataCollectorOWA, err = pdh.NewCollector[perfDataCounterValuesOWA](pdh.CounterTypeRaw, "MSExchange OWA", pdh.InstancesAll) + c.perfDataCollectorOWA, err = pdh.NewCollector[perfDataCounterValuesOWA](c.logger, pdh.CounterTypeRaw, "MSExchange OWA", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange OWA collector: %w", err) } diff --git a/internal/collector/exchange/exchange_rpc_client_access.go b/internal/collector/exchange/exchange_rpc_client_access.go index e738cd26..cd78b915 100644 --- a/internal/collector/exchange/exchange_rpc_client_access.go +++ b/internal/collector/exchange/exchange_rpc_client_access.go @@ -50,7 +50,7 @@ type perfDataCounterValuesRpcClientAccess struct { func (c *Collector) buildRpcClientAccess() error { var err error - c.perfDataCollectorRpcClientAccess, err = pdh.NewCollector[perfDataCounterValuesRpcClientAccess](pdh.CounterTypeRaw, "MSExchange RpcClientAccess", pdh.InstancesAll) + c.perfDataCollectorRpcClientAccess, err = pdh.NewCollector[perfDataCounterValuesRpcClientAccess](c.logger, pdh.CounterTypeRaw, "MSExchange RpcClientAccess", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange RpcClientAccess collector: %w", err) } diff --git a/internal/collector/exchange/exchange_transport_queues.go b/internal/collector/exchange/exchange_transport_queues.go index 4f672037..35c3b3dd 100644 --- a/internal/collector/exchange/exchange_transport_queues.go +++ b/internal/collector/exchange/exchange_transport_queues.go @@ -77,7 +77,7 @@ type perfDataCounterValuesTransportQueues struct { func (c *Collector) buildTransportQueues() error { var err error - c.perfDataCollectorTransportQueues, err = pdh.NewCollector[perfDataCounterValuesTransportQueues](pdh.CounterTypeRaw, "MSExchangeTransport Queues", pdh.InstancesAll) + c.perfDataCollectorTransportQueues, err = pdh.NewCollector[perfDataCounterValuesTransportQueues](c.logger, pdh.CounterTypeRaw, "MSExchangeTransport Queues", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchangeTransport Queues collector: %w", err) } diff --git a/internal/collector/exchange/exchange_workload_management.go b/internal/collector/exchange/exchange_workload_management.go index b259fcf9..afe53ae9 100644 --- a/internal/collector/exchange/exchange_workload_management.go +++ b/internal/collector/exchange/exchange_workload_management.go @@ -49,7 +49,7 @@ type perfDataCounterValuesWorkloadManagementWorkloads struct { func (c *Collector) buildWorkloadManagementWorkloads() error { var err error - c.perfDataCollectorWorkloadManagementWorkloads, err = pdh.NewCollector[perfDataCounterValuesWorkloadManagementWorkloads](pdh.CounterTypeRaw, "MSExchange WorkloadManagement Workloads", pdh.InstancesAll) + c.perfDataCollectorWorkloadManagementWorkloads, err = pdh.NewCollector[perfDataCounterValuesWorkloadManagementWorkloads](c.logger, pdh.CounterTypeRaw, "MSExchange WorkloadManagement Workloads", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSExchange WorkloadManagement Workloads collector: %w", err) } diff --git a/internal/collector/gpu/gpu.go b/internal/collector/gpu/gpu.go index df30f61e..ec3b5e8d 100644 --- a/internal/collector/gpu/gpu.go +++ b/internal/collector/gpu/gpu.go @@ -121,7 +121,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var err error c.gpuInfo = prometheus.NewDesc( @@ -223,27 +223,27 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { errs := make([]error, 0) - c.gpuEnginePerfDataCollector, err = pdh.NewCollector[gpuEnginePerfDataCounterValues](pdh.CounterTypeRaw, "GPU Engine", pdh.InstancesAll) + c.gpuEnginePerfDataCollector, err = pdh.NewCollector[gpuEnginePerfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "GPU Engine", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create GPU Engine perf data collector: %w", err)) } - c.gpuAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuAdapterMemoryPerfDataCounterValues](pdh.CounterTypeRaw, "GPU Adapter Memory", pdh.InstancesAll) + c.gpuAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuAdapterMemoryPerfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "GPU Adapter Memory", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create GPU Adapter Memory perf data collector: %w", err)) } - c.gpuLocalAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuLocalAdapterMemoryPerfDataCounterValues](pdh.CounterTypeRaw, "GPU Local Adapter Memory", pdh.InstancesAll) + c.gpuLocalAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuLocalAdapterMemoryPerfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "GPU Local Adapter Memory", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create GPU Local Adapter Memory perf data collector: %w", err)) } - c.gpuNonLocalAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuNonLocalAdapterMemoryPerfDataCounterValues](pdh.CounterTypeRaw, "GPU Non Local Adapter Memory", pdh.InstancesAll) + c.gpuNonLocalAdapterMemoryPerfDataCollector, err = pdh.NewCollector[gpuNonLocalAdapterMemoryPerfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "GPU Non Local Adapter Memory", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create GPU Non Local Adapter Memory perf data collector: %w", err)) } - c.gpuProcessMemoryPerfDataCollector, err = pdh.NewCollector[gpuProcessMemoryPerfDataCounterValues](pdh.CounterTypeRaw, "GPU Process Memory", pdh.InstancesAll) + c.gpuProcessMemoryPerfDataCollector, err = pdh.NewCollector[gpuProcessMemoryPerfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "GPU Process Memory", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create GPU Process Memory perf data collector: %w", err)) } diff --git a/internal/collector/hyperv/hyperv.go b/internal/collector/hyperv/hyperv.go index c7527776..0dbbeeb9 100644 --- a/internal/collector/hyperv/hyperv.go +++ b/internal/collector/hyperv/hyperv.go @@ -95,6 +95,7 @@ type Collector struct { collectorVirtualSwitch config Config + logger *slog.Logger collectorFns []func(ch chan<- prometheus.Metric) error closeFns []func() @@ -151,6 +152,7 @@ func (c *Collector) Close() error { } func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { + c.logger = logger.With(slog.String("collector", Name)) c.collectorFns = make([]func(ch chan<- prometheus.Metric) error, 0, len(c.config.CollectorsEnabled)) c.closeFns = make([]func(), 0, len(c.config.CollectorsEnabled)) @@ -256,10 +258,10 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { } if buildNumber < subCollectors[name].minBuildNumber { - logger.Warn(fmt.Sprintf( + c.logger.Warn(fmt.Sprintf( "collector %s requires windows build version %d. Current build version: %d", name, subCollectors[name].minBuildNumber, buildNumber, - ), slog.String("collector", name)) + )) continue } diff --git a/internal/collector/hyperv/hyperv_datastore.go b/internal/collector/hyperv/hyperv_datastore.go index ad3c0c24..439e2d22 100644 --- a/internal/collector/hyperv/hyperv_datastore.go +++ b/internal/collector/hyperv/hyperv_datastore.go @@ -132,7 +132,7 @@ type perfDataCounterValuesDataStore struct { func (c *Collector) buildDataStore() error { var err error - c.perfDataCollectorDataStore, err = pdh.NewCollector[perfDataCounterValuesDataStore](pdh.CounterTypeRaw, "Hyper-V DataStore", pdh.InstancesAll) + c.perfDataCollectorDataStore, err = pdh.NewCollector[perfDataCounterValuesDataStore](c.logger, pdh.CounterTypeRaw, "Hyper-V DataStore", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V DataStore collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_dynamic_memory_balancer.go b/internal/collector/hyperv/hyperv_dynamic_memory_balancer.go index 54aeca46..f10f2200 100644 --- a/internal/collector/hyperv/hyperv_dynamic_memory_balancer.go +++ b/internal/collector/hyperv/hyperv_dynamic_memory_balancer.go @@ -52,7 +52,7 @@ func (c *Collector) buildDynamicMemoryBalancer() error { var err error // https://learn.microsoft.com/en-us/archive/blogs/chrisavis/monitoring-dynamic-memory-in-windows-server-hyper-v-2012 - c.perfDataCollectorDynamicMemoryBalancer, err = pdh.NewCollector[perfDataCounterValuesDynamicMemoryBalancer](pdh.CounterTypeRaw, "Hyper-V Dynamic Memory Balancer", pdh.InstancesAll) + c.perfDataCollectorDynamicMemoryBalancer, err = pdh.NewCollector[perfDataCounterValuesDynamicMemoryBalancer](c.logger, pdh.CounterTypeRaw, "Hyper-V Dynamic Memory Balancer", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Machine Health Summary collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_dynamic_memory_vm.go b/internal/collector/hyperv/hyperv_dynamic_memory_vm.go index b4b06698..b94084af 100644 --- a/internal/collector/hyperv/hyperv_dynamic_memory_vm.go +++ b/internal/collector/hyperv/hyperv_dynamic_memory_vm.go @@ -63,7 +63,7 @@ type perfDataCounterValuesDynamicMemoryVM struct { func (c *Collector) buildDynamicMemoryVM() error { var err error - c.perfDataCollectorDynamicMemoryVM, err = pdh.NewCollector[perfDataCounterValuesDynamicMemoryVM](pdh.CounterTypeRaw, "Hyper-V Dynamic Memory VM", pdh.InstancesAll) + c.perfDataCollectorDynamicMemoryVM, err = pdh.NewCollector[perfDataCounterValuesDynamicMemoryVM](c.logger, pdh.CounterTypeRaw, "Hyper-V Dynamic Memory VM", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Dynamic Memory VM collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_hypervisor_logical_processor.go b/internal/collector/hyperv/hyperv_hypervisor_logical_processor.go index f18e771d..11d50575 100644 --- a/internal/collector/hyperv/hyperv_hypervisor_logical_processor.go +++ b/internal/collector/hyperv/hyperv_hypervisor_logical_processor.go @@ -52,7 +52,7 @@ type perfDataCounterValuesHypervisorLogicalProcessor struct { func (c *Collector) buildHypervisorLogicalProcessor() error { var err error - c.perfDataCollectorHypervisorLogicalProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorLogicalProcessor](pdh.CounterTypeRaw, "Hyper-V Hypervisor Logical Processor", pdh.InstancesAll) + c.perfDataCollectorHypervisorLogicalProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorLogicalProcessor](c.logger, pdh.CounterTypeRaw, "Hyper-V Hypervisor Logical Processor", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Hypervisor Logical Processor collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_hypervisor_root_partition.go b/internal/collector/hyperv/hyperv_hypervisor_root_partition.go index 041e61e0..1f2a4e4b 100644 --- a/internal/collector/hyperv/hyperv_hypervisor_root_partition.go +++ b/internal/collector/hyperv/hyperv_hypervisor_root_partition.go @@ -80,7 +80,7 @@ type perfDataCounterValuesHypervisorRootPartition struct { func (c *Collector) buildHypervisorRootPartition() error { var err error - c.perfDataCollectorHypervisorRootPartition, err = pdh.NewCollector[perfDataCounterValuesHypervisorRootPartition](pdh.CounterTypeRaw, "Hyper-V Hypervisor Root Partition", []string{"Root"}) + c.perfDataCollectorHypervisorRootPartition, err = pdh.NewCollector[perfDataCounterValuesHypervisorRootPartition](c.logger, pdh.CounterTypeRaw, "Hyper-V Hypervisor Root Partition", []string{"Root"}) if err != nil { return fmt.Errorf("failed to create Hyper-V Hypervisor Root Partition collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_hypervisor_root_virtual_processor.go b/internal/collector/hyperv/hyperv_hypervisor_root_virtual_processor.go index 452d1d79..9077a34c 100644 --- a/internal/collector/hyperv/hyperv_hypervisor_root_virtual_processor.go +++ b/internal/collector/hyperv/hyperv_hypervisor_root_virtual_processor.go @@ -53,7 +53,7 @@ type perfDataCounterValuesHypervisorRootVirtualProcessor struct { func (c *Collector) buildHypervisorRootVirtualProcessor() error { var err error - c.perfDataCollectorHypervisorRootVirtualProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorRootVirtualProcessor](pdh.CounterTypeRaw, "Hyper-V Hypervisor Root Virtual Processor", pdh.InstancesAll) + c.perfDataCollectorHypervisorRootVirtualProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorRootVirtualProcessor](c.logger, pdh.CounterTypeRaw, "Hyper-V Hypervisor Root Virtual Processor", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Hypervisor Root Virtual Processor collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go b/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go index 44e0e381..7cda5eb5 100644 --- a/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go +++ b/internal/collector/hyperv/hyperv_hypervisor_virtual_processor.go @@ -52,7 +52,7 @@ type perfDataCounterValuesHypervisorVirtualProcessor struct { func (c *Collector) buildHypervisorVirtualProcessor() error { var err error - c.perfDataCollectorHypervisorVirtualProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorVirtualProcessor](pdh.CounterTypeRaw, "Hyper-V Hypervisor Virtual Processor", pdh.InstancesAll) + c.perfDataCollectorHypervisorVirtualProcessor, err = pdh.NewCollector[perfDataCounterValuesHypervisorVirtualProcessor](c.logger, pdh.CounterTypeRaw, "Hyper-V Hypervisor Virtual Processor", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Hypervisor Virtual Processor collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_legacy_network_adapter.go b/internal/collector/hyperv/hyperv_legacy_network_adapter.go index b9983fef..00e0e2b9 100644 --- a/internal/collector/hyperv/hyperv_legacy_network_adapter.go +++ b/internal/collector/hyperv/hyperv_legacy_network_adapter.go @@ -52,7 +52,7 @@ type perfDataCounterValuesLegacyNetworkAdapter struct { func (c *Collector) buildLegacyNetworkAdapter() error { var err error - c.perfDataCollectorLegacyNetworkAdapter, err = pdh.NewCollector[perfDataCounterValuesLegacyNetworkAdapter](pdh.CounterTypeRaw, "Hyper-V Legacy Network Adapter", pdh.InstancesAll) + c.perfDataCollectorLegacyNetworkAdapter, err = pdh.NewCollector[perfDataCounterValuesLegacyNetworkAdapter](c.logger, pdh.CounterTypeRaw, "Hyper-V Legacy Network Adapter", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Legacy Network Adapter collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_machine_health_summary.go b/internal/collector/hyperv/hyperv_virtual_machine_health_summary.go index 45ea1a08..d59690f8 100644 --- a/internal/collector/hyperv/hyperv_virtual_machine_health_summary.go +++ b/internal/collector/hyperv/hyperv_virtual_machine_health_summary.go @@ -44,7 +44,7 @@ type perfDataCounterValuesVirtualMachineHealthSummary struct { func (c *Collector) buildVirtualMachineHealthSummary() error { var err error - c.perfDataCollectorVirtualMachineHealthSummary, err = pdh.NewCollector[perfDataCounterValuesVirtualMachineHealthSummary](pdh.CounterTypeRaw, "Hyper-V Virtual Machine Health Summary", nil) + c.perfDataCollectorVirtualMachineHealthSummary, err = pdh.NewCollector[perfDataCounterValuesVirtualMachineHealthSummary](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual Machine Health Summary", nil) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Machine Health Summary collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_machine_vid_partition.go b/internal/collector/hyperv/hyperv_virtual_machine_vid_partition.go index 899d6185..fafc8f83 100644 --- a/internal/collector/hyperv/hyperv_virtual_machine_vid_partition.go +++ b/internal/collector/hyperv/hyperv_virtual_machine_vid_partition.go @@ -46,7 +46,7 @@ type perfDataCounterValuesVirtualMachineVidPartition struct { func (c *Collector) buildVirtualMachineVidPartition() error { var err error - c.perfDataCollectorVirtualMachineVidPartition, err = pdh.NewCollector[perfDataCounterValuesVirtualMachineVidPartition](pdh.CounterTypeRaw, "Hyper-V VM Vid Partition", pdh.InstancesAll) + c.perfDataCollectorVirtualMachineVidPartition, err = pdh.NewCollector[perfDataCounterValuesVirtualMachineVidPartition](c.logger, pdh.CounterTypeRaw, "Hyper-V VM Vid Partition", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V VM Vid Partition collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_network_adapter.go b/internal/collector/hyperv/hyperv_virtual_network_adapter.go index 4d6d05ef..71fc532f 100644 --- a/internal/collector/hyperv/hyperv_virtual_network_adapter.go +++ b/internal/collector/hyperv/hyperv_virtual_network_adapter.go @@ -52,7 +52,7 @@ type perfDataCounterValuesVirtualNetworkAdapter struct { func (c *Collector) buildVirtualNetworkAdapter() error { var err error - c.perfDataCollectorVirtualNetworkAdapter, err = pdh.NewCollector[perfDataCounterValuesVirtualNetworkAdapter](pdh.CounterTypeRaw, "Hyper-V Virtual Network Adapter", pdh.InstancesAll) + c.perfDataCollectorVirtualNetworkAdapter, err = pdh.NewCollector[perfDataCounterValuesVirtualNetworkAdapter](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual Network Adapter", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Network Adapter collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_network_adapter_drop_reasons.go b/internal/collector/hyperv/hyperv_virtual_network_adapter_drop_reasons.go index fa3a00f3..759a2206 100644 --- a/internal/collector/hyperv/hyperv_virtual_network_adapter_drop_reasons.go +++ b/internal/collector/hyperv/hyperv_virtual_network_adapter_drop_reasons.go @@ -167,7 +167,7 @@ type perfDataCounterValuesVirtualNetworkAdapterDropReasons struct { func (c *Collector) buildVirtualNetworkAdapterDropReasons() error { var err error - c.perfDataCollectorVirtualNetworkAdapterDropReasons, err = pdh.NewCollector[perfDataCounterValuesVirtualNetworkAdapterDropReasons](pdh.CounterTypeRaw, "Hyper-V Virtual Network Adapter Drop Reasons", pdh.InstancesAll) + c.perfDataCollectorVirtualNetworkAdapterDropReasons, err = pdh.NewCollector[perfDataCounterValuesVirtualNetworkAdapterDropReasons](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual Network Adapter Drop Reasons", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Network Adapter Drop Reasons collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_smb.go b/internal/collector/hyperv/hyperv_virtual_smb.go index b25b22c7..2468868b 100644 --- a/internal/collector/hyperv/hyperv_virtual_smb.go +++ b/internal/collector/hyperv/hyperv_virtual_smb.go @@ -74,7 +74,7 @@ type perfDataCounterValuesVirtualSMB struct { func (c *Collector) buildVirtualSMB() error { var err error - c.perfDataCollectorVirtualSMB, err = pdh.NewCollector[perfDataCounterValuesVirtualSMB](pdh.CounterTypeRaw, "Hyper-V Virtual SMB", pdh.InstancesAll) + c.perfDataCollectorVirtualSMB, err = pdh.NewCollector[perfDataCounterValuesVirtualSMB](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual SMB", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual SMB collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_storage_device.go b/internal/collector/hyperv/hyperv_virtual_storage_device.go index b99a726e..d96eb046 100644 --- a/internal/collector/hyperv/hyperv_virtual_storage_device.go +++ b/internal/collector/hyperv/hyperv_virtual_storage_device.go @@ -64,7 +64,7 @@ type perfDataCounterValuesVirtualStorageDevice struct { func (c *Collector) buildVirtualStorageDevice() error { var err error - c.perfDataCollectorVirtualStorageDevice, err = pdh.NewCollector[perfDataCounterValuesVirtualStorageDevice](pdh.CounterTypeRaw, "Hyper-V Virtual Storage Device", pdh.InstancesAll) + c.perfDataCollectorVirtualStorageDevice, err = pdh.NewCollector[perfDataCounterValuesVirtualStorageDevice](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual Storage Device", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Storage Device collector: %w", err) } diff --git a/internal/collector/hyperv/hyperv_virtual_switch.go b/internal/collector/hyperv/hyperv_virtual_switch.go index 2c130a4d..fb93940d 100644 --- a/internal/collector/hyperv/hyperv_virtual_switch.go +++ b/internal/collector/hyperv/hyperv_virtual_switch.go @@ -82,7 +82,7 @@ type perfDataCounterValuesVirtualSwitch struct { func (c *Collector) buildVirtualSwitch() error { var err error - c.perfDataCollectorVirtualSwitch, err = pdh.NewCollector[perfDataCounterValuesVirtualSwitch](pdh.CounterTypeRaw, "Hyper-V Virtual Switch", pdh.InstancesAll) + c.perfDataCollectorVirtualSwitch, err = pdh.NewCollector[perfDataCounterValuesVirtualSwitch](c.logger, pdh.CounterTypeRaw, "Hyper-V Virtual Switch", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Hyper-V Virtual Switch collector: %w", err) } diff --git a/internal/collector/iis/iis_app_pool_was.go b/internal/collector/iis/iis_app_pool_was.go index 4a4b1356..96f61619 100644 --- a/internal/collector/iis/iis_app_pool_was.go +++ b/internal/collector/iis/iis_app_pool_was.go @@ -79,7 +79,7 @@ var applicationStates = map[uint32]string{ func (c *Collector) buildAppPoolWAS() error { var err error - c.perfDataCollectorAppPoolWAS, err = pdh.NewCollector[perfDataCounterValuesAppPoolWAS](pdh.CounterTypeRaw, "APP_POOL_WAS", pdh.InstancesAll) + c.perfDataCollectorAppPoolWAS, err = pdh.NewCollector[perfDataCounterValuesAppPoolWAS](c.logger, pdh.CounterTypeRaw, "APP_POOL_WAS", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create APP_POOL_WAS collector: %w", err) } diff --git a/internal/collector/iis/iis_http_service_request_queues.go b/internal/collector/iis/iis_http_service_request_queues.go index 965ff503..c088924a 100644 --- a/internal/collector/iis/iis_http_service_request_queues.go +++ b/internal/collector/iis/iis_http_service_request_queues.go @@ -54,7 +54,7 @@ func (c *Collector) buildHttpServiceRequestQueues() error { c.logger.Info("IIS/HttpServiceRequestQueues collector is in an experimental state! The configuration and metrics may change in future. Please report any issues.") - c.perfDataCollectorHttpServiceRequestQueues, err = pdh.NewCollector[perfDataCounterValuesHttpServiceRequestQueues](pdh.CounterTypeRaw, "HTTP Service Request Queues", pdh.InstancesAll) + c.perfDataCollectorHttpServiceRequestQueues, err = pdh.NewCollector[perfDataCounterValuesHttpServiceRequestQueues](c.logger, pdh.CounterTypeRaw, "HTTP Service Request Queues", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Http Service collector: %w", err) } diff --git a/internal/collector/iis/iis_w3svc_w3wp.go b/internal/collector/iis/iis_w3svc_w3wp.go index 36e0bc64..1ba193a0 100644 --- a/internal/collector/iis/iis_w3svc_w3wp.go +++ b/internal/collector/iis/iis_w3svc_w3wp.go @@ -152,13 +152,13 @@ func (p perfDataCounterValuesW3SVCW3WPV8) GetName() string { func (c *Collector) buildW3SVCW3WP() error { var err error - c.w3SVCW3WPPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WP](pdh.CounterTypeRaw, "W3SVC_W3WP", pdh.InstancesAll) + c.w3SVCW3WPPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WP](c.logger, pdh.CounterTypeRaw, "W3SVC_W3WP", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create W3SVC_W3WP collector: %w", err) } if c.iisVersion.major >= 8 { - c.w3SVCW3WPPerfDataCollectorV8, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WPV8](pdh.CounterTypeRaw, "W3SVC_W3WP", pdh.InstancesAll) + c.w3SVCW3WPPerfDataCollectorV8, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WPV8](c.logger, pdh.CounterTypeRaw, "W3SVC_W3WP", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create W3SVC_W3WP collector: %w", err) } diff --git a/internal/collector/iis/iis_web_service.go b/internal/collector/iis/iis_web_service.go index 02e3f0f8..a552ec8f 100644 --- a/internal/collector/iis/iis_web_service.go +++ b/internal/collector/iis/iis_web_service.go @@ -102,7 +102,7 @@ func (p perfDataCounterValuesWebService) GetName() string { func (c *Collector) buildWebService() error { var err error - c.perfDataCollectorWebService, err = pdh.NewCollector[perfDataCounterValuesWebService](pdh.CounterTypeRaw, "Web Service", pdh.InstancesAll) + c.perfDataCollectorWebService, err = pdh.NewCollector[perfDataCounterValuesWebService](c.logger, pdh.CounterTypeRaw, "Web Service", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Web Service collector: %w", err) } diff --git a/internal/collector/iis/iis_web_service_cache.go b/internal/collector/iis/iis_web_service_cache.go index 662a2373..66bad5aa 100644 --- a/internal/collector/iis/iis_web_service_cache.go +++ b/internal/collector/iis/iis_web_service_cache.go @@ -103,7 +103,7 @@ type perfDataCounterServiceCache struct { func (c *Collector) buildWebServiceCache() error { var err error - c.serviceCachePerfDataCollector, err = pdh.NewCollector[perfDataCounterServiceCache](pdh.CounterTypeRaw, "Web Service Cache", pdh.InstancesAll) + c.serviceCachePerfDataCollector, err = pdh.NewCollector[perfDataCounterServiceCache](c.logger, pdh.CounterTypeRaw, "Web Service Cache", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Web Service Cache collector: %w", err) } diff --git a/internal/collector/logical_disk/logical_disk.go b/internal/collector/logical_disk/logical_disk.go index 7aeef77e..2be4854c 100644 --- a/internal/collector/logical_disk/logical_disk.go +++ b/internal/collector/logical_disk/logical_disk.go @@ -332,7 +332,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "LogicalDisk", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "LogicalDisk", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create LogicalDisk collector: %w", err) } diff --git a/internal/collector/memory/memory.go b/internal/collector/memory/memory.go index 1b4748ef..fdb7fa62 100644 --- a/internal/collector/memory/memory.go +++ b/internal/collector/memory/memory.go @@ -111,7 +111,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.availableBytes = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "available_bytes"), "The amount of physical memory immediately available for allocation to a process or for system use. It is equal to the sum of memory assigned to"+ @@ -337,7 +337,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Memory", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Memory", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Memory collector: %w", err) } diff --git a/internal/collector/msmq/msmq.go b/internal/collector/msmq/msmq.go index 5d3a7cbd..b776eae6 100644 --- a/internal/collector/msmq/msmq.go +++ b/internal/collector/msmq/msmq.go @@ -75,7 +75,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.bytesInJournalQueue = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "bytes_in_journal_queue"), "Size of queue journal in bytes", @@ -103,7 +103,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "MSMQ Queue", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "MSMQ Queue", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create MSMQ Queue collector: %w", err) } diff --git a/internal/collector/mssql/mssql_access_methods.go b/internal/collector/mssql/mssql_access_methods.go index d937165c..2267ce04 100644 --- a/internal/collector/mssql/mssql_access_methods.go +++ b/internal/collector/mssql/mssql_access_methods.go @@ -130,7 +130,7 @@ func (c *Collector) buildAccessMethods() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.accessMethodsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAccessMethods](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Access Methods"), nil) + c.accessMethodsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAccessMethods](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Access Methods"), nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create AccessMethods collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_availability_replica.go b/internal/collector/mssql/mssql_availability_replica.go index 9be11eed..c9ff2aa1 100644 --- a/internal/collector/mssql/mssql_availability_replica.go +++ b/internal/collector/mssql/mssql_availability_replica.go @@ -63,7 +63,7 @@ func (c *Collector) buildAvailabilityReplica() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.availabilityReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAvailabilityReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), pdh.InstancesAll) + c.availabilityReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesAvailabilityReplica](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Availability Replica"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Availability Replica collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_buffer_manager.go b/internal/collector/mssql/mssql_buffer_manager.go index f0307a6e..f4a67ba0 100644 --- a/internal/collector/mssql/mssql_buffer_manager.go +++ b/internal/collector/mssql/mssql_buffer_manager.go @@ -88,7 +88,7 @@ func (c *Collector) buildBufferManager() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.bufManPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesBufMan](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), nil) + c.bufManPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesBufMan](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Buffer Manager"), nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create Buffer Manager collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_database.go b/internal/collector/mssql/mssql_database.go index e068c132..ed90f544 100644 --- a/internal/collector/mssql/mssql_database.go +++ b/internal/collector/mssql/mssql_database.go @@ -148,13 +148,13 @@ func (c *Collector) buildDatabases() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.databasesPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll) + c.databasesPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Databases collector for instance %s: %w", sqlInstance.name, err)) } if sqlInstance.isVersionGreaterOrEqualThan(serverVersion2019) { - c.databasesPerfDataCollectors2019[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases2019](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll) + c.databasesPerfDataCollectors2019[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDatabases2019](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Databases"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Databases 2019 collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_database_replica.go b/internal/collector/mssql/mssql_database_replica.go index 20de11d1..72b3cfc9 100644 --- a/internal/collector/mssql/mssql_database_replica.go +++ b/internal/collector/mssql/mssql_database_replica.go @@ -92,7 +92,7 @@ func (c *Collector) buildDatabaseReplica() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.dbReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDBReplica](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), pdh.InstancesAll) + c.dbReplicaPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesDBReplica](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Database Replica"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Database Replica collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_general_statistics.go b/internal/collector/mssql/mssql_general_statistics.go index b6c37d1d..d2bdc1f9 100644 --- a/internal/collector/mssql/mssql_general_statistics.go +++ b/internal/collector/mssql/mssql_general_statistics.go @@ -90,7 +90,7 @@ func (c *Collector) buildGeneralStatistics() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.genStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesGenStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), nil) + c.genStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesGenStats](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "General Statistics"), nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create General Statistics collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_locks.go b/internal/collector/mssql/mssql_locks.go index 9cde27e3..8f72e0c1 100644 --- a/internal/collector/mssql/mssql_locks.go +++ b/internal/collector/mssql/mssql_locks.go @@ -61,7 +61,7 @@ func (c *Collector) buildLocks() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.locksPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesLocks](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Locks"), pdh.InstancesAll) + c.locksPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesLocks](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Locks"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Locks collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_memory_manager.go b/internal/collector/mssql/mssql_memory_manager.go index c0787886..d34d3715 100644 --- a/internal/collector/mssql/mssql_memory_manager.go +++ b/internal/collector/mssql/mssql_memory_manager.go @@ -82,7 +82,7 @@ func (c *Collector) buildMemoryManager() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.memMgrPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesMemMgr](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), pdh.InstancesAll) + c.memMgrPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesMemMgr](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Memory Manager"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Memory Manager collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_sql_errors.go b/internal/collector/mssql/mssql_sql_errors.go index 64aee81a..82313a49 100644 --- a/internal/collector/mssql/mssql_sql_errors.go +++ b/internal/collector/mssql/mssql_sql_errors.go @@ -47,7 +47,7 @@ func (c *Collector) buildSQLErrors() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.sqlErrorsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlErrors](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), pdh.InstancesAll) + c.sqlErrorsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlErrors](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Errors"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create SQL Errors collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_sql_stats.go b/internal/collector/mssql/mssql_sql_stats.go index 381ef9d6..a3c46b14 100644 --- a/internal/collector/mssql/mssql_sql_stats.go +++ b/internal/collector/mssql/mssql_sql_stats.go @@ -64,7 +64,7 @@ func (c *Collector) buildSQLStats() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.sqlStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), nil) + c.sqlStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesSqlStats](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "SQL Statistics"), nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create SQL Statistics collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_transactions.go b/internal/collector/mssql/mssql_transactions.go index 1e03145c..057a3467 100644 --- a/internal/collector/mssql/mssql_transactions.go +++ b/internal/collector/mssql/mssql_transactions.go @@ -68,7 +68,7 @@ func (c *Collector) buildTransactions() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.transactionsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesTransactions](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), nil) + c.transactionsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesTransactions](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Transactions"), nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create Transactions collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/mssql/mssql_wait_stats.go b/internal/collector/mssql/mssql_wait_stats.go index 7ffc20f0..24353a1a 100644 --- a/internal/collector/mssql/mssql_wait_stats.go +++ b/internal/collector/mssql/mssql_wait_stats.go @@ -68,7 +68,7 @@ func (c *Collector) buildWaitStats() error { errs := make([]error, 0, len(c.mssqlInstances)) for _, sqlInstance := range c.mssqlInstances { - c.waitStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesWaitStats](pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), pdh.InstancesAll) + c.waitStatsPerfDataCollectors[sqlInstance], err = pdh.NewCollector[perfDataCounterValuesWaitStats](c.logger, pdh.CounterTypeRaw, c.mssqlGetPerfObjectName(sqlInstance, "Wait Statistics"), pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create Wait Statistics collector for instance %s: %w", sqlInstance.name, err)) } diff --git a/internal/collector/net/net.go b/internal/collector/net/net.go index 5abc03b3..25287227 100644 --- a/internal/collector/net/net.go +++ b/internal/collector/net/net.go @@ -279,7 +279,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Network Interface", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Network Interface", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Network Interface collector: %w", err) } diff --git a/internal/collector/nps/nps.go b/internal/collector/nps/nps.go index ff3a8efd..b688efbd 100644 --- a/internal/collector/nps/nps.go +++ b/internal/collector/nps/nps.go @@ -95,7 +95,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.accessAccepts = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "access_accepts"), "(AccessAccepts)", @@ -252,12 +252,12 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { errs := make([]error, 0) - c.accessPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesAccess](pdh.CounterTypeRaw, "NPS Authentication Server", nil) + c.accessPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesAccess](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "NPS Authentication Server", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create NPS Authentication Server collector: %w", err)) } - c.accountingPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesAccounting](pdh.CounterTypeRaw, "NPS Accounting Server", nil) + c.accountingPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesAccounting](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "NPS Accounting Server", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create NPS Accounting Server collector: %w", err)) } diff --git a/internal/collector/pagefile/pagefile.go b/internal/collector/pagefile/pagefile.go index b87f326b..d18269b6 100644 --- a/internal/collector/pagefile/pagefile.go +++ b/internal/collector/pagefile/pagefile.go @@ -75,7 +75,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.pagingLimitBytes = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "limit_bytes"), "Number of bytes that can be stored in the operating system paging files. 0 (zero) indicates that there are no paging files", @@ -92,7 +92,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Paging File", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Paging File", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Paging File collector: %w", err) } diff --git a/internal/collector/performancecounter/performancecounter.go b/internal/collector/performancecounter/performancecounter.go index d71c2f77..eae7a841 100644 --- a/internal/collector/performancecounter/performancecounter.go +++ b/internal/collector/performancecounter/performancecounter.go @@ -215,7 +215,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { object.Type = pdh.CounterTypeRaw } - collector, err := pdh.NewCollectorWithReflection(object.Type, object.Object, object.Instances, valueType) + collector, err := pdh.NewCollectorWithReflection(c.logger, object.Type, object.Object, object.Instances, valueType) if err != nil { errs = append(errs, fmt.Errorf("failed collector for %s: %w", object.Name, err)) } diff --git a/internal/collector/physical_disk/physical_disk.go b/internal/collector/physical_disk/physical_disk.go index 8f6bfc79..58eec2dd 100644 --- a/internal/collector/physical_disk/physical_disk.go +++ b/internal/collector/physical_disk/physical_disk.go @@ -128,7 +128,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.requestsQueued = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "requests_queued"), "The number of requests queued to the disk (PhysicalDisk.CurrentDiskQueueLength)", @@ -215,7 +215,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "PhysicalDisk", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "PhysicalDisk", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create PhysicalDisk collector: %w", err) } diff --git a/internal/collector/process/process.go b/internal/collector/process/process.go index c0968462..730a70b2 100644 --- a/internal/collector/process/process.go +++ b/internal/collector/process/process.go @@ -187,11 +187,11 @@ func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error { switch c.config.CounterVersion { case 2: - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Process V2", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](c.logger, pdh.CounterTypeRaw, "Process V2", pdh.InstancesAll) case 1: c.perfDataCollector, err = registry.NewCollector[perfDataCounterValues]("Process", pdh.InstancesAll) default: - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Process V2", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](c.logger, pdh.CounterTypeRaw, "Process V2", pdh.InstancesAll) c.config.CounterVersion = 2 if errors.Is(err, pdh.NewPdhError(pdh.CstatusNoObject)) { diff --git a/internal/collector/remote_fx/remote_fx.go b/internal/collector/remote_fx/remote_fx.go index 543fc771..d37970ef 100644 --- a/internal/collector/remote_fx/remote_fx.go +++ b/internal/collector/remote_fx/remote_fx.go @@ -103,7 +103,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(*slog.Logger, *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { // net c.baseTCPRTT = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "net_base_tcp_rtt_seconds"), @@ -232,12 +232,12 @@ func (c *Collector) Build(*slog.Logger, *mi.Session) error { errs := make([]error, 0) - c.perfDataCollectorNetwork, err = pdh.NewCollector[perfDataCounterValuesNetwork](pdh.CounterTypeRaw, "RemoteFX Network", pdh.InstancesAll) + c.perfDataCollectorNetwork, err = pdh.NewCollector[perfDataCounterValuesNetwork](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "RemoteFX Network", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create RemoteFX Network collector: %w", err)) } - c.perfDataCollectorGraphics, err = pdh.NewCollector[perfDataCounterValuesGraphics](pdh.CounterTypeRaw, "RemoteFX Graphics", pdh.InstancesAll) + c.perfDataCollectorGraphics, err = pdh.NewCollector[perfDataCounterValuesGraphics](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "RemoteFX Graphics", pdh.InstancesAll) if err != nil { errs = append(errs, fmt.Errorf("failed to create RemoteFX Graphics collector: %w", err)) } diff --git a/internal/collector/smb/smb.go b/internal/collector/smb/smb.go index e3e071e9..f4b6b38f 100644 --- a/internal/collector/smb/smb.go +++ b/internal/collector/smb/smb.go @@ -77,7 +77,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.currentOpenFileCount = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "server_shares_current_open_file_count"), "Current total count open files on the SMB Server Share", @@ -129,7 +129,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "SMB Server Shares", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "SMB Server Shares", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create SMB Server Shares collector: %w", err) } diff --git a/internal/collector/smbclient/smbclient.go b/internal/collector/smbclient/smbclient.go index b9f31f32..5d7ed56f 100644 --- a/internal/collector/smbclient/smbclient.go +++ b/internal/collector/smbclient/smbclient.go @@ -92,7 +92,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { // desc creates a new prometheus description desc := func(metricName string, description string, labels []string) *prometheus.Desc { return prometheus.NewDesc( @@ -190,7 +190,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "SMB Client Shares", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "SMB Client Shares", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create SMB Client Shares collector: %w", err) } diff --git a/internal/collector/smtp/smtp.go b/internal/collector/smtp/smtp.go index 451ec2bb..e33e664c 100644 --- a/internal/collector/smtp/smtp.go +++ b/internal/collector/smtp/smtp.go @@ -418,7 +418,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "SMTP Server", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "SMTP Server", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create SMTP Server collector: %w", err) } diff --git a/internal/collector/system/system.go b/internal/collector/system/system.go index 5bec3fda..a2068880 100644 --- a/internal/collector/system/system.go +++ b/internal/collector/system/system.go @@ -82,7 +82,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.bootTime = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "boot_time_timestamp"), "Unix timestamp of system boot time", @@ -137,7 +137,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "System", nil) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "System", nil) if err != nil { return fmt.Errorf("failed to create System collector: %w", err) } diff --git a/internal/collector/tcp/tcp.go b/internal/collector/tcp/tcp.go index 5dcb9f35..9ece359f 100644 --- a/internal/collector/tcp/tcp.go +++ b/internal/collector/tcp/tcp.go @@ -127,7 +127,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { labels := []string{"af"} c.connectionFailures = prometheus.NewDesc( @@ -196,12 +196,12 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { if slices.Contains(c.config.CollectorsEnabled, subCollectorMetrics) { var err error - c.perfDataCollector4, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "TCPv4", nil) + c.perfDataCollector4, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "TCPv4", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create TCPv4 collector: %w", err)) } - c.perfDataCollector6, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "TCPv6", nil) + c.perfDataCollector6, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "TCPv6", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create TCPv6 collector: %w", err)) } diff --git a/internal/collector/terminal_services/terminal_services.go b/internal/collector/terminal_services/terminal_services.go index 4537f770..43e965d1 100644 --- a/internal/collector/terminal_services/terminal_services.go +++ b/internal/collector/terminal_services/terminal_services.go @@ -237,7 +237,7 @@ func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error { c.connectionBrokerEnabled = isConnectionBrokerServer(miSession) if c.connectionBrokerEnabled { - c.perfDataCollectorBroker, err = pdh.NewCollector[perfDataCounterValuesBroker](pdh.CounterTypeRaw, "Remote Desktop Connection Broker Counterset", pdh.InstancesAll) + c.perfDataCollectorBroker, err = pdh.NewCollector[perfDataCounterValuesBroker](c.logger, pdh.CounterTypeRaw, "Remote Desktop Connection Broker Counterset", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Remote Desktop Connection Broker Counterset collector: %w", err) } @@ -250,7 +250,7 @@ func (c *Collector) Build(logger *slog.Logger, miSession *mi.Session) error { return fmt.Errorf("failed to open WTS server: %w", err) } - c.perfDataCollectorTerminalServicesSession, err = pdh.NewCollector[perfDataCounterValuesTerminalServicesSession](pdh.CounterTypeRaw, "Terminal Services Session", pdh.InstancesAll) + c.perfDataCollectorTerminalServicesSession, err = pdh.NewCollector[perfDataCounterValuesTerminalServicesSession](c.logger, pdh.CounterTypeRaw, "Terminal Services Session", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Terminal Services Session collector: %w", err) } diff --git a/internal/collector/thermalzone/thermalzone.go b/internal/collector/thermalzone/thermalzone.go index 83b435cf..051032f3 100644 --- a/internal/collector/thermalzone/thermalzone.go +++ b/internal/collector/thermalzone/thermalzone.go @@ -71,7 +71,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.temperature = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "temperature_celsius"), "(Temperature)", @@ -99,7 +99,7 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Thermal Zone Information", pdh.InstancesAll) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "Thermal Zone Information", pdh.InstancesAll) if err != nil { return fmt.Errorf("failed to create Thermal Zone Information collector: %w", err) } diff --git a/internal/collector/time/time.go b/internal/collector/time/time.go index a29b8762..e058794a 100644 --- a/internal/collector/time/time.go +++ b/internal/collector/time/time.go @@ -206,7 +206,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { if slices.Contains(c.config.CollectorsEnabled, collectorNTP) { var err error - c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "Windows Time Service", nil) + c.perfDataCollector, err = pdh.NewCollector[perfDataCounterValues](c.logger, pdh.CounterTypeRaw, "Windows Time Service", nil) if err != nil { return fmt.Errorf("failed to create Windows Time Service collector: %w", err) } diff --git a/internal/collector/udp/udp.go b/internal/collector/udp/udp.go index 977f4b2c..b01af81b 100644 --- a/internal/collector/udp/udp.go +++ b/internal/collector/udp/udp.go @@ -82,7 +82,7 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { c.datagramsNoPortTotal = prometheus.NewDesc( prometheus.BuildFQName(types.Namespace, Name, "datagram_no_port_total"), "Number of received UDP datagrams for which there was no application at the destination port", @@ -112,12 +112,12 @@ func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { var err error - c.perfDataCollector4, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "UDPv4", nil) + c.perfDataCollector4, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "UDPv4", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create UDPv4 collector: %w", err)) } - c.perfDataCollector6, err = pdh.NewCollector[perfDataCounterValues](pdh.CounterTypeRaw, "UDPv6", nil) + c.perfDataCollector6, err = pdh.NewCollector[perfDataCounterValues](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "UDPv6", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create UDPv6 collector: %w", err)) } diff --git a/internal/collector/vmware/vmware.go b/internal/collector/vmware/vmware.go index 60a8f5de..71b34ca5 100644 --- a/internal/collector/vmware/vmware.go +++ b/internal/collector/vmware/vmware.go @@ -94,18 +94,18 @@ func (c *Collector) Close() error { return nil } -func (c *Collector) Build(_ *slog.Logger, _ *mi.Session) error { +func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error { var ( err error errs []error ) - c.perfDataCollectorCPU, err = pdh.NewCollector[perfDataCounterValuesCPU](pdh.CounterTypeRaw, "VM Processor", pdh.InstancesTotal) + c.perfDataCollectorCPU, err = pdh.NewCollector[perfDataCounterValuesCPU](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "VM Processor", pdh.InstancesTotal) if err != nil { errs = append(errs, fmt.Errorf("failed to create VM Processor collector: %w", err)) } - c.perfDataCollectorMemory, err = pdh.NewCollector[perfDataCounterValuesMemory](pdh.CounterTypeRaw, "VM Memory", nil) + c.perfDataCollectorMemory, err = pdh.NewCollector[perfDataCounterValuesMemory](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "VM Memory", nil) if err != nil { errs = append(errs, fmt.Errorf("failed to create VM Memory collector: %w", err)) } diff --git a/internal/pdh/collector.go b/internal/pdh/collector.go index c2dfe117..ef7e639b 100644 --- a/internal/pdh/collector.go +++ b/internal/pdh/collector.go @@ -20,6 +20,7 @@ package pdh import ( "errors" "fmt" + "log/slog" "reflect" "slices" "strconv" @@ -47,6 +48,7 @@ type Collector struct { handle pdhQueryHandle totalCounterRequested bool mu sync.RWMutex + logger *slog.Logger nameIndexValue int metricsTypeIndexValue int @@ -67,13 +69,13 @@ type Counter struct { FieldIndexSecondValue int } -func NewCollector[T any](resultType CounterType, object string, instances []string) (*Collector, error) { +func NewCollector[T any](logger *slog.Logger, resultType CounterType, object string, instances []string) (*Collector, error) { valueType := reflect.TypeFor[T]() - return NewCollectorWithReflection(resultType, object, instances, valueType) + return NewCollectorWithReflection(logger, resultType, object, instances, valueType) } -func NewCollectorWithReflection(resultType CounterType, object string, instances []string, valueType reflect.Type) (*Collector, error) { +func NewCollectorWithReflection(logger *slog.Logger, resultType CounterType, object string, instances []string, valueType reflect.Type) (*Collector, error) { var handle pdhQueryHandle if ret := OpenQuery(0, 0, &handle); ret != ErrorSuccess { @@ -94,6 +96,7 @@ func NewCollectorWithReflection(resultType CounterType, object string, instances handle: handle, totalCounterRequested: slices.Contains(instances, InstanceTotal), mu: sync.RWMutex{}, + logger: logger, nameIndexValue: -1, metricsTypeIndexValue: -1, } @@ -369,6 +372,12 @@ func (c *Collector) collectWorkerRaw() { for _, item := range items { if item.RawValue.CStatus != CstatusValidData && item.RawValue.CStatus != CstatusNewData { + c.logger.Debug("skipping counter item with invalid data status", + slog.String("counter", counter.Name), + slog.String("instance", windows.UTF16PtrToString(item.SzName)), + slog.Uint64("status", uint64(item.RawValue.CStatus)), + ) + continue } diff --git a/internal/pdh/collector_bench_test.go b/internal/pdh/collector_bench_test.go index 9766b59e..666a2af1 100644 --- a/internal/pdh/collector_bench_test.go +++ b/internal/pdh/collector_bench_test.go @@ -18,6 +18,7 @@ package pdh_test import ( + "log/slog" "testing" "github.com/prometheus-community/windows_exporter/internal/pdh" @@ -58,7 +59,7 @@ type processFull struct { } func BenchmarkTestCollector(b *testing.B) { - performanceData, err := pdh.NewCollector[processFull](pdh.CounterTypeRaw, "Process", []string{"*"}) + performanceData, err := pdh.NewCollector[processFull](slog.New(slog.DiscardHandler), pdh.CounterTypeRaw, "Process", []string{"*"}) require.NoError(b, err) var data []processFull diff --git a/internal/pdh/collector_test.go b/internal/pdh/collector_test.go index 904786b9..98c17fc9 100644 --- a/internal/pdh/collector_test.go +++ b/internal/pdh/collector_test.go @@ -18,6 +18,7 @@ package pdh_test import ( + "log/slog" "testing" "time" @@ -45,7 +46,7 @@ func TestCollector(t *testing.T) { t.Run(tc.object, func(t *testing.T) { t.Parallel() - performanceData, err := pdh.NewCollector[process](pdh.CounterTypeRaw, tc.object, tc.instances) + performanceData, err := pdh.NewCollector[process](slog.New(slog.DiscardHandler), pdh.CounterTypeRaw, tc.object, tc.instances) require.NoError(t, err) time.Sleep(100 * time.Millisecond)