summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/windows
diff options
context:
space:
mode:
Diffstat (limited to '')
l---------src/go/collectors/go.d.plugin/modules/windows/README.md1
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/charts.go4933
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect.go163
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_ad.go100
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_adcs.go70
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_adfs.go119
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_collector.go46
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_cpu.go78
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_exchange.go244
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_hyperv.go288
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_iis.go140
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_logical_disk.go95
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_logon.go24
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_memory.go78
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_mssql.go259
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_net.go90
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_netframework.go531
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_os.go47
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_process.go95
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_service.go56
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_system.go29
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_tcp.go65
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/collect_thermalzone.go45
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/config_schema.json184
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/init.go25
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/active_directory.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/hyperv.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/ms_exchange.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/ms_sql_server.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/net_framework.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/integrations/windows.md808
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/metadata.yaml2172
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/testdata/config.json21
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/testdata/config.yaml18
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/testdata/v0.20.0/metrics.txt3129
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/windows.go171
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/windows_test.go1100
37 files changed, 19264 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/windows/README.md b/src/go/collectors/go.d.plugin/modules/windows/README.md
new file mode 120000
index 000000000..802d61bd1
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/README.md
@@ -0,0 +1 @@
+integrations/windows.md \ No newline at end of file
diff --git a/src/go/collectors/go.d.plugin/modules/windows/charts.go b/src/go/collectors/go.d.plugin/modules/windows/charts.go
new file mode 100644
index 000000000..8ed5848c6
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/charts.go
@@ -0,0 +1,4933 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "fmt"
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+)
+
+const (
+ prioCPUUtil = module.Priority + iota
+ prioCPUCoreUtil
+ prioCPUInterrupts
+ prioCPUDPCs
+ prioCPUCoreCState
+
+ prioMemUtil
+ prioMemPageFaults
+ prioMemSwapUtil
+ prioMemSwapOperations
+ prioMemSwapPages
+ prioMemCache
+ prioMemCacheFaults
+ prioMemSystemPool
+
+ prioDiskSpaceUsage
+ prioDiskBandwidth
+ prioDiskOperations
+ prioDiskAvgLatency
+
+ prioNICBandwidth
+ prioNICPackets
+ prioNICErrors
+ prioNICDiscards
+
+ prioTCPConnsEstablished
+ prioTCPConnsActive
+ prioTCPConnsPassive
+ prioTCPConnsFailure
+ prioTCPConnsReset
+ prioTCPSegmentsReceived
+ prioTCPSegmentsSent
+ prioTCPSegmentsRetransmitted
+
+ prioOSProcesses
+ prioOSUsers
+ prioOSVisibleMemoryUsage
+ prioOSPagingUsage
+
+ prioSystemThreads
+ prioSystemUptime
+
+ prioLogonSessions
+
+ prioThermalzoneTemperature
+
+ prioProcessesCPUUtilization
+ prioProcessesMemoryUsage
+ prioProcessesIOBytes
+ prioProcessesIOOperations
+ prioProcessesPageFaults
+ prioProcessesPageFileBytes
+ prioProcessesThreads
+ prioProcessesHandles
+
+ prioIISWebsiteTraffic
+ prioIISWebsiteFTPFileTransferRate
+ prioIISWebsiteActiveConnectionsCount
+ prioIISWebsiteRequestsRate
+ prioIISWebsiteConnectionAttemptsRate
+ prioIISWebsiteUsersCount
+ prioIISWebsiteISAPIExtRequestsCount
+ prioIISWebsiteISAPIExtRequestsRate
+ prioIISWebsiteErrorsRate
+ prioIISWebsiteLogonAttemptsRate
+ prioIISWebsiteUptime
+
+ // Connections
+ prioMSSQLUserConnections
+
+ // Transactions
+ prioMSSQLDatabaseTransactions
+ prioMSSQLDatabaseActiveTransactions
+ prioMSSQLDatabaseWriteTransactions
+ prioMSSQLDatabaseBackupRestoreOperations
+ prioMSSQLDatabaseLogFlushes
+ prioMSSQLDatabaseLogFlushed
+
+ // Size
+ prioMSSQLDatabaseDataFileSize
+
+ // SQL activity
+ prioMSSQLStatsBatchRequests
+ prioMSSQLStatsCompilations
+ prioMSSQLStatsRecompilations
+ prioMSSQLStatsAutoParameterization
+ prioMSSQLStatsSafeAutoParameterization
+
+ // Processes
+ prioMSSQLBlockedProcess
+
+ // Buffer Cache
+ prioMSSQLCacheHitRatio
+ prioMSSQLBufManIOPS
+ prioMSSQLBufferCheckpointPages
+ prioMSSQLAccessMethodPageSplits
+ prioMSSQLBufferPageLifeExpectancy
+
+ // Memory
+ prioMSSQLMemmgrConnectionMemoryBytes
+ prioMSSQLMemTotalServer
+ prioMSSQLMemmgrExternalBenefitOfMemory
+ prioMSSQLMemmgrPendingMemoryGrants
+
+ // Locks
+ prioMSSQLLocksLockWait
+ prioMSSQLLocksDeadLocks
+
+ // Error
+ prioMSSQLSqlErrorsTotal
+
+ // NET Framework
+ // Exceptions
+ prioNETFrameworkCLRExceptionsThrown
+ prioNETFrameworkCLRExceptionsFilters
+ prioNETFrameworkCLRExceptionsFinallys
+ prioNETFrameworkCLRExceptionsThrowToCatchDepth
+
+ // InterOP
+ prioNETFrameworkCLRInteropCOMCallableWrappers
+ prioNETFrameworkCLRInteropMarshalling
+ prioNETFrameworkCLRInteropStubsCreated
+ prioNETFrameworkCLRJITMethods
+
+ // JIT
+ prioNETFrameworkCLRJITTime
+ prioNETFrameworkCLRJITStandardFailures
+ prioNETFrameworkCLRJITILBytes
+
+ // Loading
+ prioNETFrameworkCLRLoadingLoaderHeapSize
+ prioNETFrameworkCLRLoadingAppDomainsLoaded
+ prioNETFrameworkCLRLoadingAppDomainsUnloaded
+ prioNETFrameworkCLRLoadingAssembliesLoaded
+ prioNETFrameworkCLRLoadingClassesLoaded
+ prioNETFrameworkCLRLoadingClassLoadFailure
+
+ // Locks and threads
+ prioNETFrameworkCLRLocksAndThreadsQueueLength
+ prioNETFrameworkCLRLocksAndThreadsCurrentLogicalThreads
+ prioNETFrameworkCLRLocksAndThreadsCurrentPhysicalThreads
+ prioNETFrameworkCLRLocksAndThreadsRecognizedThreads
+ prioNETFrameworkCLRLocksAndThreadsContentions
+
+ // Memory
+ prioNETFrameworkCLRMemoryAllocatedBytes
+ prioNETFrameworkCLRMemoryFinalizationSurvivors
+ prioNETFrameworkCLRMemoryHeapSize
+ prioNETFrameworkCLRMemoryPromoted
+ prioNETFrameworkCLRMemoryNumberGCHandles
+ prioNETFrameworkCLRMemoryCollections
+ prioNETFrameworkCLRMemoryInducedGC
+ prioNETFrameworkCLRMemoryNumberPinnedObjects
+ prioNETFrameworkCLRMemoryNumberSinkBlocksInUse
+ prioNETFrameworkCLRMemoryCommitted
+ prioNETFrameworkCLRMemoryReserved
+ prioNETFrameworkCLRMemoryGCTime
+
+ // Remoting
+ prioNETFrameworkCLRRemotingChannels
+ prioNETFrameworkCLRRemotingContextBoundClassesLoaded
+ prioNETFrameworkCLRRemotingContextBoundObjects
+ prioNETFrameworkCLRRemotingContextProxies
+ prioNETFrameworkCLRRemotingContexts
+ prioNETFrameworkCLRRemotingRemoteCalls
+
+ // Security
+ prioNETFrameworkCLRSecurityLinkTimeChecks
+ prioNETFrameworkCLRSecurityRTChecksTime
+ prioNETFrameworkCLRSecurityStackWalkDepth
+ prioNETFrameworkCLRSecurityRuntimeChecks
+
+ prioServiceState
+ prioServiceStatus
+
+ // Database
+ prioADDatabaseOperations
+ prioADDirectoryOperations
+ prioADNameCacheLookups
+ prioADCacheHits
+
+ // Replication
+ prioADDRAReplicationIntersiteCompressedTraffic
+ prioADDRAReplicationIntrasiteCompressedTraffic
+ prioADDRAReplicationSyncObjectsRemaining
+ prioADDRAReplicationPropertiesUpdated
+ prioADDRAReplicationPropertiesFiltered
+ prioADDRAReplicationObjectsFiltered
+ prioADReplicationPendingSyncs
+ prioADDRASyncRequests
+ prioADDirectoryServiceThreadsInUse
+
+ // Bind
+ prioADLDAPBindTime
+ prioADBindsTotal
+
+ // LDAP
+ prioADLDAPSearchesTotal
+
+ // Thread Queue
+ prioADATQAverageRequestLatency
+ prioADATQOutstandingRequests
+
+ // Requests
+ prioADCSCertTemplateRequests
+ prioADCSCertTemplateRequestProcessingTime
+ prioADCSCertTemplateRetrievals
+ prioADCSCertTemplateFailedRequests
+ prioADCSCertTemplateIssuesRequests
+ prioADCSCertTemplatePendingRequests
+
+ // Response
+ prioADCSCertTemplateChallengeResponses
+
+ // Retrieval
+ prioADCSCertTemplateRetrievalProcessingTime
+
+ // Timing
+ prioADCSCertTemplateRequestCryptoSigningTime
+ prioADCSCertTemplateRequestPolicyModuleProcessingTime
+ prioADCSCertTemplateChallengeResponseProcessingTime
+ prioADCSCertTemplateSignedCertificateTimestampLists
+ prioADCSCertTemplateSignedCertificateTimestampListProcessingTime
+
+ // ADFS
+ // AD
+ prioADFSADLoginConnectionFailures
+
+ // DB Artifacts
+ prioADFSDBArtifactFailures
+ prioADFSDBArtifactQueryTimeSeconds
+
+ // DB Config
+ prioADFSDBConfigFailures
+ prioADFSDBConfigQueryTimeSeconds
+
+ // Auth
+ prioADFSDeviceAuthentications
+ prioADFSExternalAuthentications
+ prioADFSOauthAuthorizationRequests
+ prioADFSCertificateAuthentications
+ prioADFSOauthClientAuthentications
+ prioADFSPassportAuthentications
+ prioADFSSSOAuthentications
+ prioADFSUserPasswordAuthentications
+ prioADFSWindowsIntegratedAuthentications
+
+ // OAuth
+ prioADFSOauthClientCredentials
+ prioADFSOauthClientPrivkeyJwtAuthentication
+ prioADFSOauthClientSecretBasicAuthentications
+ prioADFSOauthClientSecretPostAuthentications
+ prioADFSOauthClientWindowsAuthentications
+ prioADFSOauthLogonCertificateRequests
+ prioADFSOauthPasswordGrantRequests
+ prioADFSOauthTokenRequestsSuccess
+ prioADFSFederatedAuthentications
+
+ // Requests
+ prioADFSFederationMetadataRequests
+ prioADFSPassiveRequests
+ prioADFSPasswordChangeRequests
+ prioADFSSAMLPTokenRequests
+ prioADFSWSTrustTokenRequestsSuccess
+ prioADFSTokenRequests
+ prioADFSWSFedTokenRequestsSuccess
+
+ // Exchange
+ // Transport Queue
+ prioExchangeTransportQueuesActiveMailboxDelivery
+ prioExchangeTransportQueuesExternalActiveRemoteDelivery
+ prioExchangeTransportQueuesExternalLargestDelivery
+ prioExchangeTransportQueuesInternalActiveRemoteDeliery
+ prioExchangeTransportQueuesInternalLargestDelivery
+ prioExchangeTransportQueuesRetryMailboxDelivery
+ prioExchangeTransportQueuesUnreachable
+ prioExchangeTransportQueuesPoison
+
+ // LDAP
+ prioExchangeLDAPLongRunningOPS
+ prioExchangeLDAPReadTime
+ prioExchangeLDAPSearchTime
+ prioExchangeLDAPWriteTime
+ prioExchangeLDAPTimeoutErrors
+
+ // OWA
+ prioExchangeOWACurrentUniqueUsers
+ prioExchangeOWARequestsTotal
+
+ // Sync
+ prioExchangeActiveSyncPingCMDsPending
+ prioExchangeActiveSyncRequests
+ prioExchangeActiveSyncSyncCMDs
+
+ // RPC
+ prioExchangeRPCActiveUserCount
+ prioExchangeRPCAvgLatency
+ prioExchangeRPCConnectionCount
+ prioExchangeRPCOperationsTotal
+ prioExchangeRPCRequests
+ prioExchangeRpcUserCount
+
+ // Workload
+ prioExchangeWorkloadActiveTasks
+ prioExchangeWorkloadCompleteTasks
+ prioExchangeWorkloadQueueTasks
+ prioExchangeWorkloadYieldedTasks
+ prioExchangeWorkloadActivityStatus
+
+ // HTTP Proxy
+ prioExchangeHTTPProxyAVGAuthLatency
+ prioExchangeHTTPProxyAVGCASProcessingLatency
+ prioExchangeHTTPProxyMailboxProxyFailureRate
+ prioExchangeHTTPProxyServerLocatorAvgLatency
+ prioExchangeHTTPProxyOutstandingProxyRequests
+ prioExchangeHTTPProxyRequestsTotal
+
+ // Request
+ prioExchangeAutoDiscoverRequests
+ prioExchangeAvailServiceRequests
+
+ // Hyperv Health
+ prioHypervVMHealth
+
+ // Hyperv Partition
+ prioHypervRootPartitionDeviceSpacePages
+ prioHypervRootPartitionGPASpacePages
+ prioHypervRootPartitionGPASpaceModifications
+ prioHypervRootPartitionAttachedDevices
+ prioHypervRootPartitionDepositedPages
+ prioHypervRootPartitionSkippedInterrupts
+ prioHypervRootPartitionDeviceDMAErrors
+ prioHypervRootPartitionDeviceInterruptErrors
+ prioHypervRootPartitionDeviceInterruptThrottleEvents
+ prioHypervRootPartitionIOTlbFlush
+ prioHypervRootPartitionAddressSpace
+ prioHypervRootPartitionVirtualTlbFlushEntires
+ prioHypervRootPartitionVirtualTlbPages
+
+ // Hyperv VM (Memory)
+ prioHypervVMCPUUsage
+ prioHypervVMMemoryPhysical
+ prioHypervVMMemoryPhysicalGuestVisible
+ prioHypervVMMemoryPressureCurrent
+ prioHypervVIDPhysicalPagesAllocated
+ prioHypervVIDRemotePhysicalPages
+
+ // Hyperv Device
+ prioHypervVMDeviceBytes
+ prioHypervVMDeviceOperations
+ prioHypervVMDeviceErrors
+
+ // Hyperv Interface
+ prioHypervVMInterfaceBytes
+ prioHypervVMInterfacePacketsDropped
+ prioHypervVMInterfacePackets
+
+ // Hyperv Vswitch
+ prioHypervVswitchTrafficTotal
+ prioHypervVswitchPackets
+ prioHypervVswitchDirectedPackets
+ prioHypervVswitchBroadcastPackets
+ prioHypervVswitchMulticastPackets
+ prioHypervVswitchDroppedPackets
+ prioHypervVswitchExtensionsDroppedPackets
+ prioHypervVswitchPacketsFlooded
+ prioHypervVswitchLearnedMACAddresses
+ prioHypervVswitchPurgeMACAddress
+
+ prioCollectorDuration
+ prioCollectorStatus
+)
+
+// CPU
+var (
+ cpuCharts = module.Charts{
+ cpuUtilChart.Copy(),
+ }
+ cpuUtilChart = module.Chart{
+ ID: "cpu_utilization_total",
+ Title: "Total CPU Utilization (all cores)",
+ Units: "percentage",
+ Fam: "cpu",
+ Ctx: "windows.cpu_utilization_total",
+ Type: module.Stacked,
+ Priority: prioCPUUtil,
+ Dims: module.Dims{
+ {ID: "cpu_idle_time", Name: "idle", Algo: module.PercentOfIncremental, Div: 1000, DimOpts: module.DimOpts{Hidden: true}},
+ {ID: "cpu_dpc_time", Name: "dpc", Algo: module.PercentOfIncremental, Div: 1000},
+ {ID: "cpu_user_time", Name: "user", Algo: module.PercentOfIncremental, Div: 1000},
+ {ID: "cpu_privileged_time", Name: "privileged", Algo: module.PercentOfIncremental, Div: 1000},
+ {ID: "cpu_interrupt_time", Name: "interrupt", Algo: module.PercentOfIncremental, Div: 1000},
+ },
+ }
+)
+
+// CPU core
+var (
+ cpuCoreChartsTmpl = module.Charts{
+ cpuCoreUtilChartTmpl.Copy(),
+ cpuCoreInterruptsChartTmpl.Copy(),
+ cpuDPCsChartTmpl.Copy(),
+ cpuCoreCStateChartTmpl.Copy(),
+ }
+ cpuCoreUtilChartTmpl = module.Chart{
+ ID: "core_%s_cpu_utilization",
+ Title: "Core CPU Utilization",
+ Units: "percentage",
+ Fam: "cpu",
+ Ctx: "windows.cpu_core_utilization",
+ Type: module.Stacked,
+ Priority: prioCPUCoreUtil,
+ Dims: module.Dims{
+ {ID: "cpu_core_%s_idle_time", Name: "idle", Algo: module.PercentOfIncremental, Div: precision, DimOpts: module.DimOpts{Hidden: true}},
+ {ID: "cpu_core_%s_dpc_time", Name: "dpc", Algo: module.PercentOfIncremental, Div: precision},
+ {ID: "cpu_core_%s_user_time", Name: "user", Algo: module.PercentOfIncremental, Div: precision},
+ {ID: "cpu_core_%s_privileged_time", Name: "privileged", Algo: module.PercentOfIncremental, Div: precision},
+ {ID: "cpu_core_%s_interrupt_time", Name: "interrupt", Algo: module.PercentOfIncremental, Div: precision},
+ },
+ }
+ cpuCoreInterruptsChartTmpl = module.Chart{
+ ID: "cpu_core_%s_interrupts",
+ Title: "Received and Serviced Hardware Interrupts",
+ Units: "interrupts/s",
+ Fam: "cpu",
+ Ctx: "windows.cpu_core_interrupts",
+ Priority: prioCPUInterrupts,
+ Dims: module.Dims{
+ {ID: "cpu_core_%s_interrupts", Name: "interrupts", Algo: module.Incremental},
+ },
+ }
+ cpuDPCsChartTmpl = module.Chart{
+ ID: "cpu_core_%s_dpcs",
+ Title: "Received and Serviced Deferred Procedure Calls (DPC)",
+ Units: "dpc/s",
+ Fam: "cpu",
+ Ctx: "windows.cpu_core_dpcs",
+ Priority: prioCPUDPCs,
+ Dims: module.Dims{
+ {ID: "cpu_core_%s_dpcs", Name: "dpcs", Algo: module.Incremental},
+ },
+ }
+ cpuCoreCStateChartTmpl = module.Chart{
+ ID: "cpu_core_%s_cpu_cstate",
+ Title: "Core Time Spent in Low-Power Idle State",
+ Units: "percentage",
+ Fam: "cpu",
+ Ctx: "windows.cpu_core_cstate",
+ Type: module.Stacked,
+ Priority: prioCPUCoreCState,
+ Dims: module.Dims{
+ {ID: "cpu_core_%s_cstate_c1", Name: "c1", Algo: module.PercentOfIncremental, Div: precision},
+ {ID: "cpu_core_%s_cstate_c2", Name: "c2", Algo: module.PercentOfIncremental, Div: precision},
+ {ID: "cpu_core_%s_cstate_c3", Name: "c3", Algo: module.PercentOfIncremental, Div: precision},
+ },
+ }
+)
+
+// Memory
+var (
+ memCharts = module.Charts{
+ memUtilChart.Copy(),
+ memPageFaultsChart.Copy(),
+ memSwapUtilChart.Copy(),
+ memSwapOperationsChart.Copy(),
+ memSwapPagesChart.Copy(),
+ memCacheChart.Copy(),
+ memCacheFaultsChart.Copy(),
+ memSystemPoolChart.Copy(),
+ }
+ memUtilChart = module.Chart{
+ ID: "memory_utilization",
+ Title: "Memory Utilization",
+ Units: "bytes",
+ Fam: "mem",
+ Ctx: "windows.memory_utilization",
+ Type: module.Stacked,
+ Priority: prioMemUtil,
+ Dims: module.Dims{
+ {ID: "memory_available_bytes", Name: "available"},
+ {ID: "memory_used_bytes", Name: "used"},
+ },
+ }
+ memPageFaultsChart = module.Chart{
+ ID: "memory_page_faults",
+ Title: "Memory Page Faults",
+ Units: "pgfaults/s",
+ Fam: "mem",
+ Ctx: "windows.memory_page_faults",
+ Priority: prioMemPageFaults,
+ Dims: module.Dims{
+ {ID: "memory_page_faults_total", Name: "page_faults", Algo: module.Incremental},
+ },
+ }
+ memSwapUtilChart = module.Chart{
+ ID: "memory_swap_utilization",
+ Title: "Swap Utilization",
+ Units: "bytes",
+ Fam: "mem",
+ Ctx: "windows.memory_swap_utilization",
+ Type: module.Stacked,
+ Priority: prioMemSwapUtil,
+ Dims: module.Dims{
+ {ID: "memory_not_committed_bytes", Name: "available"},
+ {ID: "memory_committed_bytes", Name: "used"},
+ },
+ Vars: module.Vars{
+ {ID: "memory_commit_limit"},
+ },
+ }
+ memSwapOperationsChart = module.Chart{
+ ID: "memory_swap_operations",
+ Title: "Swap Operations",
+ Units: "operations/s",
+ Fam: "mem",
+ Ctx: "windows.memory_swap_operations",
+ Type: module.Area,
+ Priority: prioMemSwapOperations,
+ Dims: module.Dims{
+ {ID: "memory_swap_page_reads_total", Name: "read", Algo: module.Incremental},
+ {ID: "memory_swap_page_writes_total", Name: "write", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ memSwapPagesChart = module.Chart{
+ ID: "memory_swap_pages",
+ Title: "Swap Pages",
+ Units: "pages/s",
+ Fam: "mem",
+ Ctx: "windows.memory_swap_pages",
+ Priority: prioMemSwapPages,
+ Dims: module.Dims{
+ {ID: "memory_swap_pages_read_total", Name: "read", Algo: module.Incremental},
+ {ID: "memory_swap_pages_written_total", Name: "written", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ memCacheChart = module.Chart{
+ ID: "memory_cached",
+ Title: "Cached",
+ Units: "bytes",
+ Fam: "mem",
+ Ctx: "windows.memory_cached",
+ Type: module.Area,
+ Priority: prioMemCache,
+ Dims: module.Dims{
+ {ID: "memory_cache_total", Name: "cached"},
+ },
+ }
+ memCacheFaultsChart = module.Chart{
+ ID: "memory_cache_faults",
+ Title: "Cache Faults",
+ Units: "faults/s",
+ Fam: "mem",
+ Ctx: "windows.memory_cache_faults",
+ Priority: prioMemCacheFaults,
+ Dims: module.Dims{
+ {ID: "memory_cache_faults_total", Name: "cache_faults", Algo: module.Incremental},
+ },
+ }
+ memSystemPoolChart = module.Chart{
+ ID: "memory_system_pool",
+ Title: "System Memory Pool",
+ Units: "bytes",
+ Fam: "mem",
+ Ctx: "windows.memory_system_pool",
+ Type: module.Stacked,
+ Priority: prioMemSystemPool,
+ Dims: module.Dims{
+ {ID: "memory_pool_paged_bytes", Name: "paged"},
+ {ID: "memory_pool_nonpaged_bytes_total", Name: "non-paged"},
+ },
+ }
+)
+
+// Logical Disks
+var (
+ diskChartsTmpl = module.Charts{
+ diskSpaceUsageChartTmpl.Copy(),
+ diskBandwidthChartTmpl.Copy(),
+ diskOperationsChartTmpl.Copy(),
+ diskAvgLatencyChartTmpl.Copy(),
+ }
+ diskSpaceUsageChartTmpl = module.Chart{
+ ID: "logical_disk_%s_space_usage",
+ Title: "Space usage",
+ Units: "bytes",
+ Fam: "disk",
+ Ctx: "windows.logical_disk_space_usage",
+ Type: module.Stacked,
+ Priority: prioDiskSpaceUsage,
+ Dims: module.Dims{
+ {ID: "logical_disk_%s_free_space", Name: "free"},
+ {ID: "logical_disk_%s_used_space", Name: "used"},
+ },
+ }
+ diskBandwidthChartTmpl = module.Chart{
+ ID: "logical_disk_%s_bandwidth",
+ Title: "Bandwidth",
+ Units: "bytes/s",
+ Fam: "disk",
+ Ctx: "windows.logical_disk_bandwidth",
+ Type: module.Area,
+ Priority: prioDiskBandwidth,
+ Dims: module.Dims{
+ {ID: "logical_disk_%s_read_bytes_total", Name: "read", Algo: module.Incremental},
+ {ID: "logical_disk_%s_write_bytes_total", Name: "write", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ diskOperationsChartTmpl = module.Chart{
+ ID: "logical_disk_%s_operations",
+ Title: "Operations",
+ Units: "operations/s",
+ Fam: "disk",
+ Ctx: "windows.logical_disk_operations",
+ Priority: prioDiskOperations,
+ Dims: module.Dims{
+ {ID: "logical_disk_%s_reads_total", Name: "reads", Algo: module.Incremental},
+ {ID: "logical_disk_%s_writes_total", Name: "writes", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ diskAvgLatencyChartTmpl = module.Chart{
+ ID: "logical_disk_%s_latency",
+ Title: "Average Read/Write Latency",
+ Units: "seconds",
+ Fam: "disk",
+ Ctx: "windows.logical_disk_latency",
+ Priority: prioDiskAvgLatency,
+ Dims: module.Dims{
+ {ID: "logical_disk_%s_read_latency", Name: "read", Algo: module.Incremental, Div: precision},
+ {ID: "logical_disk_%s_write_latency", Name: "write", Algo: module.Incremental, Div: precision},
+ },
+ }
+)
+
+// Network interfaces
+var (
+ nicChartsTmpl = module.Charts{
+ nicBandwidthChartTmpl.Copy(),
+ nicPacketsChartTmpl.Copy(),
+ nicErrorsChartTmpl.Copy(),
+ nicDiscardsChartTmpl.Copy(),
+ }
+ nicBandwidthChartTmpl = module.Chart{
+ ID: "nic_%s_bandwidth",
+ Title: "Bandwidth",
+ Units: "kilobits/s",
+ Fam: "net",
+ Ctx: "windows.net_nic_bandwidth",
+ Type: module.Area,
+ Priority: prioNICBandwidth,
+ Dims: module.Dims{
+ {ID: "net_nic_%s_bytes_received", Name: "received", Algo: module.Incremental, Div: 1000},
+ {ID: "net_nic_%s_bytes_sent", Name: "sent", Algo: module.Incremental, Mul: -1, Div: 1000},
+ },
+ }
+ nicPacketsChartTmpl = module.Chart{
+ ID: "nic_%s_packets",
+ Title: "Packets",
+ Units: "packets/s",
+ Fam: "net",
+ Ctx: "windows.net_nic_packets",
+ Priority: prioNICPackets,
+ Dims: module.Dims{
+ {ID: "net_nic_%s_packets_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "net_nic_%s_packets_sent_total", Name: "sent", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ nicErrorsChartTmpl = module.Chart{
+ ID: "nic_%s_errors",
+ Title: "Errors",
+ Units: "errors/s",
+ Fam: "net",
+ Ctx: "windows.net_nic_errors",
+ Priority: prioNICErrors,
+ Dims: module.Dims{
+ {ID: "net_nic_%s_packets_received_errors", Name: "inbound", Algo: module.Incremental},
+ {ID: "net_nic_%s_packets_outbound_errors", Name: "outbound", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ nicDiscardsChartTmpl = module.Chart{
+ ID: "nic_%s_discarded",
+ Title: "Discards",
+ Units: "discards/s",
+ Fam: "net",
+ Ctx: "windows.net_nic_discarded",
+ Priority: prioNICDiscards,
+ Dims: module.Dims{
+ {ID: "net_nic_%s_packets_received_discarded", Name: "inbound", Algo: module.Incremental},
+ {ID: "net_nic_%s_packets_outbound_discarded", Name: "outbound", Algo: module.Incremental, Mul: -1},
+ },
+ }
+)
+
+// TCP
+var (
+ tcpCharts = module.Charts{
+ tcpConnsActiveChart.Copy(),
+ tcpConnsEstablishedChart.Copy(),
+ tcpConnsFailuresChart.Copy(),
+ tcpConnsPassiveChart.Copy(),
+ tcpConnsResetsChart.Copy(),
+ tcpSegmentsReceivedChart.Copy(),
+ tcpSegmentsRetransmittedChart.Copy(),
+ tcpSegmentsSentChart.Copy(),
+ }
+ tcpConnsEstablishedChart = module.Chart{
+ ID: "tcp_conns_established",
+ Title: "TCP established connections",
+ Units: "connections",
+ Fam: "tcp",
+ Ctx: "windows.tcp_conns_established",
+ Priority: prioTCPConnsEstablished,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_conns_established", Name: "ipv4"},
+ {ID: "tcp_ipv6_conns_established", Name: "ipv6"},
+ },
+ }
+ tcpConnsActiveChart = module.Chart{
+ ID: "tcp_conns_active",
+ Title: "TCP active connections",
+ Units: "connections/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_conns_active",
+ Priority: prioTCPConnsActive,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_conns_active", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_conns_active", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpConnsPassiveChart = module.Chart{
+ ID: "tcp_conns_passive",
+ Title: "TCP passive connections",
+ Units: "connections/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_conns_passive",
+ Priority: prioTCPConnsPassive,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_conns_passive", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_conns_passive", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpConnsFailuresChart = module.Chart{
+ ID: "tcp_conns_failures",
+ Title: "TCP connection failures",
+ Units: "failures/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_conns_failures",
+ Priority: prioTCPConnsFailure,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_conns_failures", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_conns_failures", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpConnsResetsChart = module.Chart{
+ ID: "tcp_conns_resets",
+ Title: "TCP connections resets",
+ Units: "resets/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_conns_resets",
+ Priority: prioTCPConnsReset,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_conns_resets", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_conns_resets", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpSegmentsReceivedChart = module.Chart{
+ ID: "tcp_segments_received",
+ Title: "Number of TCP segments received",
+ Units: "segments/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_segments_received",
+ Priority: prioTCPSegmentsReceived,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_segments_received", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_segments_received", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpSegmentsSentChart = module.Chart{
+ ID: "tcp_segments_sent",
+ Title: "Number of TCP segments sent",
+ Units: "segments/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_segments_sent",
+ Priority: prioTCPSegmentsSent,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_segments_sent", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_segments_sent", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+ tcpSegmentsRetransmittedChart = module.Chart{
+ ID: "tcp_segments_retransmitted",
+ Title: "Number of TCP segments retransmitted",
+ Units: "segments/s",
+ Fam: "tcp",
+ Ctx: "windows.tcp_segments_retransmitted",
+ Priority: prioTCPSegmentsRetransmitted,
+ Dims: module.Dims{
+ {ID: "tcp_ipv4_segments_retransmitted", Name: "ipv4", Algo: module.Incremental},
+ {ID: "tcp_ipv6_segments_retransmitted", Name: "ipv6", Algo: module.Incremental},
+ },
+ }
+)
+
+// OS
+var (
+ osCharts = module.Charts{
+ osProcessesChart.Copy(),
+ osUsersChart.Copy(),
+ osMemoryUsage.Copy(),
+ osPagingFilesUsageChart.Copy(),
+ }
+ osProcessesChart = module.Chart{
+ ID: "os_processes",
+ Title: "Processes",
+ Units: "number",
+ Fam: "os",
+ Ctx: "windows.os_processes",
+ Priority: prioOSProcesses,
+ Dims: module.Dims{
+ {ID: "os_processes", Name: "processes"},
+ },
+ Vars: module.Vars{
+ {ID: "os_processes_limit"},
+ },
+ }
+ osUsersChart = module.Chart{
+ ID: "os_users",
+ Title: "Number of Users",
+ Units: "users",
+ Fam: "os",
+ Ctx: "windows.os_users",
+ Priority: prioOSUsers,
+ Dims: module.Dims{
+ {ID: "os_users", Name: "users"},
+ },
+ }
+ osMemoryUsage = module.Chart{
+ ID: "os_visible_memory_usage",
+ Title: "Visible Memory Usage",
+ Units: "bytes",
+ Fam: "os",
+ Ctx: "windows.os_visible_memory_usage",
+ Type: module.Stacked,
+ Priority: prioOSVisibleMemoryUsage,
+ Dims: module.Dims{
+ {ID: "os_physical_memory_free_bytes", Name: "free"},
+ {ID: "os_visible_memory_used_bytes", Name: "used"},
+ },
+ Vars: module.Vars{
+ {ID: "os_visible_memory_bytes"},
+ },
+ }
+ osPagingFilesUsageChart = module.Chart{
+ ID: "os_paging_files_usage",
+ Title: "Paging Files Usage",
+ Units: "bytes",
+ Fam: "os",
+ Ctx: "windows.os_paging_files_usage",
+ Type: module.Stacked,
+ Priority: prioOSPagingUsage,
+ Dims: module.Dims{
+ {ID: "os_paging_free_bytes", Name: "free"},
+ {ID: "os_paging_used_bytes", Name: "used"},
+ },
+ Vars: module.Vars{
+ {ID: "os_paging_limit_bytes"},
+ },
+ }
+)
+
+// System
+var (
+ systemCharts = module.Charts{
+ systemThreadsChart.Copy(),
+ systemUptimeChart.Copy(),
+ }
+ systemThreadsChart = module.Chart{
+ ID: "system_threads",
+ Title: "Threads",
+ Units: "number",
+ Fam: "system",
+ Ctx: "windows.system_threads",
+ Priority: prioSystemThreads,
+ Dims: module.Dims{
+ {ID: "system_threads", Name: "threads"},
+ },
+ }
+ systemUptimeChart = module.Chart{
+ ID: "system_uptime",
+ Title: "Uptime",
+ Units: "seconds",
+ Fam: "system",
+ Ctx: "windows.system_uptime",
+ Priority: prioSystemUptime,
+ Dims: module.Dims{
+ {ID: "system_up_time", Name: "time"},
+ },
+ }
+)
+
+// IIS
+var (
+ iisWebsiteChartsTmpl = module.Charts{
+ iisWebsiteTrafficChartTempl.Copy(),
+ iisWebsiteRequestsRateChartTmpl.Copy(),
+ iisWebsiteActiveConnectionsCountChartTmpl.Copy(),
+ iisWebsiteUsersCountChartTmpl.Copy(),
+ iisWebsiteConnectionAttemptsRate.Copy(),
+ iisWebsiteISAPIExtRequestsCountChartTmpl.Copy(),
+ iisWebsiteISAPIExtRequestsRateChartTmpl.Copy(),
+ iisWebsiteFTPFileTransferRateChartTempl.Copy(),
+ iisWebsiteLogonAttemptsRateChartTmpl.Copy(),
+ iisWebsiteErrorsRateChart.Copy(),
+ iisWebsiteUptimeChartTmpl.Copy(),
+ }
+ iisWebsiteTrafficChartTempl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_traffic",
+ Title: "Website traffic",
+ Units: "bytes/s",
+ Fam: "traffic",
+ Ctx: "iis.website_traffic",
+ Type: module.Area,
+ Priority: prioIISWebsiteTraffic,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_received_bytes_total", Name: "received", Algo: module.Incremental},
+ {ID: "iis_website_%s_sent_bytes_total", Name: "sent", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ iisWebsiteFTPFileTransferRateChartTempl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_ftp_file_transfer_rate",
+ Title: "Website FTP file transfer rate",
+ Units: "files/s",
+ Fam: "traffic",
+ Ctx: "iis.website_ftp_file_transfer_rate",
+ Priority: prioIISWebsiteFTPFileTransferRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_files_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "iis_website_%s_files_sent_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteActiveConnectionsCountChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_active_connections_count",
+ Title: "Website active connections",
+ Units: "connections",
+ Fam: "connections",
+ Ctx: "iis.website_active_connections_count",
+ Priority: prioIISWebsiteActiveConnectionsCount,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_current_connections", Name: "active"},
+ },
+ }
+ iisWebsiteConnectionAttemptsRate = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_connection_attempts_rate",
+ Title: "Website connections attempts",
+ Units: "attempts/s",
+ Fam: "connections",
+ Ctx: "iis.website_connection_attempts_rate",
+ Priority: prioIISWebsiteConnectionAttemptsRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_connection_attempts_all_instances_total", Name: "connection", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteRequestsRateChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_requests_rate",
+ Title: "Website requests rate",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "iis.website_requests_rate",
+ Priority: prioIISWebsiteRequestsRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_requests_total", Name: "requests", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteUsersCountChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_users_count",
+ Title: "Website users with pending requests",
+ Units: "users",
+ Fam: "requests",
+ Ctx: "iis.website_users_count",
+ Type: module.Stacked,
+ Priority: prioIISWebsiteUsersCount,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_current_anonymous_users", Name: "anonymous"},
+ {ID: "iis_website_%s_current_non_anonymous_users", Name: "non_anonymous"},
+ },
+ }
+ iisWebsiteISAPIExtRequestsCountChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_isapi_extension_requests_count",
+ Title: "ISAPI extension requests",
+ Units: "requests",
+ Fam: "requests",
+ Ctx: "iis.website_isapi_extension_requests_count",
+ Priority: prioIISWebsiteISAPIExtRequestsCount,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_current_isapi_extension_requests", Name: "isapi"},
+ },
+ }
+ iisWebsiteISAPIExtRequestsRateChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_isapi_extension_requests_rate",
+ Title: "Website extensions request",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "iis.website_isapi_extension_requests_rate",
+ Priority: prioIISWebsiteISAPIExtRequestsRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_isapi_extension_requests_total", Name: "isapi", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteErrorsRateChart = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_errors_rate",
+ Title: "Website errors",
+ Units: "errors/s",
+ Fam: "requests",
+ Ctx: "iis.website_errors_rate",
+ Type: module.Stacked,
+ Priority: prioIISWebsiteErrorsRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_locked_errors_total", Name: "document_locked", Algo: module.Incremental},
+ {ID: "iis_website_%s_not_found_errors_total", Name: "document_not_found", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteLogonAttemptsRateChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_logon_attempts_rate",
+ Title: "Website logon attempts",
+ Units: "attempts/s",
+ Fam: "logon",
+ Ctx: "iis.website_logon_attempts_rate",
+ Priority: prioIISWebsiteLogonAttemptsRate,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_logon_attempts_total", Name: "logon", Algo: module.Incremental},
+ },
+ }
+ iisWebsiteUptimeChartTmpl = module.Chart{
+ OverModule: "iis",
+ ID: "iis_website_%s_uptime",
+ Title: "Website uptime",
+ Units: "seconds",
+ Fam: "uptime",
+ Ctx: "iis.website_uptime",
+ Priority: prioIISWebsiteUptime,
+ Dims: module.Dims{
+ {ID: "iis_website_%s_service_uptime", Name: "uptime"},
+ },
+ }
+)
+
+// MS-SQL
+var (
+ mssqlInstanceChartsTmpl = module.Charts{
+ mssqlAccessMethodPageSplitsChart.Copy(),
+ mssqlCacheHitRatioChart.Copy(),
+ mssqlBufferCheckpointPageChart.Copy(),
+ mssqlBufferPageLifeExpectancyChart.Copy(),
+ mssqlBufManIOPSChart.Copy(),
+ mssqlBlockedProcessChart.Copy(),
+ mssqlLocksWaitChart.Copy(),
+ mssqlDeadLocksChart.Copy(),
+ mssqlMemmgrConnectionMemoryBytesChart.Copy(),
+ mssqlMemmgrExternalBenefitOfMemoryChart.Copy(),
+ mssqlMemmgrPendingMemoryChart.Copy(),
+ mssqlMemmgrTotalServerChart.Copy(),
+ mssqlSQLErrorsTotalChart.Copy(),
+ mssqlStatsAutoParamChart.Copy(),
+ mssqlStatsBatchRequestsChart.Copy(),
+ mssqlStatsSafeAutoChart.Copy(),
+ mssqlStatsCompilationChart.Copy(),
+ mssqlStatsRecompilationChart.Copy(),
+ mssqlUserConnectionChart.Copy(),
+ }
+ mssqlDatabaseChartsTmpl = module.Charts{
+ mssqlDatabaseActiveTransactionsChart.Copy(),
+ mssqlDatabaseBackupRestoreOperationsChart.Copy(),
+ mssqlDatabaseSizeChart.Copy(),
+ mssqlDatabaseLogFlushedChart.Copy(),
+ mssqlDatabaseLogFlushesChart.Copy(),
+ mssqlDatabaseTransactionsChart.Copy(),
+ mssqlDatabaseWriteTransactionsChart.Copy(),
+ }
+ // Access Method:
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-access-methods-object?view=sql-server-ver16
+ mssqlAccessMethodPageSplitsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_accessmethods_page_splits",
+ Title: "Page splits",
+ Units: "splits/s",
+ Fam: "buffer cache",
+ Ctx: "mssql.instance_accessmethods_page_splits",
+ Priority: prioMSSQLAccessMethodPageSplits,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_accessmethods_page_splits", Name: "page", Algo: module.Incremental},
+ },
+ }
+ // Buffer Management
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-manager-object?view=sql-server-ver16
+ mssqlCacheHitRatioChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_cache_hit_ratio",
+ Title: "Buffer Cache hit ratio",
+ Units: "percentage",
+ Fam: "buffer cache",
+ Ctx: "mssql.instance_cache_hit_ratio",
+ Priority: prioMSSQLCacheHitRatio,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_cache_hit_ratio", Name: "hit_ratio"},
+ },
+ }
+ mssqlBufferCheckpointPageChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_bufman_checkpoint_pages",
+ Title: "Flushed pages",
+ Units: "pages/s",
+ Fam: "buffer cache",
+ Ctx: "mssql.instance_bufman_checkpoint_pages",
+ Priority: prioMSSQLBufferCheckpointPages,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_bufman_checkpoint_pages", Name: "flushed", Algo: module.Incremental},
+ },
+ }
+ mssqlBufferPageLifeExpectancyChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_bufman_page_life_expectancy",
+ Title: "Page life expectancy",
+ Units: "seconds",
+ Fam: "buffer cache",
+ Ctx: "mssql.instance_bufman_page_life_expectancy",
+ Priority: prioMSSQLBufferPageLifeExpectancy,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_bufman_page_life_expectancy_seconds", Name: "life_expectancy"},
+ },
+ }
+ mssqlBufManIOPSChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_bufman_iops",
+ Title: "Number of pages input and output",
+ Units: "pages/s",
+ Fam: "buffer cache",
+ Ctx: "mssql.instance_bufman_iops",
+ Priority: prioMSSQLBufManIOPS,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_bufman_page_reads", Name: "read", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_bufman_page_writes", Name: "written", Mul: -1, Algo: module.Incremental},
+ },
+ }
+ // General Statistic
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object?view=sql-server-ver16
+ mssqlBlockedProcessChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_blocked_process",
+ Title: "Blocked processes",
+ Units: "process",
+ Fam: "processes",
+ Ctx: "mssql.instance_blocked_processes",
+ Priority: prioMSSQLBlockedProcess,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_genstats_blocked_processes", Name: "blocked"},
+ },
+ }
+ mssqlUserConnectionChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_user_connection",
+ Title: "User connections",
+ Units: "connections",
+ Fam: "connections",
+ Ctx: "mssql.instance_user_connection",
+ Priority: prioMSSQLUserConnections,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_genstats_user_connections", Name: "user"},
+ },
+ }
+ // Lock Wait
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object?view=sql-server-ver16
+ mssqlLocksWaitChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_locks_lock_wait",
+ Title: "Lock requests that required the caller to wait",
+ Units: "locks/s",
+ Fam: "locks",
+ Ctx: "mssql.instance_locks_lock_wait",
+ Priority: prioMSSQLLocksLockWait,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_resource_AllocUnit_locks_lock_wait_seconds", Name: "alloc_unit", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Application_locks_lock_wait_seconds", Name: "application", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Database_locks_lock_wait_seconds", Name: "database", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Extent_locks_lock_wait_seconds", Name: "extent", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_File_locks_lock_wait_seconds", Name: "file", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_HoBT_locks_lock_wait_seconds", Name: "hobt", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Key_locks_lock_wait_seconds", Name: "key", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Metadata_locks_lock_wait_seconds", Name: "metadata", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_OIB_locks_lock_wait_seconds", Name: "oib", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Object_locks_lock_wait_seconds", Name: "object", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Page_locks_lock_wait_seconds", Name: "page", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_RID_locks_lock_wait_seconds", Name: "rid", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_RowGroup_locks_lock_wait_seconds", Name: "row_group", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Xact_locks_lock_wait_seconds", Name: "xact", Algo: module.Incremental},
+ },
+ }
+ mssqlDeadLocksChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_locks_deadlocks",
+ Title: "Lock requests that resulted in deadlock",
+ Units: "locks/s",
+ Fam: "locks",
+ Ctx: "mssql.instance_locks_deadlocks",
+ Priority: prioMSSQLLocksDeadLocks,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_resource_AllocUnit_locks_deadlocks", Name: "alloc_unit", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Application_locks_deadlocks", Name: "application", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Database_locks_deadlocks", Name: "database", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Extent_locks_deadlocks", Name: "extent", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_File_locks_deadlocks", Name: "file", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_HoBT_locks_deadlocks", Name: "hobt", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Key_locks_deadlocks", Name: "key", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Metadata_locks_deadlocks", Name: "metadata", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_OIB_locks_deadlocks", Name: "oib", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Object_locks_deadlocks", Name: "object", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Page_locks_deadlocks", Name: "page", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_RID_locks_deadlocks", Name: "rid", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_RowGroup_locks_deadlocks", Name: "row_group", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_resource_Xact_locks_deadlocks", Name: "xact", Algo: module.Incremental},
+ },
+ }
+
+ // Memory Manager
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object?view=sql-server-ver16
+ mssqlMemmgrConnectionMemoryBytesChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_memmgr_connection_memory_bytes",
+ Title: "Amount of dynamic memory to maintain connections",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "mssql.instance_memmgr_connection_memory_bytes",
+ Priority: prioMSSQLMemmgrConnectionMemoryBytes,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_memmgr_connection_memory_bytes", Name: "memory", Algo: module.Incremental},
+ },
+ }
+ mssqlMemmgrExternalBenefitOfMemoryChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_memmgr_external_benefit_of_memory",
+ Title: "Performance benefit from adding memory to a specific cache",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "mssql.instance_memmgr_external_benefit_of_memory",
+ Priority: prioMSSQLMemmgrExternalBenefitOfMemory,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_memmgr_external_benefit_of_memory", Name: "benefit", Algo: module.Incremental},
+ },
+ }
+ mssqlMemmgrPendingMemoryChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_memmgr_pending_memory_grants",
+ Title: "Process waiting for memory grant",
+ Units: "process",
+ Fam: "memory",
+ Ctx: "mssql.instance_memmgr_pending_memory_grants",
+ Priority: prioMSSQLMemmgrPendingMemoryGrants,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_memmgr_pending_memory_grants", Name: "pending"},
+ },
+ }
+ mssqlMemmgrTotalServerChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_memmgr_server_memory",
+ Title: "Memory committed",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "mssql.instance_memmgr_server_memory",
+ Priority: prioMSSQLMemTotalServer,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_memmgr_total_server_memory_bytes", Name: "memory"},
+ },
+ }
+
+ // SQL errors
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object?view=sql-server-ver16
+ mssqlSQLErrorsTotalChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sql_errors_total",
+ Title: "Errors",
+ Units: "errors/s",
+ Fam: "errors",
+ Ctx: "mssql.instance_sql_errors",
+ Priority: prioMSSQLSqlErrorsTotal,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sql_errors_total_db_offline_errors", Name: "db_offline", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_sql_errors_total_info_errors", Name: "info", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_sql_errors_total_kill_connection_errors", Name: "kill_connection", Algo: module.Incremental},
+ {ID: "mssql_instance_%s_sql_errors_total_user_errors", Name: "user", Algo: module.Incremental},
+ },
+ }
+
+ // SQL Statistic
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-ver16
+ mssqlStatsAutoParamChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts",
+ Title: "Failed auto-parameterization attempts",
+ Units: "attempts/s",
+ Fam: "sql activity",
+ Ctx: "mssql.instance_sqlstats_auto_parameterization_attempts",
+ Priority: prioMSSQLStatsAutoParameterization,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts", Name: "failed", Algo: module.Incremental},
+ },
+ }
+ mssqlStatsBatchRequestsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sqlstats_batch_requests",
+ Title: "Total of batches requests",
+ Units: "requests/s",
+ Fam: "sql activity",
+ Ctx: "mssql.instance_sqlstats_batch_requests",
+ Priority: prioMSSQLStatsBatchRequests,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sqlstats_batch_requests", Name: "batch", Algo: module.Incremental},
+ },
+ }
+ mssqlStatsSafeAutoChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts",
+ Title: "Safe auto-parameterization attempts",
+ Units: "attempts/s",
+ Fam: "sql activity",
+ Ctx: "mssql.instance_sqlstats_safe_auto_parameterization_attempts",
+ Priority: prioMSSQLStatsSafeAutoParameterization,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts", Name: "safe", Algo: module.Incremental},
+ },
+ }
+ mssqlStatsCompilationChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sqlstats_sql_compilations",
+ Title: "SQL compilations",
+ Units: "compilations/s",
+ Fam: "sql activity",
+ Ctx: "mssql.instance_sqlstats_sql_compilations",
+ Priority: prioMSSQLStatsCompilations,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sqlstats_sql_compilations", Name: "compilations", Algo: module.Incremental},
+ },
+ }
+ mssqlStatsRecompilationChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_instance_%s_sqlstats_sql_recompilations",
+ Title: "SQL re-compilations",
+ Units: "recompiles/s",
+ Fam: "sql activity",
+ Ctx: "mssql.instance_sqlstats_sql_recompilations",
+ Priority: prioMSSQLStatsRecompilations,
+ Dims: module.Dims{
+ {ID: "mssql_instance_%s_sqlstats_sql_recompilations", Name: "recompiles", Algo: module.Incremental},
+ },
+ }
+
+ // Database
+ // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object?view=sql-server-2017
+ mssqlDatabaseActiveTransactionsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_active_transactions",
+ Title: "Active transactions per database",
+ Units: "transactions",
+ Fam: "transactions",
+ Ctx: "mssql.database_active_transactions",
+ Priority: prioMSSQLDatabaseActiveTransactions,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_active_transactions", Name: "active"},
+ },
+ }
+ mssqlDatabaseBackupRestoreOperationsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_backup_restore_operations",
+ Title: "Backup IO per database",
+ Units: "operations/s",
+ Fam: "transactions",
+ Ctx: "mssql.database_backup_restore_operations",
+ Priority: prioMSSQLDatabaseBackupRestoreOperations,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_backup_restore_operations", Name: "backup", Algo: module.Incremental},
+ },
+ }
+ mssqlDatabaseSizeChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_data_files_size",
+ Title: "Current database size",
+ Units: "bytes",
+ Fam: "size",
+ Ctx: "mssql.database_data_files_size",
+ Priority: prioMSSQLDatabaseDataFileSize,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_data_files_size_bytes", Name: "size"},
+ },
+ }
+ mssqlDatabaseLogFlushedChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_log_flushed",
+ Title: "Log flushed",
+ Units: "bytes/s",
+ Fam: "transactions",
+ Ctx: "mssql.database_log_flushed",
+ Priority: prioMSSQLDatabaseLogFlushed,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_log_flushed_bytes", Name: "flushed", Algo: module.Incremental},
+ },
+ }
+ mssqlDatabaseLogFlushesChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_log_flushes",
+ Title: "Log flushes",
+ Units: "flushes/s",
+ Fam: "transactions",
+ Ctx: "mssql.database_log_flushes",
+ Priority: prioMSSQLDatabaseLogFlushes,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_log_flushes", Name: "log", Algo: module.Incremental},
+ },
+ }
+ mssqlDatabaseTransactionsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_transactions",
+ Title: "Transactions",
+ Units: "transactions/s",
+ Fam: "transactions",
+ Ctx: "mssql.database_transactions",
+ Priority: prioMSSQLDatabaseTransactions,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_transactions", Name: "transactions", Algo: module.Incremental},
+ },
+ }
+ mssqlDatabaseWriteTransactionsChart = module.Chart{
+ OverModule: "mssql",
+ ID: "mssql_db_%s_instance_%s_write_transactions",
+ Title: "Write transactions",
+ Units: "transactions/s",
+ Fam: "transactions",
+ Ctx: "mssql.database_write_transactions",
+ Priority: prioMSSQLDatabaseWriteTransactions,
+ Dims: module.Dims{
+ {ID: "mssql_db_%s_instance_%s_write_transactions", Name: "write", Algo: module.Incremental},
+ },
+ }
+)
+
+// AD
+var (
+ adCharts = module.Charts{
+ adDatabaseOperationsChart.Copy(),
+ adDirectoryOperationsChart.Copy(),
+ adNameCacheLookupsChart.Copy(),
+ adNameCacheHitsChart.Copy(),
+ adDRAReplicationIntersiteCompressedTrafficChart.Copy(),
+ adDRAReplicationIntrasiteCompressedTrafficChart.Copy(),
+ adDRAReplicationSyncObjectRemainingChart.Copy(),
+ adDRAReplicationObjectsFilteredChart.Copy(),
+ adDRAReplicationPropertiesUpdatedChart.Copy(),
+ adDRAReplicationPropertiesFilteredChart.Copy(),
+ adDRAReplicationPendingSyncsChart.Copy(),
+ adDRAReplicationSyncRequestsChart.Copy(),
+ adDirectoryServiceThreadsChart.Copy(),
+ adLDAPLastBindTimeChart.Copy(),
+ adBindsTotalChart.Copy(),
+ adLDAPSearchesChart.Copy(),
+ adATQAverageRequestLatencyChart.Copy(),
+ adATQOutstandingRequestsChart.Copy(),
+ }
+ adDatabaseOperationsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_database_operations",
+ Title: "AD database operations",
+ Units: "operations/s",
+ Fam: "database",
+ Ctx: "ad.database_operations",
+ Priority: prioADDatabaseOperations,
+ Dims: module.Dims{
+ {ID: "ad_database_operations_total_add", Name: "add", Algo: module.Incremental},
+ {ID: "ad_database_operations_total_delete", Name: "delete", Algo: module.Incremental},
+ {ID: "ad_database_operations_total_modify", Name: "modify", Algo: module.Incremental},
+ {ID: "ad_database_operations_total_recycle", Name: "recycle", Algo: module.Incremental},
+ },
+ }
+ adDirectoryOperationsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_directory_operations_read",
+ Title: "AD directory operations",
+ Units: "operations/s",
+ Fam: "database",
+ Ctx: "ad.directory_operations",
+ Priority: prioADDirectoryOperations,
+ Dims: module.Dims{
+ {ID: "ad_directory_operations_total_read", Name: "read", Algo: module.Incremental},
+ {ID: "ad_directory_operations_total_write", Name: "write", Algo: module.Incremental},
+ {ID: "ad_directory_operations_total_search", Name: "search", Algo: module.Incremental},
+ },
+ }
+ adNameCacheLookupsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_name_cache_lookups",
+ Title: "Name cache lookups",
+ Units: "lookups/s",
+ Fam: "database",
+ Ctx: "ad.name_cache_lookups",
+ Priority: prioADNameCacheLookups,
+ Dims: module.Dims{
+ {ID: "ad_name_cache_lookups_total", Name: "lookups", Algo: module.Incremental},
+ },
+ }
+ adNameCacheHitsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_name_cache_hits",
+ Title: "Name cache hits",
+ Units: "hits/s",
+ Fam: "database",
+ Ctx: "ad.name_cache_hits",
+ Priority: prioADCacheHits,
+ Dims: module.Dims{
+ {ID: "ad_name_cache_hits_total", Name: "hits", Algo: module.Incremental},
+ },
+ }
+ adDRAReplicationIntersiteCompressedTrafficChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_intersite_compressed_traffic",
+ Title: "DRA replication compressed traffic withing site",
+ Units: "bytes/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_intersite_compressed_traffic",
+ Priority: prioADDRAReplicationIntersiteCompressedTraffic,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "ad_replication_data_intersite_bytes_total_inbound", Name: "inbound", Algo: module.Incremental},
+ {ID: "ad_replication_data_intersite_bytes_total_outbound", Name: "outbound", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ adDRAReplicationIntrasiteCompressedTrafficChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_intrasite_compressed_traffic",
+ Title: "DRA replication compressed traffic between sites",
+ Units: "bytes/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_intrasite_compressed_traffic",
+ Priority: prioADDRAReplicationIntrasiteCompressedTraffic,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "ad_replication_data_intrasite_bytes_total_inbound", Name: "inbound", Algo: module.Incremental},
+ {ID: "ad_replication_data_intrasite_bytes_total_outbound", Name: "outbound", Algo: module.Incremental, Mul: -1},
+ },
+ }
+ adDRAReplicationSyncObjectRemainingChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_sync_objects_remaining",
+ Title: "DRA replication full sync objects remaining",
+ Units: "objects",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_sync_objects_remaining",
+ Priority: prioADDRAReplicationSyncObjectsRemaining,
+ Dims: module.Dims{
+ {ID: "ad_replication_inbound_sync_objects_remaining", Name: "inbound"},
+ },
+ }
+ adDRAReplicationObjectsFilteredChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_objects_filtered",
+ Title: "DRA replication objects filtered",
+ Units: "objects/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_objects_filtered",
+ Priority: prioADDRAReplicationObjectsFiltered,
+ Dims: module.Dims{
+ {ID: "ad_replication_inbound_objects_filtered_total", Name: "inbound", Algo: module.Incremental},
+ },
+ }
+ adDRAReplicationPropertiesUpdatedChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_properties_updated",
+ Title: "DRA replication properties updated",
+ Units: "properties/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_properties_updated",
+ Priority: prioADDRAReplicationPropertiesUpdated,
+ Dims: module.Dims{
+ {ID: "ad_replication_inbound_properties_updated_total", Name: "inbound", Algo: module.Incremental},
+ },
+ }
+ adDRAReplicationPropertiesFilteredChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_properties_filtered",
+ Title: "DRA replication properties filtered",
+ Units: "properties/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_properties_filtered",
+ Priority: prioADDRAReplicationPropertiesFiltered,
+ Dims: module.Dims{
+ {ID: "ad_replication_inbound_properties_filtered_total", Name: "inbound", Algo: module.Incremental},
+ },
+ }
+ adDRAReplicationPendingSyncsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_pending_syncs",
+ Title: "DRA replication pending syncs",
+ Units: "syncs",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_pending_syncs",
+ Priority: prioADReplicationPendingSyncs,
+ Dims: module.Dims{
+ {ID: "ad_replication_pending_synchronizations", Name: "pending"},
+ },
+ }
+ adDRAReplicationSyncRequestsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_dra_replication_sync_requests",
+ Title: "DRA replication sync requests",
+ Units: "requests/s",
+ Fam: "replication",
+ Ctx: "ad.dra_replication_sync_requests",
+ Priority: prioADDRASyncRequests,
+ Dims: module.Dims{
+ {ID: "ad_replication_sync_requests_total", Name: "request", Algo: module.Incremental},
+ },
+ }
+ adDirectoryServiceThreadsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_ds_threads",
+ Title: "Directory Service threads",
+ Units: "threads",
+ Fam: "replication",
+ Ctx: "ad.ds_threads",
+ Priority: prioADDirectoryServiceThreadsInUse,
+ Dims: module.Dims{
+ {ID: "ad_directory_service_threads", Name: "in_use"},
+ },
+ }
+ adLDAPLastBindTimeChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_ldap_last_bind_time",
+ Title: "LDAP last successful bind time",
+ Units: "seconds",
+ Fam: "bind",
+ Ctx: "ad.ldap_last_bind_time",
+ Priority: prioADLDAPBindTime,
+ Dims: module.Dims{
+ {ID: "ad_ldap_last_bind_time_seconds", Name: "last_bind"},
+ },
+ }
+ adBindsTotalChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_binds",
+ Title: "Successful binds",
+ Units: "bind/s",
+ Fam: "bind",
+ Ctx: "ad.binds",
+ Priority: prioADBindsTotal,
+ Dims: module.Dims{
+ {ID: "ad_binds_total", Name: "binds", Algo: module.Incremental},
+ },
+ }
+ adLDAPSearchesChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_ldap_searches",
+ Title: "LDAP client search operations",
+ Units: "searches/s",
+ Fam: "ldap",
+ Ctx: "ad.ldap_searches",
+ Priority: prioADLDAPSearchesTotal,
+ Dims: module.Dims{
+ {ID: "ad_ldap_searches_total", Name: "searches", Algo: module.Incremental},
+ },
+ }
+ // https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-atq-performance-counters-yet-another-twist-in-the/ba-p/400293
+ adATQAverageRequestLatencyChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_atq_average_request_latency",
+ Title: "Average request processing time",
+ Units: "seconds",
+ Fam: "queue",
+ Ctx: "ad.atq_average_request_latency",
+ Priority: prioADATQAverageRequestLatency,
+ Dims: module.Dims{
+ {ID: "ad_atq_average_request_latency", Name: "time", Div: precision},
+ },
+ }
+ adATQOutstandingRequestsChart = module.Chart{
+ OverModule: "ad",
+ ID: "ad_atq_outstanding_requests",
+ Title: "Outstanding requests",
+ Units: "requests",
+ Fam: "queue",
+ Ctx: "ad.atq_outstanding_requests",
+ Priority: prioADATQOutstandingRequests,
+ Dims: module.Dims{
+ {ID: "ad_atq_outstanding_requests", Name: "outstanding"},
+ },
+ }
+)
+
+// AD CS
+var (
+ adcsCertTemplateChartsTmpl = module.Charts{
+ adcsCertTemplateRequestsChartTmpl.Copy(),
+ adcsCertTemplateFailedRequestsChartTmpl.Copy(),
+ adcsCertTemplateIssuedRequestsChartTmpl.Copy(),
+ adcsCertTemplatePendingRequestsChartTmpl.Copy(),
+ adcsCertTemplateRequestProcessingTimeChartTmpl.Copy(),
+
+ adcsCertTemplateRetrievalsChartTmpl.Copy(),
+ adcsCertificateRetrievalsTimeChartTmpl.Copy(),
+ adcsCertTemplateRequestCryptoSigningTimeChartTmpl.Copy(),
+ adcsCertTemplateRequestPolicyModuleProcessingTimeChartTmpl.Copy(),
+ adcsCertTemplateChallengeResponseChartTmpl.Copy(),
+ adcsCertTemplateChallengeResponseProcessingTimeChartTmpl.Copy(),
+ adcsCertTemplateSignedCertificateTimestampListsChartTmpl.Copy(),
+ adcsCertTemplateSignedCertificateTimestampListProcessingTimeChartTmpl.Copy(),
+ }
+ adcsCertTemplateRequestsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template%s_requests",
+ Title: "Certificate requests processed",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adcs.cert_template_requests",
+ Priority: prioADCSCertTemplateRequests,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_requests_total", Name: "requests", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplateFailedRequestsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_failed_requests",
+ Title: "Certificate failed requests processed",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adcs.cert_template_failed_requests",
+ Priority: prioADCSCertTemplateFailedRequests,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_failed_requests_total", Name: "failed", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplateIssuedRequestsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_issued_requests",
+ Title: "Certificate issued requests processed",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adcs.cert_template_issued_requests",
+ Priority: prioADCSCertTemplateIssuesRequests,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_issued_requests_total", Name: "issued", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplatePendingRequestsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_pending_requests",
+ Title: "Certificate pending requests processed",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adcs.cert_template_pending_requests",
+ Priority: prioADCSCertTemplatePendingRequests,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_pending_requests_total", Name: "pending", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplateRequestProcessingTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_request_processing_time",
+ Title: "Certificate last request processing time",
+ Units: "seconds",
+ Fam: "requests",
+ Ctx: "adcs.cert_template_request_processing_time",
+ Priority: prioADCSCertTemplateRequestProcessingTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_request_processing_time_seconds", Name: "processing_time", Div: precision},
+ },
+ }
+ adcsCertTemplateChallengeResponseChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_challenge_responses",
+ Title: "Certificate challenge responses",
+ Units: "responses/s",
+ Fam: "responses",
+ Ctx: "adcs.cert_template_challenge_responses",
+ Priority: prioADCSCertTemplateChallengeResponses,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_challenge_responses_total", Name: "challenge", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplateRetrievalsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_retrievals",
+ Title: "Total of certificate retrievals",
+ Units: "retrievals/s",
+ Fam: "retrievals",
+ Ctx: "adcs.cert_template_retrievals",
+ Priority: prioADCSCertTemplateRetrievals,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_retrievals_total", Name: "retrievals", Algo: module.Incremental},
+ },
+ }
+ adcsCertificateRetrievalsTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_retrievals_processing_time",
+ Title: "Certificate last retrieval processing time",
+ Units: "seconds",
+ Fam: "retrievals",
+ Ctx: "adcs.cert_template_retrieval_processing_time",
+ Priority: prioADCSCertTemplateRetrievalProcessingTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_retrievals_processing_time_seconds", Name: "processing_time", Div: precision},
+ },
+ }
+ adcsCertTemplateRequestCryptoSigningTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_request_cryptographic_signing_time",
+ Title: "Certificate last signing operation request time",
+ Units: "seconds",
+ Fam: "timings",
+ Ctx: "adcs.cert_template_request_cryptographic_signing_time",
+ Priority: prioADCSCertTemplateRequestCryptoSigningTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_request_cryptographic_signing_time_seconds", Name: "singing_time", Div: precision},
+ },
+ }
+ adcsCertTemplateRequestPolicyModuleProcessingTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_request_policy_module_processing_time",
+ Title: "Certificate last policy module processing request time",
+ Units: "seconds",
+ Fam: "timings",
+ Ctx: "adcs.cert_template_request_policy_module_processing",
+ Priority: prioADCSCertTemplateRequestPolicyModuleProcessingTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_request_policy_module_processing_time_seconds", Name: "processing_time", Div: precision},
+ },
+ }
+ adcsCertTemplateChallengeResponseProcessingTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_challenge_response_processing_time",
+ Title: "Certificate last challenge response time",
+ Units: "seconds",
+ Fam: "timings",
+ Ctx: "adcs.cert_template_challenge_response_processing_time",
+ Priority: prioADCSCertTemplateChallengeResponseProcessingTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_challenge_response_processing_time_seconds", Name: "processing_time", Div: precision},
+ },
+ }
+ adcsCertTemplateSignedCertificateTimestampListsChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_signed_certificate_timestamp_lists",
+ Title: "Certificate Signed Certificate Timestamp Lists processed",
+ Units: "lists/s",
+ Fam: "timings",
+ Ctx: "adcs.cert_template_signed_certificate_timestamp_lists",
+ Priority: prioADCSCertTemplateSignedCertificateTimestampLists,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_signed_certificate_timestamp_lists_total", Name: "processed", Algo: module.Incremental},
+ },
+ }
+ adcsCertTemplateSignedCertificateTimestampListProcessingTimeChartTmpl = module.Chart{
+ OverModule: "adcs",
+ ID: "adcs_cert_template_%s_signed_certificate_timestamp_list_processing_time",
+ Title: "Certificate last Signed Certificate Timestamp List process time",
+ Units: "seconds",
+ Fam: "timings",
+ Ctx: "adcs.cert_template_signed_certificate_timestamp_list_processing_time",
+ Priority: prioADCSCertTemplateSignedCertificateTimestampListProcessingTime,
+ Dims: module.Dims{
+ {ID: "adcs_cert_template_%s_signed_certificate_timestamp_list_processing_time_seconds", Name: "processing_time", Div: precision},
+ },
+ }
+)
+
+// AD FS
+var (
+ adfsCharts = module.Charts{
+ adfsADLoginConnectionFailuresChart.Copy(),
+ adfsCertificateAuthenticationsChart.Copy(),
+ adfsDBArtifactFailuresChart.Copy(),
+ adfsDBArtifactQueryTimeSecondsChart.Copy(),
+ adfsDBConfigFailuresChart.Copy(),
+ adfsDBConfigQueryTimeSecondsChart.Copy(),
+ adfsDeviceAuthenticationsChart.Copy(),
+ adfsExternalAuthenticationsChart.Copy(),
+ adfsFederatedAuthenticationsChart.Copy(),
+ adfsFederationMetadataRequestsChart.Copy(),
+
+ adfsOAuthAuthorizationRequestsChart.Copy(),
+ adfsOAuthClientAuthenticationsChart.Copy(),
+ adfsOAuthClientCredentialRequestsChart.Copy(),
+ adfsOAuthClientPrivKeyJwtAuthenticationsChart.Copy(),
+ adfsOAuthClientSecretBasicAuthenticationsChart.Copy(),
+ adfsOAuthClientSecretPostAuthenticationsChart.Copy(),
+ adfsOAuthClientWindowsAuthenticationsChart.Copy(),
+ adfsOAuthLogonCertificateRequestsChart.Copy(),
+ adfsOAuthPasswordGrantRequestsChart.Copy(),
+ adfsOAuthTokenRequestsChart.Copy(),
+
+ adfsPassiveRequestsChart.Copy(),
+ adfsPassportAuthenticationsChart.Copy(),
+ adfsPasswordChangeChart.Copy(),
+ adfsSAMLPTokenRequestsChart.Copy(),
+ adfsSSOAuthenticationsChart.Copy(),
+ adfsTokenRequestsChart.Copy(),
+ adfsUserPasswordAuthenticationsChart.Copy(),
+ adfsWindowsIntegratedAuthenticationsChart.Copy(),
+ adfsWSFedTokenRequestsSuccessChart.Copy(),
+ adfsWSTrustTokenRequestsSuccessChart.Copy(),
+ }
+
+ adfsADLoginConnectionFailuresChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_ad_login_connection_failures",
+ Title: "Connection failures",
+ Units: "failures/s",
+ Fam: "ad",
+ Ctx: "adfs.ad_login_connection_failures",
+ Priority: prioADFSADLoginConnectionFailures,
+ Dims: module.Dims{
+ {ID: "adfs_ad_login_connection_failures_total", Name: "connection", Algo: module.Incremental},
+ },
+ }
+ adfsCertificateAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_certificate_authentications",
+ Title: "User Certificate authentications",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.certificate_authentications",
+ Priority: prioADFSCertificateAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_certificate_authentications_total", Name: "authentications", Algo: module.Incremental},
+ },
+ }
+
+ adfsDBArtifactFailuresChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_db_artifact_failures",
+ Title: "Connection failures to the artifact database",
+ Units: "failures/s",
+ Fam: "db artifact",
+ Ctx: "adfs.db_artifact_failures",
+ Priority: prioADFSDBArtifactFailures,
+ Dims: module.Dims{
+ {ID: "adfs_db_artifact_failure_total", Name: "connection", Algo: module.Incremental},
+ },
+ }
+ adfsDBArtifactQueryTimeSecondsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_db_artifact_query_time_seconds",
+ Title: "Time taken for an artifact database query",
+ Units: "seconds/s",
+ Fam: "db artifact",
+ Ctx: "adfs.db_artifact_query_time_seconds",
+ Priority: prioADFSDBArtifactQueryTimeSeconds,
+ Dims: module.Dims{
+ {ID: "adfs_db_artifact_query_time_seconds_total", Name: "query_time", Algo: module.Incremental, Div: precision},
+ },
+ }
+ adfsDBConfigFailuresChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_db_config_failures",
+ Title: "Connection failures to the configuration database",
+ Units: "failures/s",
+ Fam: "db config",
+ Ctx: "adfs.db_config_failures",
+ Priority: prioADFSDBConfigFailures,
+ Dims: module.Dims{
+ {ID: "adfs_db_config_failure_total", Name: "connection", Algo: module.Incremental},
+ },
+ }
+ adfsDBConfigQueryTimeSecondsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_db_config_query_time_seconds",
+ Title: "Time taken for a configuration database query",
+ Units: "seconds/s",
+ Fam: "db config",
+ Ctx: "adfs.db_config_query_time_seconds",
+ Priority: prioADFSDBConfigQueryTimeSeconds,
+ Dims: module.Dims{
+ {ID: "adfs_db_config_query_time_seconds_total", Name: "query_time", Algo: module.Incremental, Div: precision},
+ },
+ }
+ adfsDeviceAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_device_authentications",
+ Title: "Device authentications",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.device_authentications",
+ Priority: prioADFSDeviceAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_device_authentications_total", Name: "authentications", Algo: module.Incremental},
+ },
+ }
+ adfsExternalAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_external_authentications",
+ Title: "Authentications from external MFA providers",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.external_authentications",
+ Priority: prioADFSExternalAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_external_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_external_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsFederatedAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_federated_authentications",
+ Title: "Authentications from Federated Sources",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.federated_authentications",
+ Priority: prioADFSFederatedAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_federated_authentications_total", Name: "authentications", Algo: module.Incremental},
+ },
+ }
+ adfsFederationMetadataRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_federation_metadata_requests",
+ Title: "Federation Metadata requests",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.federation_metadata_requests",
+ Priority: prioADFSFederationMetadataRequests,
+ Dims: module.Dims{
+ {ID: "adfs_federation_metadata_requests_total", Name: "requests", Algo: module.Incremental},
+ },
+ }
+
+ adfsOAuthAuthorizationRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_authorization_requests",
+ Title: "Incoming requests to the OAuth Authorization endpoint",
+ Units: "requests/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_authorization_requests",
+ Priority: prioADFSOauthAuthorizationRequests,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_authorization_requests_total", Name: "requests", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_authentications",
+ Title: "OAuth client authentications",
+ Units: "authentications/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_authentications",
+ Priority: prioADFSOauthClientAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_authentication_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_authentication_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientCredentialRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_credentials_requests",
+ Title: "OAuth client credentials requests",
+ Units: "requests/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_credentials_requests",
+ Priority: prioADFSOauthClientCredentials,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_credentials_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_credentials_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientPrivKeyJwtAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_privkey_jwt_authentications",
+ Title: "OAuth client private key JWT authentications",
+ Units: "authentications/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_privkey_jwt_authentications",
+ Priority: prioADFSOauthClientPrivkeyJwtAuthentication,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_privkey_jwt_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_privkey_jtw_authentication_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientSecretBasicAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_secret_basic_authentications",
+ Title: "OAuth client secret basic authentications",
+ Units: "authentications/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_secret_basic_authentications",
+ Priority: prioADFSOauthClientSecretBasicAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_secret_basic_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_secret_basic_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientSecretPostAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_secret_post_authentications",
+ Title: "OAuth client secret post authentications",
+ Units: "authentications/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_secret_post_authentications",
+ Priority: prioADFSOauthClientSecretPostAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_secret_post_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_secret_post_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthClientWindowsAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_client_windows_authentications",
+ Title: "OAuth client windows integrated authentications",
+ Units: "authentications/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_client_windows_authentications",
+ Priority: prioADFSOauthClientWindowsAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_client_windows_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_client_windows_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthLogonCertificateRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_logon_certificate_requests",
+ Title: "OAuth logon certificate requests",
+ Units: "requests/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_logon_certificate_requests",
+ Priority: prioADFSOauthLogonCertificateRequests,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_logon_certificate_token_requests_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_logon_certificate_requests_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthPasswordGrantRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_password_grant_requests",
+ Title: "OAuth password grant requests",
+ Units: "requests/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_password_grant_requests",
+ Priority: prioADFSOauthPasswordGrantRequests,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_password_grant_requests_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_oauth_password_grant_requests_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsOAuthTokenRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_oauth_token_requests_success",
+ Title: "Successful RP token requests over OAuth protocol",
+ Units: "requests/s",
+ Fam: "oauth",
+ Ctx: "adfs.oauth_token_requests_success",
+ Priority: prioADFSOauthTokenRequestsSuccess,
+ Dims: module.Dims{
+ {ID: "adfs_oauth_token_requests_success_total", Name: "success", Algo: module.Incremental},
+ },
+ }
+
+ adfsPassiveRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_passive_requests",
+ Title: "Passive requests",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.passive_requests",
+ Priority: prioADFSPassiveRequests,
+ Dims: module.Dims{
+ {ID: "adfs_passive_requests_total", Name: "passive", Algo: module.Incremental},
+ },
+ }
+ adfsPassportAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_passport_authentications",
+ Title: "Microsoft Passport SSO authentications",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.passport_authentications",
+ Priority: prioADFSPassportAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_passport_authentications_total", Name: "passport", Algo: module.Incremental},
+ },
+ }
+ adfsPasswordChangeChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_password_change_requests",
+ Title: "Password change requests",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.password_change_requests",
+ Priority: prioADFSPasswordChangeRequests,
+ Dims: module.Dims{
+ {ID: "adfs_password_change_succeeded_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_password_change_failed_total", Name: "failed", Algo: module.Incremental},
+ },
+ }
+ adfsSAMLPTokenRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_samlp_token_requests_success",
+ Title: "Successful RP token requests over SAML-P protocol",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.samlp_token_requests_success",
+ Priority: prioADFSSAMLPTokenRequests,
+ Dims: module.Dims{
+ {ID: "adfs_samlp_token_requests_success_total", Name: "success", Algo: module.Incremental},
+ },
+ }
+ adfsWSTrustTokenRequestsSuccessChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_wstrust_token_requests_success",
+ Title: "Successful RP token requests over WS-Trust protocol",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.wstrust_token_requests_success",
+ Priority: prioADFSWSTrustTokenRequestsSuccess,
+ Dims: module.Dims{
+ {ID: "adfs_wstrust_token_requests_success_total", Name: "success", Algo: module.Incremental},
+ },
+ }
+ adfsSSOAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_sso_authentications",
+ Title: "SSO authentications",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.sso_authentications",
+ Priority: prioADFSSSOAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_sso_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_sso_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsTokenRequestsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_token_requests",
+ Title: "Token access requests",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.token_requests",
+ Priority: prioADFSTokenRequests,
+ Dims: module.Dims{
+ {ID: "adfs_token_requests_total", Name: "requests", Algo: module.Incremental},
+ },
+ }
+ adfsUserPasswordAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_userpassword_authentications",
+ Title: "AD U/P authentications",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.userpassword_authentications",
+ Priority: prioADFSUserPasswordAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_sso_authentications_success_total", Name: "success", Algo: module.Incremental},
+ {ID: "adfs_sso_authentications_failure_total", Name: "failure", Algo: module.Incremental},
+ },
+ }
+ adfsWindowsIntegratedAuthenticationsChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_windows_integrated_authentications",
+ Title: "Windows integrated authentications using Kerberos or NTLM",
+ Units: "authentications/s",
+ Fam: "auth",
+ Ctx: "adfs.windows_integrated_authentications",
+ Priority: prioADFSWindowsIntegratedAuthentications,
+ Dims: module.Dims{
+ {ID: "adfs_windows_integrated_authentications_total", Name: "authentications", Algo: module.Incremental},
+ },
+ }
+ adfsWSFedTokenRequestsSuccessChart = module.Chart{
+ OverModule: "adfs",
+ ID: "adfs_wsfed_token_requests_success",
+ Title: "Successful RP token requests over WS-Fed protocol",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "adfs.wsfed_token_requests_success",
+ Priority: prioADFSWSFedTokenRequestsSuccess,
+ Dims: module.Dims{
+ {ID: "adfs_wsfed_token_requests_success_total", Name: "success", Algo: module.Incremental},
+ },
+ }
+)
+
+// Exchange
+var (
+ exchangeCharts = module.Charts{
+ exchangeActiveSyncPingCMDsPendingChart.Copy(),
+ exchangeActiveSyncRequestsChart.Copy(),
+ exchangeActiveSyncCMDsChart.Copy(),
+ exchangeAutoDiscoverRequestsChart.Copy(),
+ exchangeAvailableServiceRequestsChart.Copy(),
+ exchangeOWACurrentUniqueUsersChart.Copy(),
+ exchangeOWARequestsChart.Copy(),
+ exchangeRPCActiveUsersCountChart.Copy(),
+ exchangeRPCAvgLatencyChart.Copy(),
+ exchangeRPCConnectionChart.Copy(),
+ exchangeRPCOperationsChart.Copy(),
+ exchangeRPCRequestsChart.Copy(),
+ exchangeRPCUserChart.Copy(),
+ exchangeTransportQueuesActiveMailBoxDelivery.Copy(),
+ exchangeTransportQueuesExternalActiveRemoteDelivery.Copy(),
+ exchangeTransportQueuesExternalLargestDelivery.Copy(),
+ exchangeTransportQueuesInternalActiveRemoteDelivery.Copy(),
+ exchangeTransportQueuesInternalLargestDelivery.Copy(),
+ exchangeTransportQueuesRetryMailboxDelivery.Copy(),
+ exchangeTransportQueuesUnreachable.Copy(),
+ exchangeTransportQueuesPoison.Copy(),
+ }
+ exchangeWorkloadChartsTmpl = module.Charts{
+ exchangeWorkloadActiveTasks.Copy(),
+ exchangeWorkloadCompletedTasks.Copy(),
+ exchangeWorkloadQueuedTasks.Copy(),
+ exchangeWorkloadYieldedTasks.Copy(),
+
+ exchangeWorkloadActivityStatus.Copy(),
+ }
+ exchangeLDAPChartsTmpl = module.Charts{
+ exchangeLDAPLongRunningOPS.Copy(),
+ exchangeLDAPReadTime.Copy(),
+ exchangeLDAPSearchTime.Copy(),
+ exchangeLDAPTimeoutErrors.Copy(),
+ exchangeLDAPWriteTime.Copy(),
+ }
+ exchangeHTTPProxyChartsTmpl = module.Charts{
+ exchangeProxyAvgAuthLatency.Copy(),
+ exchangeProxyAvgCasProcessingLatencySec.Copy(),
+ exchangeProxyMailboxProxyFailureRace.Copy(),
+ exchangeProxyMailboxServerLocatorAvgLatencySec.Copy(),
+ exchangeProxyOutstandingProxyRequests.Copy(),
+ exchangeProxyRequestsTotal.Copy(),
+ }
+
+ exchangeActiveSyncPingCMDsPendingChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_activesync_ping_cmds_pending",
+ Title: "Ping commands pending in queue",
+ Units: "commands",
+ Fam: "sync",
+ Ctx: "exchange.activesync_ping_cmds_pending",
+ Priority: prioExchangeActiveSyncPingCMDsPending,
+ Dims: module.Dims{
+ {ID: "exchange_activesync_ping_cmds_pending", Name: "pending"},
+ },
+ }
+ exchangeActiveSyncRequestsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_activesync_requests",
+ Title: "HTTP requests received from ASP.NET",
+ Units: "requests/s",
+ Fam: "sync",
+ Ctx: "exchange.activesync_requests",
+ Priority: prioExchangeActiveSyncRequests,
+ Dims: module.Dims{
+ {ID: "exchange_activesync_requests_total", Name: "received", Algo: module.Incremental},
+ },
+ }
+ exchangeActiveSyncCMDsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_activesync_sync_cmds",
+ Title: "Sync commands processed",
+ Units: "commands/s",
+ Fam: "sync",
+ Ctx: "exchange.activesync_sync_cmds",
+ Priority: prioExchangeActiveSyncSyncCMDs,
+ Dims: module.Dims{
+ {ID: "exchange_activesync_sync_cmds_total", Name: "processed", Algo: module.Incremental},
+ },
+ }
+ exchangeAutoDiscoverRequestsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_autodiscover_requests",
+ Title: "Autodiscover service requests processed",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "exchange.autodiscover_requests",
+ Priority: prioExchangeAutoDiscoverRequests,
+ Dims: module.Dims{
+ {ID: "exchange_autodiscover_requests_total", Name: "processed", Algo: module.Incremental},
+ },
+ }
+ exchangeAvailableServiceRequestsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_avail_service_requests",
+ Title: "Requests serviced",
+ Units: "requests/s",
+ Fam: "requests",
+ Ctx: "exchange.avail_service_requests",
+ Priority: prioExchangeAvailServiceRequests,
+ Dims: module.Dims{
+ {ID: "exchange_avail_service_requests_per_sec", Name: "serviced", Algo: module.Incremental},
+ },
+ }
+ exchangeOWACurrentUniqueUsersChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_owa_current_unique_users",
+ Title: "Unique users currently logged on to Outlook Web App",
+ Units: "users",
+ Fam: "owa",
+ Ctx: "exchange.owa_current_unique_users",
+ Priority: prioExchangeOWACurrentUniqueUsers,
+ Dims: module.Dims{
+ {ID: "exchange_owa_current_unique_users", Name: "logged-in"},
+ },
+ }
+ exchangeOWARequestsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_owa_requests_total",
+ Title: "Requests handled by Outlook Web App",
+ Units: "requests/s",
+ Fam: "owa",
+ Ctx: "exchange.owa_requests_total",
+ Priority: prioExchangeOWARequestsTotal,
+ Dims: module.Dims{
+ {ID: "exchange_owa_requests_total", Name: "handled", Algo: module.Incremental},
+ },
+ }
+ exchangeRPCActiveUsersCountChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_active_user",
+ Title: "Active unique users in the last 2 minutes",
+ Units: "users",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_active_user_count",
+ Priority: prioExchangeRPCActiveUserCount,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_active_user_count", Name: "active"},
+ },
+ }
+ exchangeRPCAvgLatencyChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_avg_latency",
+ Title: "Average latency",
+ Units: "seconds",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_avg_latency",
+ Priority: prioExchangeRPCAvgLatency,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_avg_latency_sec", Name: "latency", Div: precision},
+ },
+ }
+ exchangeRPCConnectionChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_connection",
+ Title: "Client connections",
+ Units: "connections",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_connection_count",
+ Priority: prioExchangeRPCConnectionCount,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_connection_count", Name: "connections"},
+ },
+ }
+ exchangeRPCOperationsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_operations",
+ Title: "RPC operations",
+ Units: "operations/s",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_operations",
+ Priority: prioExchangeRPCOperationsTotal,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_operations_total", Name: "operations", Algo: module.Incremental},
+ },
+ }
+ exchangeRPCRequestsChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_requests_total",
+ Title: "Clients requests currently being processed",
+ Units: "requests",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_requests",
+ Priority: prioExchangeRPCRequests,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_requests", Name: "processed"},
+ },
+ }
+ exchangeRPCUserChart = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_rpc_user",
+ Title: "RPC users",
+ Units: "users",
+ Fam: "rpc",
+ Ctx: "exchange.rpc_user_count",
+ Priority: prioExchangeRpcUserCount,
+ Dims: module.Dims{
+ {ID: "exchange_rpc_user_count", Name: "users"},
+ },
+ }
+
+ // Source: https://learn.microsoft.com/en-us/exchange/mail-flow/queues/queues?view=exchserver-2019
+ exchangeTransportQueuesActiveMailBoxDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_active_mailbox_delivery",
+ Title: "Active Mailbox Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_active_mail_box_delivery",
+ Priority: prioExchangeTransportQueuesActiveMailboxDelivery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_active_mailbox_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_active_mailbox_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_active_mailbox_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_active_mailbox_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesExternalActiveRemoteDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_external_active_remote_delivery",
+ Title: "External Active Remote Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_external_active_remote_delivery",
+ Priority: prioExchangeTransportQueuesExternalActiveRemoteDelivery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_external_active_remote_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_external_active_remote_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_external_active_remote_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_external_active_remote_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesExternalLargestDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_external_largest_delivery",
+ Title: "External Largest Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_external_largest_delivery",
+ Priority: prioExchangeTransportQueuesExternalLargestDelivery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_external_largest_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_external_largest_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_external_largest_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_external_largest_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesInternalActiveRemoteDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_internal_active_remote_delivery",
+ Title: "Internal Active Remote Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_internal_active_remote_delivery",
+ Priority: prioExchangeTransportQueuesInternalActiveRemoteDeliery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_internal_active_remote_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_internal_active_remote_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_internal_active_remote_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_internal_active_remote_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesInternalLargestDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_internal_largest_delivery",
+ Title: "Internal Largest Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_internal_largest_delivery",
+ Priority: prioExchangeTransportQueuesInternalLargestDelivery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_internal_largest_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_internal_largest_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_internal_largest_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_internal_largest_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesRetryMailboxDelivery = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_retry_mailbox_delivery",
+ Title: "Internal Active Remote Delivery Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_retry_mailbox_delivery",
+ Priority: prioExchangeTransportQueuesRetryMailboxDelivery,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_retry_mailbox_delivery_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_retry_mailbox_delivery_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_retry_mailbox_delivery_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_retry_mailbox_delivery_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesUnreachable = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_unreachable",
+ Title: "Unreachable Queue length",
+ Units: "messages",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_unreachable",
+ Priority: prioExchangeTransportQueuesUnreachable,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_unreachable_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_unreachable_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_unreachable_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_unreachable_normal_priority", Name: "normal"},
+ },
+ }
+ exchangeTransportQueuesPoison = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_transport_queues_poison",
+ Title: "Poison Queue Length",
+ Units: "messages/s",
+ Fam: "queue",
+ Ctx: "exchange.transport_queues_poison",
+ Priority: prioExchangeTransportQueuesPoison,
+ Dims: module.Dims{
+ {ID: "exchange_transport_queues_poison_high_priority", Name: "high"},
+ {ID: "exchange_transport_queues_poison_low_priority", Name: "low"},
+ {ID: "exchange_transport_queues_poison_none_priority", Name: "none"},
+ {ID: "exchange_transport_queues_poison_normal_priority", Name: "normal"},
+ },
+ }
+
+ exchangeWorkloadActiveTasks = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_workload_%s_tasks",
+ Title: "Workload active tasks",
+ Units: "tasks",
+ Fam: "workload",
+ Ctx: "exchange.workload_active_tasks",
+ Priority: prioExchangeWorkloadActiveTasks,
+ Dims: module.Dims{
+ {ID: "exchange_workload_%s_active_tasks", Name: "active"},
+ },
+ }
+ exchangeWorkloadCompletedTasks = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_workload_%s_completed_tasks",
+ Title: "Workload completed tasks",
+ Units: "tasks/s",
+ Fam: "workload",
+ Ctx: "exchange.workload_completed_tasks",
+ Priority: prioExchangeWorkloadCompleteTasks,
+ Dims: module.Dims{
+ {ID: "exchange_workload_%s_completed_tasks", Name: "completed", Algo: module.Incremental},
+ },
+ }
+ exchangeWorkloadQueuedTasks = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_workload_%s_queued_tasks",
+ Title: "Workload queued tasks",
+ Units: "tasks/s",
+ Fam: "workload",
+ Ctx: "exchange.workload_queued_tasks",
+ Priority: prioExchangeWorkloadQueueTasks,
+ Dims: module.Dims{
+ {ID: "exchange_workload_%s_queued_tasks", Name: "queued", Algo: module.Incremental},
+ },
+ }
+ exchangeWorkloadYieldedTasks = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_workload_%s_yielded_tasks",
+ Title: "Workload yielded tasks",
+ Units: "tasks/s",
+ Fam: "workload",
+ Ctx: "exchange.workload_yielded_tasks",
+ Priority: prioExchangeWorkloadYieldedTasks,
+ Dims: module.Dims{
+ {ID: "exchange_workload_%s_yielded_tasks", Name: "yielded", Algo: module.Incremental},
+ },
+ }
+ exchangeWorkloadActivityStatus = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_workload_%s_activity_status",
+ Title: "Workload activity status",
+ Units: "status",
+ Fam: "workload",
+ Ctx: "exchange.workload_activity_status",
+ Priority: prioExchangeWorkloadActivityStatus,
+ Dims: module.Dims{
+ {ID: "exchange_workload_%s_is_active", Name: "active"},
+ {ID: "exchange_workload_%s_is_paused", Name: "paused"},
+ },
+ }
+
+ exchangeLDAPLongRunningOPS = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_ldap_%s_long_running_ops",
+ Title: "Long Running LDAP operations",
+ Units: "operations/s",
+ Fam: "ldap",
+ Ctx: "exchange.ldap_long_running_ops_per_sec",
+ Priority: prioExchangeLDAPLongRunningOPS,
+ Dims: module.Dims{
+ {ID: "exchange_ldap_%s_long_running_ops_per_sec", Name: "long-running", Algo: module.Incremental},
+ },
+ }
+ exchangeLDAPReadTime = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_ldap_%s_read_time",
+ Title: "Time to send an LDAP read request and receive a response",
+ Units: "seconds",
+ Fam: "ldap",
+ Ctx: "exchange.ldap_read_time",
+ Priority: prioExchangeLDAPReadTime,
+ Dims: module.Dims{
+ {ID: "exchange_ldap_%s_read_time_sec", Name: "read", Algo: module.Incremental, Div: precision},
+ },
+ }
+ exchangeLDAPSearchTime = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_ldap_%s_search_time",
+ Title: "Time to send an LDAP search request and receive a response",
+ Units: "seconds",
+ Fam: "ldap",
+ Ctx: "exchange.ldap_search_time",
+ Priority: prioExchangeLDAPSearchTime,
+ Dims: module.Dims{
+ {ID: "exchange_ldap_%s_search_time_sec", Name: "search", Algo: module.Incremental, Div: precision},
+ },
+ }
+ exchangeLDAPWriteTime = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_ldap_%s_write_time",
+ Title: "Time to send an LDAP search request and receive a response",
+ Units: "second",
+ Fam: "ldap",
+ Ctx: "exchange.ldap_write_time",
+ Priority: prioExchangeLDAPWriteTime,
+ Dims: module.Dims{
+ {ID: "exchange_ldap_%s_write_time_sec", Name: "write", Algo: module.Incremental, Div: precision},
+ },
+ }
+ exchangeLDAPTimeoutErrors = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_ldap_%s_timeout_errors",
+ Title: "LDAP timeout errors",
+ Units: "errors/s",
+ Fam: "ldap",
+ Ctx: "exchange.ldap_timeout_errors",
+ Priority: prioExchangeLDAPTimeoutErrors,
+ Dims: module.Dims{
+ {ID: "exchange_ldap_%s_timeout_errors_total", Name: "timeout", Algo: module.Incremental},
+ },
+ }
+
+ exchangeProxyAvgAuthLatency = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_avg_auth_latency",
+ Title: "Average time spent authenticating CAS",
+ Units: "seconds",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_avg_auth_latency",
+ Priority: prioExchangeHTTPProxyAVGAuthLatency,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_avg_auth_latency", Name: "latency"},
+ },
+ }
+ exchangeProxyAvgCasProcessingLatencySec = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_avg_cas_processing_latency_sec",
+ Title: "Average time spent authenticating CAS",
+ Units: "seconds",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_avg_cas_processing_latency_sec",
+ Priority: prioExchangeHTTPProxyAVGCASProcessingLatency,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_avg_cas_proccessing_latency_sec", Name: "latency"},
+ },
+ }
+ exchangeProxyMailboxProxyFailureRace = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_mailbox_proxy_failure_rate",
+ Title: "Percentage of failures between this CAS and MBX servers",
+ Units: "percentage",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_mailbox_proxy_failure_rate",
+ Priority: prioExchangeHTTPProxyMailboxProxyFailureRate,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_mailbox_proxy_failure_rate", Name: "failures", Div: precision},
+ },
+ }
+ exchangeProxyMailboxServerLocatorAvgLatencySec = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_mailbox_server_locator_avg_latency_sec",
+ Title: "Average latency of MailboxServerLocator web service calls",
+ Units: "seconds",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_mailbox_server_locator_avg_latency_sec",
+ Priority: prioExchangeHTTPProxyServerLocatorAvgLatency,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_mailbox_server_locator_avg_latency_sec", Name: "latency", Div: precision},
+ },
+ }
+ exchangeProxyOutstandingProxyRequests = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_outstanding_proxy_requests",
+ Title: "Concurrent outstanding proxy requests",
+ Units: "requests",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_outstanding_proxy_requests",
+ Priority: prioExchangeHTTPProxyOutstandingProxyRequests,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_outstanding_proxy_requests", Name: "outstanding"},
+ },
+ }
+ exchangeProxyRequestsTotal = module.Chart{
+ OverModule: "exchange",
+ ID: "exchange_proxy_%s_requests_total",
+ Title: "Number of proxy requests processed each second",
+ Units: "requests/s",
+ Fam: "proxy",
+ Ctx: "exchange.http_proxy_requests",
+ Priority: prioExchangeHTTPProxyRequestsTotal,
+ Dims: module.Dims{
+ {ID: "exchange_http_proxy_%s_requests_total", Name: "processed", Algo: module.Incremental},
+ },
+ }
+)
+
+// Logon
+var (
+ logonCharts = module.Charts{
+ logonSessionsChart.Copy(),
+ }
+ logonSessionsChart = module.Chart{
+ ID: "logon_active_sessions_by_type",
+ Title: "Active User Logon Sessions By Type",
+ Units: "sessions",
+ Fam: "logon",
+ Ctx: "windows.logon_type_sessions",
+ Type: module.Stacked,
+ Priority: prioLogonSessions,
+ Dims: module.Dims{
+ {ID: "logon_type_system_sessions", Name: "system"},
+ {ID: "logon_type_proxy_sessions", Name: "proxy"},
+ {ID: "logon_type_network_sessions", Name: "network"},
+ {ID: "logon_type_interactive_sessions", Name: "interactive"},
+ {ID: "logon_type_batch_sessions", Name: "batch"},
+ {ID: "logon_type_service_sessions", Name: "service"},
+ {ID: "logon_type_unlock_sessions", Name: "unlock"},
+ {ID: "logon_type_network_clear_text_sessions", Name: "network_clear_text"},
+ {ID: "logon_type_new_credentials_sessions", Name: "new_credentials"},
+ {ID: "logon_type_remote_interactive_sessions", Name: "remote_interactive"},
+ {ID: "logon_type_cached_interactive_sessions", Name: "cached_interactive"},
+ {ID: "logon_type_cached_remote_interactive_sessions", Name: "cached_remote_interactive"},
+ {ID: "logon_type_cached_unlock_sessions", Name: "cached_unlock"},
+ },
+ }
+)
+
+// Thermal zone
+var (
+ thermalzoneChartsTmpl = module.Charts{
+ thermalzoneTemperatureChartTmpl.Copy(),
+ }
+ thermalzoneTemperatureChartTmpl = module.Chart{
+ ID: "thermalzone_%s_temperature",
+ Title: "Thermal zone temperature",
+ Units: "Celsius",
+ Fam: "thermalzone",
+ Ctx: "windows.thermalzone_temperature",
+ Priority: prioThermalzoneTemperature,
+ Dims: module.Dims{
+ {ID: "thermalzone_%s_temperature", Name: "temperature"},
+ },
+ }
+)
+
+// Processes
+var (
+ processesCharts = module.Charts{
+ processesCPUUtilizationTotalChart.Copy(),
+ processesMemoryUsageChart.Copy(),
+ processesHandlesChart.Copy(),
+ processesIOBytesChart.Copy(),
+ processesIOOperationsChart.Copy(),
+ processesPageFaultsChart.Copy(),
+ processesPageFileBytes.Copy(),
+ processesThreads.Copy(),
+ }
+ processesCPUUtilizationTotalChart = module.Chart{
+ ID: "processes_cpu_utilization",
+ Title: "CPU usage (100% = 1 core)",
+ Units: "percentage",
+ Fam: "processes",
+ Ctx: "windows.processes_cpu_utilization",
+ Type: module.Stacked,
+ Priority: prioProcessesCPUUtilization,
+ }
+ processesMemoryUsageChart = module.Chart{
+ ID: "processes_memory_usage",
+ Title: "Memory usage",
+ Units: "bytes",
+ Fam: "processes",
+ Ctx: "windows.processes_memory_usage",
+ Type: module.Stacked,
+ Priority: prioProcessesMemoryUsage,
+ }
+ processesIOBytesChart = module.Chart{
+ ID: "processes_io_bytes",
+ Title: "Total of IO bytes (read, write, other)",
+ Units: "bytes/s",
+ Fam: "processes",
+ Ctx: "windows.processes_io_bytes",
+ Type: module.Stacked,
+ Priority: prioProcessesIOBytes,
+ }
+ processesIOOperationsChart = module.Chart{
+ ID: "processes_io_operations",
+ Title: "Total of IO events (read, write, other)",
+ Units: "operations/s",
+ Fam: "processes",
+ Ctx: "windows.processes_io_operations",
+ Type: module.Stacked,
+ Priority: prioProcessesIOOperations,
+ }
+ processesPageFaultsChart = module.Chart{
+ ID: "processes_page_faults",
+ Title: "Number of page faults",
+ Units: "pgfaults/s",
+ Fam: "processes",
+ Ctx: "windows.processes_page_faults",
+ Type: module.Stacked,
+ Priority: prioProcessesPageFaults,
+ }
+ processesPageFileBytes = module.Chart{
+ ID: "processes_page_file_bytes",
+ Title: "Bytes used in page file(s)",
+ Units: "bytes",
+ Fam: "processes",
+ Ctx: "windows.processes_file_bytes",
+ Type: module.Stacked,
+ Priority: prioProcessesPageFileBytes,
+ }
+ processesThreads = module.Chart{
+ ID: "processes_threads",
+ Title: "Active threads",
+ Units: "threads",
+ Fam: "processes",
+ Ctx: "windows.processes_threads",
+ Type: module.Stacked,
+ Priority: prioProcessesThreads,
+ }
+ processesHandlesChart = module.Chart{
+ ID: "processes_handles",
+ Title: "Number of handles open",
+ Units: "handles",
+ Fam: "processes",
+ Ctx: "windows.processes_handles",
+ Type: module.Stacked,
+ Priority: prioProcessesHandles,
+ }
+)
+
+// .NET
+var (
+ netFrameworkCLRExceptionsChartsTmpl = module.Charts{
+ netFrameworkCLRExceptionsThrown.Copy(),
+ netFrameworkCLRExceptionsFilters.Copy(),
+ netFrameworkCLRExceptionsFinallys.Copy(),
+ netFrameworkCLRExceptionsThrowToCatchDepth.Copy(),
+ }
+
+ netFrameworkCLRInteropChartsTmpl = module.Charts{
+ netFrameworkCLRInteropCOMCallableWrapper.Copy(),
+ netFrameworkCLRInteropMarshalling.Copy(),
+ netFrameworkCLRInteropStubsCreated.Copy(),
+ }
+
+ netFrameworkCLRJITChartsTmpl = module.Charts{
+ netFrameworkCLRJITMethods.Copy(),
+ netFrameworkCLRJITTime.Copy(),
+ netFrameworkCLRJITStandardFailures.Copy(),
+ netFrameworkCLRJITILBytes.Copy(),
+ }
+
+ netFrameworkCLRLoadingChartsTmpl = module.Charts{
+ netFrameworkCLRLoadingLoaderHeapSize.Copy(),
+ netFrameworkCLRLoadingAppDomainsLoaded.Copy(),
+ netFrameworkCLRLoadingAppDomainsUnloaded.Copy(),
+ netFrameworkCLRLoadingAssembliesLoaded.Copy(),
+ netFrameworkCLRLoadingClassesLoaded.Copy(),
+ netFrameworkCLRLoadingClassLoadFailure.Copy(),
+ }
+
+ netFrameworkCLRLocksAndThreadsChartsTmpl = module.Charts{
+ netFrameworkCLRLockAndThreadsQueueLength.Copy(),
+ netFrameworkCLRLockAndThreadsCurrentLogicalThreads.Copy(),
+ netFrameworkCLRLockAndThreadsCurrentPhysicalThreads.Copy(),
+ netFrameworkCLRLockAndThreadsRecognizedThreads.Copy(),
+ netFrameworkCLRLockAndThreadsContentions.Copy(),
+ }
+
+ netFrameworkCLRMemoryChartsTmpl = module.Charts{
+ netFrameworkCLRMemoryAllocatedBytes.Copy(),
+ netFrameworkCLRMemoryFinalizationSurvivors.Copy(),
+ netFrameworkCLRMemoryHeapSize.Copy(),
+ netFrameworkCLRMemoryPromoted.Copy(),
+ netFrameworkCLRMemoryNumberGCHandles.Copy(),
+ netFrameworkCLRMemoryCollections.Copy(),
+ netFrameworkCLRMemoryInducedGC.Copy(),
+ netFrameworkCLRMemoryNumberPinnedObjects.Copy(),
+ netFrameworkCLRMemoryNumberSinkBlocksInUse.Copy(),
+ netFrameworkCLRMemoryCommitted.Copy(),
+ netFrameworkCLRMemoryReserved.Copy(),
+ netFrameworkCLRMemoryGCTime.Copy(),
+ }
+
+ netFrameworkCLRRemotingChartsTmpl = module.Charts{
+ netFrameworkCLRRemotingChannels.Copy(),
+ netFrameworkCLRRemotingContextBoundClassesLoaded.Copy(),
+ netFrameworkCLRRemotingContextBoundObjects.Copy(),
+ netFrameworkCLRRemotingContextProxies.Copy(),
+ netFrameworkCLRRemotingContexts.Copy(),
+ netFrameworkCLRRemotingCalls.Copy(),
+ }
+
+ netFrameworkCLRSecurityChartsTmpl = module.Charts{
+ netFrameworkCLRSecurityLinkTimeChecks.Copy(),
+ netFrameworkCLRSecurityChecksTime.Copy(),
+ netFrameworkCLRSecurityStackWalkDepth.Copy(),
+ netFrameworkCLRSecurityRuntimeChecks.Copy(),
+ }
+
+ // Exceptions
+ netFrameworkCLRExceptionsThrown = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrexception_thrown",
+ Title: "Thrown exceptions",
+ Units: "exceptions/s",
+ Fam: "exceptions",
+ Ctx: "netframework.clrexception_thrown",
+ Priority: prioNETFrameworkCLRExceptionsThrown,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrexception_thrown_total", Name: "exceptions", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRExceptionsFilters = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrexception_filters",
+ Title: "Executed exception filters",
+ Units: "filters/s",
+ Fam: "exceptions",
+ Ctx: "netframework.clrexception_filters",
+ Priority: prioNETFrameworkCLRExceptionsFilters,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrexception_filters_total", Name: "filters", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRExceptionsFinallys = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrexception_finallys",
+ Title: "Executed finally blocks",
+ Units: "finallys/s",
+ Fam: "exceptions",
+ Ctx: "netframework.clrexception_finallys",
+ Priority: prioNETFrameworkCLRExceptionsFinallys,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrexception_finallys_total", Name: "finallys", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRExceptionsThrowToCatchDepth = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrexception_throw_to_catch_depth",
+ Title: "Traversed stack frames",
+ Units: "stack_frames/s",
+ Fam: "exceptions",
+ Ctx: "netframework.clrexception_throw_to_catch_depth",
+ Priority: prioNETFrameworkCLRExceptionsThrowToCatchDepth,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrexception_throw_to_catch_depth_total", Name: "traversed", Algo: module.Incremental},
+ },
+ }
+
+ // Interop
+ netFrameworkCLRInteropCOMCallableWrapper = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrinterop_com_callable_wrappers",
+ Title: "COM callable wrappers (CCW)",
+ Units: "ccw/s",
+ Fam: "interop",
+ Ctx: "netframework.clrinterop_com_callable_wrappers",
+ Priority: prioNETFrameworkCLRInteropCOMCallableWrappers,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrinterop_com_callable_wrappers_total", Name: "com_callable_wrappers", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRInteropMarshalling = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrinterop_interop_marshalling",
+ Title: "Arguments and return values marshallings",
+ Units: "marshalling/s",
+ Fam: "interop",
+ Ctx: "netframework.clrinterop_interop_marshallings",
+ Priority: prioNETFrameworkCLRInteropMarshalling,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrinterop_interop_marshalling_total", Name: "marshallings", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRInteropStubsCreated = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrinterop_interop_stubs_created",
+ Title: "Created stubs",
+ Units: "stubs/s",
+ Fam: "interop",
+ Ctx: "netframework.clrinterop_interop_stubs_created",
+ Priority: prioNETFrameworkCLRInteropStubsCreated,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrinterop_interop_stubs_created_total", Name: "created", Algo: module.Incremental},
+ },
+ }
+
+ // JIT
+ netFrameworkCLRJITMethods = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrjit_methods",
+ Title: "JIT-compiled methods",
+ Units: "methods/s",
+ Fam: "jit",
+ Ctx: "netframework.clrjit_methods",
+ Priority: prioNETFrameworkCLRJITMethods,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrjit_methods_total", Name: "jit-compiled", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRJITTime = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrjit_time",
+ Title: "Time spent in JIT compilation",
+ Units: "percentage",
+ Fam: "jit",
+ Ctx: "netframework.clrjit_time",
+ Priority: prioNETFrameworkCLRJITTime,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrjit_time_percent", Name: "time"},
+ },
+ }
+ netFrameworkCLRJITStandardFailures = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrjit_standard_failures",
+ Title: "JIT compiler failures",
+ Units: "failures/s",
+ Fam: "jit",
+ Ctx: "netframework.clrjit_standard_failures",
+ Priority: prioNETFrameworkCLRJITStandardFailures,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrjit_standard_failures_total", Name: "failures", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRJITILBytes = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrjit_il_bytes",
+ Title: "Compiled Microsoft intermediate language (MSIL) bytes",
+ Units: "bytes/s",
+ Fam: "jit",
+ Ctx: "netframework.clrjit_il_bytes",
+ Priority: prioNETFrameworkCLRJITILBytes,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrjit_il_bytes_total", Name: "compiled_msil", Algo: module.Incremental},
+ },
+ }
+
+ // Loading
+ netFrameworkCLRLoadingLoaderHeapSize = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_loader_heap_size",
+ Title: "Memory committed by class loader",
+ Units: "bytes",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_loader_heap_size",
+ Priority: prioNETFrameworkCLRLoadingLoaderHeapSize,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_loader_heap_size_bytes", Name: "committed"},
+ },
+ }
+ netFrameworkCLRLoadingAppDomainsLoaded = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_appdomains_loaded",
+ Title: "Loaded application domains",
+ Units: "domain/s",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_appdomains_loaded",
+ Priority: prioNETFrameworkCLRLoadingAppDomainsLoaded,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_appdomains_loaded_total", Name: "loaded", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLoadingAppDomainsUnloaded = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_appdomains_unloaded",
+ Title: "Unloaded application domains",
+ Units: "domain/s",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_appdomains_unloaded",
+ Priority: prioNETFrameworkCLRLoadingAppDomainsUnloaded,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_appdomains_unloaded_total", Name: "unloaded", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLoadingAssembliesLoaded = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_assemblies_loaded",
+ Title: "Loaded assemblies",
+ Units: "assemblies/s",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_assemblies_loaded",
+ Priority: prioNETFrameworkCLRLoadingAssembliesLoaded,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_assemblies_loaded_total", Name: "loaded", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLoadingClassesLoaded = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_classes_loaded",
+ Title: "Loaded classes in all assemblies",
+ Units: "classes/s",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_classes_loaded",
+ Priority: prioNETFrameworkCLRLoadingClassesLoaded,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_classes_loaded_total", Name: "loaded", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLoadingClassLoadFailure = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrloading_class_load_failure",
+ Title: "Class load failures",
+ Units: "failures/s",
+ Fam: "loading",
+ Ctx: "netframework.clrloading_class_load_failures",
+ Priority: prioNETFrameworkCLRLoadingClassLoadFailure,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrloading_class_load_failures_total", Name: "class_load", Algo: module.Incremental},
+ },
+ }
+
+ // Lock and Threads
+ netFrameworkCLRLockAndThreadsQueueLength = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrlocksandthreads_queue_length",
+ Title: "Threads waited to acquire a managed lock",
+ Units: "threads/s",
+ Fam: "locks threads",
+ Ctx: "netframework.clrlocksandthreads_queue_length",
+ Priority: prioNETFrameworkCLRLocksAndThreadsQueueLength,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrlocksandthreads_queue_length_total", Name: "threads", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLockAndThreadsCurrentLogicalThreads = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrlocksandthreads_current_logical_threads",
+ Title: "Logical threads",
+ Units: "threads",
+ Fam: "locks threads",
+ Ctx: "netframework.clrlocksandthreads_current_logical_threads",
+ Priority: prioNETFrameworkCLRLocksAndThreadsCurrentLogicalThreads,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrlocksandthreads_current_logical_threads", Name: "logical"},
+ },
+ }
+ netFrameworkCLRLockAndThreadsCurrentPhysicalThreads = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrlocksandthreads_current_physical_threads",
+ Title: "Physical threads",
+ Units: "threads",
+ Fam: "locks threads",
+ Ctx: "netframework.clrlocksandthreads_current_physical_threads",
+ Priority: prioNETFrameworkCLRLocksAndThreadsCurrentPhysicalThreads,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrlocksandthreads_physical_threads_current", Name: "physical"},
+ },
+ }
+ netFrameworkCLRLockAndThreadsRecognizedThreads = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrlocksandthreads_recognized_threads",
+ Title: "Threads recognized by the runtime",
+ Units: "threads/s",
+ Fam: "locks threads",
+ Ctx: "netframework.clrlocksandthreads_recognized_threads",
+ Priority: prioNETFrameworkCLRLocksAndThreadsRecognizedThreads,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrlocksandthreads_recognized_threads_total", Name: "threads", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRLockAndThreadsContentions = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrlocksandthreads_contentions",
+ Title: "Fails to acquire a managed lock",
+ Units: "contentions/s",
+ Fam: "locks threads",
+ Ctx: "netframework.clrlocksandthreads_contentions",
+ Priority: prioNETFrameworkCLRLocksAndThreadsContentions,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrlocksandthreads_contentions_total", Name: "contentions", Algo: module.Incremental},
+ },
+ }
+
+ // Memory
+ netFrameworkCLRMemoryAllocatedBytes = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_allocated_bytes",
+ Title: "Memory allocated on the garbage collection heap",
+ Units: "bytes/s",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_allocated_bytes",
+ Priority: prioNETFrameworkCLRMemoryAllocatedBytes,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_allocated_bytes_total", Name: "allocated", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRMemoryFinalizationSurvivors = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_finalization_survivors",
+ Title: "Objects that survived garbage-collection",
+ Units: "objects",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_finalization_survivors",
+ Priority: prioNETFrameworkCLRMemoryFinalizationSurvivors,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_finalization_survivors", Name: "survived"},
+ },
+ }
+ netFrameworkCLRMemoryHeapSize = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_heap_size",
+ Title: "Maximum bytes that can be allocated",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_heap_size",
+ Priority: prioNETFrameworkCLRMemoryHeapSize,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_heap_size_bytes", Name: "heap"},
+ },
+ }
+ netFrameworkCLRMemoryPromoted = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_promoted",
+ Title: "Memory promoted to the next generation",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_promoted",
+ Priority: prioNETFrameworkCLRMemoryPromoted,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_promoted_bytes", Name: "promoted"},
+ },
+ }
+ netFrameworkCLRMemoryNumberGCHandles = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_number_gc_handles",
+ Title: "Garbage collection handles",
+ Units: "handles",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_number_gc_handles",
+ Priority: prioNETFrameworkCLRMemoryNumberGCHandles,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_number_gc_handles", Name: "used"},
+ },
+ }
+ netFrameworkCLRMemoryCollections = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_collections",
+ Title: "Garbage collections",
+ Units: "gc/s",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_collections",
+ Priority: prioNETFrameworkCLRMemoryCollections,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_collections_total", Name: "gc", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRMemoryInducedGC = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_induced_gc",
+ Title: "Garbage collections induced",
+ Units: "gc/s",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_induced_gc",
+ Priority: prioNETFrameworkCLRMemoryInducedGC,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_induced_gc_total", Name: "gc", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRMemoryNumberPinnedObjects = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_number_pinned_objects",
+ Title: "Pinned objects encountered",
+ Units: "objects",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_number_pinned_objects",
+ Priority: prioNETFrameworkCLRMemoryNumberPinnedObjects,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_number_pinned_objects", Name: "pinned"},
+ },
+ }
+ netFrameworkCLRMemoryNumberSinkBlocksInUse = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_number_sink_blocks_in_use",
+ Title: "Synchronization blocks in use",
+ Units: "blocks",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_number_sink_blocks_in_use",
+ Priority: prioNETFrameworkCLRMemoryNumberSinkBlocksInUse,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_number_sink_blocksinuse", Name: "used"},
+ },
+ }
+ netFrameworkCLRMemoryCommitted = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_committed",
+ Title: "Virtual memory committed by GC",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_committed",
+ Priority: prioNETFrameworkCLRMemoryCommitted,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_committed_bytes", Name: "committed"},
+ },
+ }
+ netFrameworkCLRMemoryReserved = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_reserved",
+ Title: "Virtual memory reserved by GC",
+ Units: "bytes",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_reserved",
+ Priority: prioNETFrameworkCLRMemoryReserved,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_reserved_bytes", Name: "reserved"},
+ },
+ }
+ netFrameworkCLRMemoryGCTime = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrmemory_gc_time",
+ Title: "Time spent on GC",
+ Units: "percentage",
+ Fam: "memory",
+ Ctx: "netframework.clrmemory_gc_time",
+ Priority: prioNETFrameworkCLRMemoryGCTime,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrmemory_gc_time_percent", Name: "time"},
+ },
+ }
+
+ // Remoting
+ netFrameworkCLRRemotingChannels = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_channels",
+ Title: "Registered channels",
+ Units: "channels/s",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_channels",
+ Priority: prioNETFrameworkCLRRemotingChannels,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_channels_total", Name: "registered", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRRemotingContextBoundClassesLoaded = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_context_bound_classes_loaded",
+ Title: "Loaded context-bound classes",
+ Units: "classes",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_context_bound_classes_loaded",
+ Priority: prioNETFrameworkCLRRemotingContextBoundClassesLoaded,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_context_bound_classes_loaded", Name: "loaded"},
+ },
+ }
+ netFrameworkCLRRemotingContextBoundObjects = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_context_bound_objects",
+ Title: "Allocated context-bound objects",
+ Units: "objects/s",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_context_bound_objects",
+ Priority: prioNETFrameworkCLRRemotingContextBoundObjects,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_context_bound_objects_total", Name: "allocated", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRRemotingContextProxies = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_context_proxies",
+ Title: "Remoting proxy objects",
+ Units: "objects/s",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_context_proxies",
+ Priority: prioNETFrameworkCLRRemotingContextProxies,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_context_proxies_total", Name: "objects", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRRemotingContexts = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_contexts",
+ Title: "Total of remoting contexts",
+ Units: "contexts",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_contexts",
+ Priority: prioNETFrameworkCLRRemotingContexts,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_contexts", Name: "contexts"},
+ },
+ }
+ netFrameworkCLRRemotingCalls = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrremoting_calls",
+ Title: "Remote Procedure Calls (RPC) invoked",
+ Units: "calls/s",
+ Fam: "remoting",
+ Ctx: "netframework.clrremoting_remote_calls",
+ Priority: prioNETFrameworkCLRRemotingRemoteCalls,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrremoting_remote_calls_total", Name: "rpc", Algo: module.Incremental},
+ },
+ }
+
+ // Security
+ netFrameworkCLRSecurityLinkTimeChecks = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrsecurity_link_time_checks",
+ Title: "Link-time code access security checks",
+ Units: "checks/s",
+ Fam: "security",
+ Ctx: "netframework.clrsecurity_link_time_checks",
+ Priority: prioNETFrameworkCLRSecurityLinkTimeChecks,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrsecurity_link_time_checks_total", Name: "linktime", Algo: module.Incremental},
+ },
+ }
+ netFrameworkCLRSecurityChecksTime = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrsecurity_checks_time",
+ Title: "Time spent performing runtime code access security checks",
+ Units: "percentage",
+ Fam: "security",
+ Ctx: "netframework.clrsecurity_checks_time",
+ Priority: prioNETFrameworkCLRSecurityRTChecksTime,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrsecurity_checks_time_percent", Name: "time"},
+ },
+ }
+ netFrameworkCLRSecurityStackWalkDepth = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrsecurity_stack_walk_depth",
+ Title: "Depth of the stack",
+ Units: "depth",
+ Fam: "security",
+ Ctx: "netframework.clrsecurity_stack_walk_depth",
+ Priority: prioNETFrameworkCLRSecurityStackWalkDepth,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrsecurity_stack_walk_depth", Name: "stack"},
+ },
+ }
+ netFrameworkCLRSecurityRuntimeChecks = module.Chart{
+ OverModule: "netframework",
+ ID: "netframework_%s_clrsecurity_runtime_checks",
+ Title: "Runtime code access security checks performed",
+ Units: "checks/s",
+ Fam: "security",
+ Ctx: "netframework.clrsecurity_runtime_checks",
+ Priority: prioNETFrameworkCLRSecurityRuntimeChecks,
+ Dims: module.Dims{
+ {ID: "netframework_%s_clrsecurity_runtime_checks_total", Name: "runtime", Algo: module.Incremental},
+ },
+ }
+)
+
+// Service
+var (
+ serviceChartsTmpl = module.Charts{
+ serviceStateChartTmpl.Copy(),
+ serviceStatusChartTmpl.Copy(),
+ }
+ serviceStateChartTmpl = module.Chart{
+ ID: "service_%s_state",
+ Title: "Service state",
+ Units: "state",
+ Fam: "services",
+ Ctx: "windows.service_state",
+ Priority: prioServiceState,
+ Dims: module.Dims{
+ {ID: "service_%s_state_running", Name: "running"},
+ {ID: "service_%s_state_stopped", Name: "stopped"},
+ {ID: "service_%s_state_start_pending", Name: "start_pending"},
+ {ID: "service_%s_state_stop_pending", Name: "stop_pending"},
+ {ID: "service_%s_state_continue_pending", Name: "continue_pending"},
+ {ID: "service_%s_state_pause_pending", Name: "pause_pending"},
+ {ID: "service_%s_state_paused", Name: "paused"},
+ {ID: "service_%s_state_unknown", Name: "unknown"},
+ },
+ }
+ serviceStatusChartTmpl = module.Chart{
+ ID: "service_%s_status",
+ Title: "Service status",
+ Units: "status",
+ Fam: "services",
+ Ctx: "windows.service_status",
+ Priority: prioServiceStatus,
+ Dims: module.Dims{
+ {ID: "service_%s_status_ok", Name: "ok"},
+ {ID: "service_%s_status_error", Name: "error"},
+ {ID: "service_%s_status_unknown", Name: "unknown"},
+ {ID: "service_%s_status_degraded", Name: "degraded"},
+ {ID: "service_%s_status_pred_fail", Name: "pred_fail"},
+ {ID: "service_%s_status_starting", Name: "starting"},
+ {ID: "service_%s_status_stopping", Name: "stopping"},
+ {ID: "service_%s_status_service", Name: "service"},
+ {ID: "service_%s_status_stressed", Name: "stressed"},
+ {ID: "service_%s_status_nonrecover", Name: "nonrecover"},
+ {ID: "service_%s_status_no_contact", Name: "no_contact"},
+ {ID: "service_%s_status_lost_comm", Name: "lost_comm"},
+ },
+ }
+)
+
+// HyperV
+var (
+ hypervChartsTmpl = module.Charts{
+ hypervVirtualMachinesHealthChart.Copy(),
+ hypervRootPartitionDeviceSpacePagesChart.Copy(),
+ hypervRootPartitionGPASpacePagesChart.Copy(),
+ hypervRootPartitionGPASpaceModificationsChart.Copy(),
+ hypervRootPartitionAttachedDevicesChart.Copy(),
+ hypervRootPartitionDepositedPagesChart.Copy(),
+ hypervRootPartitionSkippedInterrupts.Copy(),
+ hypervRootPartitionDeviceDMAErrorsChart.Copy(),
+ hypervRootPartitionDeviceInterruptErrorsChart.Copy(),
+ hypervRootPartitionDeviceInterruptThrottledEventsChart.Copy(),
+ hypervRootPartitionIOTlbFlushChart.Copy(),
+ hypervRootPartitionAddressSpaceChart.Copy(),
+ hypervRootPartitionVirtualTlbFlushEntries.Copy(),
+ hypervRootPartitionVirtualTlbPages.Copy(),
+ }
+ hypervVirtualMachinesHealthChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "health_vm",
+ Title: "Virtual machines health status",
+ Units: "vms",
+ Fam: "vms health",
+ Ctx: "hyperv.vms_health",
+ Priority: prioHypervVMHealth,
+ Type: module.Stacked,
+ Dims: module.Dims{
+ {ID: "hyperv_health_ok", Name: "ok"},
+ {ID: "hyperv_health_critical", Name: "critical"},
+ },
+ }
+ hypervRootPartitionDeviceSpacePagesChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_device_space_pages",
+ Title: "Root partition pages in the device space",
+ Units: "pages",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_device_space_pages",
+ Priority: prioHypervRootPartitionDeviceSpacePages,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_4K_device_pages", Name: "4K"},
+ {ID: "hyperv_root_partition_2M_device_pages", Name: "2M"},
+ {ID: "hyperv_root_partition_1G_device_pages", Name: "1G"},
+ },
+ }
+ hypervRootPartitionGPASpacePagesChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_gpa_space_pages",
+ Title: "Root partition pages in the GPA space",
+ Units: "pages",
+ Fam: "root partition",
+ Ctx: "windows.hyperv_root_partition_gpa_space_pages",
+ Priority: prioHypervRootPartitionGPASpacePages,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_4K_gpa_pages", Name: "4K"},
+ {ID: "hyperv_root_partition_2M_gpa_pages", Name: "2M"},
+ {ID: "hyperv_root_partition_1G_gpa_pages", Name: "1G"},
+ },
+ }
+ hypervRootPartitionGPASpaceModificationsChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_gpa_space_modifications",
+ Title: "Root partition GPA space modifications",
+ Units: "modifications/s",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_gpa_space_modifications",
+ Priority: prioHypervRootPartitionGPASpaceModifications,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_gpa_space_modifications", Name: "gpa", Algo: module.Incremental},
+ },
+ }
+ hypervRootPartitionAttachedDevicesChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_attached_devices",
+ Title: "Root partition attached devices",
+ Units: "devices",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_attached_devices",
+ Priority: prioHypervRootPartitionAttachedDevices,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_attached_devices", Name: "attached"},
+ },
+ }
+ hypervRootPartitionDepositedPagesChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_deposited_pages",
+ Title: "Root partition deposited pages",
+ Units: "pages",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_deposited_pages",
+ Priority: prioHypervRootPartitionDepositedPages,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_deposited_pages", Name: "deposited"},
+ },
+ }
+ hypervRootPartitionSkippedInterrupts = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_skipped_interrupts",
+ Title: "Root partition skipped interrupts",
+ Units: "interrupts",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_skipped_interrupts",
+ Priority: prioHypervRootPartitionSkippedInterrupts,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_physical_pages_allocated", Name: "skipped"},
+ },
+ }
+ hypervRootPartitionDeviceDMAErrorsChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_device_dma_errors",
+ Title: "Root partition illegal DMA requests",
+ Units: "requests",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_device_dma_errors",
+ Priority: prioHypervRootPartitionDeviceDMAErrors,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_deposited_pages", Name: "illegal_dma"},
+ },
+ }
+ hypervRootPartitionDeviceInterruptErrorsChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "partition_device_interrupt_errors",
+ Title: "Root partition illegal interrupt requests",
+ Units: "requests",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_device_interrupt_errors",
+ Priority: prioHypervRootPartitionDeviceInterruptErrors,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_device_interrupt_errors", Name: "illegal_interrupt"},
+ },
+ }
+ hypervRootPartitionDeviceInterruptThrottledEventsChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_device_interrupt_throttle_events",
+ Title: "Root partition throttled interrupts",
+ Units: "events",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_device_interrupt_throttle_events",
+ Priority: prioHypervRootPartitionDeviceInterruptThrottleEvents,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_device_interrupt_throttle_events", Name: "throttling"},
+ },
+ }
+ hypervRootPartitionIOTlbFlushChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_io_tbl_flush",
+ Title: "Root partition flushes of I/O TLBs",
+ Units: "flushes/s",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_io_tlb_flush",
+ Priority: prioHypervRootPartitionIOTlbFlush,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_io_tlb_flush", Name: "flushes", Algo: module.Incremental},
+ },
+ }
+ hypervRootPartitionAddressSpaceChart = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_address_space",
+ Title: "Root partition address spaces in the virtual TLB",
+ Units: "address spaces",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_address_space",
+ Priority: prioHypervRootPartitionAddressSpace,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_address_spaces", Name: "address_spaces"},
+ },
+ }
+ hypervRootPartitionVirtualTlbFlushEntries = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_virtual_tbl_flush_entries",
+ Title: "Root partition flushes of the entire virtual TLB",
+ Units: "flushes/s",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_virtual_tlb_flush_entries",
+ Priority: prioHypervRootPartitionVirtualTlbFlushEntires,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_virtual_tlb_flush_entires", Name: "flushes", Algo: module.Incremental},
+ },
+ }
+ hypervRootPartitionVirtualTlbPages = module.Chart{
+ OverModule: "hyperv",
+ ID: "root_partition_virtual_tlb_pages",
+ Title: "Root partition pages used by the virtual TLB",
+ Units: "pages",
+ Fam: "root partition",
+ Ctx: "hyperv.root_partition_virtual_tlb_pages",
+ Priority: prioHypervRootPartitionVirtualTlbPages,
+ Dims: module.Dims{
+ {ID: "hyperv_root_partition_virtual_tlb_pages", Name: "used"},
+ },
+ }
+)
+
+// HyperV VM Memory
+var (
+ hypervVMChartsTemplate = module.Charts{
+ hypervHypervVMCPUUsageChartTmpl.Copy(),
+ hypervHypervVMMemoryPhysicalChartTmpl.Copy(),
+ hypervHypervVMMemoryPhysicalGuestVisibleChartTmpl.Copy(),
+ hypervHypervVMMemoryPressureCurrentChartTmpl.Copy(),
+ hypervVIDPhysicalPagesAllocatedChartTmpl.Copy(),
+ hypervVIDRemotePhysicalPagesChartTmpl.Copy(),
+ }
+ hypervHypervVMCPUUsageChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_cpu_usage",
+ Title: "VM CPU usage (100% = 1 core)",
+ Units: "percentage",
+ Fam: "vm cpu",
+ Ctx: "hyperv.vm_cpu_usage",
+ Priority: prioHypervVMCPUUsage,
+ Type: module.Stacked,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_%s_cpu_guest_run_time", Name: "guest", Div: 1e5, Algo: module.Incremental},
+ {ID: "hyperv_vm_%s_cpu_hypervisor_run_time", Name: "hypervisor", Div: 1e5, Algo: module.Incremental},
+ {ID: "hyperv_vm_%s_cpu_remote_run_time", Name: "remote", Div: 1e5, Algo: module.Incremental},
+ },
+ }
+ hypervHypervVMMemoryPhysicalChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_memory_physical",
+ Title: "VM assigned memory",
+ Units: "MiB",
+ Fam: "vm mem",
+ Ctx: "hyperv.vm_memory_physical",
+ Priority: prioHypervVMMemoryPhysical,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_%s_memory_physical", Name: "assigned_memory"},
+ },
+ }
+ hypervHypervVMMemoryPhysicalGuestVisibleChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_memory_physical_guest_visible",
+ Title: "VM guest visible memory",
+ Units: "MiB",
+ Fam: "vm mem",
+ Ctx: "hyperv.vm_memory_physical_guest_visible",
+ Priority: prioHypervVMMemoryPhysicalGuestVisible,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_%s_memory_physical_guest_visible", Name: "visible_memory"},
+ },
+ }
+ hypervHypervVMMemoryPressureCurrentChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_memory_pressure_current",
+ Title: "VM current pressure",
+ Units: "percentage",
+ Fam: "vm mem",
+ Ctx: "hyperv.vm_memory_pressure_current",
+ Priority: prioHypervVMMemoryPressureCurrent,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_%s_memory_pressure_current", Name: "pressure"},
+ },
+ }
+ hypervVIDPhysicalPagesAllocatedChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_vid_physical_pages_allocated",
+ Title: "VM physical pages allocated",
+ Units: "pages",
+ Fam: "vm mem",
+ Ctx: "hyperv.vm_vid_physical_pages_allocated",
+ Priority: prioHypervVIDPhysicalPagesAllocated,
+ Dims: module.Dims{
+ {ID: "hyperv_vid_%s_physical_pages_allocated", Name: "allocated"},
+ },
+ }
+ hypervVIDRemotePhysicalPagesChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_%s_remote_physical_pages",
+ Title: "VM physical pages not allocated from the preferred NUMA node",
+ Units: "pages",
+ Fam: "vm mem",
+ Ctx: "hyperv.vm_vid_remote_physical_pages",
+ Priority: prioHypervVIDRemotePhysicalPages,
+ Dims: module.Dims{
+ {ID: "hyperv_vid_%s_remote_physical_pages", Name: "remote_physical"},
+ },
+ }
+)
+
+// HyperV VM storage device
+var (
+ hypervVMDeviceChartsTemplate = module.Charts{
+ hypervVMDeviceIOChartTmpl.Copy(),
+ hypervVMDeviceIOPSChartTmpl.Copy(),
+ hypervVMDeviceErrorCountChartTmpl.Copy(),
+ }
+ hypervVMDeviceIOChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_device_%s_bytes_read",
+ Title: "VM storage device IO",
+ Units: "bytes/s",
+ Fam: "vm disk",
+ Ctx: "hyperv.vm_device_bytes",
+ Priority: prioHypervVMDeviceBytes,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_device_%s_bytes_read", Name: "read", Algo: module.Incremental},
+ {ID: "hyperv_vm_device_%s_bytes_written", Name: "written", Algo: module.Incremental},
+ },
+ }
+ hypervVMDeviceIOPSChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_device_%s_operation_read",
+ Title: "VM storage device IOPS",
+ Units: "operations/s",
+ Fam: "vm disk",
+ Ctx: "hyperv.vm_device_operations",
+ Priority: prioHypervVMDeviceOperations,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_device_%s_operations_read", Name: "read", Algo: module.Incremental},
+ {ID: "hyperv_vm_device_%s_operations_written", Name: "write", Algo: module.Incremental},
+ },
+ }
+ hypervVMDeviceErrorCountChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_device_%s_error_count",
+ Title: "VM storage device errors",
+ Units: "errors/s",
+ Fam: "vm disk",
+ Ctx: "hyperv.vm_device_errors",
+ Priority: prioHypervVMDeviceErrors,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_device_%s_error_count", Name: "errors", Algo: module.Incremental},
+ },
+ }
+)
+
+// HyperV VM network interface
+var (
+ hypervVMInterfaceChartsTemplate = module.Charts{
+ hypervVMInterfaceTrafficChartTmpl.Copy(),
+ hypervVMInterfacePacketsChartTmpl.Copy(),
+ hypervVMInterfacePacketsDroppedChartTmpl.Copy(),
+ }
+
+ hypervVMInterfaceTrafficChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_interface_%s_bytes",
+ Title: "VM interface traffic",
+ Units: "bytes/s",
+ Fam: "vm net",
+ Ctx: "hyperv.vm_interface_bytes",
+ Priority: prioHypervVMInterfaceBytes,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_interface_%s_bytes_received", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vm_interface_%s_bytes_sent", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVMInterfacePacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_interface_%s_packets",
+ Title: "VM interface packets",
+ Units: "packets/s",
+ Fam: "vm net",
+ Ctx: "hyperv.vm_interface_packets",
+ Priority: prioHypervVMInterfacePackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_interface_%s_packets_received", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vm_interface_%s_packets_sent", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVMInterfacePacketsDroppedChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vm_interface_%s_packets_dropped",
+ Title: "VM interface packets dropped",
+ Units: "drops/s",
+ Fam: "vm net",
+ Ctx: "hyperv.vm_interface_packets_dropped",
+ Priority: prioHypervVMInterfacePacketsDropped,
+ Dims: module.Dims{
+ {ID: "hyperv_vm_interface_%s_packets_incoming_dropped", Name: "incoming", Algo: module.Incremental},
+ {ID: "hyperv_vm_interface_%s_packets_outgoing_dropped", Name: "outgoing", Algo: module.Incremental},
+ },
+ }
+)
+
+// HyperV Virtual Switch
+var (
+ hypervVswitchChartsTemplate = module.Charts{
+ hypervVswitchTrafficChartTmpl.Copy(),
+ hypervVswitchPacketsChartTmpl.Copy(),
+ hypervVswitchDirectedPacketsChartTmpl.Copy(),
+ hypervVswitchBroadcastPacketsChartTmpl.Copy(),
+ hypervVswitchMulticastPacketsChartTmpl.Copy(),
+ hypervVswitchDroppedPacketsChartTmpl.Copy(),
+ hypervVswitchExtensionDroppedPacketsChartTmpl.Copy(),
+ hypervVswitchPacketsFloodedTotalChartTmpl.Copy(),
+ hypervVswitchLearnedMACAddressChartTmpl.Copy(),
+ hypervVswitchPurgedMACAddressChartTmpl.Copy(),
+ }
+
+ hypervVswitchTrafficChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_traffic",
+ Title: "Virtual switch traffic",
+ Units: "bytes/s",
+ Fam: "vswitch traffic",
+ Ctx: "hyperv.vswitch_bytes",
+ Priority: prioHypervVswitchTrafficTotal,
+ Type: module.Area,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_bytes_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_bytes_sent_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_packets",
+ Title: "Virtual switch packets",
+ Units: "packets/s",
+ Fam: "vswitch packets",
+ Ctx: "hyperv.vswitch_packets",
+ Priority: prioHypervVswitchPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_packets_received_total", Name: "received", Algo: module.Incremental},
+ // FIXME: https://github.com/prometheus-community/windows_exporter/pull/1201
+ //{ID: "hyperv_vswitch_%s_packets_sent_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchDirectedPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_directed_packets",
+ Title: "Virtual switch directed packets",
+ Units: "packets/s",
+ Fam: "vswitch packets",
+ Ctx: "hyperv.vswitch_directed_packets",
+ Priority: prioHypervVswitchDirectedPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_directed_packets_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_directed_packets_send_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchBroadcastPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_broadcast_packets",
+ Title: "Virtual switch broadcast packets",
+ Units: "packets/s",
+ Fam: "vswitch packets",
+ Ctx: "hyperv.vswitch_broadcast_packets",
+ Priority: prioHypervVswitchBroadcastPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_broadcast_packets_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_broadcast_packets_sent_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchMulticastPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_multicast_packets",
+ Title: "Virtual switch multicast packets",
+ Units: "packets/s",
+ Fam: "vswitch packets",
+ Ctx: "hyperv.vswitch_multicast_packets",
+ Priority: prioHypervVswitchMulticastPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_multicast_packets_received_total", Name: "received", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_multicast_packets_sent_total", Name: "sent", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchDroppedPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_dropped_packets",
+ Title: "Virtual switch dropped packets",
+ Units: "drops/s",
+ Fam: "vswitch drops",
+ Ctx: "hyperv.vswitch_dropped_packets",
+ Priority: prioHypervVswitchDroppedPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_dropped_packets_incoming_total", Name: "incoming", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_dropped_packets_outcoming_total", Name: "outgoing", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchExtensionDroppedPacketsChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_extensions_dropped_packets_incoming",
+ Title: "Virtual switch extensions dropped packets",
+ Units: "drops/s",
+ Fam: "vswitch drops",
+ Ctx: "hyperv.vswitch_extensions_dropped_packets",
+ Priority: prioHypervVswitchExtensionsDroppedPackets,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_extensions_dropped_packets_incoming_total", Name: "incoming", Algo: module.Incremental},
+ {ID: "hyperv_vswitch_%s_extensions_dropped_packets_outcoming_total", Name: "outgoing", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchPacketsFloodedTotalChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_packets_flooded",
+ Title: "Virtual switch flooded packets",
+ Units: "packets/s",
+ Fam: "vswitch flood",
+ Ctx: "hyperv.vswitch_packets_flooded",
+ Priority: prioHypervVswitchPacketsFlooded,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_packets_flooded_total", Name: "flooded", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchLearnedMACAddressChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_learned_mac_addresses",
+ Title: "Virtual switch learned MAC addresses",
+ Units: "mac addresses/s",
+ Fam: "vswitch mac addresses",
+ Ctx: "hyperv.vswitch_learned_mac_addresses",
+ Priority: prioHypervVswitchLearnedMACAddresses,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_learned_mac_addresses_total", Name: "learned", Algo: module.Incremental},
+ },
+ }
+ hypervVswitchPurgedMACAddressChartTmpl = module.Chart{
+ OverModule: "hyperv",
+ ID: "vswitch_%s_purged_mac_addresses",
+ Title: "Virtual switch purged MAC addresses",
+ Units: "mac addresses/s",
+ Fam: "vswitch mac addresses",
+ Ctx: "hyperv.vswitch_purged_mac_addresses",
+ Priority: prioHypervVswitchPurgeMACAddress,
+ Dims: module.Dims{
+ {ID: "hyperv_vswitch_%s_purged_mac_addresses_total", Name: "purged", Algo: module.Incremental},
+ },
+ }
+)
+
+// Collectors
+var (
+ collectorChartsTmpl = module.Charts{
+ collectorDurationChartTmpl.Copy(),
+ collectorStatusChartTmpl.Copy(),
+ }
+ collectorDurationChartTmpl = module.Chart{
+ ID: "collector_%s_duration",
+ Title: "Duration of a data collection",
+ Units: "seconds",
+ Fam: "collection",
+ Ctx: "windows.collector_duration",
+ Priority: prioCollectorDuration,
+ Dims: module.Dims{
+ {ID: "collector_%s_duration", Name: "duration", Div: precision},
+ },
+ }
+ collectorStatusChartTmpl = module.Chart{
+ ID: "collector_%s_status",
+ Title: "Status of a data collection",
+ Units: "status",
+ Fam: "collection",
+ Ctx: "windows.collector_status",
+ Priority: prioCollectorStatus,
+ Dims: module.Dims{
+ {ID: "collector_%s_status_success", Name: "success"},
+ {ID: "collector_%s_status_fail", Name: "fail"},
+ },
+ }
+)
+
+func (w *Windows) addCPUCharts() {
+ charts := cpuCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addCPUCoreCharts(core string) {
+ charts := cpuCoreChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, core)
+ chart.Labels = []module.Label{
+ {Key: "core", Value: core},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, core)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeCPUCoreCharts(core string) {
+ px := fmt.Sprintf("cpu_core_%s", core)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addMemoryCharts() {
+ charts := memCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addDiskCharts(disk string) {
+ charts := diskChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, disk)
+ chart.Labels = []module.Label{
+ {Key: "disk", Value: disk},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, disk)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeDiskCharts(disk string) {
+ px := fmt.Sprintf("logical_disk_%s", disk)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addNICCharts(nic string) {
+ charts := nicChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, nic)
+ chart.Labels = []module.Label{
+ {Key: "nic", Value: nic},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, nic)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeNICCharts(nic string) {
+ px := fmt.Sprintf("nic_%s", nic)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addTCPCharts() {
+ charts := tcpCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addOSCharts() {
+ charts := osCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addSystemCharts() {
+ charts := systemCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addLogonCharts() {
+ charts := logonCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addADFSCharts() {
+ charts := adfsCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addExchangeCharts() {
+ charts := exchangeCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addExchangeWorkloadCharts(name string) {
+ charts := exchangeWorkloadChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, name)
+ chart.Labels = []module.Label{
+ {Key: "workload", Value: name},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, name)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeExchangeWorkloadCharts(name string) {
+ px := fmt.Sprintf("exchange_workload_%s", name)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addExchangeLDAPCharts(name string) {
+ charts := exchangeLDAPChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, name)
+ chart.Labels = []module.Label{
+ {Key: "ldap_process", Value: name},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, name)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeExchangeLDAPCharts(name string) {
+ px := fmt.Sprintf("exchange_ldap_%s", name)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addExchangeHTTPProxyCharts(name string) {
+ charts := exchangeHTTPProxyChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, name)
+ chart.Labels = []module.Label{
+ {Key: "http_proxy", Value: name},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, name)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeExchangeHTTPProxyCharts(name string) {
+ px := fmt.Sprintf("exchange_http_proxy_%s", name)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addThermalZoneCharts(zone string) {
+ charts := thermalzoneChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, zone)
+ chart.Labels = []module.Label{
+ {Key: "thermalzone", Value: zone},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, zone)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeThermalZoneCharts(zone string) {
+ px := fmt.Sprintf("thermalzone_%s", zone)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addIISWebsiteCharts(website string) {
+ charts := iisWebsiteChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, website)
+ chart.Labels = []module.Label{
+ {Key: "website", Value: website},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, website)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeIIWebsiteSCharts(website string) {
+ px := fmt.Sprintf("iis_website_%s", website)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addMSSQLDBCharts(instance string, dbname string) {
+ charts := mssqlDatabaseChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, dbname, instance)
+ chart.Labels = []module.Label{
+ {Key: "mssql_instance", Value: instance},
+ {Key: "database", Value: dbname},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, dbname, instance)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeMSSQLDBCharts(instance string, dbname string) {
+ px := fmt.Sprintf("mssql_db_%s_instance_%s", dbname, instance)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addMSSQLInstanceCharts(instance string) {
+ charts := mssqlInstanceChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, instance)
+ chart.Labels = []module.Label{
+ {Key: "mssql_instance", Value: instance},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, instance)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeMSSQLInstanceCharts(instance string) {
+ px := fmt.Sprintf("mssql_instance_%s", instance)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessesCharts() {
+ charts := processesCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addADCharts() {
+ charts := adCharts.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addCertificateTemplateCharts(template string) {
+ charts := adcsCertTemplateChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, template)
+ chart.Labels = []module.Label{
+ {Key: "cert_template", Value: template},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, template)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeCertificateTemplateCharts(template string) {
+ px := fmt.Sprintf("adcs_cert_template_%s", template)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessToCharts(procID string) {
+ for _, chart := range *w.Charts() {
+ var dim *module.Dim
+ switch chart.ID {
+ case processesCPUUtilizationTotalChart.ID:
+ id := fmt.Sprintf("process_%s_cpu_time", procID)
+ dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental, Div: 1000, Mul: 100}
+ if procID == "Idle" {
+ dim.Hidden = true
+ }
+ case processesMemoryUsageChart.ID:
+ id := fmt.Sprintf("process_%s_working_set_private_bytes", procID)
+ dim = &module.Dim{ID: id, Name: procID}
+ case processesIOBytesChart.ID:
+ id := fmt.Sprintf("process_%s_io_bytes", procID)
+ dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental}
+ case processesIOOperationsChart.ID:
+ id := fmt.Sprintf("process_%s_io_operations", procID)
+ dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental}
+ case processesPageFaultsChart.ID:
+ id := fmt.Sprintf("process_%s_page_faults", procID)
+ dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental}
+ case processesPageFileBytes.ID:
+ id := fmt.Sprintf("process_%s_page_file_bytes", procID)
+ dim = &module.Dim{ID: id, Name: procID}
+ case processesThreads.ID:
+ id := fmt.Sprintf("process_%s_threads", procID)
+ dim = &module.Dim{ID: id, Name: procID}
+ case processesHandlesChart.ID:
+ id := fmt.Sprintf("process_%s_handles", procID)
+ dim = &module.Dim{ID: id, Name: procID}
+ default:
+ continue
+ }
+
+ if err := chart.AddDim(dim); err != nil {
+ w.Warning(err)
+ continue
+ }
+ chart.MarkNotCreated()
+ }
+}
+
+func (w *Windows) removeProcessFromCharts(procID string) {
+ for _, chart := range *w.Charts() {
+ var id string
+ switch chart.ID {
+ case processesCPUUtilizationTotalChart.ID:
+ id = fmt.Sprintf("process_%s_cpu_time", procID)
+ case processesMemoryUsageChart.ID:
+ id = fmt.Sprintf("process_%s_working_set_private_bytes", procID)
+ case processesIOBytesChart.ID:
+ id = fmt.Sprintf("process_%s_io_bytes", procID)
+ case processesIOOperationsChart.ID:
+ id = fmt.Sprintf("process_%s_io_operations", procID)
+ case processesPageFaultsChart.ID:
+ id = fmt.Sprintf("process_%s_page_faults", procID)
+ case processesPageFileBytes.ID:
+ id = fmt.Sprintf("process_%s_page_file_bytes", procID)
+ case processesThreads.ID:
+ id = fmt.Sprintf("process_%s_threads", procID)
+ case processesHandlesChart.ID:
+ id = fmt.Sprintf("process_%s_handles", procID)
+ default:
+ continue
+ }
+
+ if err := chart.MarkDimRemove(id, false); err != nil {
+ w.Warning(err)
+ continue
+ }
+ chart.MarkNotCreated()
+ }
+}
+
+func (w *Windows) addProcessNetFrameworkExceptionsCharts(procName string) {
+ charts := netFrameworkCLRExceptionsChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessFromNetFrameworkExceptionsCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrexception", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkInteropCharts(procName string) {
+ charts := netFrameworkCLRInteropChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkInteropCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrinterop", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkJITCharts(procName string) {
+ charts := netFrameworkCLRJITChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkJITCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrjit", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkLoadingCharts(procName string) {
+ charts := netFrameworkCLRLoadingChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkLoadingCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrloading", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkLocksAndThreadsCharts(procName string) {
+ charts := netFrameworkCLRLocksAndThreadsChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkLocksAndThreadsCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrlocksandthreads", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkMemoryCharts(procName string) {
+ charts := netFrameworkCLRMemoryChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkMemoryCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrmemory", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkRemotingCharts(procName string) {
+ charts := netFrameworkCLRRemotingChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkRemotingCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrremoting", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addProcessNetFrameworkSecurityCharts(procName string) {
+ charts := netFrameworkCLRSecurityChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName))
+ chart.Labels = []module.Label{
+ {Key: "process", Value: procName},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, procName)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeProcessNetFrameworkSecurityCharts(procName string) {
+ px := fmt.Sprintf("netframework_%s_clrsecurity", strings.ToLower(procName))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addServiceCharts(svc string) {
+ charts := serviceChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, svc)
+ chart.Labels = []module.Label{
+ {Key: "service", Value: svc},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, svc)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeServiceCharts(svc string) {
+ px := fmt.Sprintf("service_%s", svc)
+ w.removeCharts(px)
+}
+
+func (w *Windows) addCollectorCharts(name string) {
+ charts := collectorChartsTmpl.Copy()
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, name)
+ chart.Labels = []module.Label{
+ {Key: "collector", Value: name},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, name)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addHypervCharts() {
+ charts := hypervChartsTmpl.Copy()
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) addHypervVMCharts(vm string) {
+ charts := hypervVMChartsTemplate.Copy()
+ n := hypervCleanName(vm)
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, n)
+ chart.Labels = []module.Label{
+ {Key: "vm_name", Value: vm},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, n)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeHypervVMCharts(vm string) {
+ px := fmt.Sprintf("vm_%s", hypervCleanName(vm))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addHypervVMDeviceCharts(device string) {
+ charts := hypervVMDeviceChartsTemplate.Copy()
+ n := hypervCleanName(device)
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, n)
+ chart.Labels = []module.Label{
+ {Key: "vm_device", Value: device},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, n)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeHypervVMDeviceCharts(device string) {
+ px := fmt.Sprintf("vm_device_%s", hypervCleanName(device))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addHypervVMInterfaceCharts(iface string) {
+ charts := hypervVMInterfaceChartsTemplate.Copy()
+ n := hypervCleanName(iface)
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, n)
+ chart.Labels = []module.Label{
+ {Key: "vm_interface", Value: iface},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, n)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeHypervVMInterfaceCharts(iface string) {
+ px := fmt.Sprintf("vm_interface_%s", hypervCleanName(iface))
+ w.removeCharts(px)
+}
+
+func (w *Windows) addHypervVSwitchCharts(vswitch string) {
+ charts := hypervVswitchChartsTemplate.Copy()
+ n := hypervCleanName(vswitch)
+
+ for _, chart := range *charts {
+ chart.ID = fmt.Sprintf(chart.ID, n)
+ chart.Labels = []module.Label{
+ {Key: "vswitch", Value: vswitch},
+ }
+ for _, dim := range chart.Dims {
+ dim.ID = fmt.Sprintf(dim.ID, n)
+ }
+ }
+
+ if err := w.Charts().Add(*charts...); err != nil {
+ w.Warning(err)
+ }
+}
+
+func (w *Windows) removeHypervVSwitchCharts(vswitch string) {
+ px := fmt.Sprintf("vswitch_%s", hypervCleanName(vswitch))
+ w.removeCharts(px)
+}
+
+func (w *Windows) removeCollectorCharts(name string) {
+ px := fmt.Sprintf("collector_%s", name)
+ w.removeCharts(px)
+}
+
+func (w *Windows) removeCharts(prefix string) {
+ for _, chart := range *w.Charts() {
+ if strings.HasPrefix(chart.ID, prefix) {
+ chart.MarkRemove()
+ chart.MarkNotCreated()
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect.go b/src/go/collectors/go.d.plugin/modules/windows/collect.go
new file mode 100644
index 000000000..b20b08c27
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect.go
@@ -0,0 +1,163 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const precision = 1000
+
+const (
+ collectorAD = "ad"
+ collectorADCS = "adcs"
+ collectorADFS = "adfs"
+ collectorCPU = "cpu"
+ collectorMemory = "memory"
+ collectorNet = "net"
+ collectorLogicalDisk = "logical_disk"
+ collectorOS = "os"
+ collectorSystem = "system"
+ collectorLogon = "logon"
+ collectorThermalZone = "thermalzone"
+ collectorTCP = "tcp"
+ collectorIIS = "iis"
+ collectorMSSQL = "mssql"
+ collectorProcess = "process"
+ collectorService = "service"
+ collectorNetFrameworkCLRExceptions = "netframework_clrexceptions"
+ collectorNetFrameworkCLRInterop = "netframework_clrinterop"
+ collectorNetFrameworkCLRJIT = "netframework_clrjit"
+ collectorNetFrameworkCLRLoading = "netframework_clrloading"
+ collectorNetFrameworkCLRLocksAndThreads = "netframework_clrlocksandthreads"
+ collectorNetFrameworkCLRMemory = "netframework_clrmemory"
+ collectorNetFrameworkCLRRemoting = "netframework_clrremoting"
+ collectorNetFrameworkCLRSecurity = "netframework_clrsecurity"
+ collectorExchange = "exchange"
+ collectorHyperv = "hyperv"
+)
+
+func (w *Windows) collect() (map[string]int64, error) {
+ pms, err := w.prom.ScrapeSeries()
+ if err != nil {
+ return nil, err
+ }
+
+ mx := make(map[string]int64)
+ w.collectMetrics(mx, pms)
+
+ if hasKey(mx, "os_visible_memory_bytes", "memory_available_bytes") {
+ mx["memory_used_bytes"] = 0 +
+ mx["os_visible_memory_bytes"] -
+ mx["memory_available_bytes"]
+ }
+ if hasKey(mx, "os_paging_limit_bytes", "os_paging_free_bytes") {
+ mx["os_paging_used_bytes"] = 0 +
+ mx["os_paging_limit_bytes"] -
+ mx["os_paging_free_bytes"]
+ }
+ if hasKey(mx, "os_visible_memory_bytes", "os_physical_memory_free_bytes") {
+ mx["os_visible_memory_used_bytes"] = 0 +
+ mx["os_visible_memory_bytes"] -
+ mx["os_physical_memory_free_bytes"]
+ }
+ if hasKey(mx, "memory_commit_limit", "memory_committed_bytes") {
+ mx["memory_not_committed_bytes"] = 0 +
+ mx["memory_commit_limit"] -
+ mx["memory_committed_bytes"]
+ }
+ if hasKey(mx, "memory_standby_cache_reserve_bytes", "memory_standby_cache_normal_priority_bytes", "memory_standby_cache_core_bytes") {
+ mx["memory_standby_cache_total"] = 0 +
+ mx["memory_standby_cache_reserve_bytes"] +
+ mx["memory_standby_cache_normal_priority_bytes"] +
+ mx["memory_standby_cache_core_bytes"]
+ }
+ if hasKey(mx, "memory_standby_cache_total", "memory_modified_page_list_bytes") {
+ mx["memory_cache_total"] = 0 +
+ mx["memory_standby_cache_total"] +
+ mx["memory_modified_page_list_bytes"]
+ }
+
+ return mx, nil
+}
+
+func (w *Windows) collectMetrics(mx map[string]int64, pms prometheus.Series) {
+ w.collectCollector(mx, pms)
+ for _, pm := range pms.FindByName(metricCollectorSuccess) {
+ if pm.Value == 0 {
+ continue
+ }
+
+ switch pm.Labels.Get("collector") {
+ case collectorCPU:
+ w.collectCPU(mx, pms)
+ case collectorMemory:
+ w.collectMemory(mx, pms)
+ case collectorNet:
+ w.collectNet(mx, pms)
+ case collectorLogicalDisk:
+ w.collectLogicalDisk(mx, pms)
+ case collectorOS:
+ w.collectOS(mx, pms)
+ case collectorSystem:
+ w.collectSystem(mx, pms)
+ case collectorLogon:
+ w.collectLogon(mx, pms)
+ case collectorThermalZone:
+ w.collectThermalzone(mx, pms)
+ case collectorTCP:
+ w.collectTCP(mx, pms)
+ case collectorProcess:
+ w.collectProcess(mx, pms)
+ case collectorService:
+ w.collectService(mx, pms)
+ case collectorIIS:
+ w.collectIIS(mx, pms)
+ case collectorMSSQL:
+ w.collectMSSQL(mx, pms)
+ case collectorAD:
+ w.collectAD(mx, pms)
+ case collectorADCS:
+ w.collectADCS(mx, pms)
+ case collectorADFS:
+ w.collectADFS(mx, pms)
+ case collectorNetFrameworkCLRExceptions:
+ w.collectNetFrameworkCLRExceptions(mx, pms)
+ case collectorNetFrameworkCLRInterop:
+ w.collectNetFrameworkCLRInterop(mx, pms)
+ case collectorNetFrameworkCLRJIT:
+ w.collectNetFrameworkCLRJIT(mx, pms)
+ case collectorNetFrameworkCLRLoading:
+ w.collectNetFrameworkCLRLoading(mx, pms)
+ case collectorNetFrameworkCLRLocksAndThreads:
+ w.collectNetFrameworkCLRLocksAndThreads(mx, pms)
+ case collectorNetFrameworkCLRMemory:
+ w.collectNetFrameworkCLRMemory(mx, pms)
+ case collectorNetFrameworkCLRRemoting:
+ w.collectNetFrameworkCLRRemoting(mx, pms)
+ case collectorNetFrameworkCLRSecurity:
+ w.collectNetFrameworkCLRSecurity(mx, pms)
+ case collectorExchange:
+ w.collectExchange(mx, pms)
+ case collectorHyperv:
+ w.collectHyperv(mx, pms)
+ }
+ }
+}
+
+func hasKey(mx map[string]int64, key string, keys ...string) bool {
+ _, ok := mx[key]
+ switch len(keys) {
+ case 0:
+ return ok
+ default:
+ return ok && hasKey(mx, keys[0], keys[1:]...)
+ }
+}
+
+func boolToInt(v bool) int64 {
+ if v {
+ return 1
+ }
+ return 0
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_ad.go b/src/go/collectors/go.d.plugin/modules/windows/collect_ad.go
new file mode 100644
index 000000000..3c07a9112
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_ad.go
@@ -0,0 +1,100 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+
+// Windows exporter:
+// https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md
+// Microsoft:
+// https://learn.microsoft.com/en-us/previous-versions/ms803980(v=msdn.10)
+const (
+ metricADATQAverageRequestLatency = "windows_ad_atq_average_request_latency"
+ metricADATQOutstandingRequests = "windows_ad_atq_outstanding_requests"
+ metricADDatabaseOperationsTotal = "windows_ad_database_operations_total"
+ metricADDirectoryOperationsTotal = "windows_ad_directory_operations_total"
+ metricADReplicationInboundObjectsFilteringTotal = "windows_ad_replication_inbound_objects_filtered_total"
+ metricADReplicationInboundPropertiesFilteredTotal = "windows_ad_replication_inbound_properties_filtered_total"
+ metricADReplicationInboundPropertiesUpdatedTotal = "windows_ad_replication_inbound_properties_updated_total"
+ metricADReplicationInboundSyncObjectsRemaining = "windows_ad_replication_inbound_sync_objects_remaining"
+ metricADReplicationDataInterSiteBytesTotal = "windows_ad_replication_data_intersite_bytes_total"
+ metricADReplicationDataIntraSiteBytesTotal = "windows_ad_replication_data_intrasite_bytes_total"
+ metricADReplicationPendingSyncs = "windows_ad_replication_pending_synchronizations"
+ metricADReplicationSyncRequestsTotal = "windows_ad_replication_sync_requests_total"
+ metricADDirectoryServiceThreads = "windows_ad_directory_service_threads"
+ metricADLDAPLastBindTimeSecondsTotal = "windows_ad_ldap_last_bind_time_seconds"
+ metricADBindsTotal = "windows_ad_binds_total"
+ metricADLDAPSearchesTotal = "windows_ad_ldap_searches_total"
+ metricADNameCacheLookupsTotal = "windows_ad_name_cache_lookups_total"
+ metricADNameCacheHitsTotal = "windows_ad_name_cache_hits_total"
+)
+
+func (w *Windows) collectAD(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorAD] {
+ w.cache.collection[collectorAD] = true
+ w.addADCharts()
+ }
+
+ if pm := pms.FindByName(metricADATQAverageRequestLatency); pm.Len() > 0 {
+ mx["ad_atq_average_request_latency"] = int64(pm.Max() * precision)
+ }
+ if pm := pms.FindByName(metricADATQOutstandingRequests); pm.Len() > 0 {
+ mx["ad_atq_outstanding_requests"] = int64(pm.Max())
+ }
+ for _, pm := range pms.FindByName(metricADDatabaseOperationsTotal) {
+ if op := pm.Labels.Get("operation"); op != "" {
+ mx["ad_database_operations_total_"+op] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricADDirectoryOperationsTotal) {
+ if op := pm.Labels.Get("operation"); op != "" {
+ mx["ad_directory_operations_total_"+op] += int64(pm.Value) // sum "origin"
+ }
+ }
+ if pm := pms.FindByName(metricADReplicationInboundObjectsFilteringTotal); pm.Len() > 0 {
+ mx["ad_replication_inbound_objects_filtered_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADReplicationInboundPropertiesFilteredTotal); pm.Len() > 0 {
+ mx["ad_replication_inbound_properties_filtered_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADReplicationInboundPropertiesUpdatedTotal); pm.Len() > 0 {
+ mx["ad_replication_inbound_properties_updated_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADReplicationInboundSyncObjectsRemaining); pm.Len() > 0 {
+ mx["ad_replication_inbound_sync_objects_remaining"] = int64(pm.Max())
+ }
+ for _, pm := range pms.FindByName(metricADReplicationDataInterSiteBytesTotal) {
+ if name := pm.Labels.Get("direction"); name != "" {
+ mx["ad_replication_data_intersite_bytes_total_"+name] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricADReplicationDataIntraSiteBytesTotal) {
+ if name := pm.Labels.Get("direction"); name != "" {
+ mx["ad_replication_data_intrasite_bytes_total_"+name] = int64(pm.Value)
+ }
+ }
+ if pm := pms.FindByName(metricADReplicationPendingSyncs); pm.Len() > 0 {
+ mx["ad_replication_pending_synchronizations"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADReplicationSyncRequestsTotal); pm.Len() > 0 {
+ mx["ad_replication_sync_requests_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADDirectoryServiceThreads); pm.Len() > 0 {
+ mx["ad_directory_service_threads"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADLDAPLastBindTimeSecondsTotal); pm.Len() > 0 {
+ mx["ad_ldap_last_bind_time_seconds"] = int64(pm.Max())
+ }
+ for _, pm := range pms.FindByName(metricADBindsTotal) {
+ mx["ad_binds_total"] += int64(pm.Value) // sum "bind_method"'s
+ }
+ if pm := pms.FindByName(metricADLDAPSearchesTotal); pm.Len() > 0 {
+ mx["ad_ldap_searches_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADNameCacheLookupsTotal); pm.Len() > 0 {
+ mx["ad_name_cache_lookups_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricADNameCacheHitsTotal); pm.Len() > 0 {
+ mx["ad_name_cache_hits_total"] = int64(pm.Max())
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_adcs.go b/src/go/collectors/go.d.plugin/modules/windows/collect_adcs.go
new file mode 100644
index 000000000..0142fcb9c
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_adcs.go
@@ -0,0 +1,70 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricADCSRequestsTotal = "windows_adcs_requests_total"
+ metricADCSFailedRequestsTotal = "windows_adcs_failed_requests_total"
+ metricADCSIssuedRequestsTotal = "windows_adcs_issued_requests_total"
+ metricADCSPendingRequestsTotal = "windows_adcs_pending_requests_total"
+ metricADCSRequestProcessingTime = "windows_adcs_request_processing_time_seconds"
+ metricADCSRetrievalsTotal = "windows_adcs_retrievals_total"
+ metricADCSRetrievalsProcessingTime = "windows_adcs_retrievals_processing_time_seconds"
+ metricADCSRequestCryptoSigningTime = "windows_adcs_request_cryptographic_signing_time_seconds"
+ metricADCSRequestPolicyModuleProcessingTime = "windows_adcs_request_policy_module_processing_time_seconds"
+ metricADCSChallengeResponseResponsesTotal = "windows_adcs_challenge_responses_total"
+ metricADCSChallengeResponseProcessingTime = "windows_adcs_challenge_response_processing_time_seconds"
+ metricADCSSignedCertTimestampListsTotal = "windows_adcs_signed_certificate_timestamp_lists_total"
+ metricADCSSignedCertTimestampListProcessingTime = "windows_adcs_signed_certificate_timestamp_list_processing_time_seconds"
+)
+
+func (w *Windows) collectADCS(mx map[string]int64, pms prometheus.Series) {
+ pms = pms.FindByNames(
+ metricADCSRequestsTotal,
+ metricADCSFailedRequestsTotal,
+ metricADCSIssuedRequestsTotal,
+ metricADCSPendingRequestsTotal,
+ metricADCSRequestProcessingTime,
+ metricADCSRetrievalsTotal,
+ metricADCSRetrievalsProcessingTime,
+ metricADCSRequestCryptoSigningTime,
+ metricADCSRequestPolicyModuleProcessingTime,
+ metricADCSChallengeResponseResponsesTotal,
+ metricADCSChallengeResponseProcessingTime,
+ metricADCSSignedCertTimestampListsTotal,
+ metricADCSSignedCertTimestampListProcessingTime,
+ )
+
+ seen := make(map[string]bool)
+
+ for _, pm := range pms {
+ if tmpl := pm.Labels.Get("cert_template"); tmpl != "" && tmpl != "_Total" {
+ seen[tmpl] = true
+ name := strings.TrimPrefix(pm.Name(), "windows_adcs_")
+ v := pm.Value
+ if strings.HasSuffix(pm.Name(), "_seconds") {
+ v *= precision
+ }
+ mx["adcs_cert_template_"+tmpl+"_"+name] += int64(v)
+ }
+ }
+
+ for template := range seen {
+ if !w.cache.adcs[template] {
+ w.cache.adcs[template] = true
+ w.addCertificateTemplateCharts(template)
+ }
+ }
+ for template := range w.cache.adcs {
+ if !seen[template] {
+ delete(w.cache.adcs, template)
+ w.removeCertificateTemplateCharts(template)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_adfs.go b/src/go/collectors/go.d.plugin/modules/windows/collect_adfs.go
new file mode 100644
index 000000000..4ce0717ba
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_adfs.go
@@ -0,0 +1,119 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricADFSADLoginConnectionFailuresTotal = "windows_adfs_ad_login_connection_failures_total"
+ metricADFSCertificateAuthenticationsTotal = "windows_adfs_certificate_authentications_total"
+ metricADFSDBArtifactFailureTotal = "windows_adfs_db_artifact_failure_total"
+ metricADFSDBArtifactQueryTimeSeconds = "windows_adfs_db_artifact_query_time_seconds_total"
+ metricADFSDBConfigFailureTotal = "windows_adfs_db_config_failure_total"
+ metricADFSDBQueryTimeSecondsTotal = "windows_adfs_db_config_query_time_seconds_total"
+ metricADFSDeviceAuthenticationsTotal = "windows_adfs_device_authentications_total"
+ metricADFSExternalAuthenticationsFailureTotal = "windows_adfs_external_authentications_failure_total"
+ metricADFSExternalAuthenticationsSuccessTotal = "windows_adfs_external_authentications_success_total"
+ metricADFSExtranetAccountLockoutsTotal = "windows_adfs_extranet_account_lockouts_total"
+ metricADFSFederatedAuthenticationsTotal = "windows_adfs_federated_authentications_total"
+ metricADFSFederationMetadataRequestsTotal = "windows_adfs_federation_metadata_requests_total"
+
+ metricADFSOauthAuthorizationRequestsTotal = "windows_adfs_oauth_authorization_requests_total"
+ metricADFSOauthClientAuthenticationFailureTotal = "windows_adfs_oauth_client_authentication_failure_total"
+ metricADFSOauthClientAuthenticationSuccessTotal = "windows_adfs_oauth_client_authentication_success_total"
+ metricADFSOauthClientCredentialsFailureTotal = "windows_adfs_oauth_client_credentials_failure_total"
+ metricADFSOauthClientCredentialsSuccessTotal = "windows_adfs_oauth_client_credentials_success_total"
+ metricADFSOauthClientPrivKeyJTWAuthenticationFailureTotal = "windows_adfs_oauth_client_privkey_jtw_authentication_failure_total"
+ metricADFSOauthClientPrivKeyJWTAuthenticationSuccessTotal = "windows_adfs_oauth_client_privkey_jwt_authentications_success_total"
+ metricADFSOauthClientSecretBasicAuthenticationsFailureTotal = "windows_adfs_oauth_client_secret_basic_authentications_failure_total"
+ metricADFSADFSOauthClientSecretBasicAuthenticationsSuccessTotal = "windows_adfs_oauth_client_secret_basic_authentications_success_total"
+ metricADFSOauthClientSecretPostAuthenticationsFailureTotal = "windows_adfs_oauth_client_secret_post_authentications_failure_total"
+ metricADFSOauthClientSecretPostAuthenticationsSuccessTotal = "windows_adfs_oauth_client_secret_post_authentications_success_total"
+ metricADFSOauthClientWindowsAuthenticationsFailureTotal = "windows_adfs_oauth_client_windows_authentications_failure_total"
+ metricADFSOauthClientWindowsAuthenticationsSuccessTotal = "windows_adfs_oauth_client_windows_authentications_success_total"
+ metricADFSOauthLogonCertificateRequestsFailureTotal = "windows_adfs_oauth_logon_certificate_requests_failure_total"
+ metricADFSOauthLogonCertificateTokenRequestsSuccessTotal = "windows_adfs_oauth_logon_certificate_token_requests_success_total"
+ metricADFSOauthPasswordGrantRequestsFailureTotal = "windows_adfs_oauth_password_grant_requests_failure_total"
+ metricADFSOauthPasswordGrantRequestsSuccessTotal = "windows_adfs_oauth_password_grant_requests_success_total"
+ metricADFSOauthTokenRequestsSuccessTotal = "windows_adfs_oauth_token_requests_success_total"
+
+ metricADFSPassiveRequestsTotal = "windows_adfs_passive_requests_total"
+ metricADFSPasswortAuthenticationsTotal = "windows_adfs_passport_authentications_total"
+ metricADFSPasswordChangeFailedTotal = "windows_adfs_password_change_failed_total"
+ metricADFSWPasswordChangeSucceededTotal = "windows_adfs_password_change_succeeded_total"
+ metricADFSSamlpTokenRequestsSuccessTotal = "windows_adfs_samlp_token_requests_success_total"
+ metricADFSSSOAuthenticationsFailureTotal = "windows_adfs_sso_authentications_failure_total"
+ metricADFSSSOAuthenticationsSuccessTotal = "windows_adfs_sso_authentications_success_total"
+ metricADFSTokenRequestsTotal = "windows_adfs_token_requests_total"
+ metricADFSUserPasswordAuthenticationsFailureTotal = "windows_adfs_userpassword_authentications_failure_total"
+ metricADFSUserPasswordAuthenticationsSuccessTotal = "windows_adfs_userpassword_authentications_success_total"
+ metricADFSWindowsIntegratedAuthenticationsTotal = "windows_adfs_windows_integrated_authentications_total"
+ metricADFSWSFedTokenRequestsSuccessTotal = "windows_adfs_wsfed_token_requests_success_total"
+ metricADFSWSTrustTokenRequestsSuccessTotal = "windows_adfs_wstrust_token_requests_success_total"
+)
+
+var adfsMetrics = []string{
+ metricADFSADLoginConnectionFailuresTotal,
+ metricADFSCertificateAuthenticationsTotal,
+ metricADFSDBArtifactFailureTotal,
+ metricADFSDBArtifactQueryTimeSeconds,
+ metricADFSDBConfigFailureTotal,
+ metricADFSDBQueryTimeSecondsTotal,
+ metricADFSDeviceAuthenticationsTotal,
+ metricADFSExternalAuthenticationsFailureTotal,
+ metricADFSExternalAuthenticationsSuccessTotal,
+ metricADFSExtranetAccountLockoutsTotal,
+ metricADFSFederatedAuthenticationsTotal,
+ metricADFSFederationMetadataRequestsTotal,
+ metricADFSOauthAuthorizationRequestsTotal,
+ metricADFSOauthClientAuthenticationFailureTotal,
+ metricADFSOauthClientAuthenticationSuccessTotal,
+ metricADFSOauthClientCredentialsFailureTotal,
+ metricADFSOauthClientCredentialsSuccessTotal,
+ metricADFSOauthClientPrivKeyJTWAuthenticationFailureTotal,
+ metricADFSOauthClientPrivKeyJWTAuthenticationSuccessTotal,
+ metricADFSOauthClientSecretBasicAuthenticationsFailureTotal,
+ metricADFSADFSOauthClientSecretBasicAuthenticationsSuccessTotal,
+ metricADFSOauthClientSecretPostAuthenticationsFailureTotal,
+ metricADFSOauthClientSecretPostAuthenticationsSuccessTotal,
+ metricADFSOauthClientWindowsAuthenticationsFailureTotal,
+ metricADFSOauthClientWindowsAuthenticationsSuccessTotal,
+ metricADFSOauthLogonCertificateRequestsFailureTotal,
+ metricADFSOauthLogonCertificateTokenRequestsSuccessTotal,
+ metricADFSOauthPasswordGrantRequestsFailureTotal,
+ metricADFSOauthPasswordGrantRequestsSuccessTotal,
+ metricADFSOauthTokenRequestsSuccessTotal,
+ metricADFSPassiveRequestsTotal,
+ metricADFSPasswortAuthenticationsTotal,
+ metricADFSPasswordChangeFailedTotal,
+ metricADFSWPasswordChangeSucceededTotal,
+ metricADFSSamlpTokenRequestsSuccessTotal,
+ metricADFSSSOAuthenticationsFailureTotal,
+ metricADFSSSOAuthenticationsSuccessTotal,
+ metricADFSTokenRequestsTotal,
+ metricADFSUserPasswordAuthenticationsFailureTotal,
+ metricADFSUserPasswordAuthenticationsSuccessTotal,
+ metricADFSWindowsIntegratedAuthenticationsTotal,
+ metricADFSWSFedTokenRequestsSuccessTotal,
+ metricADFSWSTrustTokenRequestsSuccessTotal,
+}
+
+func (w *Windows) collectADFS(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorADFS] {
+ w.cache.collection[collectorADFS] = true
+ w.addADFSCharts()
+ }
+
+ for _, pm := range pms.FindByNames(adfsMetrics...) {
+ name := strings.TrimPrefix(pm.Name(), "windows_")
+ v := pm.Value
+ if strings.HasSuffix(name, "_seconds_total") {
+ v *= precision
+ }
+ mx[name] = int64(v)
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_collector.go b/src/go/collectors/go.d.plugin/modules/windows/collect_collector.go
new file mode 100644
index 000000000..6950ff575
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_collector.go
@@ -0,0 +1,46 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricCollectorDuration = "windows_exporter_collector_duration_seconds"
+ metricCollectorSuccess = "windows_exporter_collector_success"
+)
+
+func (w *Windows) collectCollector(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "collector_"
+ for _, pm := range pms.FindByName(metricCollectorDuration) {
+ if name := pm.Labels.Get("collector"); name != "" {
+ seen[name] = true
+ mx[px+name+"_duration"] = int64(pm.Value * precision)
+ }
+ }
+ for _, pm := range pms.FindByName(metricCollectorSuccess) {
+ if name := pm.Labels.Get("collector"); name != "" {
+ seen[name] = true
+ if pm.Value == 1 {
+ mx[px+name+"_status_success"], mx[px+name+"_status_fail"] = 1, 0
+ } else {
+ mx[px+name+"_status_success"], mx[px+name+"_status_fail"] = 0, 1
+ }
+ }
+ }
+
+ for name := range seen {
+ if !w.cache.collectors[name] {
+ w.cache.collectors[name] = true
+ w.addCollectorCharts(name)
+ }
+ }
+ for name := range w.cache.collectors {
+ if !seen[name] {
+ delete(w.cache.collectors, name)
+ w.removeCollectorCharts(name)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_cpu.go b/src/go/collectors/go.d.plugin/modules/windows/collect_cpu.go
new file mode 100644
index 000000000..fc1412e3d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_cpu.go
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricCPUTimeTotal = "windows_cpu_time_total"
+ metricCPUInterruptsTotal = "windows_cpu_interrupts_total"
+ metricCPUDPCsTotal = "windows_cpu_dpcs_total"
+ metricCPUCStateTotal = "windows_cpu_cstate_seconds_total"
+)
+
+func (w *Windows) collectCPU(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorCPU] {
+ w.cache.collection[collectorCPU] = true
+ w.addCPUCharts()
+ }
+
+ seen := make(map[string]bool)
+ for _, pm := range pms.FindByName(metricCPUTimeTotal) {
+ core := pm.Labels.Get("core")
+ mode := pm.Labels.Get("mode")
+ if core == "" || mode == "" {
+ continue
+ }
+
+ seen[core] = true
+ mx["cpu_"+mode+"_time"] += int64(pm.Value * precision)
+ mx["cpu_core_"+core+"_"+mode+"_time"] += int64(pm.Value * precision)
+ }
+
+ for _, pm := range pms.FindByName(metricCPUInterruptsTotal) {
+ core := pm.Labels.Get("core")
+ if core == "" {
+ continue
+ }
+
+ seen[core] = true
+ mx["cpu_core_"+core+"_interrupts"] += int64(pm.Value)
+ }
+
+ for _, pm := range pms.FindByName(metricCPUDPCsTotal) {
+ core := pm.Labels.Get("core")
+ if core == "" {
+ continue
+ }
+
+ seen[core] = true
+ mx["cpu_core_"+core+"_dpcs"] += int64(pm.Value)
+ }
+
+ for _, pm := range pms.FindByName(metricCPUCStateTotal) {
+ core := pm.Labels.Get("core")
+ state := pm.Labels.Get("state")
+ if core == "" || state == "" {
+ continue
+ }
+
+ seen[core] = true
+ mx["cpu_core_"+core+"_cstate_"+state] += int64(pm.Value * precision)
+ }
+
+ for core := range seen {
+ if !w.cache.cores[core] {
+ w.cache.cores[core] = true
+ w.addCPUCoreCharts(core)
+ }
+ }
+ for core := range w.cache.cores {
+ if !seen[core] {
+ delete(w.cache.cores, core)
+ w.removeCPUCoreCharts(core)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_exchange.go b/src/go/collectors/go.d.plugin/modules/windows/collect_exchange.go
new file mode 100644
index 000000000..040bae1e2
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_exchange.go
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricExchangeActiveSyncPingCmdsPending = "windows_exchange_activesync_ping_cmds_pending"
+ metricExchangeActiveSyncRequestsTotal = "windows_exchange_activesync_requests_total"
+ metricExchangeActiveSyncCMDsTotal = "windows_exchange_activesync_sync_cmds_total"
+ metricExchangeAutoDiscoverRequestsTotal = "windows_exchange_autodiscover_requests_total"
+ metricExchangeAvailServiceRequestsPerSec = "windows_exchange_avail_service_requests_per_sec"
+ metricExchangeOWACurrentUniqueUsers = "windows_exchange_owa_current_unique_users"
+ metricExchangeOWARequestsTotal = "windows_exchange_owa_requests_total"
+ metricExchangeRPCActiveUserCount = "windows_exchange_rpc_active_user_count"
+ metricExchangeRPCAvgLatencySec = "windows_exchange_rpc_avg_latency_sec"
+ metricExchangeRPCConnectionCount = "windows_exchange_rpc_connection_count"
+ metricExchangeRPCOperationsTotal = "windows_exchange_rpc_operations_total"
+ metricExchangeRPCRequests = "windows_exchange_rpc_requests"
+ metricExchangeRPCUserCount = "windows_exchange_rpc_user_count"
+
+ metricExchangeTransportQueuesActiveMailboxDelivery = "windows_exchange_transport_queues_active_mailbox_delivery"
+ metricExchangeTransportQueuesExternalActiveRemoteDelivery = "windows_exchange_transport_queues_external_active_remote_delivery"
+ metricExchangeTransportQueuesExternalLargestDelivery = "windows_exchange_transport_queues_external_largest_delivery"
+ metricExchangeTransportQueuesInternalActiveRemoteDelivery = "windows_exchange_transport_queues_internal_active_remote_delivery"
+ metricExchangeTransportQueuesInternalLargestDelivery = "windows_exchange_transport_queues_internal_largest_delivery"
+ metricExchangeTransportQueuesPoison = "windows_exchange_transport_queues_poison"
+ metricExchangeTransportQueuesRetryMailboxDelivery = "windows_exchange_transport_queues_retry_mailbox_delivery"
+ metricExchangeTransportQueuesUnreachable = "windows_exchange_transport_queues_unreachable"
+
+ metricExchangeWorkloadActiveTasks = "windows_exchange_workload_active_tasks"
+ metricExchangeWorkloadCompletedTasks = "windows_exchange_workload_completed_tasks"
+ metricExchangeWorkloadQueuedTasks = "windows_exchange_workload_queued_tasks"
+ metricExchangeWorkloadYieldedTasks = "windows_exchange_workload_yielded_tasks"
+ metricExchangeWorkloadIsActive = "windows_exchange_workload_is_active"
+
+ metricExchangeLDAPLongRunningOPSPerSec = "windows_exchange_ldap_long_running_ops_per_sec"
+ metricExchangeLDAPReadTimeSec = "windows_exchange_ldap_read_time_sec"
+ metricExchangeLDAPSearchTmeSec = "windows_exchange_ldap_search_time_sec"
+ metricExchangeLDAPWriteTimeSec = "windows_exchange_ldap_write_time_sec"
+ metricExchangeLDAPTimeoutErrorsTotal = "windows_exchange_ldap_timeout_errors_total"
+
+ metricExchangeHTTPProxyAvgAuthLatency = "windows_exchange_http_proxy_avg_auth_latency"
+ metricExchangeHTTPProxyAvgCASProcessingLatencySec = "windows_exchange_http_proxy_avg_cas_proccessing_latency_sec"
+ metricExchangeHTTPProxyMailboxProxyFailureRate = "windows_exchange_http_proxy_mailbox_proxy_failure_rate"
+ metricExchangeHTTPProxyMailboxServerLocatorAvgLatencySec = "windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec"
+ metricExchangeHTTPProxyOutstandingProxyRequests = "windows_exchange_http_proxy_outstanding_proxy_requests"
+ metricExchangeHTTPProxyRequestsTotal = "windows_exchange_http_proxy_requests_total"
+)
+
+func (w *Windows) collectExchange(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorExchange] {
+ w.cache.collection[collectorExchange] = true
+ w.addExchangeCharts()
+ }
+
+ if pm := pms.FindByName(metricExchangeActiveSyncPingCmdsPending); pm.Len() > 0 {
+ mx["exchange_activesync_ping_cmds_pending"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeActiveSyncRequestsTotal); pm.Len() > 0 {
+ mx["exchange_activesync_requests_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeActiveSyncCMDsTotal); pm.Len() > 0 {
+ mx["exchange_activesync_sync_cmds_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeAutoDiscoverRequestsTotal); pm.Len() > 0 {
+ mx["exchange_autodiscover_requests_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeAvailServiceRequestsPerSec); pm.Len() > 0 {
+ mx["exchange_avail_service_requests_per_sec"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeOWACurrentUniqueUsers); pm.Len() > 0 {
+ mx["exchange_owa_current_unique_users"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeOWARequestsTotal); pm.Len() > 0 {
+ mx["exchange_owa_requests_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeRPCActiveUserCount); pm.Len() > 0 {
+ mx["exchange_rpc_active_user_count"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeRPCAvgLatencySec); pm.Len() > 0 {
+ mx["exchange_rpc_avg_latency_sec"] = int64(pm.Max() * precision)
+ }
+ if pm := pms.FindByName(metricExchangeRPCConnectionCount); pm.Len() > 0 {
+ mx["exchange_rpc_connection_count"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeRPCOperationsTotal); pm.Len() > 0 {
+ mx["exchange_rpc_operations_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeRPCRequests); pm.Len() > 0 {
+ mx["exchange_rpc_requests"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricExchangeRPCUserCount); pm.Len() > 0 {
+ mx["exchange_rpc_user_count"] = int64(pm.Max())
+ }
+
+ w.collectExchangeAddTransportQueueMetric(mx, pms)
+ w.collectExchangeAddWorkloadMetric(mx, pms)
+ w.collectExchangeAddLDAPMetric(mx, pms)
+ w.collectExchangeAddHTTPProxyMetric(mx, pms)
+}
+
+func (w *Windows) collectExchangeAddTransportQueueMetric(mx map[string]int64, pms prometheus.Series) {
+ pms = pms.FindByNames(
+ metricExchangeTransportQueuesActiveMailboxDelivery,
+ metricExchangeTransportQueuesExternalActiveRemoteDelivery,
+ metricExchangeTransportQueuesExternalLargestDelivery,
+ metricExchangeTransportQueuesInternalActiveRemoteDelivery,
+ metricExchangeTransportQueuesInternalLargestDelivery,
+ metricExchangeTransportQueuesPoison,
+ metricExchangeTransportQueuesRetryMailboxDelivery,
+ metricExchangeTransportQueuesUnreachable,
+ )
+
+ for _, pm := range pms {
+ if name := pm.Labels.Get("name"); name != "" && name != "total_excluding_priority_none" {
+ metric := strings.TrimPrefix(pm.Name(), "windows_")
+ mx[metric+"_"+name] += int64(pm.Value)
+ }
+ }
+}
+
+func (w *Windows) collectExchangeAddWorkloadMetric(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByNames(
+ metricExchangeWorkloadActiveTasks,
+ metricExchangeWorkloadCompletedTasks,
+ metricExchangeWorkloadQueuedTasks,
+ metricExchangeWorkloadYieldedTasks,
+ ) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ metric := strings.TrimPrefix(pm.Name(), "windows_exchange_workload_")
+ mx["exchange_workload_"+name+"_"+metric] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricExchangeWorkloadIsActive) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ mx["exchange_workload_"+name+"_is_active"] += boolToInt(pm.Value == 1)
+ mx["exchange_workload_"+name+"_is_paused"] += boolToInt(pm.Value == 0)
+ }
+ }
+
+ for name := range seen {
+ if !w.cache.exchangeWorkload[name] {
+ w.cache.exchangeWorkload[name] = true
+ w.addExchangeWorkloadCharts(name)
+ }
+ }
+ for name := range w.cache.exchangeWorkload {
+ if !seen[name] {
+ delete(w.cache.exchangeWorkload, name)
+ w.removeExchangeWorkloadCharts(name)
+ }
+ }
+}
+
+func (w *Windows) collectExchangeAddLDAPMetric(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByNames(
+ metricExchangeLDAPLongRunningOPSPerSec,
+ metricExchangeLDAPTimeoutErrorsTotal,
+ ) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ metric := strings.TrimPrefix(pm.Name(), "windows_exchange_ldap_")
+ mx["exchange_ldap_"+name+"_"+metric] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByNames(
+ metricExchangeLDAPReadTimeSec,
+ metricExchangeLDAPSearchTmeSec,
+ metricExchangeLDAPWriteTimeSec,
+ ) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ metric := strings.TrimPrefix(pm.Name(), "windows_exchange_ldap_")
+ mx["exchange_ldap_"+name+"_"+metric] += int64(pm.Value * precision)
+ }
+ }
+
+ for name := range seen {
+ if !w.cache.exchangeLDAP[name] {
+ w.cache.exchangeLDAP[name] = true
+ w.addExchangeLDAPCharts(name)
+ }
+ }
+ for name := range w.cache.exchangeLDAP {
+ if !seen[name] {
+ delete(w.cache.exchangeLDAP, name)
+ w.removeExchangeLDAPCharts(name)
+ }
+ }
+}
+
+func (w *Windows) collectExchangeAddHTTPProxyMetric(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByNames(
+ metricExchangeHTTPProxyAvgAuthLatency,
+ metricExchangeHTTPProxyOutstandingProxyRequests,
+ metricExchangeHTTPProxyRequestsTotal,
+ ) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ metric := strings.TrimPrefix(pm.Name(), "windows_exchange_http_proxy_")
+ mx["exchange_http_proxy_"+name+"_"+metric] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByNames(
+ metricExchangeHTTPProxyAvgCASProcessingLatencySec,
+ metricExchangeHTTPProxyMailboxProxyFailureRate,
+ metricExchangeHTTPProxyMailboxServerLocatorAvgLatencySec,
+ ) {
+ if name := pm.Labels.Get("name"); name != "" {
+ seen[name] = true
+ metric := strings.TrimPrefix(pm.Name(), "windows_exchange_http_proxy_")
+ mx["exchange_http_proxy_"+name+"_"+metric] += int64(pm.Value * precision)
+ }
+ }
+
+ for name := range seen {
+ if !w.cache.exchangeHTTPProxy[name] {
+ w.cache.exchangeHTTPProxy[name] = true
+ w.addExchangeHTTPProxyCharts(name)
+ }
+ }
+ for name := range w.cache.exchangeHTTPProxy {
+ if !seen[name] {
+ delete(w.cache.exchangeHTTPProxy, name)
+ w.removeExchangeHTTPProxyCharts(name)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_hyperv.go b/src/go/collectors/go.d.plugin/modules/windows/collect_hyperv.go
new file mode 100644
index 000000000..8fecbf8f5
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_hyperv.go
@@ -0,0 +1,288 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricHypervHealthCritical = "windows_hyperv_health_critical"
+ metricHypervHealthOK = "windows_hyperv_health_ok"
+
+ metricHypervRootPartition4KGPAPages = "windows_hyperv_root_partition_4K_gpa_pages"
+ metricHypervRootPartition2MGPAPages = "windows_hyperv_root_partition_2M_gpa_pages"
+ metricHypervRootPartition1GGPAPages = "windows_hyperv_root_partition_1G_gpa_pages"
+ metricHypervRootPartition4KDevicePages = "windows_hyperv_root_partition_4K_device_pages"
+ metricHypervRootPartition2MDevicePages = "windows_hyperv_root_partition_2M_device_pages"
+ metricHypervRootPartition1GDevicePages = "windows_hyperv_root_partition_1G_device_pages"
+ metricHypervRootPartitionGPASpaceModifications = "windows_hyperv_root_partition_gpa_space_modifications"
+ metricHypervRootPartitionAttachedDevices = "windows_hyperv_root_partition_attached_devices"
+ metricHypervRootPartitionDepositedPages = "windows_hyperv_root_partition_deposited_pages"
+ metricHypervRootPartitionPhysicalPagesAllocated = "windows_hyperv_root_partition_physical_pages_allocated" // SkippedTimerTicks
+ metricHypervRootPartitionDeviceDMAErrors = "windows_hyperv_root_partition_device_dma_errors"
+ metricHypervRootPartitionDeviceInterruptErrors = "windows_hyperv_root_partition_device_interrupt_errors"
+ metricHypervRootPartitionDeviceInterruptThrottleEvents = "windows_hyperv_root_partition_device_interrupt_throttle_events"
+ metricHypervRootPartitionIOTLBFlush = "windows_hyperv_root_partition_io_tlb_flush"
+ metricHypervRootPartitionAddressSpace = "windows_hyperv_root_partition_address_spaces"
+ metricHypervRootPartitionVirtualTLBPages = "windows_hyperv_root_partition_virtual_tlb_pages"
+ metricHypervRootPartitionVirtualTLBFlushEntries = "windows_hyperv_root_partition_virtual_tlb_flush_entires"
+
+ metricsHypervVMCPUGuestRunTime = "windows_hyperv_vm_cpu_guest_run_time"
+ metricsHypervVMCPUHypervisorRunTime = "windows_hyperv_vm_cpu_hypervisor_run_time"
+ metricsHypervVMCPURemoteRunTime = "windows_hyperv_vm_cpu_remote_run_time"
+ metricsHypervVMCPUTotalRunTime = "windows_hyperv_vm_cpu_total_run_time"
+
+ metricHypervVMMemoryPhysical = "windows_hyperv_vm_memory_physical"
+ metricHypervVMMemoryPhysicalGuestVisible = "windows_hyperv_vm_memory_physical_guest_visible"
+ metricHypervVMMemoryPressureCurrent = "windows_hyperv_vm_memory_pressure_current"
+ metricHyperVVIDPhysicalPagesAllocated = "windows_hyperv_vid_physical_pages_allocated"
+ metricHyperVVIDRemotePhysicalPages = "windows_hyperv_vid_remote_physical_pages"
+
+ metricHypervVMDeviceBytesRead = "windows_hyperv_vm_device_bytes_read"
+ metricHypervVMDeviceBytesWritten = "windows_hyperv_vm_device_bytes_written"
+ metricHypervVMDeviceOperationsRead = "windows_hyperv_vm_device_operations_read"
+ metricHypervVMDeviceOperationsWritten = "windows_hyperv_vm_device_operations_written"
+ metricHypervVMDeviceErrorCount = "windows_hyperv_vm_device_error_count"
+
+ metricHypervVMInterfaceBytesReceived = "windows_hyperv_vm_interface_bytes_received"
+ metricHypervVMInterfaceBytesSent = "windows_hyperv_vm_interface_bytes_sent"
+ metricHypervVMInterfacePacketsIncomingDropped = "windows_hyperv_vm_interface_packets_incoming_dropped"
+ metricHypervVMInterfacePacketsOutgoingDropped = "windows_hyperv_vm_interface_packets_outgoing_dropped"
+ metricHypervVMInterfacePacketsReceived = "windows_hyperv_vm_interface_packets_received"
+ metricHypervVMInterfacePacketsSent = "windows_hyperv_vm_interface_packets_sent"
+
+ metricHypervVSwitchBroadcastPacketsReceivedTotal = "windows_hyperv_vswitch_broadcast_packets_received_total"
+ metricHypervVSwitchBroadcastPacketsSentTotal = "windows_hyperv_vswitch_broadcast_packets_sent_total"
+ metricHypervVSwitchBytesReceivedTotal = "windows_hyperv_vswitch_bytes_received_total"
+ metricHypervVSwitchBytesSentTotal = "windows_hyperv_vswitch_bytes_sent_total"
+ metricHypervVSwitchPacketsReceivedTotal = "windows_hyperv_vswitch_packets_received_total"
+ metricHypervVSwitchPacketsSentTotal = "windows_hyperv_vswitch_packets_sent_total"
+ metricHypervVSwitchDirectedPacketsReceivedTotal = "windows_hyperv_vswitch_directed_packets_received_total"
+ metricHypervVSwitchDirectedPacketsSendTotal = "windows_hyperv_vswitch_directed_packets_send_total"
+ metricHypervVSwitchDroppedPacketsIncomingTotal = "windows_hyperv_vswitch_dropped_packets_incoming_total"
+ metricHypervVSwitchDroppedPacketsOutcomingTotal = "windows_hyperv_vswitch_dropped_packets_outcoming_total"
+ metricHypervVSwitchExtensionDroppedAttacksIncomingTotal = "windows_hyperv_vswitch_extensions_dropped_packets_incoming_total"
+ metricHypervVSwitchExtensionDroppedPacketsOutcomingTotal = "windows_hyperv_vswitch_extensions_dropped_packets_outcoming_total"
+ metricHypervVSwitchLearnedMACAddressTotal = "windows_hyperv_vswitch_learned_mac_addresses_total"
+ metricHypervVSwitchMulticastPacketsReceivedTotal = "windows_hyperv_vswitch_multicast_packets_received_total"
+ metricHypervVSwitchMulticastPacketsSentTotal = "windows_hyperv_vswitch_multicast_packets_sent_total"
+ metricHypervVSwitchNumberOfSendChannelMovesTotal = "windows_hyperv_vswitch_number_of_send_channel_moves_total"
+ metricHypervVSwitchNumberOfVMQMovesTotal = "windows_hyperv_vswitch_number_of_vmq_moves_total"
+ metricHypervVSwitchPacketsFloodedTotal = "windows_hyperv_vswitch_packets_flooded_total"
+ metricHypervVSwitchPurgedMACAddresses = "windows_hyperv_vswitch_purged_mac_addresses_total"
+)
+
+func (w *Windows) collectHyperv(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorHyperv] {
+ w.cache.collection[collectorHyperv] = true
+ w.addHypervCharts()
+ }
+
+ for _, v := range []string{
+ metricHypervHealthOK,
+ metricHypervHealthCritical,
+ metricHypervRootPartition4KGPAPages,
+ metricHypervRootPartition2MGPAPages,
+ metricHypervRootPartition1GGPAPages,
+ metricHypervRootPartition4KDevicePages,
+ metricHypervRootPartition2MDevicePages,
+ metricHypervRootPartition1GDevicePages,
+ metricHypervRootPartitionGPASpaceModifications,
+ metricHypervRootPartitionAddressSpace,
+ metricHypervRootPartitionAttachedDevices,
+ metricHypervRootPartitionDepositedPages,
+ metricHypervRootPartitionPhysicalPagesAllocated,
+ metricHypervRootPartitionDeviceDMAErrors,
+ metricHypervRootPartitionDeviceInterruptErrors,
+ metricHypervRootPartitionDeviceInterruptThrottleEvents,
+ metricHypervRootPartitionIOTLBFlush,
+ metricHypervRootPartitionVirtualTLBPages,
+ metricHypervRootPartitionVirtualTLBFlushEntries,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ name := strings.TrimPrefix(pm.Name(), "windows_")
+ mx[name] = int64(pm.Value)
+ }
+ }
+
+ w.collectHypervVM(mx, pms)
+ w.collectHypervVMDevices(mx, pms)
+ w.collectHypervVMInterface(mx, pms)
+ w.collectHypervVSwitch(mx, pms)
+}
+
+func (w *Windows) collectHypervVM(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "hyperv_vm_"
+
+ for _, v := range []string{
+ metricHypervVMMemoryPhysical,
+ metricHypervVMMemoryPhysicalGuestVisible,
+ metricHypervVMMemoryPressureCurrent,
+ metricsHypervVMCPUGuestRunTime,
+ metricsHypervVMCPUHypervisorRunTime,
+ metricsHypervVMCPURemoteRunTime,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ if vm := pm.Labels.Get("vm"); vm != "" {
+ name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm")
+ seen[vm] = true
+ mx[px+hypervCleanName(vm)+name] += int64(pm.Value)
+ }
+ }
+ }
+
+ px = "hyperv_vid_"
+ for _, v := range []string{
+ metricHyperVVIDPhysicalPagesAllocated,
+ metricHyperVVIDRemotePhysicalPages,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ if vm := pm.Labels.Get("vm"); vm != "" {
+ name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vid")
+ seen[vm] = true
+ mx[px+hypervCleanName(vm)+name] = int64(pm.Value)
+ }
+ }
+ }
+
+ for v := range seen {
+ if !w.cache.hypervVMMem[v] {
+ w.cache.hypervVMMem[v] = true
+ w.addHypervVMCharts(v)
+ }
+ }
+ for v := range w.cache.hypervVMMem {
+ if !seen[v] {
+ delete(w.cache.hypervVMMem, v)
+ w.removeHypervVMCharts(v)
+ }
+ }
+}
+
+func (w *Windows) collectHypervVMDevices(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "hyperv_vm_device_"
+
+ for _, v := range []string{
+ metricHypervVMDeviceBytesRead,
+ metricHypervVMDeviceBytesWritten,
+ metricHypervVMDeviceOperationsRead,
+ metricHypervVMDeviceOperationsWritten,
+ metricHypervVMDeviceErrorCount,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ if device := pm.Labels.Get("vm_device"); device != "" {
+ name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm_device")
+ seen[device] = true
+ mx[px+hypervCleanName(device)+name] = int64(pm.Value)
+ }
+ }
+ }
+
+ for v := range seen {
+ if !w.cache.hypervVMDevices[v] {
+ w.cache.hypervVMDevices[v] = true
+ w.addHypervVMDeviceCharts(v)
+ }
+ }
+ for v := range w.cache.hypervVMDevices {
+ if !seen[v] {
+ delete(w.cache.hypervVMDevices, v)
+ w.removeHypervVMDeviceCharts(v)
+ }
+ }
+}
+
+func (w *Windows) collectHypervVMInterface(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "hyperv_vm_interface_"
+
+ for _, v := range []string{
+ metricHypervVMInterfaceBytesReceived,
+ metricHypervVMInterfaceBytesSent,
+ metricHypervVMInterfacePacketsIncomingDropped,
+ metricHypervVMInterfacePacketsOutgoingDropped,
+ metricHypervVMInterfacePacketsReceived,
+ metricHypervVMInterfacePacketsSent,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ if iface := pm.Labels.Get("vm_interface"); iface != "" {
+ name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm_interface")
+ seen[iface] = true
+ mx[px+hypervCleanName(iface)+name] = int64(pm.Value)
+ }
+ }
+ }
+
+ for v := range seen {
+ if !w.cache.hypervVMInterfaces[v] {
+ w.cache.hypervVMInterfaces[v] = true
+ w.addHypervVMInterfaceCharts(v)
+ }
+ }
+ for v := range w.cache.hypervVMInterfaces {
+ if !seen[v] {
+ delete(w.cache.hypervVMInterfaces, v)
+ w.removeHypervVMInterfaceCharts(v)
+ }
+ }
+}
+
+func (w *Windows) collectHypervVSwitch(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "hyperv_vswitch_"
+
+ for _, v := range []string{
+ metricHypervVSwitchBytesReceivedTotal,
+ metricHypervVSwitchBytesSentTotal,
+ metricHypervVSwitchPacketsReceivedTotal,
+ metricHypervVSwitchPacketsSentTotal,
+ metricHypervVSwitchDirectedPacketsReceivedTotal,
+ metricHypervVSwitchDirectedPacketsSendTotal,
+ metricHypervVSwitchBroadcastPacketsReceivedTotal,
+ metricHypervVSwitchBroadcastPacketsSentTotal,
+ metricHypervVSwitchMulticastPacketsReceivedTotal,
+ metricHypervVSwitchMulticastPacketsSentTotal,
+ metricHypervVSwitchDroppedPacketsIncomingTotal,
+ metricHypervVSwitchDroppedPacketsOutcomingTotal,
+ metricHypervVSwitchExtensionDroppedAttacksIncomingTotal,
+ metricHypervVSwitchExtensionDroppedPacketsOutcomingTotal,
+ metricHypervVSwitchPacketsFloodedTotal,
+ metricHypervVSwitchLearnedMACAddressTotal,
+ metricHypervVSwitchPurgedMACAddresses,
+ metricHypervVSwitchNumberOfSendChannelMovesTotal,
+ metricHypervVSwitchNumberOfVMQMovesTotal,
+ } {
+ for _, pm := range pms.FindByName(v) {
+ if vswitch := pm.Labels.Get("vswitch"); vswitch != "" {
+ name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vswitch")
+ seen[vswitch] = true
+ mx[px+hypervCleanName(vswitch)+name] = int64(pm.Value)
+ }
+ }
+ }
+
+ for v := range seen {
+ if !w.cache.hypervVswitch[v] {
+ w.cache.hypervVswitch[v] = true
+ w.addHypervVSwitchCharts(v)
+ }
+ }
+ for v := range w.cache.hypervVswitch {
+ if !seen[v] {
+ delete(w.cache.hypervVswitch, v)
+ w.removeHypervVSwitchCharts(v)
+ }
+ }
+}
+
+var hypervNameReplacer = strings.NewReplacer(" ", "_", "?", "_", ":", "_", ".", "_")
+
+func hypervCleanName(name string) string {
+ name = hypervNameReplacer.Replace(name)
+ return strings.ToLower(name)
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_iis.go b/src/go/collectors/go.d.plugin/modules/windows/collect_iis.go
new file mode 100644
index 000000000..3b15b6e89
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_iis.go
@@ -0,0 +1,140 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricIISCurrentAnonymousUsers = "windows_iis_current_anonymous_users"
+ metricIISCurrentNonAnonymousUsers = "windows_iis_current_non_anonymous_users"
+ metricIISCurrentConnections = "windows_iis_current_connections"
+ metricIICurrentISAPIExtRequests = "windows_iis_current_isapi_extension_requests"
+ metricIISUptime = "windows_iis_service_uptime"
+
+ metricIISReceivedBytesTotal = "windows_iis_received_bytes_total"
+ metricIISSentBytesTotal = "windows_iis_sent_bytes_total"
+ metricIISRequestsTotal = "windows_iis_requests_total"
+ metricIISIPAPIExtRequestsTotal = "windows_iis_ipapi_extension_requests_total"
+ metricIISConnAttemptsAllInstancesTotal = "windows_iis_connection_attempts_all_instances_total"
+ metricIISFilesReceivedTotal = "windows_iis_files_received_total"
+ metricIISFilesSentTotal = "windows_iis_files_sent_total"
+ metricIISLogonAttemptsTotal = "windows_iis_logon_attempts_total"
+ metricIISLockedErrorsTotal = "windows_iis_locked_errors_total"
+ metricIISNotFoundErrorsTotal = "windows_iis_not_found_errors_total"
+)
+
+func (w *Windows) collectIIS(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "iis_website_"
+ for _, pm := range pms.FindByName(metricIISCurrentAnonymousUsers) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_current_anonymous_users"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISCurrentNonAnonymousUsers) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_current_non_anonymous_users"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISCurrentConnections) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_current_connections"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIICurrentISAPIExtRequests) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_current_isapi_extension_requests"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISUptime) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_service_uptime"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISReceivedBytesTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_received_bytes_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISSentBytesTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_sent_bytes_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISRequestsTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_requests_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISConnAttemptsAllInstancesTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_connection_attempts_all_instances_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISFilesReceivedTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_files_received_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISFilesSentTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_files_sent_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISIPAPIExtRequestsTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_isapi_extension_requests_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISLogonAttemptsTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_logon_attempts_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISLockedErrorsTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_locked_errors_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricIISNotFoundErrorsTotal) {
+ if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
+ seen[name] = true
+ mx[px+name+"_not_found_errors_total"] += int64(pm.Value)
+ }
+ }
+
+ for site := range seen {
+ if !w.cache.iis[site] {
+ w.cache.iis[site] = true
+ w.addIISWebsiteCharts(site)
+ }
+ }
+ for site := range w.cache.iis {
+ if !seen[site] {
+ delete(w.cache.iis, site)
+ w.removeIIWebsiteSCharts(site)
+ }
+ }
+}
+
+func cleanWebsiteName(name string) string {
+ return strings.ReplaceAll(name, " ", "_")
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_logical_disk.go b/src/go/collectors/go.d.plugin/modules/windows/collect_logical_disk.go
new file mode 100644
index 000000000..9f5dab15b
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_logical_disk.go
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricLDReadBytesTotal = "windows_logical_disk_read_bytes_total"
+ metricLDWriteBytesTotal = "windows_logical_disk_write_bytes_total"
+ metricLDReadsTotal = "windows_logical_disk_reads_total"
+ metricLDWritesTotal = "windows_logical_disk_writes_total"
+ metricLDSizeBytes = "windows_logical_disk_size_bytes"
+ metricLDFreeBytes = "windows_logical_disk_free_bytes"
+ metricLDReadLatencyTotal = "windows_logical_disk_read_latency_seconds_total"
+ metricLDWriteLatencyTotal = "windows_logical_disk_write_latency_seconds_total"
+)
+
+func (w *Windows) collectLogicalDisk(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "logical_disk_"
+ for _, pm := range pms.FindByName(metricLDReadBytesTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_read_bytes_total"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDWriteBytesTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_write_bytes_total"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDReadsTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_reads_total"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDWritesTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_writes_total"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDSizeBytes) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_total_space"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDFreeBytes) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_free_space"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDReadLatencyTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_read_latency"] = int64(pm.Value * precision)
+ }
+ }
+ for _, pm := range pms.FindByName(metricLDWriteLatencyTotal) {
+ vol := pm.Labels.Get("volume")
+ if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
+ seen[vol] = true
+ mx[px+vol+"_write_latency"] = int64(pm.Value * precision)
+ }
+ }
+
+ for disk := range seen {
+ if !w.cache.volumes[disk] {
+ w.cache.volumes[disk] = true
+ w.addDiskCharts(disk)
+ }
+ mx[px+disk+"_used_space"] = mx[px+disk+"_total_space"] - mx[px+disk+"_free_space"]
+ }
+ for disk := range w.cache.volumes {
+ if !seen[disk] {
+ delete(w.cache.volumes, disk)
+ w.removeDiskCharts(disk)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_logon.go b/src/go/collectors/go.d.plugin/modules/windows/collect_logon.go
new file mode 100644
index 000000000..a4e14d109
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_logon.go
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricLogonType = "windows_logon_logon_type"
+)
+
+func (w *Windows) collectLogon(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorLogon] {
+ w.cache.collection[collectorLogon] = true
+ w.addLogonCharts()
+ }
+
+ for _, pm := range pms.FindByName(metricLogonType) {
+ if v := pm.Labels.Get("status"); v != "" {
+ mx["logon_type_"+v+"_sessions"] = int64(pm.Value)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_memory.go b/src/go/collectors/go.d.plugin/modules/windows/collect_memory.go
new file mode 100644
index 000000000..5b4ed191d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_memory.go
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricMemAvailBytes = "windows_memory_available_bytes"
+ metricMemCacheFaultsTotal = "windows_memory_cache_faults_total"
+ metricMemCommitLimit = "windows_memory_commit_limit"
+ metricMemCommittedBytes = "windows_memory_committed_bytes"
+ metricMemModifiedPageListBytes = "windows_memory_modified_page_list_bytes"
+ metricMemPageFaultsTotal = "windows_memory_page_faults_total"
+ metricMemSwapPageReadsTotal = "windows_memory_swap_page_reads_total"
+ metricMemSwapPagesReadTotal = "windows_memory_swap_pages_read_total"
+ metricMemSwapPagesWrittenTotal = "windows_memory_swap_pages_written_total"
+ metricMemSwapPageWritesTotal = "windows_memory_swap_page_writes_total"
+ metricMemPoolNonPagedBytesTotal = "windows_memory_pool_nonpaged_bytes"
+ metricMemPoolPagedBytes = "windows_memory_pool_paged_bytes"
+ metricMemStandbyCacheCoreBytes = "windows_memory_standby_cache_core_bytes"
+ metricMemStandbyCacheNormalPriorityBytes = "windows_memory_standby_cache_normal_priority_bytes"
+ metricMemStandbyCacheReserveBytes = "windows_memory_standby_cache_reserve_bytes"
+)
+
+func (w *Windows) collectMemory(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorMemory] {
+ w.cache.collection[collectorMemory] = true
+ w.addMemoryCharts()
+ }
+
+ if pm := pms.FindByName(metricMemAvailBytes); pm.Len() > 0 {
+ mx["memory_available_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemCacheFaultsTotal); pm.Len() > 0 {
+ mx["memory_cache_faults_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemCommitLimit); pm.Len() > 0 {
+ mx["memory_commit_limit"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemCommittedBytes); pm.Len() > 0 {
+ mx["memory_committed_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemModifiedPageListBytes); pm.Len() > 0 {
+ mx["memory_modified_page_list_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemPageFaultsTotal); pm.Len() > 0 {
+ mx["memory_page_faults_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemSwapPageReadsTotal); pm.Len() > 0 {
+ mx["memory_swap_page_reads_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemSwapPagesReadTotal); pm.Len() > 0 {
+ mx["memory_swap_pages_read_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemSwapPagesWrittenTotal); pm.Len() > 0 {
+ mx["memory_swap_pages_written_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemSwapPageWritesTotal); pm.Len() > 0 {
+ mx["memory_swap_page_writes_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemPoolNonPagedBytesTotal); pm.Len() > 0 {
+ mx["memory_pool_nonpaged_bytes_total"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemPoolPagedBytes); pm.Len() > 0 {
+ mx["memory_pool_paged_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemStandbyCacheCoreBytes); pm.Len() > 0 {
+ mx["memory_standby_cache_core_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemStandbyCacheNormalPriorityBytes); pm.Len() > 0 {
+ mx["memory_standby_cache_normal_priority_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricMemStandbyCacheReserveBytes); pm.Len() > 0 {
+ mx["memory_standby_cache_reserve_bytes"] = int64(pm.Max())
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_mssql.go b/src/go/collectors/go.d.plugin/modules/windows/collect_mssql.go
new file mode 100644
index 000000000..53d88f578
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_mssql.go
@@ -0,0 +1,259 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricMSSQLAccessMethodPageSplits = "windows_mssql_accessmethods_page_splits"
+ metricMSSQLBufferCacheHits = "windows_mssql_bufman_buffer_cache_hits"
+ metricMSSQLBufferCacheLookups = "windows_mssql_bufman_buffer_cache_lookups"
+ metricMSSQLBufferCheckpointPages = "windows_mssql_bufman_checkpoint_pages"
+ metricMSSQLBufferPageLifeExpectancy = "windows_mssql_bufman_page_life_expectancy_seconds"
+ metricMSSQLBufferPageReads = "windows_mssql_bufman_page_reads"
+ metricMSSQLBufferPageWrites = "windows_mssql_bufman_page_writes"
+ metricMSSQLBlockedProcesses = "windows_mssql_genstats_blocked_processes"
+ metricMSSQLUserConnections = "windows_mssql_genstats_user_connections"
+ metricMSSQLLockWait = "windows_mssql_locks_lock_wait_seconds"
+ metricMSSQLDeadlocks = "windows_mssql_locks_deadlocks"
+ metricMSSQLConnectionMemoryBytes = "windows_mssql_memmgr_connection_memory_bytes"
+ metricMSSQLExternalBenefitOfMemory = "windows_mssql_memmgr_external_benefit_of_memory"
+ metricMSSQLPendingMemoryGrants = "windows_mssql_memmgr_pending_memory_grants"
+ metricMSSQLSQLErrorsTotal = "windows_mssql_sql_errors_total"
+ metricMSSQLTotalServerMemory = "windows_mssql_memmgr_total_server_memory_bytes"
+ metricMSSQLStatsAutoParameterization = "windows_mssql_sqlstats_auto_parameterization_attempts"
+ metricMSSQLStatsBatchRequests = "windows_mssql_sqlstats_batch_requests"
+ metricMSSQLStatSafeAutoParameterization = "windows_mssql_sqlstats_safe_auto_parameterization_attempts"
+ metricMSSQLCompilations = "windows_mssql_sqlstats_sql_compilations"
+ metricMSSQLRecompilations = "windows_mssql_sqlstats_sql_recompilations"
+
+ metricMSSQLDatabaseActiveTransactions = "windows_mssql_databases_active_transactions"
+ metricMSSQLDatabaseBackupRestoreOperations = "windows_mssql_databases_backup_restore_operations"
+ metricMSSQLDatabaseDataFileSize = "windows_mssql_databases_data_files_size_bytes"
+ metricMSSQLDatabaseLogFlushed = "windows_mssql_databases_log_flushed_bytes"
+ metricMSSQLDatabaseLogFlushes = "windows_mssql_databases_log_flushes"
+ metricMSSQLDatabaseTransactions = "windows_mssql_databases_transactions"
+ metricMSSQLDatabaseWriteTransactions = "windows_mssql_databases_write_transactions"
+)
+
+func (w *Windows) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
+ instances := make(map[string]bool)
+ dbs := make(map[string]bool)
+ px := "mssql_instance_"
+ for _, pm := range pms.FindByName(metricMSSQLAccessMethodPageSplits) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_accessmethods_page_splits"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferCacheHits) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_bufman_buffer_cache_hits"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferCacheLookups) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" && pm.Value > 0 {
+ instances[name] = true
+ mx[px+name+"_cache_hit_ratio"] = int64(float64(mx[px+name+"_bufman_buffer_cache_hits"]) / pm.Value * 100)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferCheckpointPages) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_bufman_checkpoint_pages"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferPageLifeExpectancy) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_bufman_page_life_expectancy_seconds"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferPageReads) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_bufman_page_reads"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBufferPageWrites) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_bufman_page_writes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLBlockedProcesses) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_genstats_blocked_processes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLUserConnections) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_genstats_user_connections"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLLockWait) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ if res := pm.Labels.Get("resource"); res != "" {
+ mx[px+name+"_resource_"+res+"_locks_lock_wait_seconds"] = int64(pm.Value)
+ }
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDeadlocks) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ if res := pm.Labels.Get("resource"); res != "" {
+ mx[px+name+"_resource_"+res+"_locks_deadlocks"] = int64(pm.Value)
+ }
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLConnectionMemoryBytes) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_memmgr_connection_memory_bytes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLExternalBenefitOfMemory) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_memmgr_external_benefit_of_memory"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLPendingMemoryGrants) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_memmgr_pending_memory_grants"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLSQLErrorsTotal) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ if res := pm.Labels.Get("resource"); res != "" && res != "_Total" {
+ dim := mssqlParseResource(res)
+ mx[px+name+"_sql_errors_total_"+dim] = int64(pm.Value)
+ }
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLTotalServerMemory) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_memmgr_total_server_memory_bytes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLStatsAutoParameterization) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_sqlstats_auto_parameterization_attempts"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLStatsBatchRequests) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_sqlstats_batch_requests"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLStatSafeAutoParameterization) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_sqlstats_safe_auto_parameterization_attempts"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLCompilations) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_sqlstats_sql_compilations"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLRecompilations) {
+ if name := pm.Labels.Get("mssql_instance"); name != "" {
+ instances[name] = true
+ mx[px+name+"_sqlstats_sql_recompilations"] = int64(pm.Value)
+ }
+ }
+
+ px = "mssql_db_"
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseActiveTransactions) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_active_transactions"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseBackupRestoreOperations) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_backup_restore_operations"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseDataFileSize) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_data_files_size_bytes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseLogFlushed) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_log_flushed_bytes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseLogFlushes) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_log_flushes"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseTransactions) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_transactions"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricMSSQLDatabaseWriteTransactions) {
+ if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
+ instances[name], dbs[name+":"+db] = true, true
+ mx[px+db+"_instance_"+name+"_write_transactions"] = int64(pm.Value)
+ }
+ }
+
+ for v := range instances {
+ if !w.cache.mssqlInstances[v] {
+ w.cache.mssqlInstances[v] = true
+ w.addMSSQLInstanceCharts(v)
+ }
+ }
+ for v := range w.cache.mssqlInstances {
+ if !instances[v] {
+ delete(w.cache.mssqlInstances, v)
+ w.removeMSSQLInstanceCharts(v)
+ }
+ }
+
+ for v := range dbs {
+ if !w.cache.mssqlDBs[v] {
+ w.cache.mssqlDBs[v] = true
+ if s := strings.Split(v, ":"); len(s) == 2 {
+ w.addMSSQLDBCharts(s[0], s[1])
+ }
+ }
+ }
+ for v := range w.cache.mssqlDBs {
+ if !dbs[v] {
+ delete(w.cache.mssqlDBs, v)
+ if s := strings.Split(v, ":"); len(s) == 2 {
+ w.removeMSSQLDBCharts(s[0], s[1])
+ }
+ }
+ }
+}
+
+func mssqlParseResource(name string) string {
+ name = strings.ReplaceAll(name, " ", "_")
+ return strings.ToLower(name)
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_net.go b/src/go/collectors/go.d.plugin/modules/windows/collect_net.go
new file mode 100644
index 000000000..e72bf646f
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_net.go
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricNetBytesReceivedTotal = "windows_net_bytes_received_total"
+ metricNetBytesSentTotal = "windows_net_bytes_sent_total"
+ metricNetPacketsReceivedTotal = "windows_net_packets_received_total"
+ metricNetPacketsSentTotal = "windows_net_packets_sent_total"
+ metricNetPacketsReceivedDiscardedTotal = "windows_net_packets_received_discarded_total"
+ metricNetPacketsOutboundDiscardedTotal = "windows_net_packets_outbound_discarded_total"
+ metricNetPacketsReceivedErrorsTotal = "windows_net_packets_received_errors_total"
+ metricNetPacketsOutboundErrorsTotal = "windows_net_packets_outbound_errors_total"
+)
+
+func (w *Windows) collectNet(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "net_nic_"
+ for _, pm := range pms.FindByName(metricNetBytesReceivedTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_bytes_received"] += int64(pm.Value * 8)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetBytesSentTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_bytes_sent"] += int64(pm.Value * 8)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsReceivedTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_received_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsSentTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_sent_total"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsReceivedDiscardedTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_received_discarded"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsOutboundDiscardedTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_outbound_discarded"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsReceivedErrorsTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_received_errors"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricNetPacketsOutboundErrorsTotal) {
+ if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
+ seen[nic] = true
+ mx[px+nic+"_packets_outbound_errors"] += int64(pm.Value)
+ }
+ }
+
+ for nic := range seen {
+ if !w.cache.nics[nic] {
+ w.cache.nics[nic] = true
+ w.addNICCharts(nic)
+ }
+ }
+ for nic := range w.cache.nics {
+ if !seen[nic] {
+ delete(w.cache.nics, nic)
+ w.removeNICCharts(nic)
+ }
+ }
+}
+
+func cleanNICID(id string) string {
+ return strings.Replace(id, "__", "_", -1)
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_netframework.go b/src/go/collectors/go.d.plugin/modules/windows/collect_netframework.go
new file mode 100644
index 000000000..84012f71e
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_netframework.go
@@ -0,0 +1,531 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ netframeworkPrefix = "netframework_"
+)
+
+const (
+ metricNetFrameworkCLRExceptionsThrownTotal = "windows_netframework_clrexceptions_exceptions_thrown_total"
+ metricNetFrameworkCLRExceptionsFiltersTotal = "windows_netframework_clrexceptions_exceptions_filters_total"
+ metricNetFrameworkCLRExceptionsFinallysTotal = "windows_netframework_clrexceptions_exceptions_finallys_total"
+ metricNetFrameworkCLRExceptionsThrowCatchDepthTotal = "windows_netframework_clrexceptions_throw_to_catch_depth_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRExceptions(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsThrownTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrexception_thrown_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsFiltersTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrexception_filters_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsFinallysTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrexception_finallys_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsThrowCatchDepthTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrexception_throw_to_catch_depth_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRExceptions[proc] {
+ w.cache.netFrameworkCLRExceptions[proc] = true
+ w.addProcessNetFrameworkExceptionsCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRExceptions {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRExceptions, proc)
+ w.removeProcessFromNetFrameworkExceptionsCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRInteropComCallableWrappersTotal = "windows_netframework_clrinterop_com_callable_wrappers_total"
+ metricNetFrameworkCLRInteropMarshallingTotal = "windows_netframework_clrinterop_interop_marshalling_total"
+ metricNetFrameworkCLRInteropStubsCreatedTotal = "windows_netframework_clrinterop_interop_stubs_created_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRInterop(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropComCallableWrappersTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrinterop_com_callable_wrappers_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropMarshallingTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrinterop_interop_marshalling_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropStubsCreatedTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrinterop_interop_stubs_created_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRInterops[proc] {
+ w.cache.netFrameworkCLRInterops[proc] = true
+ w.addProcessNetFrameworkInteropCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRInterops {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRInterops, proc)
+ w.removeProcessNetFrameworkInteropCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRJITMethodsTotal = "windows_netframework_clrjit_jit_methods_total"
+ metricNetFrameworkCLRJITTimePercent = "windows_netframework_clrjit_jit_time_percent"
+ metricNetFrameworkCLRJITStandardFailuresTotal = "windows_netframework_clrjit_jit_standard_failures_total"
+ metricNetFrameworkCLRJITILBytesTotal = "windows_netframework_clrjit_jit_il_bytes_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRJIT(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRJITMethodsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrjit_methods_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRJITStandardFailuresTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrjit_standard_failures_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRJITTimePercent) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrjit_time_percent"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRJITILBytesTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrjit_il_bytes_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRJIT[proc] {
+ w.cache.netFrameworkCLRJIT[proc] = true
+ w.addProcessNetFrameworkJITCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRJIT {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRJIT, proc)
+ w.removeProcessNetFrameworkJITCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRLoadingLoaderHeapSizeBytes = "windows_netframework_clrloading_loader_heap_size_bytes"
+ metricNetFrameworkCLRLoadingAppDomainLoadedTotal = "windows_netframework_clrloading_appdomains_loaded_total"
+ metricNetFrameworkCLRLoadingAppDomainUnloadedTotal = "windows_netframework_clrloading_appdomains_unloaded_total"
+ metricNetFrameworkCLRLoadingAssembliesLoadedTotal = "windows_netframework_clrloading_assemblies_loaded_total"
+ metricNetFrameworkCLRLoadingClassesLoadedTotal = "windows_netframework_clrloading_classes_loaded_total"
+ metricNetFrameworkCLRLoadingClassLoadFailuresTotal = "windows_netframework_clrloading_class_load_failures_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRLoading(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingLoaderHeapSizeBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_loader_heap_size_bytes"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAppDomainLoadedTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_appdomains_loaded_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAppDomainUnloadedTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_appdomains_unloaded_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAssembliesLoadedTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_assemblies_loaded_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingClassesLoadedTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_classes_loaded_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingClassLoadFailuresTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrloading_class_load_failures_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRLoading[proc] {
+ w.cache.netFrameworkCLRLoading[proc] = true
+ w.addProcessNetFrameworkLoadingCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRLoading {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRLoading, proc)
+ w.removeProcessNetFrameworkLoadingCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRLocksAndThreadsQueueLengthTotal = "windows_netframework_clrlocksandthreads_queue_length_total"
+ metricNetFrameworkCLRLocksAndThreadsCurrentLogicalThreads = "windows_netframework_clrlocksandthreads_current_logical_threads"
+ metricNetFrameworkCLRLocksAndThreadsPhysicalThreadsCurrent = "windows_netframework_clrlocksandthreads_physical_threads_current"
+ metricNetFrameworkCLRLocksAndThreadsRecognizedThreadsTotal = "windows_netframework_clrlocksandthreads_recognized_threads_total"
+ metricNetFrameworkCLRLocksAndThreadsContentionsTotal = "windows_netframework_clrlocksandthreads_contentions_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRLocksAndThreads(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsQueueLengthTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrlocksandthreads_queue_length_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsCurrentLogicalThreads) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrlocksandthreads_current_logical_threads"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsPhysicalThreadsCurrent) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrlocksandthreads_physical_threads_current"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsRecognizedThreadsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrlocksandthreads_recognized_threads_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsContentionsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrlocksandthreads_contentions_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRLocksThreads[proc] {
+ w.cache.netFrameworkCLRLocksThreads[proc] = true
+ w.addProcessNetFrameworkLocksAndThreadsCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRLocksThreads {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRLocksThreads, proc)
+ w.removeProcessNetFrameworkLocksAndThreadsCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRMemoryAllocatedBytesTotal = "windows_netframework_clrmemory_allocated_bytes_total"
+ metricNetFrameworkCLRMemoryFinalizationSurvivors = "windows_netframework_clrmemory_finalization_survivors"
+ metricNetFrameworkCLRMemoryHeapSizeBytes = "windows_netframework_clrmemory_heap_size_bytes"
+ metricNetFrameworkCLRMemoryPromotedBytes = "windows_netframework_clrmemory_promoted_bytes"
+ metricNetFrameworkCLRMemoryNumberGCHandles = "windows_netframework_clrmemory_number_gc_handles"
+ metricNetFrameworkCLRMemoryCollectionsTotal = "windows_netframework_clrmemory_collections_total"
+ metricNetFrameworkCLRMemoryInducedGCTotal = "windows_netframework_clrmemory_induced_gc_total"
+ metricNetFrameworkCLRMemoryNumberPinnedObjects = "windows_netframework_clrmemory_number_pinned_objects"
+ metricNetFrameworkCLRMemoryNumberSinkBlockInUse = "windows_netframework_clrmemory_number_sink_blocksinuse"
+ metricNetFrameworkCLRMemoryCommittedBytes = "windows_netframework_clrmemory_committed_bytes"
+ metricNetFrameworkCLRMemoryReservedBytes = "windows_netframework_clrmemory_reserved_bytes"
+ metricNetFrameworkCLRMemoryGCTimePercent = "windows_netframework_clrmemory_gc_time_percent"
+)
+
+func (w *Windows) collectNetFrameworkCLRMemory(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryAllocatedBytesTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_allocated_bytes_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryFinalizationSurvivors) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_finalization_survivors"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryHeapSizeBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_heap_size_bytes"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryPromotedBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_promoted_bytes"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberGCHandles) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_number_gc_handles"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryCollectionsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_collections_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryInducedGCTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_induced_gc_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberPinnedObjects) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_number_pinned_objects"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberSinkBlockInUse) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_number_sink_blocksinuse"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryCommittedBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_committed_bytes"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryReservedBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_reserved_bytes"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryGCTimePercent) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrmemory_gc_time_percent"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRMemory[proc] {
+ w.cache.netFrameworkCLRMemory[proc] = true
+ w.addProcessNetFrameworkMemoryCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRMemory {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRMemory, proc)
+ w.removeProcessNetFrameworkMemoryCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRRemotingChannelsTotal = "windows_netframework_clrremoting_channels_total"
+ metricNetFrameworkCLRRemotingContextBoundClassesLoaded = "windows_netframework_clrremoting_context_bound_classes_loaded"
+ metricNetFrameworkCLRRemotingContextBoundObjectsTotal = "windows_netframework_clrremoting_context_bound_objects_total"
+ metricNetFrameworkCLRRemotingContextProxiesTotal = "windows_netframework_clrremoting_context_proxies_total"
+ metricNetFrameworkCLRRemotingContexts = "windows_netframework_clrremoting_contexts"
+ metricNetFrameworkCLRRemotingRemoteCallsTotal = "windows_netframework_clrremoting_remote_calls_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRRemoting(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingChannelsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_channels_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextBoundClassesLoaded) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_context_bound_classes_loaded"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextBoundObjectsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_context_bound_objects_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextProxiesTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_context_proxies_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContexts) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_contexts"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingRemoteCallsTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrremoting_remote_calls_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRRemoting[proc] {
+ w.cache.netFrameworkCLRRemoting[proc] = true
+ w.addProcessNetFrameworkRemotingCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRRemoting {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRRemoting, proc)
+ w.removeProcessNetFrameworkRemotingCharts(proc)
+ }
+ }
+}
+
+const (
+ metricNetFrameworkCLRSecurityLinkTimeChecksTotal = "windows_netframework_clrsecurity_link_time_checks_total"
+ metricNetFrameworkCLRSecurityRTChecksTimePercent = "windows_netframework_clrsecurity_rt_checks_time_percent"
+ metricNetFrameworkCLRSecurityStackWalkDepth = "windows_netframework_clrsecurity_stack_walk_depth"
+ metricNetFrameworkCLRSecurityRuntimeChecksTotal = "windows_netframework_clrsecurity_runtime_checks_total"
+)
+
+func (w *Windows) collectNetFrameworkCLRSecurity(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityLinkTimeChecksTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrsecurity_link_time_checks_total"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityRTChecksTimePercent) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrsecurity_checks_time_percent"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityStackWalkDepth) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrsecurity_stack_walk_depth"] += int64(pm.Value)
+ }
+ }
+
+ for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityRuntimeChecksTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[netframeworkPrefix+name+"_clrsecurity_runtime_checks_total"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.netFrameworkCLRSecurity[proc] {
+ w.cache.netFrameworkCLRSecurity[proc] = true
+ w.addProcessNetFrameworkSecurityCharts(proc)
+ }
+ }
+
+ for proc := range w.cache.netFrameworkCLRSecurity {
+ if !seen[proc] {
+ delete(w.cache.netFrameworkCLRSecurity, proc)
+ w.removeProcessNetFrameworkSecurityCharts(proc)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_os.go b/src/go/collectors/go.d.plugin/modules/windows/collect_os.go
new file mode 100644
index 000000000..17617f480
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_os.go
@@ -0,0 +1,47 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricOSPhysicalMemoryFreeBytes = "windows_os_physical_memory_free_bytes"
+ metricOSPagingFreeBytes = "windows_os_paging_free_bytes"
+ metricOSProcessesLimit = "windows_os_processes_limit"
+ metricOSProcesses = "windows_os_processes"
+ metricOSUsers = "windows_os_users"
+ metricOSPagingLimitBytes = "windows_os_paging_limit_bytes"
+ metricOSVisibleMemoryBytes = "windows_os_visible_memory_bytes"
+)
+
+func (w *Windows) collectOS(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorOS] {
+ w.cache.collection[collectorOS] = true
+ w.addOSCharts()
+ }
+
+ px := "os_"
+ if pm := pms.FindByName(metricOSPhysicalMemoryFreeBytes); pm.Len() > 0 {
+ mx[px+"physical_memory_free_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSPagingFreeBytes); pm.Len() > 0 {
+ mx[px+"paging_free_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSProcessesLimit); pm.Len() > 0 {
+ mx[px+"processes_limit"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSProcesses); pm.Len() > 0 {
+ mx[px+"processes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSUsers); pm.Len() > 0 {
+ mx[px+"users"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSPagingLimitBytes); pm.Len() > 0 {
+ mx[px+"paging_limit_bytes"] = int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricOSVisibleMemoryBytes); pm.Len() > 0 {
+ mx[px+"visible_memory_bytes"] = int64(pm.Max())
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_process.go b/src/go/collectors/go.d.plugin/modules/windows/collect_process.go
new file mode 100644
index 000000000..b1c729f30
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_process.go
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricProcessCPUTimeTotal = "windows_process_cpu_time_total"
+ metricProcessWorkingSetBytes = "windows_process_working_set_private_bytes"
+ metricProcessIOBytes = "windows_process_io_bytes_total"
+ metricProcessIOOperations = "windows_process_io_operations_total"
+ metricProcessPageFaults = "windows_process_page_faults_total"
+ metricProcessPageFileBytes = "windows_process_page_file_bytes"
+ metricProcessThreads = "windows_process_threads"
+ metricProcessCPUHandles = "windows_process_handles"
+)
+
+func (w *Windows) collectProcess(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorProcess] {
+ w.cache.collection[collectorProcess] = true
+ w.addProcessesCharts()
+ }
+
+ seen := make(map[string]bool)
+ px := "process_"
+ for _, pm := range pms.FindByName(metricProcessCPUTimeTotal) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_cpu_time"] += int64(pm.Value * 1000)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessWorkingSetBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_working_set_private_bytes"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessIOBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_io_bytes"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessIOOperations) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_io_operations"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessPageFaults) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_page_faults"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessPageFileBytes) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_page_file_bytes"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessThreads) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_threads"] += int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricProcessCPUHandles) {
+ if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
+ seen[name] = true
+ mx[px+name+"_handles"] += int64(pm.Value)
+ }
+ }
+
+ for proc := range seen {
+ if !w.cache.processes[proc] {
+ w.cache.processes[proc] = true
+ w.addProcessToCharts(proc)
+ }
+ }
+ for proc := range w.cache.processes {
+ if !seen[proc] {
+ delete(w.cache.processes, proc)
+ w.removeProcessFromCharts(proc)
+ }
+ }
+}
+
+func cleanProcessName(name string) string {
+ return strings.ReplaceAll(name, " ", "_")
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_service.go b/src/go/collectors/go.d.plugin/modules/windows/collect_service.go
new file mode 100644
index 000000000..fb58128ee
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_service.go
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricServiceState = "windows_service_state"
+ metricServiceStatus = "windows_service_status"
+)
+
+func (w *Windows) collectService(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ px := "service_"
+ for _, pm := range pms.FindByName(metricServiceState) {
+ name := cleanService(pm.Labels.Get("name"))
+ state := cleanService(pm.Labels.Get("state"))
+ if name == "" || state == "" {
+ continue
+ }
+
+ seen[name] = true
+ mx[px+name+"_state_"+state] = int64(pm.Value)
+ }
+ for _, pm := range pms.FindByName(metricServiceStatus) {
+ name := cleanService(pm.Labels.Get("name"))
+ status := cleanService(pm.Labels.Get("status"))
+ if name == "" || status == "" {
+ continue
+ }
+
+ seen[name] = true
+ mx[px+name+"_status_"+status] = int64(pm.Value)
+ }
+
+ for svc := range seen {
+ if !w.cache.services[svc] {
+ w.cache.services[svc] = true
+ w.addServiceCharts(svc)
+ }
+ }
+ for svc := range w.cache.services {
+ if !seen[svc] {
+ delete(w.cache.services, svc)
+ w.removeServiceCharts(svc)
+ }
+ }
+}
+
+func cleanService(name string) string {
+ return strings.ReplaceAll(name, " ", "_")
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_system.go b/src/go/collectors/go.d.plugin/modules/windows/collect_system.go
new file mode 100644
index 000000000..5f0bc9131
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_system.go
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "time"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricSysSystemUpTime = "windows_system_system_up_time"
+ metricSysThreads = "windows_system_threads"
+)
+
+func (w *Windows) collectSystem(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorSystem] {
+ w.cache.collection[collectorSystem] = true
+ w.addSystemCharts()
+ }
+
+ px := "system_"
+ if pm := pms.FindByName(metricSysSystemUpTime); pm.Len() > 0 {
+ mx[px+"up_time"] = time.Now().Unix() - int64(pm.Max())
+ }
+ if pm := pms.FindByName(metricSysThreads); pm.Len() > 0 {
+ mx[px+"threads"] = int64(pm.Max())
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_tcp.go b/src/go/collectors/go.d.plugin/modules/windows/collect_tcp.go
new file mode 100644
index 000000000..20c8f8df7
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_tcp.go
@@ -0,0 +1,65 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+
+const (
+ metricTCPConnectionFailure = "windows_tcp_connection_failures_total"
+ metricTCPConnectionActive = "windows_tcp_connections_active_total"
+ metricTCPConnectionEstablished = "windows_tcp_connections_established"
+ metricTCPConnectionPassive = "windows_tcp_connections_passive_total"
+ metricTCPConnectionReset = "windows_tcp_connections_reset_total"
+ metricTCPConnectionSegmentsReceived = "windows_tcp_segments_received_total"
+ metricTCPConnectionSegmentsRetransmitted = "windows_tcp_segments_retransmitted_total"
+ metricTCPConnectionSegmentsSent = "windows_tcp_segments_sent_total"
+)
+
+func (w *Windows) collectTCP(mx map[string]int64, pms prometheus.Series) {
+ if !w.cache.collection[collectorTCP] {
+ w.cache.collection[collectorTCP] = true
+ w.addTCPCharts()
+ }
+
+ px := "tcp_"
+ for _, pm := range pms.FindByName(metricTCPConnectionFailure) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_conns_failures"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionActive) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_conns_active"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionEstablished) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_conns_established"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionPassive) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_conns_passive"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionReset) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_conns_resets"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionSegmentsReceived) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_segments_received"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionSegmentsRetransmitted) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_segments_retransmitted"] = int64(pm.Value)
+ }
+ }
+ for _, pm := range pms.FindByName(metricTCPConnectionSegmentsSent) {
+ if af := pm.Labels.Get("af"); af != "" {
+ mx[px+af+"_segments_sent"] = int64(pm.Value)
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/collect_thermalzone.go b/src/go/collectors/go.d.plugin/modules/windows/collect_thermalzone.go
new file mode 100644
index 000000000..578ebef9f
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/collect_thermalzone.go
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "strings"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+)
+
+const (
+ metricThermalzoneTemperatureCelsius = "windows_thermalzone_temperature_celsius"
+)
+
+func (w *Windows) collectThermalzone(mx map[string]int64, pms prometheus.Series) {
+ seen := make(map[string]bool)
+ for _, pm := range pms.FindByName(metricThermalzoneTemperatureCelsius) {
+ if name := cleanZoneName(pm.Labels.Get("name")); name != "" {
+ seen[name] = true
+ mx["thermalzone_"+name+"_temperature"] = int64(pm.Value)
+ }
+ }
+
+ for zone := range seen {
+ if !w.cache.thermalZones[zone] {
+ w.cache.thermalZones[zone] = true
+ w.addThermalZoneCharts(zone)
+ }
+ }
+ for zone := range w.cache.thermalZones {
+ if !seen[zone] {
+ delete(w.cache.thermalZones, zone)
+ w.removeThermalZoneCharts(zone)
+ }
+ }
+}
+
+func cleanZoneName(name string) string {
+ // "\\_TZ.TZ10", "\\_TZ.X570" => TZ10, X570
+ i := strings.Index(name, ".")
+ if i == -1 || len(name) == i+1 {
+ return ""
+ }
+ return name[i+1:]
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/config_schema.json b/src/go/collectors/go.d.plugin/modules/windows/config_schema.json
new file mode 100644
index 000000000..c112abe66
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/config_schema.json
@@ -0,0 +1,184 @@
+{
+ "jsonSchema": {
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "title": "Windows collector configuration.",
+ "type": "object",
+ "properties": {
+ "update_every": {
+ "title": "Update every",
+ "description": "Data collection interval, measured in seconds.",
+ "type": "integer",
+ "minimum": 1,
+ "default": 5
+ },
+ "url": {
+ "title": "URL",
+ "description": "The URL of the Windows exporter metrics endpoint.",
+ "type": "string"
+ },
+ "timeout": {
+ "title": "Timeout",
+ "description": "The timeout in seconds for the HTTP request.",
+ "type": "number",
+ "minimum": 0.5,
+ "default": 5
+ },
+ "not_follow_redirects": {
+ "title": "Not follow redirects",
+ "description": "If set, the client will not follow HTTP redirects automatically.",
+ "type": "boolean"
+ },
+ "vnode": {
+ "title": "Vnode",
+ "description": "The hostname of the [virtual node](https://github.com/netdata/netdata/blob/master/docs/guides/using-host-labels.md#virtual-nodes) defined in the vnodes.conf configuration file.",
+ "type": "string"
+ },
+ "username": {
+ "title": "Username",
+ "description": "The username for basic authentication.",
+ "type": "string",
+ "sensitive": true
+ },
+ "password": {
+ "title": "Password",
+ "description": "The password for basic authentication.",
+ "type": "string",
+ "sensitive": true
+ },
+ "proxy_url": {
+ "title": "Proxy URL",
+ "description": "The URL of the proxy server.",
+ "type": "string"
+ },
+ "proxy_username": {
+ "title": "Proxy username",
+ "description": "The username for proxy authentication.",
+ "type": "string",
+ "sensitive": true
+ },
+ "proxy_password": {
+ "title": "Proxy password",
+ "description": "The password for proxy authentication.",
+ "type": "string",
+ "sensitive": true
+ },
+ "headers": {
+ "title": "Headers",
+ "description": "Additional HTTP headers to include in the request.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "tls_skip_verify": {
+ "title": "Skip TLS verification",
+ "description": "If set, TLS certificate verification will be skipped.",
+ "type": "boolean"
+ },
+ "tls_ca": {
+ "title": "TLS CA",
+ "description": "The path to the CA certificate file for TLS verification.",
+ "type": "string",
+ "pattern": "^$|^/"
+ },
+ "tls_cert": {
+ "title": "TLS certificate",
+ "description": "The path to the client certificate file for TLS authentication.",
+ "type": "string",
+ "pattern": "^$|^/"
+ },
+ "tls_key": {
+ "title": "TLS key",
+ "description": "The path to the client key file for TLS authentication.",
+ "type": "string",
+ "pattern": "^$|^/"
+ },
+ "body": {
+ "title": "Body",
+ "type": "string"
+ },
+ "method": {
+ "title": "Method",
+ "type": "string"
+ }
+ },
+ "required": [
+ "url"
+ ],
+ "additionalProperties": false,
+ "patternProperties": {
+ "^name$": {}
+ }
+ },
+ "uiSchema": {
+ "ui:flavour": "tabs",
+ "ui:options": {
+ "tabs": [
+ {
+ "title": "Base",
+ "fields": [
+ "update_every",
+ "url",
+ "timeout",
+ "not_follow_redirects",
+ "vnode"
+ ]
+ },
+ {
+ "title": "Auth",
+ "fields": [
+ "username",
+ "password"
+ ]
+ },
+ {
+ "title": "TLS",
+ "fields": [
+ "tls_skip_verify",
+ "tls_ca",
+ "tls_cert",
+ "tls_key"
+ ]
+ },
+ {
+ "title": "Proxy",
+ "fields": [
+ "proxy_url",
+ "proxy_username",
+ "proxy_password"
+ ]
+ },
+ {
+ "title": "Headers",
+ "fields": [
+ "headers"
+ ]
+ }
+ ]
+ },
+ "uiOptions": {
+ "fullPage": true
+ },
+ "body": {
+ "ui:widget": "hidden"
+ },
+ "method": {
+ "ui:widget": "hidden"
+ },
+ "url": {
+ "ui:placeholder": "http://203.0.113.0:9182/metrics"
+ },
+ "timeout": {
+ "ui:help": "Accepts decimals for precise control (e.g., type 1.5 for 1.5 seconds)."
+ },
+ "password": {
+ "ui:widget": "password"
+ },
+ "proxy_password": {
+ "ui:widget": "password"
+ }
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/init.go b/src/go/collectors/go.d.plugin/modules/windows/init.go
new file mode 100644
index 000000000..1e9a6a4e4
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/init.go
@@ -0,0 +1,25 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "errors"
+
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
+)
+
+func (w *Windows) validateConfig() error {
+ if w.URL == "" {
+ return errors.New("'url' is not set")
+ }
+ return nil
+}
+
+func (w *Windows) initPrometheusClient() (prometheus.Prometheus, error) {
+ client, err := web.NewHTTPClient(w.Client)
+ if err != nil {
+ return nil, err
+ }
+ return prometheus.New(client, w.Request), nil
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/active_directory.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/active_directory.md
new file mode 100644
index 000000000..4449fa942
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/active_directory.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/active_directory.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "Active Directory"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# Active Directory
+
+
+<img src="https://netdata.cloud/img/windows.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/hyperv.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/hyperv.md
new file mode 100644
index 000000000..3af02fb8a
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/hyperv.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/hyperv.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "HyperV"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# HyperV
+
+
+<img src="https://netdata.cloud/img/windows.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_exchange.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_exchange.md
new file mode 100644
index 000000000..740f68dec
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_exchange.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_exchange.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "MS Exchange"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# MS Exchange
+
+
+<img src="https://netdata.cloud/img/exchange.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_sql_server.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_sql_server.md
new file mode 100644
index 000000000..f12ae825d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_sql_server.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/ms_sql_server.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "MS SQL Server"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# MS SQL Server
+
+
+<img src="https://netdata.cloud/img/mssql.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/net_framework.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/net_framework.md
new file mode 100644
index 000000000..94262b166
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/net_framework.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/net_framework.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "NET Framework"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# NET Framework
+
+
+<img src="https://netdata.cloud/img/dotnet.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/integrations/windows.md b/src/go/collectors/go.d.plugin/modules/windows/integrations/windows.md
new file mode 100644
index 000000000..7c821585d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/integrations/windows.md
@@ -0,0 +1,808 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/integrations/windows.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml"
+sidebar_label: "Windows"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Windows Systems"
+most_popular: True
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# Windows
+
+
+<img src="https://netdata.cloud/img/windows.svg" width="150"/>
+
+
+Plugin: go.d.plugin
+Module: windows
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+
+
+It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+
+
+This collector is supported on all platforms.
+
+This collector supports collecting metrics from multiple instances of this integration, including remote instances.
+
+
+### Default Behavior
+
+#### Auto-Detection
+
+It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+
+
+#### Limits
+
+The default configuration for this integration does not impose any limits on data collection.
+
+#### Performance Impact
+
+Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+
+
+## Metrics
+
+Metrics grouped by *scope*.
+
+The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
+
+The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+Supported collectors:
+
+- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+
+
+### Per Active Directory instance
+
+These metrics refer to the entire monitored host.
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
+| windows.memory_utilization | available, used | bytes |
+| windows.memory_page_faults | page_faults | events/s |
+| windows.memory_swap_utilization | available, used | bytes |
+| windows.memory_swap_operations | read, write | operations/s |
+| windows.memory_swap_pages | read, written | pages/s |
+| windows.memory_cached | cached | KiB |
+| windows.memory_cache_faults | cache_faults | events/s |
+| windows.memory_system_pool | paged, non-paged | bytes |
+| windows.tcp_conns_established | ipv4, ipv6 | connections |
+| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
+| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
+| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
+| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
+| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
+| windows.os_processes | processes | number |
+| windows.os_users | users | users |
+| windows.os_visible_memory_usage | free, used | bytes |
+| windows.os_paging_files_usage | free, used | bytes |
+| windows.system_threads | threads | number |
+| windows.system_uptime | time | seconds |
+| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
+| windows.processes_cpu_utilization | a dimension per process | percentage |
+| windows.processes_handles | a dimension per process | handles |
+| windows.processes_io_bytes | a dimension per process | bytes/s |
+| windows.processes_io_operations | a dimension per process | operations/s |
+| windows.processes_page_faults | a dimension per process | pgfaults/s |
+| windows.processes_page_file_bytes | a dimension per process | bytes |
+| windows.processes_pool_bytes | a dimension per process | bytes |
+| windows.processes_threads | a dimension per process | threads |
+| ad.database_operations | add, delete, modify, recycle | operations/s |
+| ad.directory_operations | read, write, search | operations/s |
+| ad.name_cache_lookups | lookups | lookups/s |
+| ad.name_cache_hits | hits | hits/s |
+| ad.atq_average_request_latency | time | seconds |
+| ad.atq_outstanding_requests | outstanding | requests |
+| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
+| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
+| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
+| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
+| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
+| ad.dra_replication_pending_syncs | pending | syncs |
+| ad.dra_replication_sync_requests | requests | requests/s |
+| ad.ds_threads | in_use | threads |
+| ad.ldap_last_bind_time | last_bind | seconds |
+| ad.binds | binds | binds/s |
+| ad.ldap_searches | searches | searches/s |
+| adfs.ad_login_connection_failures | connection | failures/s |
+| adfs.certificate_authentications | authentications | authentications/s |
+| adfs.db_artifact_failures | connection | failures/s |
+| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
+| adfs.db_config_failures | connection | failures/s |
+| adfs.db_config_query_time_seconds | query_time | seconds/s |
+| adfs.device_authentications | authentications | authentications/s |
+| adfs.external_authentications | success, failure | authentications/s |
+| adfs.federated_authentications | authentications | authentications/s |
+| adfs.federation_metadata_requests | requests | requests/s |
+| adfs.oauth_authorization_requests | requests | requests/s |
+| adfs.oauth_client_authentications | success, failure | authentications/s |
+| adfs.oauth_client_credentials_requests | success, failure | requests/s |
+| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
+| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
+| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
+| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
+| adfs.oauth_password_grant_requests | success, failure | requests/s |
+| adfs.oauth_token_requests_success | success | requests/s |
+| adfs.passive_requests | passive | requests/s |
+| adfs.passport_authentications | passport | authentications/s |
+| adfs.password_change_requests | success, failure | requests/s |
+| adfs.samlp_token_requests_success | success | requests/s |
+| adfs.sso_authentications | success, failure | authentications/s |
+| adfs.token_requests | requests | requests/s |
+| adfs.userpassword_authentications | success, failure | authentications/s |
+| adfs.windows_integrated_authentications | authentications | authentications/s |
+| adfs.wsfed_token_requests_success | success | requests/s |
+| adfs.wstrust_token_requests_success | success | requests/s |
+| exchange.activesync_ping_cmds_pending | pending | commands |
+| exchange.activesync_requests | received | requests/s |
+| exchange.activesync_sync_cmds | processed | commands/s |
+| exchange.autodiscover_requests | processed | requests/s |
+| exchange.avail_service_requests | serviced | requests/s |
+| exchange.owa_current_unique_users | logged-in | users |
+| exchange.owa_requests_total | handled | requests/s |
+| exchange.rpc_active_user_count | active | users |
+| exchange.rpc_avg_latency | latency | seconds |
+| exchange.rpc_connection_count | connections | connections |
+| exchange.rpc_operations | operations | operations/s |
+| exchange.rpc_requests | processed | requests |
+| exchange.rpc_user_count | users | users |
+| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
+| exchange.transport_queues_poison | low, high, none, normal | messages/s |
+| hyperv.vms_health | ok, critical | vms |
+| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
+| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
+| hyperv.root_partition_attached_devices | attached | devices |
+| hyperv.root_partition_deposited_pages | deposited | pages |
+| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
+| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
+| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
+| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
+| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
+| hyperv.root_partition_address_space | address_spaces | address spaces |
+| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
+| hyperv.root_partition_virtual_tlb_pages | used | pages |
+
+### Per cpu core
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| core | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
+| windows.cpu_core_interrupts | interrupts | interrupts/s |
+| windows.cpu_core_dpcs | dpcs | dpcs/s |
+| windows.cpu_core_cstate | c1, c2, c3 | percentage |
+
+### Per logical disk
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| disk | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.logical_disk_utilization | free, used | bytes |
+| windows.logical_disk_bandwidth | read, write | bytes/s |
+| windows.logical_disk_operations | reads, writes | operations/s |
+| windows.logical_disk_latency | read, write | seconds |
+
+### Per network device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| nic | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.net_nic_bandwidth | received, sent | kilobits/s |
+| windows.net_nic_packets | received, sent | packets/s |
+| windows.net_nic_errors | inbound, outbound | errors/s |
+| windows.net_nic_discarded | inbound, outbound | discards/s |
+
+### Per thermalzone
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| thermalzone | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.thermalzone_temperature | temperature | celsius |
+
+### Per service
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| service | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
+| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
+
+### Per website
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| website | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| iis.website_traffic | received, sent | bytes/s |
+| iis.website_requests_rate | requests | requests/s |
+| iis.website_active_connections_count | active | connections |
+| iis.website_users_count | anonymous, non_anonymous | users |
+| iis.website_connection_attempts_rate | connection | attempts/s |
+| iis.website_isapi_extension_requests_count | isapi | requests |
+| iis.website_isapi_extension_requests_rate | isapi | requests/s |
+| iis.website_ftp_file_transfer_rate | received, sent | files/s |
+| iis.website_logon_attempts_rate | logon | attempts/s |
+| iis.website_errors_rate | document_locked, document_not_found | errors/s |
+| iis.website_uptime | document_locked, document_not_found | seconds |
+
+### Per mssql instance
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.instance_accessmethods_page_splits | page | splits/s |
+| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
+| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
+| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
+| mssql.instance_bufman_iops | read, written | iops |
+| mssql.instance_blocked_processes | blocked | processes |
+| mssql.instance_user_connection | user | connections |
+| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
+| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
+| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
+| mssql.instance_memmgr_pending_memory_grants | pending | processes |
+| mssql.instance_memmgr_server_memory | memory | bytes |
+| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
+| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
+| mssql.instance_sqlstats_batch_requests | batch | requests/s |
+| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
+| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
+| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
+
+### Per database
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| mssql_instance | TBD |
+| database | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| mssql.database_active_transactions | active | transactions |
+| mssql.database_backup_restore_operations | backup | operations/s |
+| mssql.database_data_files_size | size | bytes |
+| mssql.database_log_flushed | flushed | bytes/s |
+| mssql.database_log_flushes | log | flushes/s |
+| mssql.database_transactions | transactions | transactions/s |
+| mssql.database_write_transactions | write | transactions/s |
+
+### Per certificate template
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| cert_template | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| adcs.cert_template_requests | requests | requests/s |
+| adcs.cert_template_failed_requests | failed | requests/s |
+| adcs.cert_template_issued_requests | issued | requests/s |
+| adcs.cert_template_pending_requests | pending | requests/s |
+| adcs.cert_template_request_processing_time | processing_time | seconds |
+| adcs.cert_template_retrievals | retrievals | retrievals/s |
+| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
+| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
+| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
+| adcs.cert_template_challenge_responses | challenge | responses/s |
+| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
+| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
+| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
+
+### Per process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| process | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| netframework.clrexception_thrown | exceptions | exceptions/s |
+| netframework.clrexception_filters | filters | filters/s |
+| netframework.clrexception_finallys | finallys | finallys/s |
+| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
+| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
+| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
+| netframework.clrinterop_interop_stubs_created | created | stubs/s |
+| netframework.clrjit_methods | jit-compiled | methods/s |
+| netframework.clrjit_time | time | percentage |
+| netframework.clrjit_standard_failures | failures | failures/s |
+| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
+| netframework.clrloading_loader_heap_size | committed | bytes |
+| netframework.clrloading_appdomains_loaded | loaded | domain/s |
+| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
+| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
+| netframework.clrloading_classes_loaded | loaded | classes/s |
+| netframework.clrloading_class_load_failures | class_load | failures/s |
+| netframework.clrlocksandthreads_queue_length | threads | threads/s |
+| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
+| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
+| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
+| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
+| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
+| netframework.clrmemory_finalization_survivors | survived | objects |
+| netframework.clrmemory_heap_size | heap | bytes |
+| netframework.clrmemory_promoted | promoted | bytes |
+| netframework.clrmemory_number_gc_handles | used | handles |
+| netframework.clrmemory_collections | gc | gc/s |
+| netframework.clrmemory_induced_gc | gc | gc/s |
+| netframework.clrmemory_number_pinned_objects | pinned | objects |
+| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
+| netframework.clrmemory_committed | committed | bytes |
+| netframework.clrmemory_reserved | reserved | bytes |
+| netframework.clrmemory_gc_time | time | percentage |
+| netframework.clrremoting_channels | registered | channels/s |
+| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
+| netframework.clrremoting_context_bound_objects | allocated | objects/s |
+| netframework.clrremoting_context_proxies | objects | objects/s |
+| netframework.clrremoting_contexts | contexts | contexts |
+| netframework.clrremoting_remote_calls | rpc | calls/s |
+| netframework.clrsecurity_link_time_checks | linktime | checks/s |
+| netframework.clrsecurity_checks_time | time | percentage |
+| netframework.clrsecurity_stack_walk_depth | stack | depth |
+| netframework.clrsecurity_runtime_checks | runtime | checks/s |
+
+### Per exchange workload
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.workload_active_tasks | active | tasks |
+| exchange.workload_completed_tasks | completed | tasks/s |
+| exchange.workload_queued_tasks | queued | tasks/s |
+| exchange.workload_yielded_tasks | yielded | tasks/s |
+| exchange.workload_activity_status | active, paused | status |
+
+### Per ldap process
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
+| exchange.ldap_read_time | read | seconds |
+| exchange.ldap_search_time | search | seconds |
+| exchange.ldap_write_time | write | seconds |
+| exchange.ldap_timeout_errors | timeout | errors/s |
+
+### Per http proxy
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| workload | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| exchange.http_proxy_avg_auth_latency | latency | seconds |
+| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
+| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
+| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
+| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
+| exchange.http_proxy_requests | processed | requests/s |
+
+### Per vm
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_name | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
+| hyperv.vm_memory_physical | assigned_memory | MiB |
+| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
+| hyperv.vm_memory_pressure_current | pressure | percentage |
+| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
+| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
+
+### Per vm device
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_device_bytes | read, written | bytes/s |
+| hyperv.vm_device_operations | read, write | operations/s |
+| hyperv.vm_device_errors | errors | errors/s |
+
+### Per vm interface
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vm_interface | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vm_interface_bytes | received, sent | bytes/s |
+| hyperv.vm_interface_packets | received, sent | packets/s |
+| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
+
+### Per vswitch
+
+TBD
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| vswitch | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| hyperv.vswitch_bytes | received, sent | bytes/s |
+| hyperv.vswitch_packets | received, sent | packets/s |
+| hyperv.vswitch_directed_packets | received, sent | packets/s |
+| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
+| hyperv.vswitch_multicast_packets | received, sent | packets/s |
+| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
+| hyperv.vswitch_packets_flooded | flooded | packets/s |
+| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
+| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
+| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
+| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
+| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
+| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
+| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
+
+
+## Setup
+
+### Prerequisites
+
+#### Install Windows exporter
+
+To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+
+
+
+### Configuration
+
+#### File
+
+The configuration file name for this integration is `go.d/windows.conf`.
+
+
+You can edit the configuration file using the `edit-config` script from the
+Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
+
+```bash
+cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
+sudo ./edit-config go.d/windows.conf
+```
+#### Options
+
+The following options can be defined globally: update_every, autodetection_retry.
+
+
+<details open><summary>Config options</summary>
+
+| Name | Description | Default | Required |
+|:----|:-----------|:-------|:--------:|
+| update_every | Data collection frequency. | 1 | no |
+| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
+| url | Server URL. | | yes |
+| timeout | HTTP request timeout. | 1 | no |
+| username | Username for basic HTTP authentication. | | no |
+| password | Password for basic HTTP authentication. | | no |
+| proxy_url | Proxy URL. | | no |
+| proxy_username | Username for proxy basic HTTP authentication. | | no |
+| proxy_password | Password for proxy basic HTTP authentication. | | no |
+| method | HTTP request method. | GET | no |
+| body | HTTP request body. | | no |
+| headers | HTTP request headers. | | no |
+| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
+| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
+| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
+| tls_cert | Client TLS certificate. | | no |
+| tls_key | Client TLS key. | | no |
+
+</details>
+
+#### Examples
+
+##### Basic
+
+A basic example configuration.
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+##### HTTP authentication
+
+Basic HTTP authentication.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+
+```
+</details>
+
+##### HTTPS with self-signed certificate
+
+Do not validate server certificate chain and hostname.
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+
+```
+</details>
+
+##### Virtual Node
+
+The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+You can create a virtual node for all your Windows machines and control them as separate entities.
+
+To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+```yaml
+# /etc/netdata/vnodes/vnodes.conf
+- hostname: win_server
+ guid: <value>
+```
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+
+```
+</details>
+
+##### Multi-instance
+
+> **Note**: When you define multiple jobs, their names must be unique.
+
+Collecting metrics from multiple remote instances.
+
+
+<details open><summary>Config</summary>
+
+```yaml
+jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+
+```
+</details>
+
+
+
+## Troubleshooting
+
+### Debug Mode
+
+To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
+should give you clues as to why the collector isn't working.
+
+- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
+ your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
+
+ ```bash
+ cd /usr/libexec/netdata/plugins.d/
+ ```
+
+- Switch to the `netdata` user.
+
+ ```bash
+ sudo -u netdata -s
+ ```
+
+- Run the `go.d.plugin` to debug the collector:
+
+ ```bash
+ ./go.d.plugin -d -m windows
+ ```
+
+
diff --git a/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml b/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml
new file mode 100644
index 000000000..87ac4cf63
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/metadata.yaml
@@ -0,0 +1,2172 @@
+plugin_name: go.d.plugin
+modules:
+ - &module
+ meta: &meta
+ id: collector-go.d.plugin-windows
+ plugin_name: go.d.plugin
+ module_name: windows
+ monitored_instance:
+ name: Windows
+ link: https://www.microsoft.com/en-us/windows
+ categories:
+ - data-collection.windows-systems
+ icon_filename: windows.svg
+ keywords:
+ - windows
+ - microsoft
+ most_popular: true
+ info_provided_to_referring_integrations:
+ description: ""
+ related_resources:
+ integrations:
+ list: []
+ overview:
+ data_collection:
+ metrics_description: |
+ This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
+ method_description: |
+ It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows agent running on each host.
+ default_behavior:
+ auto_detection:
+ description: |
+ It detects Windows exporter instances running on localhost (requires using [Netdata MSI installer](https://github.com/netdata/msi-installer#instructions)).
+
+ Using the Netdata MSI installer is recommended for testing purposes only. For production use, you need to install Netdata on a Linux host and configure it to collect metrics remotely.
+ limits:
+ description: ""
+ performance_impact:
+ description: |
+ Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+ additional_permissions:
+ description: ""
+ multi_instance: true
+ supported_platforms:
+ include: []
+ exclude: []
+ setup:
+ prerequisites:
+ list:
+ - title: Install Windows exporter
+ description: |
+ To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
+ configuration:
+ file:
+ name: go.d/windows.conf
+ options:
+ description: |
+ The following options can be defined globally: update_every, autodetection_retry.
+ folding:
+ title: Config options
+ enabled: true
+ list:
+ - name: update_every
+ description: Data collection frequency.
+ default_value: 1
+ required: false
+ - name: autodetection_retry
+ description: Recheck interval in seconds. Zero means no recheck will be scheduled.
+ default_value: 0
+ required: false
+ - name: url
+ description: Server URL.
+ default_value: ""
+ required: true
+ - name: timeout
+ description: HTTP request timeout.
+ default_value: 1
+ required: false
+ - name: username
+ description: Username for basic HTTP authentication.
+ default_value: ""
+ required: false
+ - name: password
+ description: Password for basic HTTP authentication.
+ default_value: ""
+ required: false
+ - name: proxy_url
+ description: Proxy URL.
+ default_value: ""
+ required: false
+ - name: proxy_username
+ description: Username for proxy basic HTTP authentication.
+ default_value: ""
+ required: false
+ - name: proxy_password
+ description: Password for proxy basic HTTP authentication.
+ default_value: ""
+ required: false
+ - name: method
+ description: HTTP request method.
+ default_value: "GET"
+ required: false
+ - name: body
+ description: HTTP request body.
+ default_value: ""
+ required: false
+ - name: headers
+ description: HTTP request headers.
+ default_value: ""
+ required: false
+ - name: not_follow_redirects
+ description: Redirect handling policy. Controls whether the client follows redirects.
+ default_value: no
+ required: false
+ - name: tls_skip_verify
+ description: Server certificate chain and hostname validation policy. Controls whether the client performs this check.
+ default_value: no
+ required: false
+ - name: tls_ca
+ description: Certification authority that the client uses when verifying the server's certificates.
+ default_value: ""
+ required: false
+ - name: tls_cert
+ description: Client TLS certificate.
+ default_value: ""
+ required: false
+ - name: tls_key
+ description: Client TLS key.
+ default_value: ""
+ required: false
+ examples:
+ folding:
+ title: Config
+ enabled: true
+ list:
+ - name: Basic
+ folding:
+ enabled: false
+ description: A basic example configuration.
+ config: |
+ jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ - name: HTTP authentication
+ description: Basic HTTP authentication.
+ config: |
+ jobs:
+ - name: win_server
+ url: http://192.0.2.1:9182/metrics
+ username: username
+ password: password
+ - name: HTTPS with self-signed certificate
+ description: Do not validate server certificate chain and hostname.
+ config: |
+ jobs:
+ - name: win_server
+ url: https://192.0.2.1:9182/metrics
+ tls_skip_verify: yes
+ - name: Virtual Node
+ description: |
+ The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
+ You can create a virtual node for all your Windows machines and control them as separate entities.
+
+ To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
+
+ > **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
+
+ ```yaml
+ # /etc/netdata/vnodes/vnodes.conf
+ - hostname: win_server
+ guid: <value>
+ ```
+ config: |
+ jobs:
+ - name: win_server
+ vnode: win_server
+ url: http://192.0.2.1:9182/metrics
+ - name: Multi-instance
+ description: |
+ > **Note**: When you define multiple jobs, their names must be unique.
+
+ Collecting metrics from multiple remote instances.
+ config: |
+ jobs:
+ - name: win_server1
+ url: http://192.0.2.1:9182/metrics
+
+ - name: win_server2
+ url: http://192.0.2.2:9182/metrics
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: windows_10min_cpu_usage
+ metric: windows.cpu_utilization_total
+ info: average CPU utilization over the last 10 minutes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_ram_in_use
+ metric: windows.memory_utilization
+ info: memory utilization
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_inbound_packets_discarded
+ metric: windows.net_nic_discarded
+ info: number of inbound discarded packets for the network interface in the last 10 minutes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_outbound_packets_discarded
+ metric: windows.net_nic_discarded
+ info: number of outbound discarded packets for the network interface in the last 10 minutes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_inbound_packets_errors
+ metric: windows.net_nic_errors
+ info: number of inbound errors for the network interface in the last 10 minutes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_outbound_packets_errors
+ metric: windows.net_nic_errors
+ info: number of outbound errors for the network interface in the last 10 minutes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ - name: windows_disk_in_use
+ metric: windows.logical_disk_space_usage
+ info: disk space utilization
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: |
+ The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
+
+ Supported collectors:
+
+ - [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
+ - [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
+ - [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
+ - [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
+ - [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
+ - [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
+ - [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
+ - [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
+ - [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
+ - [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
+ - [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
+ - [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
+ - [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
+ - [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
+ - [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
+ - [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
+ - [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrexceptions.md)
+ - [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrinterop.md)
+ - [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrjit.md)
+ - [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrloading.md)
+ - [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrlocksandthreads.md)
+ - [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrmemory.md)
+ - [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework_clrremoting.md)
+ - [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
+ - [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
+ availability: []
+ scopes:
+ - name: global
+ description: These metrics refer to the entire monitored host.
+ labels: []
+ metrics:
+ - name: windows.cpu_utilization_total
+ description: Total CPU Utilization (all cores)
+ unit: percentage
+ chart_type: stacked
+ dimensions:
+ - name: dpc
+ - name: user
+ - name: privileged
+ - name: interrupt
+ - name: windows.memory_utilization
+ description: Memory Utilization
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: available
+ - name: used
+ - name: windows.memory_page_faults
+ description: Memory Page Faults
+ unit: events/s
+ chart_type: line
+ dimensions:
+ - name: page_faults
+ - name: windows.memory_swap_utilization
+ description: Swap Utilization
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: available
+ - name: used
+ - name: windows.memory_swap_operations
+ description: Swap Operations
+ unit: operations/s
+ chart_type: area
+ dimensions:
+ - name: read
+ - name: write
+ - name: windows.memory_swap_pages
+ description: Swap Pages
+ unit: pages/s
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: written
+ - name: windows.memory_cached
+ description: Cached
+ unit: KiB
+ chart_type: area
+ dimensions:
+ - name: cached
+ - name: windows.memory_cache_faults
+ description: Cache Faults
+ unit: events/s
+ chart_type: line
+ dimensions:
+ - name: cache_faults
+ - name: windows.memory_system_pool
+ description: System Memory Pool
+ unit: bytes
+ chart_type: area
+ dimensions:
+ - name: paged
+ - name: non-paged
+ - name: windows.tcp_conns_established
+ description: TCP established connections
+ unit: connections
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_conns_active
+ description: TCP active connections
+ unit: connections/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_conns_passive
+ description: TCP passive connections
+ unit: connections/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_conns_failures
+ description: TCP connection failures
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_conns_resets
+ description: TCP connections resets
+ unit: resets/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_segments_received
+ description: Number of TCP segments received
+ unit: segments/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_segments_sent
+ description: Number of TCP segments sent
+ unit: segments/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.tcp_segments_retransmitted
+ description: Number of TCP segments retransmitted
+ unit: segments/s
+ chart_type: line
+ dimensions:
+ - name: ipv4
+ - name: ipv6
+ - name: windows.os_processes
+ description: Processes
+ unit: number
+ chart_type: line
+ dimensions:
+ - name: processes
+ - name: windows.os_users
+ description: Number of Users
+ unit: users
+ chart_type: line
+ dimensions:
+ - name: users
+ - name: windows.os_visible_memory_usage
+ description: Visible Memory Usage
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: windows.os_paging_files_usage
+ description: Paging Files Usage
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: windows.system_threads
+ description: Threads
+ unit: number
+ chart_type: line
+ dimensions:
+ - name: threads
+ - name: windows.system_uptime
+ description: Uptime
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: windows.logon_type_sessions
+ description: Active User Logon Sessions By Type
+ unit: seconds
+ chart_type: stacked
+ dimensions:
+ - name: system
+ - name: interactive
+ - name: network
+ - name: batch
+ - name: service
+ - name: proxy
+ - name: unlock
+ - name: network_clear_text
+ - name: new_credentials
+ - name: remote_interactive
+ - name: cached_interactive
+ - name: cached_remote_interactive
+ - name: cached_unlock
+ - name: windows.processes_cpu_utilization
+ description: CPU usage (100% = 1 core)
+ unit: percentage
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_handles
+ description: Memory usage
+ unit: handles
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_io_bytes
+ description: Total of IO bytes (read, write, other)
+ unit: bytes/s
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_io_operations
+ description: Total of IO events (read, write, other)
+ unit: operations/s
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_page_faults
+ description: Number of page faults
+ unit: pgfaults/s
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_page_file_bytes
+ description: Bytes used in page file(s)
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_pool_bytes
+ description: Active threads
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: windows.processes_threads
+ description: Number of handles open
+ unit: threads
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per process
+ - name: ad.database_operations
+ description: AD database operations
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: add
+ - name: delete
+ - name: modify
+ - name: recycle
+ - name: ad.directory_operations
+ description: AD directory operations
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: write
+ - name: search
+ - name: ad.name_cache_lookups
+ description: Name cache lookups
+ unit: lookups/s
+ chart_type: line
+ dimensions:
+ - name: lookups
+ - name: ad.name_cache_hits
+ description: Name cache hits
+ unit: hits/s
+ chart_type: line
+ dimensions:
+ - name: hits
+ - name: ad.atq_average_request_latency
+ description: Average request processing time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: ad.atq_outstanding_requests
+ description: Outstanding requests
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: outstanding
+ - name: ad.dra_replication_intersite_compressed_traffic
+ description: DRA replication compressed traffic withing site
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_intrasite_compressed_traffic
+ description: DRA replication compressed traffic between sites
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_sync_objects_remaining
+ description: DRA replication full sync objects remaining
+ unit: objects
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_objects_filtered
+ description: DRA replication objects filtered
+ unit: objects/s
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_properties_updated
+ description: DRA replication properties updated
+ unit: properties/s
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_properties_filtered
+ description: DRA replication properties filtered
+ unit: properties/s
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: ad.dra_replication_pending_syncs
+ description: DRA replication pending syncs
+ unit: syncs
+ chart_type: line
+ dimensions:
+ - name: pending
+ - name: ad.dra_replication_sync_requests
+ description: DRA replication sync requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: ad.ds_threads
+ description: Directory Service threads
+ unit: threads
+ chart_type: line
+ dimensions:
+ - name: in_use
+ - name: ad.ldap_last_bind_time
+ description: LDAP last successful bind time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: last_bind
+ - name: ad.binds
+ description: Successful binds
+ unit: binds/s
+ chart_type: line
+ dimensions:
+ - name: binds
+ - name: ad.ldap_searches
+ description: LDAP client search operations
+ unit: searches/s
+ chart_type: line
+ dimensions:
+ - name: searches
+ - name: adfs.ad_login_connection_failures
+ description: Connection failures
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: connection
+ - name: adfs.certificate_authentications
+ description: User Certificate authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: authentications
+ - name: adfs.db_artifact_failures
+ description: Connection failures to the artifact database
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: connection
+ - name: adfs.db_artifact_query_time_seconds
+ description: Time taken for an artifact database query
+ unit: seconds/s
+ chart_type: line
+ dimensions:
+ - name: query_time
+ - name: adfs.db_config_failures
+ description: Connection failures to the configuration database
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: connection
+ - name: adfs.db_config_query_time_seconds
+ description: Time taken for a configuration database query
+ unit: seconds/s
+ chart_type: line
+ dimensions:
+ - name: query_time
+ - name: adfs.device_authentications
+ description: Device authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: authentications
+ - name: adfs.external_authentications
+ description: Authentications from external MFA providers
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.federated_authentications
+ description: Authentications from Federated Sources
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: authentications
+ - name: adfs.federation_metadata_requests
+ description: Federation Metadata requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: adfs.oauth_authorization_requests
+ description: Incoming requests to the OAuth Authorization endpoint
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: adfs.oauth_client_authentications
+ description: OAuth client authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_client_credentials_requests
+ description: OAuth client credentials requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_client_privkey_jwt_authentications
+ description: OAuth client private key JWT authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_client_secret_basic_authentications
+ description: OAuth client secret basic authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_client_secret_post_authentications
+ description: OAuth client secret post authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_client_windows_authentications
+ description: OAuth client windows integrated authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_logon_certificate_requests
+ description: OAuth logon certificate requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_password_grant_requests
+ description: OAuth password grant requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.oauth_token_requests_success
+ description: Successful RP token requests over OAuth protocol
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: adfs.passive_requests
+ description: Passive requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: passive
+ - name: adfs.passport_authentications
+ description: Microsoft Passport SSO authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: passport
+ - name: adfs.password_change_requests
+ description: Password change requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.samlp_token_requests_success
+ description: Successful RP token requests over SAML-P protocol
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: adfs.sso_authentications
+ description: SSO authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.token_requests
+ description: Token access requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: adfs.userpassword_authentications
+ description: AD U/P authentications
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: failure
+ - name: adfs.windows_integrated_authentications
+ description: Windows integrated authentications using Kerberos or NTLM
+ unit: authentications/s
+ chart_type: line
+ dimensions:
+ - name: authentications
+ - name: adfs.wsfed_token_requests_success
+ description: Successful RP token requests over WS-Fed protocol
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: adfs.wstrust_token_requests_success
+ description: Successful RP token requests over WS-Trust protocol
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: exchange.activesync_ping_cmds_pending
+ description: Ping commands pending in queue
+ unit: commands
+ chart_type: line
+ dimensions:
+ - name: pending
+ - name: exchange.activesync_requests
+ description: HTTP requests received from ASP.NET
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: exchange.activesync_sync_cmds
+ description: Sync commands processed
+ unit: commands/s
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: exchange.autodiscover_requests
+ description: Autodiscover service requests processed
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: exchange.avail_service_requests
+ description: Requests serviced
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: serviced
+ - name: exchange.owa_current_unique_users
+ description: Unique users currently logged on to Outlook Web App
+ unit: users
+ chart_type: line
+ dimensions:
+ - name: logged-in
+ - name: exchange.owa_requests_total
+ description: Requests handled by Outlook Web App
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: handled
+ - name: exchange.rpc_active_user_count
+ description: Active unique users in the last 2 minutes
+ unit: users
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: exchange.rpc_avg_latency
+ description: Average latency
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: latency
+ - name: exchange.rpc_connection_count
+ description: Client connections
+ unit: connections
+ chart_type: line
+ dimensions:
+ - name: connections
+ - name: exchange.rpc_operations
+ description: RPC operations
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: operations
+ - name: exchange.rpc_requests
+ description: Clients requests currently being processed
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: exchange.rpc_user_count
+ description: RPC users
+ unit: users
+ chart_type: line
+ dimensions:
+ - name: users
+ - name: exchange.transport_queues_active_mail_box_delivery
+ description: Active Mailbox Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_external_active_remote_delivery
+ description: External Active Remote Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_external_largest_delivery
+ description: External Largest Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_internal_active_remote_delivery
+ description: Internal Active Remote Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_internal_largest_delivery
+ description: Internal Largest Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_retry_mailbox_delivery
+ description: Internal Active Remote Delivery Queue length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: exchange.transport_queues_poison
+ description: Poison Queue Length
+ unit: messages/s
+ chart_type: line
+ dimensions:
+ - name: low
+ - name: high
+ - name: none
+ - name: normal
+ - name: hyperv.vms_health
+ description: Virtual machines health status
+ unit: vms
+ chart_type: stacked
+ dimensions:
+ - name: ok
+ - name: critical
+ - name: hyperv.root_partition_device_space_pages
+ description: Root partition pages in the device space
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: 4K
+ - name: 2M
+ - name: 1G
+ - name: hyperv.root_partition_gpa_space_pages
+ description: Root partition pages in the GPA space
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: 4K
+ - name: 2M
+ - name: 1G
+ - name: hyperv.root_partition_gpa_space_modifications
+ description: Root partition GPA space modifications
+ unit: modifications/s
+ chart_type: line
+ dimensions:
+ - name: gpa
+ - name: hyperv.root_partition_attached_devices
+ description: Root partition attached devices
+ unit: devices
+ chart_type: line
+ dimensions:
+ - name: attached
+ - name: hyperv.root_partition_deposited_pages
+ description: Root partition deposited pages
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: deposited
+ - name: hyperv.root_partition_skipped_interrupts
+ description: Root partition skipped interrupts
+ unit: interrupts
+ chart_type: line
+ dimensions:
+ - name: skipped
+ - name: hyperv.root_partition_device_dma_errors
+ description: Root partition illegal DMA requests
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: illegal_dma
+ - name: hyperv.root_partition_device_interrupt_errors
+ description: Root partition illegal interrupt requests
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: illegal_interrupt
+ - name: hyperv.root_partition_device_interrupt_throttle_events
+ description: Root partition throttled interrupts
+ unit: events
+ chart_type: line
+ dimensions:
+ - name: throttling
+ - name: hyperv.root_partition_io_tlb_flush
+ description: Root partition flushes of I/O TLBs
+ unit: flushes/s
+ chart_type: line
+ dimensions:
+ - name: flushes
+ - name: hyperv.root_partition_address_space
+ description: Root partition address spaces in the virtual TLB
+ unit: address spaces
+ chart_type: line
+ dimensions:
+ - name: address_spaces
+ - name: hyperv.root_partition_virtual_tlb_flush_entries
+ description: Root partition flushes of the entire virtual TLB
+ unit: flushes/s
+ chart_type: line
+ dimensions:
+ - name: flushes
+ - name: hyperv.root_partition_virtual_tlb_pages
+ description: Root partition pages used by the virtual TLB
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: used
+ - name: cpu core
+ description: TBD
+ labels:
+ - name: core
+ description: TBD
+ metrics:
+ - name: windows.cpu_core_utilization
+ description: Core CPU Utilization
+ unit: percentage
+ chart_type: stacked
+ dimensions:
+ - name: dpc
+ - name: user
+ - name: privileged
+ - name: interrupt
+ - name: windows.cpu_core_interrupts
+ description: Received and Serviced Hardware Interrupts
+ unit: interrupts/s
+ chart_type: line
+ dimensions:
+ - name: interrupts
+ - name: windows.cpu_core_dpcs
+ description: Received and Serviced Deferred Procedure Calls (DPC)
+ unit: dpcs/s
+ chart_type: line
+ dimensions:
+ - name: dpcs
+ - name: windows.cpu_core_cstate
+ description: Core Time Spent in Low-Power Idle State
+ unit: percentage
+ chart_type: stacked
+ dimensions:
+ - name: c1
+ - name: c2
+ - name: c3
+ - name: logical disk
+ description: TBD
+ labels:
+ - name: disk
+ description: TBD
+ metrics:
+ - name: windows.logical_disk_utilization
+ description: Space usage
+ unit: bytes
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: windows.logical_disk_bandwidth
+ description: Bandwidth
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: read
+ - name: write
+ - name: windows.logical_disk_operations
+ description: Operations
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: windows.logical_disk_latency
+ description: Average Read/Write Latency
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: write
+ - name: network device
+ description: TBD
+ labels:
+ - name: nic
+ description: TBD
+ metrics:
+ - name: windows.net_nic_bandwidth
+ description: Bandwidth
+ unit: kilobits/s
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: windows.net_nic_packets
+ description: Packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: windows.net_nic_errors
+ description: Errors
+ unit: errors/s
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: windows.net_nic_discarded
+ description: Discards
+ unit: discards/s
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: thermalzone
+ description: TBD
+ labels:
+ - name: thermalzone
+ description: TBD
+ metrics:
+ - name: windows.thermalzone_temperature
+ description: Thermal zone temperature
+ unit: celsius
+ chart_type: line
+ dimensions:
+ - name: temperature
+ - name: service
+ description: TBD
+ labels:
+ - name: service
+ description: TBD
+ metrics:
+ - name: windows.service_state
+ description: Service state
+ unit: state
+ chart_type: line
+ dimensions:
+ - name: running
+ - name: stopped
+ - name: start_pending
+ - name: stop_pending
+ - name: continue_pending
+ - name: pause_pending
+ - name: paused
+ - name: unknown
+ - name: windows.service_status
+ description: Service status
+ unit: status
+ chart_type: line
+ dimensions:
+ - name: ok
+ - name: error
+ - name: unknown
+ - name: degraded
+ - name: pred_fail
+ - name: starting
+ - name: stopping
+ - name: service
+ - name: stressed
+ - name: nonrecover
+ - name: no_contact
+ - name: lost_comm
+ - name: website
+ description: TBD
+ labels:
+ - name: website
+ description: TBD
+ metrics:
+ - name: iis.website_traffic
+ description: Website traffic
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: iis.website_requests_rate
+ description: Website requests rate
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: iis.website_active_connections_count
+ description: Website active connections
+ unit: connections
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: iis.website_users_count
+ description: Website users with pending requests
+ unit: users
+ chart_type: stacked
+ dimensions:
+ - name: anonymous
+ - name: non_anonymous
+ - name: iis.website_connection_attempts_rate
+ description: Website connections attempts
+ unit: attempts/s
+ chart_type: line
+ dimensions:
+ - name: connection
+ - name: iis.website_isapi_extension_requests_count
+ description: ISAPI extension requests
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: isapi
+ - name: iis.website_isapi_extension_requests_rate
+ description: Website extensions request
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: isapi
+ - name: iis.website_ftp_file_transfer_rate
+ description: Website FTP file transfer rate
+ unit: files/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: iis.website_logon_attempts_rate
+ description: Website logon attempts
+ unit: attempts/s
+ chart_type: line
+ dimensions:
+ - name: logon
+ - name: iis.website_errors_rate
+ description: Website errors
+ unit: errors/s
+ chart_type: stacked
+ dimensions:
+ - name: document_locked
+ - name: document_not_found
+ - name: iis.website_uptime
+ description: Website uptime
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: document_locked
+ - name: document_not_found
+ - name: mssql instance
+ description: TBD
+ labels:
+ - name: mssql_instance
+ description: TBD
+ metrics:
+ - name: mssql.instance_accessmethods_page_splits
+ description: Page splits
+ unit: splits/s
+ chart_type: line
+ dimensions:
+ - name: page
+ - name: mssql.instance_cache_hit_ratio
+ description: Buffer Cache hit ratio
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: hit_ratio
+ - name: mssql.instance_bufman_checkpoint_pages
+ description: Flushed pages
+ unit: pages/s
+ chart_type: line
+ dimensions:
+ - name: flushed
+ - name: mssql.instance_bufman_page_life_expectancy
+ description: Page life expectancy
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: life_expectancy
+ - name: mssql.instance_bufman_iops
+ description: Number of pages input and output
+ unit: iops
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: written
+ - name: mssql.instance_blocked_processes
+ description: Blocked processes
+ unit: processes
+ chart_type: line
+ dimensions:
+ - name: blocked
+ - name: mssql.instance_user_connection
+ description: User connections
+ unit: connections
+ chart_type: line
+ dimensions:
+ - name: user
+ - name: mssql.instance_locks_lock_wait
+ description: Lock requests that required the caller to wait
+ unit: locks/s
+ chart_type: line
+ dimensions:
+ - name: alloc_unit
+ - name: application
+ - name: database
+ - name: extent
+ - name: file
+ - name: hobt
+ - name: key
+ - name: metadata
+ - name: oib
+ - name: object
+ - name: page
+ - name: rid
+ - name: row_group
+ - name: xact
+ - name: mssql.instance_locks_deadlocks
+ description: Lock requests that resulted in deadlock
+ unit: locks/s
+ chart_type: line
+ dimensions:
+ - name: alloc_unit
+ - name: application
+ - name: database
+ - name: extent
+ - name: file
+ - name: hobt
+ - name: key
+ - name: metadata
+ - name: oib
+ - name: object
+ - name: page
+ - name: rid
+ - name: row_group
+ - name: xact
+ - name: mssql.instance_memmgr_connection_memory_bytes
+ description: Amount of dynamic memory to maintain connections
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: memory
+ - name: mssql.instance_memmgr_external_benefit_of_memory
+ description: Performance benefit from adding memory to a specific cache
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: benefit
+ - name: mssql.instance_memmgr_pending_memory_grants
+ description: Process waiting for memory grant
+ unit: processes
+ chart_type: line
+ dimensions:
+ - name: pending
+ - name: mssql.instance_memmgr_server_memory
+ description: Memory committed
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: memory
+ - name: mssql.instance_sql_errors
+ description: Errors
+ unit: errors
+ chart_type: line
+ dimensions:
+ - name: db_offline
+ - name: info
+ - name: kill_connection
+ - name: user
+ - name: mssql.instance_sqlstats_auto_parameterization_attempts
+ description: Failed auto-parameterization attempts
+ unit: attempts/s
+ chart_type: line
+ dimensions:
+ - name: failed
+ - name: mssql.instance_sqlstats_batch_requests
+ description: Total of batches requests
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: batch
+ - name: mssql.instance_sqlstats_safe_auto_parameterization_attempts
+ description: Safe auto-parameterization attempts
+ unit: attempts/s
+ chart_type: line
+ dimensions:
+ - name: safe
+ - name: mssql.instance_sqlstats_sql_compilations
+ description: SQL compilations
+ unit: compilations/s
+ chart_type: line
+ dimensions:
+ - name: compilations
+ - name: mssql.instance_sqlstats_sql_recompilations
+ description: SQL re-compilations
+ unit: recompiles/s
+ chart_type: line
+ dimensions:
+ - name: recompiles
+ - name: database
+ description: TBD
+ labels:
+ - name: mssql_instance
+ description: TBD
+ - name: database
+ description: TBD
+ metrics:
+ - name: mssql.database_active_transactions
+ description: Active transactions per database
+ unit: transactions
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: mssql.database_backup_restore_operations
+ description: Backup IO per database
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: backup
+ - name: mssql.database_data_files_size
+ description: Current database size
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: size
+ - name: mssql.database_log_flushed
+ description: Log flushed
+ unit: bytes/s
+ chart_type: line
+ dimensions:
+ - name: flushed
+ - name: mssql.database_log_flushes
+ description: Log flushes
+ unit: flushes/s
+ chart_type: line
+ dimensions:
+ - name: log
+ - name: mssql.database_transactions
+ description: Transactions
+ unit: transactions/s
+ chart_type: line
+ dimensions:
+ - name: transactions
+ - name: mssql.database_write_transactions
+ description: Write transactions
+ unit: transactions/s
+ chart_type: line
+ dimensions:
+ - name: write
+ - name: certificate template
+ description: TBD
+ labels:
+ - name: cert_template
+ description: TBD
+ metrics:
+ - name: adcs.cert_template_requests
+ description: Certificate requests processed
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: requests
+ - name: adcs.cert_template_failed_requests
+ description: Certificate failed requests processed
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: failed
+ - name: adcs.cert_template_issued_requests
+ description: Certificate issued requests processed
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: issued
+ - name: adcs.cert_template_pending_requests
+ description: Certificate pending requests processed
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: pending
+ - name: adcs.cert_template_request_processing_time
+ description: Certificate last request processing time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: processing_time
+ - name: adcs.cert_template_retrievals
+ description: Total of certificate retrievals
+ unit: retrievals/s
+ chart_type: line
+ dimensions:
+ - name: retrievals
+ - name: adcs.cert_template_retrieval_processing_time
+ description: Certificate last retrieval processing time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: processing_time
+ - name: adcs.cert_template_request_cryptographic_signing_time
+ description: Certificate last signing operation request time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: singing_time
+ - name: adcs.cert_template_request_policy_module_processing
+ description: Certificate last policy module processing request time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: processing_time
+ - name: adcs.cert_template_challenge_responses
+ description: Certificate challenge responses
+ unit: responses/s
+ chart_type: line
+ dimensions:
+ - name: challenge
+ - name: adcs.cert_template_challenge_response_processing_time
+ description: Certificate last challenge response time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: processing_time
+ - name: adcs.cert_template_signed_certificate_timestamp_lists
+ description: Certificate Signed Certificate Timestamp Lists processed
+ unit: lists/s
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: adcs.cert_template_signed_certificate_timestamp_list_processing_time
+ description: Certificate last Signed Certificate Timestamp List process time
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: processing_time
+ - name: process
+ description: TBD
+ labels:
+ - name: process
+ description: TBD
+ metrics:
+ - name: netframework.clrexception_thrown
+ description: Thrown exceptions
+ unit: exceptions/s
+ chart_type: line
+ dimensions:
+ - name: exceptions
+ - name: netframework.clrexception_filters
+ description: Executed exception filters
+ unit: filters/s
+ chart_type: line
+ dimensions:
+ - name: filters
+ - name: netframework.clrexception_finallys
+ description: Executed finally blocks
+ unit: finallys/s
+ chart_type: line
+ dimensions:
+ - name: finallys
+ - name: netframework.clrexception_throw_to_catch_depth
+ description: Traversed stack frames
+ unit: stack_frames/s
+ chart_type: line
+ dimensions:
+ - name: traversed
+ - name: netframework.clrinterop_com_callable_wrappers
+ description: COM callable wrappers (CCW)
+ unit: ccw/s
+ chart_type: line
+ dimensions:
+ - name: com_callable_wrappers
+ - name: netframework.clrinterop_interop_marshallings
+ description: Arguments and return values marshallings
+ unit: marshallings/s
+ chart_type: line
+ dimensions:
+ - name: marshallings
+ - name: netframework.clrinterop_interop_stubs_created
+ description: Created stubs
+ unit: stubs/s
+ chart_type: line
+ dimensions:
+ - name: created
+ - name: netframework.clrjit_methods
+ description: JIT-compiled methods
+ unit: methods/s
+ chart_type: line
+ dimensions:
+ - name: jit-compiled
+ - name: netframework.clrjit_time
+ description: Time spent in JIT compilation
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: netframework.clrjit_standard_failures
+ description: JIT compiler failures
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: failures
+ - name: netframework.clrjit_il_bytes
+ description: Compiled Microsoft intermediate language (MSIL) bytes
+ unit: bytes/s
+ chart_type: line
+ dimensions:
+ - name: compiled_msil
+ - name: netframework.clrloading_loader_heap_size
+ description: Memory committed by class loader
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: committed
+ - name: netframework.clrloading_appdomains_loaded
+ description: Loaded application domains
+ unit: domain/s
+ chart_type: line
+ dimensions:
+ - name: loaded
+ - name: netframework.clrloading_appdomains_unloaded
+ description: Unloaded application domains
+ unit: domain/s
+ chart_type: line
+ dimensions:
+ - name: unloaded
+ - name: netframework.clrloading_assemblies_loaded
+ description: Loaded assemblies
+ unit: assemblies/s
+ chart_type: line
+ dimensions:
+ - name: loaded
+ - name: netframework.clrloading_classes_loaded
+ description: Loaded classes in all assemblies
+ unit: classes/s
+ chart_type: line
+ dimensions:
+ - name: loaded
+ - name: netframework.clrloading_class_load_failures
+ description: Class load failures
+ unit: failures/s
+ chart_type: line
+ dimensions:
+ - name: class_load
+ - name: netframework.clrlocksandthreads_queue_length
+ description: Threads waited to acquire a managed lock
+ unit: threads/s
+ chart_type: line
+ dimensions:
+ - name: threads
+ - name: netframework.clrlocksandthreads_current_logical_threads
+ description: Logical threads
+ unit: threads
+ chart_type: line
+ dimensions:
+ - name: logical
+ - name: netframework.clrlocksandthreads_current_physical_threads
+ description: Physical threads
+ unit: threads
+ chart_type: line
+ dimensions:
+ - name: physical
+ - name: netframework.clrlocksandthreads_recognized_threads
+ description: Threads recognized by the runtime
+ unit: threads/s
+ chart_type: line
+ dimensions:
+ - name: threads
+ - name: netframework.clrlocksandthreads_contentions
+ description: Fails to acquire a managed lock
+ unit: contentions/s
+ chart_type: line
+ dimensions:
+ - name: contentions
+ - name: netframework.clrmemory_allocated_bytes
+ description: Memory allocated on the garbage collection heap
+ unit: bytes/s
+ chart_type: line
+ dimensions:
+ - name: allocated
+ - name: netframework.clrmemory_finalization_survivors
+ description: Objects that survived garbage-collection
+ unit: objects
+ chart_type: line
+ dimensions:
+ - name: survived
+ - name: netframework.clrmemory_heap_size
+ description: Maximum bytes that can be allocated
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: heap
+ - name: netframework.clrmemory_promoted
+ description: Memory promoted to the next generation
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: promoted
+ - name: netframework.clrmemory_number_gc_handles
+ description: Garbage collection handles
+ unit: handles
+ chart_type: line
+ dimensions:
+ - name: used
+ - name: netframework.clrmemory_collections
+ description: Garbage collections
+ unit: gc/s
+ chart_type: line
+ dimensions:
+ - name: gc
+ - name: netframework.clrmemory_induced_gc
+ description: Garbage collections induced
+ unit: gc/s
+ chart_type: line
+ dimensions:
+ - name: gc
+ - name: netframework.clrmemory_number_pinned_objects
+ description: Pinned objects encountered
+ unit: objects
+ chart_type: line
+ dimensions:
+ - name: pinned
+ - name: netframework.clrmemory_number_sink_blocks_in_use
+ description: Synchronization blocks in use
+ unit: blocks
+ chart_type: line
+ dimensions:
+ - name: used
+ - name: netframework.clrmemory_committed
+ description: Virtual memory committed by GC
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: committed
+ - name: netframework.clrmemory_reserved
+ description: Virtual memory reserved by GC
+ unit: bytes
+ chart_type: line
+ dimensions:
+ - name: reserved
+ - name: netframework.clrmemory_gc_time
+ description: Time spent on GC
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: netframework.clrremoting_channels
+ description: Registered channels
+ unit: channels/s
+ chart_type: line
+ dimensions:
+ - name: registered
+ - name: netframework.clrremoting_context_bound_classes_loaded
+ description: Loaded context-bound classes
+ unit: classes
+ chart_type: line
+ dimensions:
+ - name: loaded
+ - name: netframework.clrremoting_context_bound_objects
+ description: Allocated context-bound objects
+ unit: objects/s
+ chart_type: line
+ dimensions:
+ - name: allocated
+ - name: netframework.clrremoting_context_proxies
+ description: Remoting proxy objects
+ unit: objects/s
+ chart_type: line
+ dimensions:
+ - name: objects
+ - name: netframework.clrremoting_contexts
+ description: Total of remoting contexts
+ unit: contexts
+ chart_type: line
+ dimensions:
+ - name: contexts
+ - name: netframework.clrremoting_remote_calls
+ description: Remote Procedure Calls (RPC) invoked
+ unit: calls/s
+ chart_type: line
+ dimensions:
+ - name: rpc
+ - name: netframework.clrsecurity_link_time_checks
+ description: Link-time code access security checks
+ unit: checks/s
+ chart_type: line
+ dimensions:
+ - name: linktime
+ - name: netframework.clrsecurity_checks_time
+ description: Time spent performing runtime code access security checks
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: netframework.clrsecurity_stack_walk_depth
+ description: Depth of the stack
+ unit: depth
+ chart_type: line
+ dimensions:
+ - name: stack
+ - name: netframework.clrsecurity_runtime_checks
+ description: Runtime code access security checks performed
+ unit: checks/s
+ chart_type: line
+ dimensions:
+ - name: runtime
+ - name: exchange workload
+ description: TBD
+ labels:
+ - name: workload
+ description: TBD
+ metrics:
+ - name: exchange.workload_active_tasks
+ description: Workload active tasks
+ unit: tasks
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: exchange.workload_completed_tasks
+ description: Workload completed tasks
+ unit: tasks/s
+ chart_type: line
+ dimensions:
+ - name: completed
+ - name: exchange.workload_queued_tasks
+ description: Workload queued tasks
+ unit: tasks/s
+ chart_type: line
+ dimensions:
+ - name: queued
+ - name: exchange.workload_yielded_tasks
+ description: Workload yielded tasks
+ unit: tasks/s
+ chart_type: line
+ dimensions:
+ - name: yielded
+ - name: exchange.workload_activity_status
+ description: Workload activity status
+ unit: status
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: paused
+ - name: ldap process
+ description: TBD
+ labels:
+ - name: workload
+ description: TBD
+ metrics:
+ - name: exchange.ldap_long_running_ops_per_sec
+ description: Long Running LDAP operations
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: long-running
+ - name: exchange.ldap_read_time
+ description: Time to send an LDAP read request and receive a response
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: exchange.ldap_search_time
+ description: Time to send an LDAP search request and receive a response
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: search
+ - name: exchange.ldap_write_time
+ description: Time to send an LDAP search request and receive a response
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: write
+ - name: exchange.ldap_timeout_errors
+ description: LDAP timeout errors
+ unit: errors/s
+ chart_type: line
+ dimensions:
+ - name: timeout
+ - name: http proxy
+ description: TBD
+ labels:
+ - name: workload
+ description: TBD
+ metrics:
+ - name: exchange.http_proxy_avg_auth_latency
+ description: Average time spent authenticating CAS
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: latency
+ - name: exchange.http_proxy_avg_cas_processing_latency_sec
+ description: Average time spent authenticating CAS
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: latency
+ - name: exchange.http_proxy_mailbox_proxy_failure_rate
+ description: Percentage of failures between this CAS and MBX servers
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: failures
+ - name: exchange.http_proxy_mailbox_server_locator_avg_latency_sec
+ description: Average latency of MailboxServerLocator web service calls
+ unit: seconds
+ chart_type: line
+ dimensions:
+ - name: latency
+ - name: exchange.http_proxy_outstanding_proxy_requests
+ description: Concurrent outstanding proxy requests
+ unit: requests
+ chart_type: line
+ dimensions:
+ - name: outstanding
+ - name: exchange.http_proxy_requests
+ description: Number of proxy requests processed each second
+ unit: requests/s
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: vm
+ description: TBD
+ labels:
+ - name: vm_name
+ description: TBD
+ metrics:
+ - name: hyperv.vm_cpu_usage
+ description: VM CPU usage (100% = 1 core)
+ unit: percentage
+ chart_type: stacked
+ dimensions:
+ - name: gues
+ - name: hypervisor
+ - name: remote
+ - name: hyperv.vm_memory_physical
+ description: VM assigned memory
+ unit: MiB
+ chart_type: line
+ dimensions:
+ - name: assigned_memory
+ - name: hyperv.vm_memory_physical_guest_visible
+ description: VM guest visible memory
+ unit: MiB
+ chart_type: line
+ dimensions:
+ - name: visible_memory
+ - name: hyperv.vm_memory_pressure_current
+ description: VM current pressure
+ unit: percentage
+ chart_type: line
+ dimensions:
+ - name: pressure
+ - name: hyperv.vm_vid_physical_pages_allocated
+ description: VM physical pages allocated
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: allocated
+ - name: hyperv.vm_vid_remote_physical_pages
+ description: VM physical pages not allocated from the preferred NUMA node
+ unit: pages
+ chart_type: line
+ dimensions:
+ - name: remote_physical
+ - name: vm device
+ description: TBD
+ labels:
+ - name: vm_device
+ description: TBD
+ metrics:
+ - name: hyperv.vm_device_bytes
+ description: VM storage device IO
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: read
+ - name: written
+ - name: hyperv.vm_device_operations
+ description: VM storage device IOPS
+ unit: operations/s
+ chart_type: line
+ dimensions:
+ - name: read
+ - name: write
+ - name: hyperv.vm_device_errors
+ description: VM storage device errors
+ unit: errors/s
+ chart_type: line
+ dimensions:
+ - name: errors
+ - name: vm interface
+ description: TBD
+ labels:
+ - name: vm_interface
+ description: TBD
+ metrics:
+ - name: hyperv.vm_interface_bytes
+ description: VM interface traffic
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vm_interface_packets
+ description: VM interface packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vm_interface_packets_dropped
+ description: VM interface packets dropped
+ unit: drops/s
+ chart_type: line
+ dimensions:
+ - name: incoming
+ - name: outgoing
+ - name: vswitch
+ description: TBD
+ labels:
+ - name: vswitch
+ description: TBD
+ metrics:
+ - name: hyperv.vswitch_bytes
+ description: Virtual switch traffic
+ unit: bytes/s
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vswitch_packets
+ description: Virtual switch packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vswitch_directed_packets
+ description: Virtual switch directed packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vswitch_broadcast_packets
+ description: Virtual switch broadcast packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vswitch_multicast_packets
+ description: Virtual switch multicast packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: hyperv.vswitch_dropped_packets
+ description: Virtual switch dropped packets
+ unit: drops/s
+ chart_type: line
+ dimensions:
+ - name: incoming
+ - name: outgoing
+ - name: hyperv.vswitch_extensions_dropped_packets
+ description: Virtual switch extensions dropped packets
+ unit: drops/s
+ chart_type: line
+ dimensions:
+ - name: incoming
+ - name: outgoing
+ - name: hyperv.vswitch_packets_flooded
+ description: Virtual switch flooded packets
+ unit: packets/s
+ chart_type: line
+ dimensions:
+ - name: flooded
+ - name: hyperv.vswitch_learned_mac_addresses
+ description: Virtual switch learned MAC addresses
+ unit: mac addresses/s
+ chart_type: line
+ dimensions:
+ - name: learned
+ - name: hyperv.vswitch_purged_mac_addresses
+ description: Virtual switch purged MAC addresses
+ unit: mac addresses/s
+ chart_type: line
+ dimensions:
+ - name: purged
+ - <<: *module
+ meta:
+ <<: *meta
+ id: collector-go.d.plugin-windows-mssql
+ most_popular: false
+ keywords:
+ - windows
+ - microsoft
+ - mssql
+ - database
+ - db
+ monitored_instance:
+ name: MS SQL Server
+ link: https://www.microsoft.com/en-us/sql-server/
+ icon_filename: mssql.svg
+ categories:
+ - data-collection.windows-systems
+ - <<: *module
+ meta:
+ <<: *meta
+ id: collector-go.d.plugin-windows-hyperv
+ most_popular: false
+ keywords:
+ - windows
+ - microsoft
+ - hyperv
+ - virtualization
+ - vm
+ monitored_instance:
+ name: HyperV
+ link: https://learn.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-technology-overview
+ icon_filename: windows.svg
+ categories:
+ - data-collection.windows-systems
+ - <<: *module
+ meta:
+ <<: *meta
+ id: collector-go.d.plugin-windows-msexchange
+ most_popular: false
+ keywords:
+ - windows
+ - microsoft
+ - mail
+ monitored_instance:
+ name: MS Exchange
+ link: https://www.microsoft.com/en-us/microsoft-365/exchange/email
+ icon_filename: exchange.svg
+ categories:
+ - data-collection.windows-systems
+ - <<: *module
+ meta:
+ <<: *meta
+ id: collector-go.d.plugin-windows-ad
+ most_popular: false
+ keywords:
+ - windows
+ - microsoft
+ - active directory
+ - ad
+ - adcs
+ - adfs
+ monitored_instance:
+ name: Active Directory
+ link: https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview
+ icon_filename: windows.svg
+ categories:
+ - data-collection.windows-systems
+ - <<: *module
+ meta:
+ <<: *meta
+ id: collector-go.d.plugin-windows-dotnet
+ most_popular: false
+ keywords:
+ - windows
+ - microsoft
+ - dotnet
+ monitored_instance:
+ name: NET Framework
+ link: https://dotnet.microsoft.com/en-us/download/dotnet-framework
+ icon_filename: dotnet.svg
+ categories:
+ - data-collection.windows-systems
diff --git a/src/go/collectors/go.d.plugin/modules/windows/testdata/config.json b/src/go/collectors/go.d.plugin/modules/windows/testdata/config.json
new file mode 100644
index 000000000..6f8c1084e
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/testdata/config.json
@@ -0,0 +1,21 @@
+{
+ "update_every": 123,
+ "vnode": "ok",
+ "url": "ok",
+ "body": "ok",
+ "method": "ok",
+ "headers": {
+ "ok": "ok"
+ },
+ "username": "ok",
+ "password": "ok",
+ "proxy_url": "ok",
+ "proxy_username": "ok",
+ "proxy_password": "ok",
+ "timeout": 123.123,
+ "not_follow_redirects": true,
+ "tls_ca": "ok",
+ "tls_cert": "ok",
+ "tls_key": "ok",
+ "tls_skip_verify": true
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/testdata/config.yaml b/src/go/collectors/go.d.plugin/modules/windows/testdata/config.yaml
new file mode 100644
index 000000000..4bbb7474d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/testdata/config.yaml
@@ -0,0 +1,18 @@
+update_every: 123
+vnode: "ok"
+url: "ok"
+body: "ok"
+method: "ok"
+headers:
+ ok: "ok"
+username: "ok"
+password: "ok"
+proxy_url: "ok"
+proxy_username: "ok"
+proxy_password: "ok"
+timeout: 123.123
+not_follow_redirects: yes
+tls_ca: "ok"
+tls_cert: "ok"
+tls_key: "ok"
+tls_skip_verify: yes
diff --git a/src/go/collectors/go.d.plugin/modules/windows/testdata/v0.20.0/metrics.txt b/src/go/collectors/go.d.plugin/modules/windows/testdata/v0.20.0/metrics.txt
new file mode 100644
index 000000000..02b68c3f8
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/testdata/v0.20.0/metrics.txt
@@ -0,0 +1,3129 @@
+# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
+# TYPE go_gc_duration_seconds summary
+go_gc_duration_seconds{quantile="0"} 0
+go_gc_duration_seconds{quantile="0.25"} 0
+go_gc_duration_seconds{quantile="0.5"} 0
+go_gc_duration_seconds{quantile="0.75"} 0
+go_gc_duration_seconds{quantile="1"} 0.0023911
+go_gc_duration_seconds_sum 0.0044814
+go_gc_duration_seconds_count 23
+# HELP go_goroutines Number of goroutines that currently exist.
+# TYPE go_goroutines gauge
+go_goroutines 10
+# HELP go_info Information about the Go environment.
+# TYPE go_info gauge
+go_info{version="go1.19.1"} 1
+# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
+# TYPE go_memstats_alloc_bytes gauge
+go_memstats_alloc_bytes 8.035808e+06
+# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
+# TYPE go_memstats_alloc_bytes_total counter
+go_memstats_alloc_bytes_total 5.9966872e+07
+# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
+# TYPE go_memstats_buck_hash_sys_bytes gauge
+go_memstats_buck_hash_sys_bytes 1.462168e+06
+# HELP go_memstats_frees_total Total number of frees.
+# TYPE go_memstats_frees_total counter
+go_memstats_frees_total 111234
+# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
+# TYPE go_memstats_gc_sys_bytes gauge
+go_memstats_gc_sys_bytes 7.78308e+06
+# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
+# TYPE go_memstats_heap_alloc_bytes gauge
+go_memstats_heap_alloc_bytes 8.035808e+06
+# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.
+# TYPE go_memstats_heap_idle_bytes gauge
+go_memstats_heap_idle_bytes 5.767168e+06
+# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.
+# TYPE go_memstats_heap_inuse_bytes gauge
+go_memstats_heap_inuse_bytes 1.0551296e+07
+# HELP go_memstats_heap_objects Number of allocated objects.
+# TYPE go_memstats_heap_objects gauge
+go_memstats_heap_objects 34382
+# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.
+# TYPE go_memstats_heap_released_bytes gauge
+go_memstats_heap_released_bytes 5.496832e+06
+# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.
+# TYPE go_memstats_heap_sys_bytes gauge
+go_memstats_heap_sys_bytes 1.6318464e+07
+# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.
+# TYPE go_memstats_last_gc_time_seconds gauge
+go_memstats_last_gc_time_seconds 1.6675087416268353e+09
+# HELP go_memstats_lookups_total Total number of pointer lookups.
+# TYPE go_memstats_lookups_total counter
+go_memstats_lookups_total 0
+# HELP go_memstats_mallocs_total Total number of mallocs.
+# TYPE go_memstats_mallocs_total counter
+go_memstats_mallocs_total 145616
+# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures.
+# TYPE go_memstats_mcache_inuse_bytes gauge
+go_memstats_mcache_inuse_bytes 4672
+# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system.
+# TYPE go_memstats_mcache_sys_bytes gauge
+go_memstats_mcache_sys_bytes 16352
+# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures.
+# TYPE go_memstats_mspan_inuse_bytes gauge
+go_memstats_mspan_inuse_bytes 102272
+# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system.
+# TYPE go_memstats_mspan_sys_bytes gauge
+go_memstats_mspan_sys_bytes 114240
+# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place.
+# TYPE go_memstats_next_gc_bytes gauge
+go_memstats_next_gc_bytes 1.0613856e+07
+# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations.
+# TYPE go_memstats_other_sys_bytes gauge
+go_memstats_other_sys_bytes 908248
+# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator.
+# TYPE go_memstats_stack_inuse_bytes gauge
+go_memstats_stack_inuse_bytes 458752
+# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator.
+# TYPE go_memstats_stack_sys_bytes gauge
+go_memstats_stack_sys_bytes 458752
+# HELP go_memstats_sys_bytes Number of bytes obtained from system.
+# TYPE go_memstats_sys_bytes gauge
+go_memstats_sys_bytes 2.7061304e+07
+# HELP go_threads Number of OS threads created.
+# TYPE go_threads gauge
+go_threads 10
+# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
+# TYPE process_cpu_seconds_total counter
+process_cpu_seconds_total 0.609375
+# HELP process_max_fds Maximum number of open file descriptors.
+# TYPE process_max_fds gauge
+process_max_fds 1.6777216e+07
+# HELP process_open_fds Number of open file descriptors.
+# TYPE process_open_fds gauge
+process_open_fds 352
+# HELP process_resident_memory_bytes Resident memory size in bytes.
+# TYPE process_resident_memory_bytes gauge
+process_resident_memory_bytes 3.229696e+07
+# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
+# TYPE process_start_time_seconds gauge
+process_start_time_seconds 1.667508736e+09
+# HELP process_virtual_memory_bytes Virtual memory size in bytes.
+# TYPE process_virtual_memory_bytes gauge
+process_virtual_memory_bytes 3.5569664e+07
+# HELP windows_adcs_challenge_response_processing_time_seconds Last time elapsed for challenge response
+# TYPE windows_adcs_challenge_response_processing_time_seconds gauge
+windows_adcs_challenge_response_processing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_challenge_response_processing_time_seconds{cert_template="DomainController"} 0
+# HELP windows_adcs_challenge_responses_total Total certificate challenge responses processed
+# TYPE windows_adcs_challenge_responses_total counter
+windows_adcs_challenge_responses_total{cert_template="Administrator"} 0
+windows_adcs_challenge_responses_total{cert_template="DomainController"} 0
+# HELP windows_adcs_failed_requests_total Total failed certificate requests processed
+# TYPE windows_adcs_failed_requests_total counter
+windows_adcs_failed_requests_total{cert_template="Administrator"} 0
+windows_adcs_failed_requests_total{cert_template="DomainController"} 0
+# HELP windows_adcs_issued_requests_total Total issued certificate requests processed
+# TYPE windows_adcs_issued_requests_total counter
+windows_adcs_issued_requests_total{cert_template="Administrator"} 0
+windows_adcs_issued_requests_total{cert_template="DomainController"} 1
+# HELP windows_adcs_pending_requests_total Total pending certificate requests processed
+# TYPE windows_adcs_pending_requests_total counter
+windows_adcs_pending_requests_total{cert_template="Administrator"} 0
+windows_adcs_pending_requests_total{cert_template="DomainController"} 0
+# HELP windows_adcs_request_cryptographic_signing_time_seconds Last time elapsed for signing operation request
+# TYPE windows_adcs_request_cryptographic_signing_time_seconds gauge
+windows_adcs_request_cryptographic_signing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_request_cryptographic_signing_time_seconds{cert_template="DomainController"} 0
+# HELP windows_adcs_request_policy_module_processing_time_seconds Last time elapsed for policy module processing request
+# TYPE windows_adcs_request_policy_module_processing_time_seconds gauge
+windows_adcs_request_policy_module_processing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_request_policy_module_processing_time_seconds{cert_template="DomainController"} 0.016
+# HELP windows_adcs_request_processing_time_seconds Last time elapsed for certificate requests
+# TYPE windows_adcs_request_processing_time_seconds gauge
+windows_adcs_request_processing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_request_processing_time_seconds{cert_template="DomainController"} 0.063
+# HELP windows_adcs_requests_total Total certificate requests processed
+# TYPE windows_adcs_requests_total counter
+windows_adcs_requests_total{cert_template="Administrator"} 0
+windows_adcs_requests_total{cert_template="DomainController"} 1
+# HELP windows_adcs_retrievals_processing_time_seconds Last time elapsed for certificate retrieval request
+# TYPE windows_adcs_retrievals_processing_time_seconds gauge
+windows_adcs_retrievals_processing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_retrievals_processing_time_seconds{cert_template="DomainController"} 0
+# HELP windows_adcs_retrievals_total Total certificate retrieval requests processed
+# TYPE windows_adcs_retrievals_total counter
+windows_adcs_retrievals_total{cert_template="Administrator"} 0
+windows_adcs_retrievals_total{cert_template="DomainController"} 0
+# HELP windows_adcs_signed_certificate_timestamp_list_processing_time_seconds Last time elapsed for Signed Certificate Timestamp List
+# TYPE windows_adcs_signed_certificate_timestamp_list_processing_time_seconds gauge
+windows_adcs_signed_certificate_timestamp_list_processing_time_seconds{cert_template="Administrator"} 0
+windows_adcs_signed_certificate_timestamp_list_processing_time_seconds{cert_template="DomainController"} 0
+# HELP windows_adcs_signed_certificate_timestamp_lists_total Total Signed Certificate Timestamp Lists processed
+# TYPE windows_adcs_signed_certificate_timestamp_lists_total counter
+windows_adcs_signed_certificate_timestamp_lists_total{cert_template="Administrator"} 0
+windows_adcs_signed_certificate_timestamp_lists_total{cert_template="DomainController"} 0
+# HELP windows_adfs_ad_login_connection_failures_total Total number of connection failures to an Active Directory domain controller
+# TYPE windows_adfs_ad_login_connection_failures_total counter
+windows_adfs_ad_login_connection_failures_total 0
+# HELP windows_adfs_certificate_authentications_total Total number of User Certificate authentications
+# TYPE windows_adfs_certificate_authentications_total counter
+windows_adfs_certificate_authentications_total 0
+# HELP windows_adfs_db_artifact_failure_total Total number of failures connecting to the artifact database
+# TYPE windows_adfs_db_artifact_failure_total counter
+windows_adfs_db_artifact_failure_total 0
+# HELP windows_adfs_db_artifact_query_time_seconds_total Accumulator of time taken for an artifact database query
+# TYPE windows_adfs_db_artifact_query_time_seconds_total counter
+windows_adfs_db_artifact_query_time_seconds_total 0
+# HELP windows_adfs_db_config_failure_total Total number of failures connecting to the configuration database
+# TYPE windows_adfs_db_config_failure_total counter
+windows_adfs_db_config_failure_total 0
+# HELP windows_adfs_db_config_query_time_seconds_total Accumulator of time taken for a configuration database query
+# TYPE windows_adfs_db_config_query_time_seconds_total counter
+windows_adfs_db_config_query_time_seconds_total 0.10111504
+# HELP windows_adfs_device_authentications_total Total number of Device authentications
+# TYPE windows_adfs_device_authentications_total counter
+windows_adfs_device_authentications_total 0
+# HELP windows_adfs_external_authentications_failure_total Total number of failed authentications from external MFA providers
+# TYPE windows_adfs_external_authentications_failure_total counter
+windows_adfs_external_authentications_failure_total 0
+# HELP windows_adfs_external_authentications_success_total Total number of successful authentications from external MFA providers
+# TYPE windows_adfs_external_authentications_success_total counter
+windows_adfs_external_authentications_success_total 0
+# HELP windows_adfs_extranet_account_lockouts_total Total number of Extranet Account Lockouts
+# TYPE windows_adfs_extranet_account_lockouts_total counter
+windows_adfs_extranet_account_lockouts_total 0
+# HELP windows_adfs_federated_authentications_total Total number of authentications from a federated source
+# TYPE windows_adfs_federated_authentications_total counter
+windows_adfs_federated_authentications_total 0
+# HELP windows_adfs_federation_metadata_requests_total Total number of Federation Metadata requests
+# TYPE windows_adfs_federation_metadata_requests_total counter
+windows_adfs_federation_metadata_requests_total 1
+# HELP windows_adfs_oauth_authorization_requests_total Total number of incoming requests to the OAuth Authorization endpoint
+# TYPE windows_adfs_oauth_authorization_requests_total counter
+windows_adfs_oauth_authorization_requests_total 0
+# HELP windows_adfs_oauth_client_authentication_failure_total Total number of failed OAuth client Authentications
+# TYPE windows_adfs_oauth_client_authentication_failure_total counter
+windows_adfs_oauth_client_authentication_failure_total 0
+# HELP windows_adfs_oauth_client_authentication_success_total Total number of successful OAuth client Authentications
+# TYPE windows_adfs_oauth_client_authentication_success_total counter
+windows_adfs_oauth_client_authentication_success_total 0
+# HELP windows_adfs_oauth_client_credentials_failure_total Total number of failed OAuth Client Credentials Requests
+# TYPE windows_adfs_oauth_client_credentials_failure_total counter
+windows_adfs_oauth_client_credentials_failure_total 0
+# HELP windows_adfs_oauth_client_credentials_success_total Total number of successful RP tokens issued for OAuth Client Credentials Requests
+# TYPE windows_adfs_oauth_client_credentials_success_total counter
+windows_adfs_oauth_client_credentials_success_total 0
+# HELP windows_adfs_oauth_client_privkey_jtw_authentication_failure_total Total number of failed OAuth Client Private Key Jwt Authentications
+# TYPE windows_adfs_oauth_client_privkey_jtw_authentication_failure_total counter
+windows_adfs_oauth_client_privkey_jtw_authentication_failure_total 0
+# HELP windows_adfs_oauth_client_privkey_jwt_authentications_success_total Total number of successful OAuth Client Private Key Jwt Authentications
+# TYPE windows_adfs_oauth_client_privkey_jwt_authentications_success_total counter
+windows_adfs_oauth_client_privkey_jwt_authentications_success_total 0
+# HELP windows_adfs_oauth_client_secret_basic_authentications_failure_total Total number of failed OAuth Client Secret Basic Authentications
+# TYPE windows_adfs_oauth_client_secret_basic_authentications_failure_total counter
+windows_adfs_oauth_client_secret_basic_authentications_failure_total 0
+# HELP windows_adfs_oauth_client_secret_basic_authentications_success_total Total number of successful OAuth Client Secret Basic Authentications
+# TYPE windows_adfs_oauth_client_secret_basic_authentications_success_total counter
+windows_adfs_oauth_client_secret_basic_authentications_success_total 0
+# HELP windows_adfs_oauth_client_secret_post_authentications_failure_total Total number of failed OAuth Client Secret Post Authentications
+# TYPE windows_adfs_oauth_client_secret_post_authentications_failure_total counter
+windows_adfs_oauth_client_secret_post_authentications_failure_total 0
+# HELP windows_adfs_oauth_client_secret_post_authentications_success_total Total number of successful OAuth Client Secret Post Authentications
+# TYPE windows_adfs_oauth_client_secret_post_authentications_success_total counter
+windows_adfs_oauth_client_secret_post_authentications_success_total 0
+# HELP windows_adfs_oauth_client_windows_authentications_failure_total Total number of failed OAuth Client Windows Integrated Authentications
+# TYPE windows_adfs_oauth_client_windows_authentications_failure_total counter
+windows_adfs_oauth_client_windows_authentications_failure_total 0
+# HELP windows_adfs_oauth_client_windows_authentications_success_total Total number of successful OAuth Client Windows Integrated Authentications
+# TYPE windows_adfs_oauth_client_windows_authentications_success_total counter
+windows_adfs_oauth_client_windows_authentications_success_total 0
+# HELP windows_adfs_oauth_logon_certificate_requests_failure_total Total number of failed OAuth Logon Certificate Requests
+# TYPE windows_adfs_oauth_logon_certificate_requests_failure_total counter
+windows_adfs_oauth_logon_certificate_requests_failure_total 0
+# HELP windows_adfs_oauth_logon_certificate_token_requests_success_total Total number of successful RP tokens issued for OAuth Logon Certificate Requests
+# TYPE windows_adfs_oauth_logon_certificate_token_requests_success_total counter
+windows_adfs_oauth_logon_certificate_token_requests_success_total 0
+# HELP windows_adfs_oauth_password_grant_requests_failure_total Total number of failed OAuth Password Grant Requests
+# TYPE windows_adfs_oauth_password_grant_requests_failure_total counter
+windows_adfs_oauth_password_grant_requests_failure_total 0
+# HELP windows_adfs_oauth_password_grant_requests_success_total Total number of successful OAuth Password Grant Requests
+# TYPE windows_adfs_oauth_password_grant_requests_success_total counter
+windows_adfs_oauth_password_grant_requests_success_total 0
+# HELP windows_adfs_oauth_token_requests_success_total Total number of successful RP tokens issued over OAuth protocol
+# TYPE windows_adfs_oauth_token_requests_success_total counter
+windows_adfs_oauth_token_requests_success_total 0
+# HELP windows_adfs_passive_requests_total Total number of passive (browser-based) requests
+# TYPE windows_adfs_passive_requests_total counter
+windows_adfs_passive_requests_total 0
+# HELP windows_adfs_passport_authentications_total Total number of Microsoft Passport SSO authentications
+# TYPE windows_adfs_passport_authentications_total counter
+windows_adfs_passport_authentications_total 0
+# HELP windows_adfs_password_change_failed_total Total number of failed password changes
+# TYPE windows_adfs_password_change_failed_total counter
+windows_adfs_password_change_failed_total 0
+# HELP windows_adfs_password_change_succeeded_total Total number of successful password changes
+# TYPE windows_adfs_password_change_succeeded_total counter
+windows_adfs_password_change_succeeded_total 0
+# HELP windows_adfs_samlp_token_requests_success_total Total number of successful RP tokens issued over SAML-P protocol
+# TYPE windows_adfs_samlp_token_requests_success_total counter
+windows_adfs_samlp_token_requests_success_total 0
+# HELP windows_adfs_sso_authentications_failure_total Total number of failed SSO authentications
+# TYPE windows_adfs_sso_authentications_failure_total counter
+windows_adfs_sso_authentications_failure_total 0
+# HELP windows_adfs_sso_authentications_success_total Total number of successful SSO authentications
+# TYPE windows_adfs_sso_authentications_success_total counter
+windows_adfs_sso_authentications_success_total 0
+# HELP windows_adfs_token_requests_total Total number of token requests
+# TYPE windows_adfs_token_requests_total counter
+windows_adfs_token_requests_total 0
+# HELP windows_adfs_userpassword_authentications_failure_total Total number of failed AD U/P authentications
+# TYPE windows_adfs_userpassword_authentications_failure_total counter
+windows_adfs_userpassword_authentications_failure_total 0
+# HELP windows_adfs_userpassword_authentications_success_total Total number of successful AD U/P authentications
+# TYPE windows_adfs_userpassword_authentications_success_total counter
+windows_adfs_userpassword_authentications_success_total 0
+# HELP windows_adfs_windows_integrated_authentications_total Total number of Windows integrated authentications (Kerberos/NTLM)
+# TYPE windows_adfs_windows_integrated_authentications_total counter
+windows_adfs_windows_integrated_authentications_total 0
+# HELP windows_adfs_wsfed_token_requests_success_total Total number of successful RP tokens issued over WS-Fed protocol
+# TYPE windows_adfs_wsfed_token_requests_success_total counter
+windows_adfs_wsfed_token_requests_success_total 0
+# HELP windows_adfs_wstrust_token_requests_success_total Total number of successful RP tokens issued over WS-Trust protocol
+# TYPE windows_adfs_wstrust_token_requests_success_total counter
+windows_adfs_wstrust_token_requests_success_total 0
+# HELP windows_ad_atq_average_request_latency
+# TYPE windows_ad_atq_average_request_latency gauge
+windows_ad_atq_average_request_latency 0
+# HELP windows_ad_atq_outstanding_requests
+# TYPE windows_ad_atq_outstanding_requests gauge
+windows_ad_atq_outstanding_requests 0
+# HELP windows_ad_database_operations_total
+# TYPE windows_ad_database_operations_total counter
+windows_ad_database_operations_total{operation="add"} 1
+windows_ad_database_operations_total{operation="delete"} 0
+windows_ad_database_operations_total{operation="modify"} 30
+windows_ad_database_operations_total{operation="recycle"} 0
+# HELP windows_ad_directory_operations_total
+# TYPE windows_ad_directory_operations_total counter
+windows_ad_directory_operations_total{operation="read",origin="directory_service_api"} 0
+windows_ad_directory_operations_total{operation="read",origin="knowledge_consistency_checker"} 60
+windows_ad_directory_operations_total{operation="read",origin="local_security_authority"} 20
+windows_ad_directory_operations_total{operation="read",origin="name_service_provider_interface"} 0
+windows_ad_directory_operations_total{operation="read",origin="other"} 50
+windows_ad_directory_operations_total{operation="read",origin="replication_agent"} 0
+windows_ad_directory_operations_total{operation="read",origin="security_account_manager"} 596
+windows_ad_directory_operations_total{operation="search",origin="directory_service_api"} 101
+windows_ad_directory_operations_total{operation="search",origin="knowledge_consistency_checker"} 21
+windows_ad_directory_operations_total{operation="search",origin="ldap"} 606
+windows_ad_directory_operations_total{operation="search",origin="local_security_authority"} 9
+windows_ad_directory_operations_total{operation="search",origin="name_service_provider_interface"} 0
+windows_ad_directory_operations_total{operation="search",origin="other"} 56
+windows_ad_directory_operations_total{operation="search",origin="replication_agent"} 0
+windows_ad_directory_operations_total{operation="search",origin="security_account_manager"} 38
+windows_ad_directory_operations_total{operation="write",origin="directory_service_api"} 3
+windows_ad_directory_operations_total{operation="write",origin="knowledge_consistency_checker"} 0
+windows_ad_directory_operations_total{operation="write",origin="ldap"} 1
+windows_ad_directory_operations_total{operation="write",origin="local_security_authority"} 0
+windows_ad_directory_operations_total{operation="write",origin="name_service_provider_interface"} 0
+windows_ad_directory_operations_total{operation="write",origin="other"} 1
+windows_ad_directory_operations_total{operation="write",origin="replication_agent"} 0
+windows_ad_directory_operations_total{operation="write",origin="security_account_manager"} 26
+# HELP windows_ad_name_cache_lookups_total
+# TYPE windows_ad_name_cache_lookups_total counter
+windows_ad_name_cache_lookups_total 53046
+# HELP windows_ad_name_cache_hits_total
+# TYPE windows_ad_name_cache_hits_total counter
+windows_ad_name_cache_hits_total 41161
+# HELP windows_ad_replication_inbound_objects_filtered_total
+# TYPE windows_ad_replication_inbound_objects_filtered_total counter
+windows_ad_replication_inbound_objects_filtered_total 0
+# HELP windows_ad_replication_inbound_properties_filtered_total
+# TYPE windows_ad_replication_inbound_properties_filtered_total counter
+windows_ad_replication_inbound_properties_filtered_total 0
+# HELP windows_ad_replication_inbound_properties_updated_total
+# TYPE windows_ad_replication_inbound_properties_updated_total counter
+windows_ad_replication_inbound_properties_updated_total 0
+# HELP windows_ad_replication_inbound_objects_updated_total
+# TYPE windows_ad_replication_inbound_objects_updated_total counter
+windows_ad_replication_inbound_objects_updated_total 0
+# HELP windows_ad_replication_inbound_sync_objects_remaining
+# TYPE windows_ad_replication_inbound_sync_objects_remaining gauge
+windows_ad_replication_inbound_sync_objects_remaining 0
+# HELP windows_ad_replication_data_intersite_bytes_total
+# TYPE windows_ad_replication_data_intersite_bytes_total counter
+windows_ad_replication_data_intersite_bytes_total{direction="inbound"} 0
+windows_ad_replication_data_intersite_bytes_total{direction="outbound"} 0
+# HELP windows_ad_replication_data_intrasite_bytes_total
+# TYPE windows_ad_replication_data_intrasite_bytes_total counter
+windows_ad_replication_data_intrasite_bytes_total{direction="inbound"} 0
+windows_ad_replication_data_intrasite_bytes_total{direction="outbound"} 0
+# HELP windows_ad_replication_pending_synchronizations
+# TYPE windows_ad_replication_pending_synchronizations gauge
+windows_ad_replication_pending_synchronizations 0
+# HELP windows_ad_replication_sync_requests_total
+# TYPE windows_ad_replication_sync_requests_total counter
+windows_ad_replication_sync_requests_total 0
+# HELP windows_ad_directory_service_threads
+# TYPE windows_ad_directory_service_threads gauge
+windows_ad_directory_service_threads 0
+# HELP windows_ad_ldap_last_bind_time_seconds
+# TYPE windows_ad_ldap_last_bind_time_seconds gauge
+windows_ad_ldap_last_bind_time_seconds 0
+# HELP windows_ad_binds_total
+# TYPE windows_ad_binds_total counter
+windows_ad_binds_total{bind_method="ldap"} 184
+# HELP windows_ad_ldap_searches_total
+# TYPE windows_ad_ldap_searches_total counter
+windows_ad_ldap_searches_total 1382
+# HELP windows_cpu_clock_interrupts_total Total number of received and serviced clock tick interrupts
+# TYPE windows_cpu_clock_interrupts_total counter
+windows_cpu_clock_interrupts_total{core="0,0"} 9.1949524e+07
+windows_cpu_clock_interrupts_total{core="0,1"} 1.0416934e+07
+windows_cpu_clock_interrupts_total{core="0,2"} 1.0417092e+07
+windows_cpu_clock_interrupts_total{core="0,3"} 1.0416548e+07
+# HELP windows_cpu_core_frequency_mhz Core frequency in megahertz
+# TYPE windows_cpu_core_frequency_mhz gauge
+windows_cpu_core_frequency_mhz{core="0,0"} 3187
+windows_cpu_core_frequency_mhz{core="0,1"} 3187
+windows_cpu_core_frequency_mhz{core="0,2"} 3187
+windows_cpu_core_frequency_mhz{core="0,3"} 3187
+# HELP windows_cpu_cstate_seconds_total Time spent in low-power idle state
+# TYPE windows_cpu_cstate_seconds_total counter
+windows_cpu_cstate_seconds_total{core="0,0",state="c1"} 160233.4270483
+windows_cpu_cstate_seconds_total{core="0,0",state="c2"} 0
+windows_cpu_cstate_seconds_total{core="0,0",state="c3"} 0
+windows_cpu_cstate_seconds_total{core="0,1",state="c1"} 159528.0543212
+windows_cpu_cstate_seconds_total{core="0,1",state="c2"} 0
+windows_cpu_cstate_seconds_total{core="0,1",state="c3"} 0
+windows_cpu_cstate_seconds_total{core="0,2",state="c1"} 159891.7232105
+windows_cpu_cstate_seconds_total{core="0,2",state="c2"} 0
+windows_cpu_cstate_seconds_total{core="0,2",state="c3"} 0
+windows_cpu_cstate_seconds_total{core="0,3",state="c1"} 159544.11780809998
+windows_cpu_cstate_seconds_total{core="0,3",state="c2"} 0
+windows_cpu_cstate_seconds_total{core="0,3",state="c3"} 0
+# HELP windows_cpu_dpcs_total Total number of received and serviced deferred procedure calls (DPCs)
+# TYPE windows_cpu_dpcs_total counter
+windows_cpu_dpcs_total{core="0,0"} 4.8719e+06
+windows_cpu_dpcs_total{core="0,1"} 1.650552e+06
+windows_cpu_dpcs_total{core="0,2"} 2.236469e+06
+windows_cpu_dpcs_total{core="0,3"} 1.185046e+06
+# HELP windows_cpu_idle_break_events_total Total number of time processor was woken from idle
+# TYPE windows_cpu_idle_break_events_total counter
+windows_cpu_idle_break_events_total{core="0,0"} 1.40806638e+08
+windows_cpu_idle_break_events_total{core="0,1"} 7.069832e+07
+windows_cpu_idle_break_events_total{core="0,2"} 6.0430118e+07
+windows_cpu_idle_break_events_total{core="0,3"} 5.5224469e+07
+# HELP windows_cpu_interrupts_total Total number of received and serviced hardware interrupts
+# TYPE windows_cpu_interrupts_total counter
+windows_cpu_interrupts_total{core="0,0"} 1.55194331e+08
+windows_cpu_interrupts_total{core="0,1"} 7.9325847e+07
+windows_cpu_interrupts_total{core="0,2"} 6.7305419e+07
+windows_cpu_interrupts_total{core="0,3"} 6.0766938e+07
+# HELP windows_cpu_parking_status Parking Status represents whether a processor is parked or not
+# TYPE windows_cpu_parking_status gauge
+windows_cpu_parking_status{core="0,0"} 0
+windows_cpu_parking_status{core="0,1"} 0
+windows_cpu_parking_status{core="0,2"} 0
+windows_cpu_parking_status{core="0,3"} 0
+# HELP windows_cpu_processor_performance Processor Performance is the average performance of the processor while it is executing instructions, as a percentage of the nominal performance of the processor. On some processors, Processor Performance may exceed 100%
+# TYPE windows_cpu_processor_performance gauge
+windows_cpu_processor_performance{core="0,0"} 2.79873813368e+11
+windows_cpu_processor_performance{core="0,1"} 3.239596095e+11
+windows_cpu_processor_performance{core="0,2"} 3.01145132737e+11
+windows_cpu_processor_performance{core="0,3"} 3.22955641675e+11
+# HELP windows_cpu_time_total Time that processor spent in different modes (dpc, idle, interrupt, privileged, user)
+# TYPE windows_cpu_time_total counter
+windows_cpu_time_total{core="0,0",mode="dpc"} 67.109375
+windows_cpu_time_total{core="0,0",mode="idle"} 162455.59375
+windows_cpu_time_total{core="0,0",mode="interrupt"} 77.28125
+windows_cpu_time_total{core="0,0",mode="privileged"} 1182.109375
+windows_cpu_time_total{core="0,0",mode="user"} 1073.671875
+windows_cpu_time_total{core="0,1",mode="dpc"} 11.09375
+windows_cpu_time_total{core="0,1",mode="idle"} 159478.125
+windows_cpu_time_total{core="0,1",mode="interrupt"} 58.09375
+windows_cpu_time_total{core="0,1",mode="privileged"} 1801.234375
+windows_cpu_time_total{core="0,1",mode="user"} 3432
+windows_cpu_time_total{core="0,2",mode="dpc"} 16.0625
+windows_cpu_time_total{core="0,2",mode="idle"} 159848.4375
+windows_cpu_time_total{core="0,2",mode="interrupt"} 53.515625
+windows_cpu_time_total{core="0,2",mode="privileged"} 1812.546875
+windows_cpu_time_total{core="0,2",mode="user"} 3050.25
+windows_cpu_time_total{core="0,3",mode="dpc"} 8.140625
+windows_cpu_time_total{core="0,3",mode="idle"} 159527.546875
+windows_cpu_time_total{core="0,3",mode="interrupt"} 44.484375
+windows_cpu_time_total{core="0,3",mode="privileged"} 1760.828125
+windows_cpu_time_total{core="0,3",mode="user"} 3422.875
+# HELP windows_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which windows_exporter was built.
+# TYPE windows_exporter_build_info gauge
+windows_exporter_build_info{branch="heads/tags/v0.20.0",goversion="go1.19.1",revision="677a7c8d67deb99b92f4f24b8c890e0a4c152b0c",version="0.20.0"} 1
+# HELP windows_exporter_collector_duration_seconds windows_exporter: Duration of a collection.
+# TYPE windows_exporter_collector_duration_seconds gauge
+windows_exporter_collector_duration_seconds{collector="ad"} 0.7690505
+windows_exporter_collector_duration_seconds{collector="adcs"} 0.0006833
+windows_exporter_collector_duration_seconds{collector="adfs"} 0.0031012
+windows_exporter_collector_duration_seconds{collector="cpu"} 0.00052
+windows_exporter_collector_duration_seconds{collector="exchange"} 0.0334467
+windows_exporter_collector_duration_seconds{collector="hyperv"} 0.9003895
+windows_exporter_collector_duration_seconds{collector="iis"} 0
+windows_exporter_collector_duration_seconds{collector="logical_disk"} 0
+windows_exporter_collector_duration_seconds{collector="logon"} 0.1139134
+windows_exporter_collector_duration_seconds{collector="memory"} 0.00052
+windows_exporter_collector_duration_seconds{collector="mssql"} 0.003369
+windows_exporter_collector_duration_seconds{collector="netframework_clrexceptions"} 1.437537
+windows_exporter_collector_duration_seconds{collector="netframework_clrinterop"} 1.4911402
+windows_exporter_collector_duration_seconds{collector="netframework_clrjit"} 1.2789005
+windows_exporter_collector_duration_seconds{collector="netframework_clrloading"} 1.3232636
+windows_exporter_collector_duration_seconds{collector="netframework_clrlocksandthreads"} 1.3578413999999999
+windows_exporter_collector_duration_seconds{collector="netframework_clrmemory"} 1.4066725
+windows_exporter_collector_duration_seconds{collector="netframework_clrremoting"} 1.5191553
+windows_exporter_collector_duration_seconds{collector="netframework_clrsecurity"} 1.4670829
+windows_exporter_collector_duration_seconds{collector="net"} 0
+windows_exporter_collector_duration_seconds{collector="os"} 0.0023497
+windows_exporter_collector_duration_seconds{collector="process"} 0.1154812
+windows_exporter_collector_duration_seconds{collector="service"} 0.1016404
+windows_exporter_collector_duration_seconds{collector="system"} 0.0006105
+windows_exporter_collector_duration_seconds{collector="tcp"} 0
+# HELP windows_exporter_collector_success windows_exporter: Whether the collector was successful.
+# TYPE windows_exporter_collector_success gauge
+windows_exporter_collector_success{collector="ad"} 1
+windows_exporter_collector_success{collector="adcs"} 1
+windows_exporter_collector_success{collector="adfs"} 1
+windows_exporter_collector_success{collector="cpu"} 1
+windows_exporter_collector_success{collector="exchange"} 1
+windows_exporter_collector_success{collector="hyperv"} 1
+windows_exporter_collector_success{collector="iis"} 1
+windows_exporter_collector_success{collector="logical_disk"} 1
+windows_exporter_collector_success{collector="logon"} 1
+windows_exporter_collector_success{collector="memory"} 1
+windows_exporter_collector_success{collector="mssql"} 1
+windows_exporter_collector_success{collector="netframework_clrexceptions"} 1
+windows_exporter_collector_success{collector="netframework_clrinterop"} 1
+windows_exporter_collector_success{collector="netframework_clrjit"} 1
+windows_exporter_collector_success{collector="netframework_clrloading"} 1
+windows_exporter_collector_success{collector="netframework_clrlocksandthreads"} 1
+windows_exporter_collector_success{collector="netframework_clrmemory"} 1
+windows_exporter_collector_success{collector="netframework_clrremoting"} 1
+windows_exporter_collector_success{collector="netframework_clrsecurity"} 1
+windows_exporter_collector_success{collector="net"} 1
+windows_exporter_collector_success{collector="os"} 1
+windows_exporter_collector_success{collector="process"} 1
+windows_exporter_collector_success{collector="service"} 1
+windows_exporter_collector_success{collector="system"} 1
+windows_exporter_collector_success{collector="tcp"} 1
+# HELP windows_exporter_collector_timeout windows_exporter: Whether the collector timed out.
+# TYPE windows_exporter_collector_timeout gauge
+windows_exporter_collector_timeout{collector="ad"} 0
+windows_exporter_collector_timeout{collector="adcs"} 0
+windows_exporter_collector_timeout{collector="adfs"} 0
+windows_exporter_collector_timeout{collector="cpu"} 0
+windows_exporter_collector_timeout{collector="exchange"} 0
+windows_exporter_collector_timeout{collector="hyperv"} 0
+windows_exporter_collector_timeout{collector="iis"} 0
+windows_exporter_collector_timeout{collector="logical_disk"} 0
+windows_exporter_collector_timeout{collector="logon"} 0
+windows_exporter_collector_timeout{collector="memory"} 0
+windows_exporter_collector_timeout{collector="mssql"} 0
+windows_exporter_collector_timeout{collector="netframework_clrexceptions"} 0
+windows_exporter_collector_timeout{collector="netframework_clrinterop"} 0
+windows_exporter_collector_timeout{collector="netframework_clrjit"} 0
+windows_exporter_collector_timeout{collector="netframework_clrloading"} 0
+windows_exporter_collector_timeout{collector="netframework_clrlocksandthreads"} 0
+windows_exporter_collector_timeout{collector="netframework_clrmemory"} 0
+windows_exporter_collector_timeout{collector="netframework_clrremoting"} 0
+windows_exporter_collector_timeout{collector="netframework_clrsecurity"} 0
+windows_exporter_collector_timeout{collector="net"} 0
+windows_exporter_collector_timeout{collector="os"} 0
+windows_exporter_collector_timeout{collector="process"} 0
+windows_exporter_collector_timeout{collector="service"} 0
+windows_exporter_collector_timeout{collector="system"} 0
+windows_exporter_collector_timeout{collector="tcp"} 0
+# HELP windows_exchange_http_proxy_avg_auth_latency Average time spent authenticating CAS requests over the last 200 samples
+# TYPE windows_exchange_http_proxy_avg_auth_latency gauge
+windows_exchange_http_proxy_avg_auth_latency{name="autodiscover"} 1
+windows_exchange_http_proxy_avg_auth_latency{name="eas"} 0
+# HELP windows_exchange_http_proxy_avg_cas_proccessing_latency_sec Average latency (sec) of CAS processing time over the last 200 reqs
+# TYPE windows_exchange_http_proxy_avg_cas_proccessing_latency_sec gauge
+windows_exchange_http_proxy_avg_cas_proccessing_latency_sec{name="autodiscover"} 0.003
+windows_exchange_http_proxy_avg_cas_proccessing_latency_sec{name="eas"} 0.003
+# HELP windows_exchange_http_proxy_mailbox_proxy_failure_rate % of failures between this CAS and MBX servers over the last 200 samples
+# TYPE windows_exchange_http_proxy_mailbox_proxy_failure_rate gauge
+windows_exchange_http_proxy_mailbox_proxy_failure_rate{name="autodiscover"} 0
+windows_exchange_http_proxy_mailbox_proxy_failure_rate{name="eas"} 0
+# HELP windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec Average latency (sec) of MailboxServerLocator web service calls
+# TYPE windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec gauge
+windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec{name="autodiscover"} 0.008
+windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec{name="eas"} 0.008
+# HELP windows_exchange_http_proxy_outstanding_proxy_requests Number of concurrent outstanding proxy requests
+# TYPE windows_exchange_http_proxy_outstanding_proxy_requests gauge
+windows_exchange_http_proxy_outstanding_proxy_requests{name="autodiscover"} 0
+windows_exchange_http_proxy_outstanding_proxy_requests{name="eas"} 0
+# HELP windows_exchange_http_proxy_requests_total Number of proxy requests processed each second
+# TYPE windows_exchange_http_proxy_requests_total counter
+windows_exchange_http_proxy_requests_total{name="autodiscover"} 27122
+windows_exchange_http_proxy_requests_total{name="eas"} 32519
+# HELP windows_exchange_ldap_long_running_ops_per_sec Long Running LDAP operations per second
+# TYPE windows_exchange_ldap_long_running_ops_per_sec counter
+windows_exchange_ldap_long_running_ops_per_sec{name="complianceauditservice"} 0
+windows_exchange_ldap_long_running_ops_per_sec{name="complianceauditservice_10"} 0
+# HELP windows_exchange_ldap_read_time_sec Time (sec) to send an LDAP read request and receive a response
+# TYPE windows_exchange_ldap_read_time_sec counter
+windows_exchange_ldap_read_time_sec{name="complianceauditservice"} 0.008
+windows_exchange_ldap_read_time_sec{name="complianceauditservice_10"} 0.018
+# HELP windows_exchange_ldap_search_time_sec Time (sec) to send an LDAP search request and receive a response
+# TYPE windows_exchange_ldap_search_time_sec counter
+windows_exchange_ldap_search_time_sec{name="complianceauditservice"} 0.046
+windows_exchange_ldap_search_time_sec{name="complianceauditservice_10"} 0.058
+# TYPE windows_exchange_ldap_timeout_errors_total counter
+windows_exchange_ldap_timeout_errors_total{name="complianceauditservice"} 0
+windows_exchange_ldap_timeout_errors_total{name="complianceauditservice_10"} 0
+# HELP windows_exchange_ldap_write_time_sec Time (sec) to send an LDAP Add/Modify/Delete request and receive a response
+# TYPE windows_exchange_ldap_write_time_sec counter
+windows_exchange_ldap_write_time_sec{name="complianceauditservice"} 0
+windows_exchange_ldap_write_time_sec{name="complianceauditservice_10"} 0
+# HELP windows_exporter_perflib_snapshot_duration_seconds Duration of perflib snapshot capture
+# TYPE windows_exporter_perflib_snapshot_duration_seconds gauge
+windows_exporter_perflib_snapshot_duration_seconds 0.0054258
+# HELP windows_exchange_activesync_ping_cmds_pending Number of ping commands currently pending in the queue
+# TYPE windows_exchange_activesync_ping_cmds_pending gauge
+windows_exchange_activesync_ping_cmds_pending 0
+# HELP windows_exchange_activesync_requests_total Num HTTP requests received from the client via ASP.NET per sec. Shows Current user load
+# TYPE windows_exchange_activesync_requests_total counter
+windows_exchange_activesync_requests_total 14
+# HELP windows_exchange_activesync_sync_cmds_total Number of sync commands processed per second. Clients use this command to synchronize items within a folder
+# TYPE windows_exchange_activesync_sync_cmds_total counter
+windows_exchange_activesync_sync_cmds_total 0
+# HELP windows_exchange_autodiscover_requests_total Number of autodiscover service requests processed each second
+# TYPE windows_exchange_autodiscover_requests_total counter
+windows_exchange_autodiscover_requests_total 1
+# HELP windows_exchange_avail_service_requests_per_sec Number of requests serviced per second
+# TYPE windows_exchange_avail_service_requests_per_sec counter
+windows_exchange_avail_service_requests_per_sec 0
+# HELP windows_exchange_owa_current_unique_users Number of unique users currently logged on to Outlook Web App
+# TYPE windows_exchange_owa_current_unique_users gauge
+windows_exchange_owa_current_unique_users 0
+# HELP windows_exchange_owa_requests_total Number of requests handled by Outlook Web App per second
+# TYPE windows_exchange_owa_requests_total counter
+windows_exchange_owa_requests_total 0
+# HELP windows_exchange_rpc_active_user_count Number of unique users that have shown some kind of activity in the last 2 minutes
+# TYPE windows_exchange_rpc_active_user_count gauge
+windows_exchange_rpc_active_user_count 0
+# HELP windows_exchange_rpc_avg_latency_sec The latency (sec), averaged for the past 1024 packets
+# TYPE windows_exchange_rpc_avg_latency_sec gauge
+windows_exchange_rpc_avg_latency_sec 0.001
+# HELP windows_exchange_rpc_connection_count Total number of client connections maintained
+# TYPE windows_exchange_rpc_connection_count gauge
+windows_exchange_rpc_connection_count 0
+# HELP windows_exchange_rpc_operations_total The rate at which RPC operations occur
+# TYPE windows_exchange_rpc_operations_total counter
+windows_exchange_rpc_operations_total 9
+# HELP windows_exchange_rpc_requests Number of client requests currently being processed by the RPC Client Access service
+# TYPE windows_exchange_rpc_requests gauge
+windows_exchange_rpc_requests 0
+# HELP windows_exchange_rpc_user_count Number of users
+# TYPE windows_exchange_rpc_user_count gauge
+windows_exchange_rpc_user_count 0
+# HELP windows_exchange_transport_queues_active_mailbox_delivery Active Mailbox Delivery Queue length
+# TYPE windows_exchange_transport_queues_active_mailbox_delivery gauge
+windows_exchange_transport_queues_active_mailbox_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_active_mailbox_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_active_mailbox_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_active_mailbox_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_active_mailbox_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_external_active_remote_delivery External Active Remote Delivery Queue length
+# TYPE windows_exchange_transport_queues_external_active_remote_delivery gauge
+windows_exchange_transport_queues_external_active_remote_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_external_active_remote_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_external_active_remote_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_external_active_remote_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_external_active_remote_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_external_largest_delivery External Largest Delivery Queue length
+# TYPE windows_exchange_transport_queues_external_largest_delivery gauge
+windows_exchange_transport_queues_external_largest_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_external_largest_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_external_largest_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_external_largest_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_external_largest_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_internal_active_remote_delivery Internal Active Remote Delivery Queue length
+# TYPE windows_exchange_transport_queues_internal_active_remote_delivery gauge
+windows_exchange_transport_queues_internal_active_remote_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_internal_active_remote_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_internal_active_remote_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_internal_active_remote_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_internal_active_remote_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_internal_largest_delivery Internal Largest Delivery Queue length
+# TYPE windows_exchange_transport_queues_internal_largest_delivery gauge
+windows_exchange_transport_queues_internal_largest_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_internal_largest_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_internal_largest_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_internal_largest_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_internal_largest_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_poison Poison Queue length
+# TYPE windows_exchange_transport_queues_poison gauge
+windows_exchange_transport_queues_poison{name="high_priority"} 0
+windows_exchange_transport_queues_poison{name="low_priority"} 0
+windows_exchange_transport_queues_poison{name="none_priority"} 0
+windows_exchange_transport_queues_poison{name="normal_priority"} 0
+windows_exchange_transport_queues_poison{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_retry_mailbox_delivery Retry Mailbox Delivery Queue length
+# TYPE windows_exchange_transport_queues_retry_mailbox_delivery gauge
+windows_exchange_transport_queues_retry_mailbox_delivery{name="high_priority"} 0
+windows_exchange_transport_queues_retry_mailbox_delivery{name="low_priority"} 0
+windows_exchange_transport_queues_retry_mailbox_delivery{name="none_priority"} 0
+windows_exchange_transport_queues_retry_mailbox_delivery{name="normal_priority"} 0
+windows_exchange_transport_queues_retry_mailbox_delivery{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_transport_queues_unreachable Unreachable Queue length
+# TYPE windows_exchange_transport_queues_unreachable gauge
+windows_exchange_transport_queues_unreachable{name="high_priority"} 0
+windows_exchange_transport_queues_unreachable{name="low_priority"} 0
+windows_exchange_transport_queues_unreachable{name="none_priority"} 0
+windows_exchange_transport_queues_unreachable{name="normal_priority"} 0
+windows_exchange_transport_queues_unreachable{name="total_excluding_priority_none"} 0
+# HELP windows_exchange_workload_active_tasks Number of active tasks currently running in the background for workload management
+# TYPE windows_exchange_workload_active_tasks gauge
+windows_exchange_workload_active_tasks{name="complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager"} 0
+windows_exchange_workload_active_tasks{name="microsoft_exchange_servicehost_darruntime"} 0
+# HELP windows_exchange_workload_completed_tasks Number of workload management tasks that have been completed
+# TYPE windows_exchange_workload_completed_tasks counter
+windows_exchange_workload_completed_tasks{name="complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager"} 0
+windows_exchange_workload_completed_tasks{name="microsoft_exchange_servicehost_darruntime"} 0
+# HELP windows_exchange_workload_is_active Active indicates whether the workload is in an active (1) or paused (0) state
+# TYPE windows_exchange_workload_is_active gauge
+windows_exchange_workload_is_active{name="complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager"} 1
+windows_exchange_workload_is_active{name="microsoft_exchange_servicehost_darruntime"} 1
+# HELP windows_exchange_workload_queued_tasks Number of workload management tasks that are currently queued up waiting to be processed
+# TYPE windows_exchange_workload_queued_tasks counter
+windows_exchange_workload_queued_tasks{name="complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager"} 0
+windows_exchange_workload_queued_tasks{name="microsoft_exchange_servicehost_darruntime"} 0
+# HELP windows_exchange_workload_yielded_tasks The total number of tasks that have been yielded by a workload
+# TYPE windows_exchange_workload_yielded_tasks counter
+windows_exchange_workload_yielded_tasks{name="complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager"} 0
+windows_exchange_workload_yielded_tasks{name="microsoft_exchange_servicehost_darruntime"} 0
+# HELP windows_hyperv_health_critical This counter represents the number of virtual machines with critical health
+# TYPE windows_hyperv_health_critical gauge
+windows_hyperv_health_critical 0
+# HELP windows_hyperv_health_ok This counter represents the number of virtual machines with ok health
+# TYPE windows_hyperv_health_ok gauge
+windows_hyperv_health_ok 1
+# HELP windows_hyperv_host_cpu_guest_run_time The time spent by the virtual processor in guest code
+# TYPE windows_hyperv_host_cpu_guest_run_time gauge
+windows_hyperv_host_cpu_guest_run_time{core="0"} 2.44871648e+09
+# HELP windows_hyperv_host_cpu_hypervisor_run_time The time spent by the virtual processor in hypervisor code
+# TYPE windows_hyperv_host_cpu_hypervisor_run_time gauge
+windows_hyperv_host_cpu_hypervisor_run_time{core="0"} 2.79010764e+08
+# HELP windows_hyperv_host_cpu_remote_run_time The time spent by the virtual processor running on a remote node
+# TYPE windows_hyperv_host_cpu_remote_run_time gauge
+windows_hyperv_host_cpu_remote_run_time{core="0"} 0
+# HELP windows_hyperv_host_cpu_total_run_time The time spent by the virtual processor in guest and hypervisor code
+# TYPE windows_hyperv_host_cpu_total_run_time gauge
+windows_hyperv_host_cpu_total_run_time{core="0"} 2.727727244e+09
+# HELP windows_hyperv_host_lp_guest_run_time_percent The percentage of time spent by the processor in guest code
+# TYPE windows_hyperv_host_lp_guest_run_time_percent gauge
+windows_hyperv_host_lp_guest_run_time_percent{core="0"} 2.476081579e+09
+# HELP windows_hyperv_host_lp_hypervisor_run_time_percent The percentage of time spent by the processor in hypervisor code
+# TYPE windows_hyperv_host_lp_hypervisor_run_time_percent gauge
+windows_hyperv_host_lp_hypervisor_run_time_percent{core="0"} 3.52733652e+08
+# HELP windows_hyperv_host_lp_total_run_time_percent The percentage of time spent by the processor in guest and hypervisor code
+# TYPE windows_hyperv_host_lp_total_run_time_percent gauge
+windows_hyperv_host_lp_total_run_time_percent{core="0"} 2.828815231e+09
+# HELP windows_hyperv_hypervisor_logical_processors The number of logical processors present in the system
+# TYPE windows_hyperv_hypervisor_logical_processors gauge
+windows_hyperv_hypervisor_logical_processors 16
+# HELP windows_hyperv_hypervisor_virtual_processors The number of virtual processors present in the system
+# TYPE windows_hyperv_hypervisor_virtual_processors gauge
+windows_hyperv_hypervisor_virtual_processors 24
+# HELP windows_hyperv_root_partition_1G_device_pages The number of 1G pages present in the device space of the partition
+# TYPE windows_hyperv_root_partition_1G_device_pages gauge
+windows_hyperv_root_partition_1G_device_pages 0
+# HELP windows_hyperv_root_partition_1G_gpa_pages The number of 1G pages present in the GPA space of the partition
+# TYPE windows_hyperv_root_partition_1G_gpa_pages gauge
+windows_hyperv_root_partition_1G_gpa_pages 6
+# HELP windows_hyperv_root_partition_2M_device_pages The number of 2M pages present in the device space of the partition
+# TYPE windows_hyperv_root_partition_2M_device_pages gauge
+windows_hyperv_root_partition_2M_device_pages 0
+# HELP windows_hyperv_root_partition_2M_gpa_pages The number of 2M pages present in the GPA space of the partition
+# TYPE windows_hyperv_root_partition_2M_gpa_pages gauge
+windows_hyperv_root_partition_2M_gpa_pages 5255
+# HELP windows_hyperv_root_partition_4K_device_pages The number of 4K pages present in the device space of the partition
+# TYPE windows_hyperv_root_partition_4K_device_pages gauge
+windows_hyperv_root_partition_4K_device_pages 0
+# HELP windows_hyperv_root_partition_4K_gpa_pages The number of 4K pages present in the GPA space of the partition
+# TYPE windows_hyperv_root_partition_4K_gpa_pages gauge
+windows_hyperv_root_partition_4K_gpa_pages 58880
+# HELP windows_hyperv_root_partition_address_spaces The number of address spaces in the virtual TLB of the partition
+# TYPE windows_hyperv_root_partition_address_spaces gauge
+windows_hyperv_root_partition_address_spaces 0
+# HELP windows_hyperv_root_partition_attached_devices The number of devices attached to the partition
+# TYPE windows_hyperv_root_partition_attached_devices gauge
+windows_hyperv_root_partition_attached_devices 1
+# HELP windows_hyperv_root_partition_deposited_pages The number of pages deposited into the partition
+# TYPE windows_hyperv_root_partition_deposited_pages gauge
+windows_hyperv_root_partition_deposited_pages 31732
+# HELP windows_hyperv_root_partition_device_dma_errors An indicator of illegal DMA requests generated by all devices assigned to the partition
+# TYPE windows_hyperv_root_partition_device_dma_errors gauge
+windows_hyperv_root_partition_device_dma_errors 0
+# HELP windows_hyperv_root_partition_device_interrupt_errors An indicator of illegal interrupt requests generated by all devices assigned to the partition
+# TYPE windows_hyperv_root_partition_device_interrupt_errors gauge
+windows_hyperv_root_partition_device_interrupt_errors 0
+# HELP windows_hyperv_root_partition_device_interrupt_throttle_events The number of times an interrupt from a device assigned to the partition was temporarily throttled because the device was generating too many interrupts
+# TYPE windows_hyperv_root_partition_device_interrupt_throttle_events gauge
+windows_hyperv_root_partition_device_interrupt_throttle_events 0
+# HELP windows_hyperv_root_partition_gpa_space_modifications The rate of modifications to the GPA space of the partition
+# TYPE windows_hyperv_root_partition_gpa_space_modifications counter
+windows_hyperv_root_partition_gpa_space_modifications 0
+# HELP windows_hyperv_root_partition_io_tlb_flush The rate of flushes of I/O TLBs of the partition
+# TYPE windows_hyperv_root_partition_io_tlb_flush counter
+windows_hyperv_root_partition_io_tlb_flush 23901
+# HELP windows_hyperv_root_partition_io_tlb_flush_cost The average time (in nanoseconds) spent processing an I/O TLB flush
+# TYPE windows_hyperv_root_partition_io_tlb_flush_cost gauge
+windows_hyperv_root_partition_io_tlb_flush_cost 312574
+# HELP windows_hyperv_root_partition_physical_pages_allocated The number of timer interrupts skipped for the partition
+# TYPE windows_hyperv_root_partition_physical_pages_allocated gauge
+windows_hyperv_root_partition_physical_pages_allocated 0
+# HELP windows_hyperv_root_partition_preferred_numa_node_index The number of pages present in the GPA space of the partition (zero for root partition)
+# TYPE windows_hyperv_root_partition_preferred_numa_node_index gauge
+windows_hyperv_root_partition_preferred_numa_node_index 0
+# HELP windows_hyperv_root_partition_recommended_virtual_tlb_size The recommended number of pages to be deposited for the virtual TLB
+# TYPE windows_hyperv_root_partition_recommended_virtual_tlb_size gauge
+windows_hyperv_root_partition_recommended_virtual_tlb_size 64
+# HELP windows_hyperv_root_partition_virtual_tlb_flush_entires The rate of flushes of the entire virtual TLB
+# TYPE windows_hyperv_root_partition_virtual_tlb_flush_entires counter
+windows_hyperv_root_partition_virtual_tlb_flush_entires 15234
+# HELP windows_hyperv_root_partition_virtual_tlb_pages The number of pages used by the virtual TLB of the partition
+# TYPE windows_hyperv_root_partition_virtual_tlb_pages gauge
+windows_hyperv_root_partition_virtual_tlb_pages 64
+# HELP windows_hyperv_vid_physical_pages_allocated The number of physical pages allocated
+# TYPE windows_hyperv_vid_physical_pages_allocated gauge
+windows_hyperv_vid_physical_pages_allocated{vm="Ubuntu 22.04 LTS"} 745472
+# HELP windows_hyperv_vid_preferred_numa_node_index The preferred NUMA node index associated with this partition
+# TYPE windows_hyperv_vid_preferred_numa_node_index gauge
+windows_hyperv_vid_preferred_numa_node_index{vm="Ubuntu 22.04 LTS"} 0
+# HELP windows_hyperv_vid_remote_physical_pages The number of physical pages not allocated from the preferred NUMA node
+# TYPE windows_hyperv_vid_remote_physical_pages gauge
+windows_hyperv_vid_remote_physical_pages{vm="Ubuntu 22.04 LTS"} 0
+# HELP windows_hyperv_vm_cpu_guest_run_time The time spent by the virtual processor in guest code
+# TYPE windows_hyperv_vm_cpu_guest_run_time gauge
+windows_hyperv_vm_cpu_guest_run_time{core="0",vm="Ubuntu 22.04 LTS"} 6.2534217e+07
+# HELP windows_hyperv_vm_cpu_hypervisor_run_time The time spent by the virtual processor in hypervisor code
+# TYPE windows_hyperv_vm_cpu_hypervisor_run_time gauge
+windows_hyperv_vm_cpu_hypervisor_run_time{core="0",vm="Ubuntu 22.04 LTS"} 4.457712e+06
+# HELP windows_hyperv_vm_cpu_remote_run_time The time spent by the virtual processor running on a remote node
+# TYPE windows_hyperv_vm_cpu_remote_run_time gauge
+windows_hyperv_vm_cpu_remote_run_time{core="0",vm="Ubuntu 22.04 LTS"} 0
+# HELP windows_hyperv_vm_cpu_total_run_time The time spent by the virtual processor in guest and hypervisor code
+# TYPE windows_hyperv_vm_cpu_total_run_time gauge
+windows_hyperv_vm_cpu_total_run_time{core="0",vm="Ubuntu 22.04 LTS"} 6.6991929e+07
+# HELP windows_hyperv_vm_device_bytes_read This counter represents the total number of bytes that have been read per second on this virtual device
+# TYPE windows_hyperv_vm_device_bytes_read counter
+windows_hyperv_vm_device_bytes_read{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 83456
+windows_hyperv_vm_device_bytes_read{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 5.3118464e+08
+# HELP windows_hyperv_vm_device_bytes_written This counter represents the total number of bytes that have been written per second on this virtual device
+# TYPE windows_hyperv_vm_device_bytes_written counter
+windows_hyperv_vm_device_bytes_written{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 1.148928e+06
+windows_hyperv_vm_device_bytes_written{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 4.25905152e+08
+# HELP windows_hyperv_vm_device_error_count This counter represents the total number of errors that have occurred on this virtual device
+# TYPE windows_hyperv_vm_device_error_count counter
+windows_hyperv_vm_device_error_count{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 0
+windows_hyperv_vm_device_error_count{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 3
+# HELP windows_hyperv_vm_device_operations_read This counter represents the number of read operations that have occurred per second on this virtual device
+# TYPE windows_hyperv_vm_device_operations_read counter
+windows_hyperv_vm_device_operations_read{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 6
+windows_hyperv_vm_device_operations_read{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 13196
+# HELP windows_hyperv_vm_device_operations_written This counter represents the number of write operations that have occurred per second on this virtual device
+# TYPE windows_hyperv_vm_device_operations_written counter
+windows_hyperv_vm_device_operations_written{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 34
+windows_hyperv_vm_device_operations_written{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 3866
+# HELP windows_hyperv_vm_device_queue_length This counter represents the current queue length on this virtual device
+# TYPE windows_hyperv_vm_device_queue_length counter
+windows_hyperv_vm_device_queue_length{vm_device="--?-D:-Ana-VM-hyperv-Virtual Machines-3AA8D474-2365-4041-A7CB-2A78287D6FE0.vmgs"} 1.104182e+06
+windows_hyperv_vm_device_queue_length{vm_device="D:-Ana-VM-hyperv-vhd-Ubuntu 22.04 LTS_838D93A1-7D30-43CD-9F69-F336829C0934.avhdx"} 3.269422187e+09
+# HELP windows_hyperv_vm_interface_bytes_received This counter represents the total number of bytes received per second by the network adapter
+# TYPE windows_hyperv_vm_interface_bytes_received counter
+windows_hyperv_vm_interface_bytes_received{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 473654
+windows_hyperv_vm_interface_bytes_received{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 4.3509444e+07
+# HELP windows_hyperv_vm_interface_bytes_sent This counter represents the total number of bytes sent per second by the network adapter
+# TYPE windows_hyperv_vm_interface_bytes_sent counter
+windows_hyperv_vm_interface_bytes_sent{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 4.3550457e+07
+windows_hyperv_vm_interface_bytes_sent{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 473654
+# HELP windows_hyperv_vm_interface_packets_incoming_dropped This counter represents the total number of dropped packets per second in the incoming direction of the network adapter
+# TYPE windows_hyperv_vm_interface_packets_incoming_dropped counter
+windows_hyperv_vm_interface_packets_incoming_dropped{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 0
+windows_hyperv_vm_interface_packets_incoming_dropped{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 0
+# HELP windows_hyperv_vm_interface_packets_outgoing_dropped This counter represents the total number of dropped packets per second in the outgoing direction of the network adapter
+# TYPE windows_hyperv_vm_interface_packets_outgoing_dropped counter
+windows_hyperv_vm_interface_packets_outgoing_dropped{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 284
+windows_hyperv_vm_interface_packets_outgoing_dropped{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 0
+# HELP windows_hyperv_vm_interface_packets_received This counter represents the total number of packets received per second by the network adapter
+# TYPE windows_hyperv_vm_interface_packets_received counter
+windows_hyperv_vm_interface_packets_received{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 6137
+windows_hyperv_vm_interface_packets_received{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 8621
+# HELP windows_hyperv_vm_interface_packets_sent This counter represents the total number of packets sent per second by the network adapter
+# TYPE windows_hyperv_vm_interface_packets_sent counter
+windows_hyperv_vm_interface_packets_sent{vm_interface="Default Switch_312FF9C7-1F07-4EBA-81FE-F5B4F445B810"} 8905
+windows_hyperv_vm_interface_packets_sent{vm_interface="Ubuntu 22.04 LTS_Adaptador de Rede_3AA8D474-2365-4041-A7CB-2A78287D6FE0--98F1DBEE-505C-4086-B80E-87A27FAECBD4"} 6137
+# HELP windows_hyperv_vm_memory_add_operations_total This counter represents the number of operations adding memory to the VM.
+# TYPE windows_hyperv_vm_memory_add_operations_total counter
+windows_hyperv_vm_memory_add_operations_total{vm="Ubuntu 22.04 LTS"} 3
+# HELP windows_hyperv_vm_memory_added_total This counter represents memory in MB added to the VM
+# TYPE windows_hyperv_vm_memory_added_total counter
+windows_hyperv_vm_memory_added_total{vm="Ubuntu 22.04 LTS"} 856
+# HELP windows_hyperv_vm_memory_physical This gauge represents the current amount of memory in MB assigned to the VM.
+# TYPE windows_hyperv_vm_memory_physical gauge
+windows_hyperv_vm_memory_physical{vm="Ubuntu 22.04 LTS"} 2628
+# HELP windows_hyperv_vm_memory_physical_guest_visible 'This gauge represents the amount of memory in MB visible to the VM guest.'
+# TYPE windows_hyperv_vm_memory_physical_guest_visible gauge
+windows_hyperv_vm_memory_physical_guest_visible{vm="Ubuntu 22.04 LTS"} 2904
+# HELP windows_hyperv_vm_memory_pressure_average This gauge represents the average pressure in the VM.
+# TYPE windows_hyperv_vm_memory_pressure_average gauge
+windows_hyperv_vm_memory_pressure_average{vm="Ubuntu 22.04 LTS"} 83
+# HELP windows_hyperv_vm_memory_pressure_current This gauge represents the current pressure in the VM.
+# TYPE windows_hyperv_vm_memory_pressure_current gauge
+windows_hyperv_vm_memory_pressure_current{vm="Ubuntu 22.04 LTS"} 83
+# HELP windows_hyperv_vm_memory_pressure_maximum This gauge represents the maximum pressure band in the VM.
+# TYPE windows_hyperv_vm_memory_pressure_maximum gauge
+windows_hyperv_vm_memory_pressure_maximum{vm="Ubuntu 22.04 LTS"} 85
+# HELP windows_hyperv_vm_memory_pressure_minimum This gauge represents the minimum pressure band in the VM.
+# TYPE windows_hyperv_vm_memory_pressure_minimum gauge
+windows_hyperv_vm_memory_pressure_minimum{vm="Ubuntu 22.04 LTS"} 81
+# HELP windows_hyperv_vm_memory_remove_operations_total This counter represents the number of operations removing memory from the VM.
+# TYPE windows_hyperv_vm_memory_remove_operations_total counter
+windows_hyperv_vm_memory_remove_operations_total{vm="Ubuntu 22.04 LTS"} 1
+# HELP windows_hyperv_vm_memory_removed_total This counter represents memory in MB removed from the VM
+# TYPE windows_hyperv_vm_memory_removed_total counter
+windows_hyperv_vm_memory_removed_total{vm="Ubuntu 22.04 LTS"} 276
+# HELP windows_hyperv_vswitch_broadcast_packets_received_total This represents the total number of broadcast packets received per second by the virtual switch
+# TYPE windows_hyperv_vswitch_broadcast_packets_received_total counter
+windows_hyperv_vswitch_broadcast_packets_received_total{vswitch="Default Switch"} 51
+# HELP windows_hyperv_vswitch_broadcast_packets_sent_total This represents the total number of broadcast packets sent per second by the virtual switch
+# TYPE windows_hyperv_vswitch_broadcast_packets_sent_total counter
+windows_hyperv_vswitch_broadcast_packets_sent_total{vswitch="Default Switch"} 18
+# HELP windows_hyperv_vswitch_bytes_received_total This represents the total number of bytes received per second by the virtual switch
+# TYPE windows_hyperv_vswitch_bytes_received_total counter
+windows_hyperv_vswitch_bytes_received_total{vswitch="Default Switch"} 4.4024111e+07
+# HELP windows_hyperv_vswitch_bytes_sent_total This represents the total number of bytes sent per second by the virtual switch
+# TYPE windows_hyperv_vswitch_bytes_sent_total counter
+windows_hyperv_vswitch_bytes_sent_total{vswitch="Default Switch"} 4.3983098e+07
+# HELP windows_hyperv_vswitch_bytes_total This represents the total number of bytes per second traversing the virtual switch
+# TYPE windows_hyperv_vswitch_bytes_total counter
+windows_hyperv_vswitch_bytes_total{vswitch="Default Switch"} 8.8007209e+07
+# HELP windows_hyperv_vswitch_directed_packets_received_total This represents the total number of directed packets received per second by the virtual switch
+# TYPE windows_hyperv_vswitch_directed_packets_received_total counter
+windows_hyperv_vswitch_directed_packets_received_total{vswitch="Default Switch"} 14603
+# HELP windows_hyperv_vswitch_directed_packets_send_total This represents the total number of directed packets sent per second by the virtual switch
+# TYPE windows_hyperv_vswitch_directed_packets_send_total counter
+windows_hyperv_vswitch_directed_packets_send_total{vswitch="Default Switch"} 14603
+# HELP windows_hyperv_vswitch_dropped_packets_incoming_total This represents the total number of packet dropped per second by the virtual switch in the incoming direction
+# TYPE windows_hyperv_vswitch_dropped_packets_incoming_total counter
+windows_hyperv_vswitch_dropped_packets_incoming_total{vswitch="Default Switch"} 284
+# HELP windows_hyperv_vswitch_dropped_packets_outcoming_total This represents the total number of packet dropped per second by the virtual switch in the outgoing direction
+# TYPE windows_hyperv_vswitch_dropped_packets_outcoming_total counter
+windows_hyperv_vswitch_dropped_packets_outcoming_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_extensions_dropped_packets_incoming_total This represents the total number of packet dropped per second by the virtual switch extensions in the incoming direction
+# TYPE windows_hyperv_vswitch_extensions_dropped_packets_incoming_total counter
+windows_hyperv_vswitch_extensions_dropped_packets_incoming_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_extensions_dropped_packets_outcoming_total This represents the total number of packet dropped per second by the virtual switch extensions in the outgoing direction
+# TYPE windows_hyperv_vswitch_extensions_dropped_packets_outcoming_total counter
+windows_hyperv_vswitch_extensions_dropped_packets_outcoming_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_learned_mac_addresses_total This counter represents the total number of learned MAC addresses of the virtual switch
+# TYPE windows_hyperv_vswitch_learned_mac_addresses_total counter
+windows_hyperv_vswitch_learned_mac_addresses_total{vswitch="Default Switch"} 2
+# HELP windows_hyperv_vswitch_multicast_packets_received_total This represents the total number of multicast packets received per second by the virtual switch
+# TYPE windows_hyperv_vswitch_multicast_packets_received_total counter
+windows_hyperv_vswitch_multicast_packets_received_total{vswitch="Default Switch"} 388
+# HELP windows_hyperv_vswitch_multicast_packets_sent_total This represents the total number of multicast packets sent per second by the virtual switch
+# TYPE windows_hyperv_vswitch_multicast_packets_sent_total counter
+windows_hyperv_vswitch_multicast_packets_sent_total{vswitch="Default Switch"} 137
+# HELP windows_hyperv_vswitch_number_of_send_channel_moves_total This represents the total number of send channel moves per second on this virtual switch
+# TYPE windows_hyperv_vswitch_number_of_send_channel_moves_total counter
+windows_hyperv_vswitch_number_of_send_channel_moves_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_number_of_vmq_moves_total This represents the total number of VMQ moves per second on this virtual switch
+# TYPE windows_hyperv_vswitch_number_of_vmq_moves_total counter
+windows_hyperv_vswitch_number_of_vmq_moves_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_packets_flooded_total This counter represents the total number of packets flooded by the virtual switch
+# TYPE windows_hyperv_vswitch_packets_flooded_total counter
+windows_hyperv_vswitch_packets_flooded_total{vswitch="Default Switch"} 0
+# HELP windows_hyperv_vswitch_packets_received_total This represents the total number of packets received per second by the virtual switch
+# TYPE windows_hyperv_vswitch_packets_received_total counter
+windows_hyperv_vswitch_packets_received_total{vswitch="Default Switch"} 15042
+# HELP windows_hyperv_vswitch_packets_total This represents the total number of packets per second traversing the virtual switch
+# TYPE windows_hyperv_vswitch_packets_total counter
+windows_hyperv_vswitch_packets_total{vswitch="Default Switch"} 29800
+# HELP windows_hyperv_vswitch_purged_mac_addresses_total This counter represents the total number of purged MAC addresses of the virtual switch
+# TYPE windows_hyperv_vswitch_purged_mac_addresses_total counter
+windows_hyperv_vswitch_purged_mac_addresses_total{vswitch="Default Switch"} 0
+# HELP windows_iis_anonymous_users_total Total number of users who established an anonymous connection with the Web service (WebService.TotalAnonymousUsers)
+# TYPE windows_iis_anonymous_users_total counter
+windows_iis_anonymous_users_total{site="Default Web Site"} 3
+# HELP windows_iis_blocked_async_io_requests_total Total requests temporarily blocked due to bandwidth throttling settings (WebService.TotalBlockedAsyncIORequests)
+# TYPE windows_iis_blocked_async_io_requests_total counter
+windows_iis_blocked_async_io_requests_total{site="Default Web Site"} 0
+# HELP windows_iis_cgi_requests_total Total CGI requests is the total number of CGI requests (WebService.TotalCGIRequests)
+# TYPE windows_iis_cgi_requests_total counter
+windows_iis_cgi_requests_total{site="Default Web Site"} 0
+# HELP windows_iis_connection_attempts_all_instances_total Number of connections that have been attempted using the Web service (WebService.TotalConnectionAttemptsAllInstances)
+# TYPE windows_iis_connection_attempts_all_instances_total counter
+windows_iis_connection_attempts_all_instances_total{site="Default Web Site"} 1
+# HELP windows_iis_current_anonymous_users Number of users who currently have an anonymous connection using the Web service (WebService.CurrentAnonymousUsers)
+# TYPE windows_iis_current_anonymous_users gauge
+windows_iis_current_anonymous_users{site="Default Web Site"} 0
+# HELP windows_iis_current_application_pool_start_time The unix timestamp for the application pool start time (CurrentApplicationPoolUptime)
+# TYPE windows_iis_current_application_pool_start_time gauge
+windows_iis_current_application_pool_start_time{app="DefaultAppPool"} 1.6672399883854828e+09
+# HELP windows_iis_current_application_pool_state The current status of the application pool (1 - Uninitialized, 2 - Initialized, 3 - Running, 4 - Disabling, 5 - Disabled, 6 - Shutdown Pending, 7 - Delete Pending) (CurrentApplicationPoolState)
+# TYPE windows_iis_current_application_pool_state gauge
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Delete Pending"} 0
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Disabled"} 0
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Disabling"} 0
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Initialized"} 0
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Running"} 1
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Shutdown Pending"} 0
+windows_iis_current_application_pool_state{app="DefaultAppPool",state="Uninitialized"} 0
+# HELP windows_iis_current_blocked_async_io_requests Current requests temporarily blocked due to bandwidth throttling settings (WebService.CurrentBlockedAsyncIORequests)
+# TYPE windows_iis_current_blocked_async_io_requests gauge
+windows_iis_current_blocked_async_io_requests{site="Default Web Site"} 0
+# HELP windows_iis_current_cgi_requests Current number of CGI requests being simultaneously processed by the Web service (WebService.CurrentCGIRequests)
+# TYPE windows_iis_current_cgi_requests gauge
+windows_iis_current_cgi_requests{site="Default Web Site"} 0
+# HELP windows_iis_current_connections Current number of connections established with the Web service (WebService.CurrentConnections)
+# TYPE windows_iis_current_connections gauge
+windows_iis_current_connections{site="Default Web Site"} 0
+# HELP windows_iis_current_isapi_extension_requests Current number of ISAPI requests being simultaneously processed by the Web service (WebService.CurrentISAPIExtensionRequests)
+# TYPE windows_iis_current_isapi_extension_requests gauge
+windows_iis_current_isapi_extension_requests{site="Default Web Site"} 0
+# HELP windows_iis_current_non_anonymous_users Number of users who currently have a non-anonymous connection using the Web service (WebService.CurrentNonAnonymousUsers)
+# TYPE windows_iis_current_non_anonymous_users gauge
+windows_iis_current_non_anonymous_users{site="Default Web Site"} 0
+# HELP windows_iis_current_worker_processes The current number of worker processes that are running in the application pool (CurrentWorkerProcesses)
+# TYPE windows_iis_current_worker_processes gauge
+windows_iis_current_worker_processes{app="DefaultAppPool"} 1
+# HELP windows_iis_files_received_total Number of files received by the Web service (WebService.TotalFilesReceived)
+# TYPE windows_iis_files_received_total counter
+windows_iis_files_received_total{site="Default Web Site"} 0
+# HELP windows_iis_files_sent_total Number of files sent by the Web service (WebService.TotalFilesSent)
+# TYPE windows_iis_files_sent_total counter
+windows_iis_files_sent_total{site="Default Web Site"} 2
+# HELP windows_iis_ipapi_extension_requests_total ISAPI Extension Requests received (WebService.TotalISAPIExtensionRequests)
+# TYPE windows_iis_ipapi_extension_requests_total counter
+windows_iis_ipapi_extension_requests_total{site="Default Web Site"} 0
+# HELP windows_iis_locked_errors_total Number of requests that couldn't be satisfied by the server because the requested resource was locked (WebService.TotalLockedErrors)
+# TYPE windows_iis_locked_errors_total counter
+windows_iis_locked_errors_total{site="Default Web Site"} 0
+# HELP windows_iis_logon_attempts_total Number of logons attempts to the Web Service (WebService.TotalLogonAttempts)
+# TYPE windows_iis_logon_attempts_total counter
+windows_iis_logon_attempts_total{site="Default Web Site"} 4
+# HELP windows_iis_maximum_worker_processes The maximum number of worker processes that have been created for the application pool since Windows Process Activation Service (WAS) started (MaximumWorkerProcesses)
+# TYPE windows_iis_maximum_worker_processes gauge
+windows_iis_maximum_worker_processes{app="DefaultAppPool"} 1
+# HELP windows_iis_non_anonymous_users_total Number of users who established a non-anonymous connection with the Web service (WebService.TotalNonAnonymousUsers)
+# TYPE windows_iis_non_anonymous_users_total counter
+windows_iis_non_anonymous_users_total{site="Default Web Site"} 0
+# HELP windows_iis_not_found_errors_total Number of requests that couldn't be satisfied by the server because the requested document could not be found (WebService.TotalNotFoundErrors)
+# TYPE windows_iis_not_found_errors_total counter
+windows_iis_not_found_errors_total{site="Default Web Site"} 1
+# HELP windows_iis_received_bytes_total Number of data bytes that have been received by the Web service (WebService.TotalBytesReceived)
+# TYPE windows_iis_received_bytes_total counter
+windows_iis_received_bytes_total{site="Default Web Site"} 10289
+# HELP windows_iis_recent_worker_process_failures The number of times that worker processes for the application pool failed during the rapid-fail protection interval (RecentWorkerProcessFailures)
+# TYPE windows_iis_recent_worker_process_failures gauge
+windows_iis_recent_worker_process_failures{app="DefaultAppPool"} 0
+# HELP windows_iis_rejected_async_io_requests_total Requests rejected due to bandwidth throttling settings (WebService.TotalRejectedAsyncIORequests)
+# TYPE windows_iis_rejected_async_io_requests_total counter
+windows_iis_rejected_async_io_requests_total{site="Default Web Site"} 0
+# HELP windows_iis_requests_total Number of HTTP requests (WebService.TotalRequests)
+# TYPE windows_iis_requests_total counter
+windows_iis_requests_total{method="COPY",site="Default Web Site"} 0
+windows_iis_requests_total{method="DELETE",site="Default Web Site"} 0
+windows_iis_requests_total{method="GET",site="Default Web Site"} 3
+windows_iis_requests_total{method="HEAD",site="Default Web Site"} 0
+windows_iis_requests_total{method="LOCK",site="Default Web Site"} 0
+windows_iis_requests_total{method="MKCOL",site="Default Web Site"} 0
+windows_iis_requests_total{method="MOVE",site="Default Web Site"} 0
+windows_iis_requests_total{method="OPTIONS",site="Default Web Site"} 0
+windows_iis_requests_total{method="POST",site="Default Web Site"} 0
+windows_iis_requests_total{method="PROPFIND",site="Default Web Site"} 0
+windows_iis_requests_total{method="PROPPATCH",site="Default Web Site"} 0
+windows_iis_requests_total{method="PUT",site="Default Web Site"} 0
+windows_iis_requests_total{method="SEARCH",site="Default Web Site"} 0
+windows_iis_requests_total{method="TRACE",site="Default Web Site"} 0
+windows_iis_requests_total{method="UNLOCK",site="Default Web Site"} 0
+windows_iis_requests_total{method="other",site="Default Web Site"} 0
+# HELP windows_iis_sent_bytes_total Number of data bytes that have been sent by the Web service (WebService.TotalBytesSent)
+# TYPE windows_iis_sent_bytes_total counter
+windows_iis_sent_bytes_total{site="Default Web Site"} 105882
+# HELP windows_iis_server_cache_active_flushed_entries Number of file handles cached that will be closed when all current transfers complete.
+# TYPE windows_iis_server_cache_active_flushed_entries gauge
+windows_iis_server_cache_active_flushed_entries 0
+# HELP windows_iis_server_file_cache_flushes_total Total number of file cache flushes (since service startup)
+# TYPE windows_iis_server_file_cache_flushes_total counter
+windows_iis_server_file_cache_flushes_total 7
+# HELP windows_iis_server_file_cache_hits_total Total number of successful lookups in the user-mode file cache
+# TYPE windows_iis_server_file_cache_hits_total counter
+windows_iis_server_file_cache_hits_total 1
+# HELP windows_iis_server_file_cache_items Current number of files whose contents are present in cache
+# TYPE windows_iis_server_file_cache_items gauge
+windows_iis_server_file_cache_items 1
+# HELP windows_iis_server_file_cache_items_flushed_total Total number of file handles that have been removed from the cache (since service startup)
+# TYPE windows_iis_server_file_cache_items_flushed_total counter
+windows_iis_server_file_cache_items_flushed_total 0
+# HELP windows_iis_server_file_cache_items_total Total number of files whose contents were ever added to the cache (since service startup)
+# TYPE windows_iis_server_file_cache_items_total counter
+windows_iis_server_file_cache_items_total 1
+# HELP windows_iis_server_file_cache_max_memory_bytes Maximum number of bytes used by file cache
+# TYPE windows_iis_server_file_cache_max_memory_bytes counter
+windows_iis_server_file_cache_max_memory_bytes 703
+# HELP windows_iis_server_file_cache_memory_bytes Current number of bytes used by file cache
+# TYPE windows_iis_server_file_cache_memory_bytes gauge
+windows_iis_server_file_cache_memory_bytes 703
+# HELP windows_iis_server_file_cache_queries_total Total number of file cache queries (hits + misses)
+# TYPE windows_iis_server_file_cache_queries_total counter
+windows_iis_server_file_cache_queries_total 9
+# HELP windows_iis_server_metadata_cache_flushes_total Total number of metadata cache flushes (since service startup)
+# TYPE windows_iis_server_metadata_cache_flushes_total counter
+windows_iis_server_metadata_cache_flushes_total 0
+# HELP windows_iis_server_metadata_cache_hits_total Total number of successful lookups in the metadata cache (since service startup)
+# TYPE windows_iis_server_metadata_cache_hits_total counter
+windows_iis_server_metadata_cache_hits_total 3
+# HELP windows_iis_server_metadata_cache_items Number of metadata information blocks currently present in cache
+# TYPE windows_iis_server_metadata_cache_items gauge
+windows_iis_server_metadata_cache_items 1
+# HELP windows_iis_server_metadata_cache_items_cached_total Total number of metadata information blocks added to the cache (since service startup)
+# TYPE windows_iis_server_metadata_cache_items_cached_total counter
+windows_iis_server_metadata_cache_items_cached_total 1
+# HELP windows_iis_server_metadata_cache_items_flushed_total Total number of metadata information blocks removed from the cache (since service startup)
+# TYPE windows_iis_server_metadata_cache_items_flushed_total counter
+windows_iis_server_metadata_cache_items_flushed_total 0
+# HELP windows_iis_server_metadata_cache_queries_total Total metadata cache queries (hits + misses)
+# TYPE windows_iis_server_metadata_cache_queries_total counter
+windows_iis_server_metadata_cache_queries_total 4
+# HELP windows_iis_server_output_cache_active_flushed_items
+# TYPE windows_iis_server_output_cache_active_flushed_items counter
+windows_iis_server_output_cache_active_flushed_items 0
+# HELP windows_iis_server_output_cache_flushes_total Total number of flushes of output cache (since service startup)
+# TYPE windows_iis_server_output_cache_flushes_total counter
+windows_iis_server_output_cache_flushes_total 0
+# HELP windows_iis_server_output_cache_hits_total Total number of successful lookups in output cache (since service startup)
+# TYPE windows_iis_server_output_cache_hits_total counter
+windows_iis_server_output_cache_hits_total 0
+# HELP windows_iis_server_output_cache_items Number of items current present in output cache
+# TYPE windows_iis_server_output_cache_items counter
+windows_iis_server_output_cache_items 0
+# HELP windows_iis_server_output_cache_items_flushed_total Total number of items flushed from output cache (since service startup)
+# TYPE windows_iis_server_output_cache_items_flushed_total counter
+windows_iis_server_output_cache_items_flushed_total 0
+# HELP windows_iis_server_output_cache_memory_bytes Current number of bytes used by output cache
+# TYPE windows_iis_server_output_cache_memory_bytes counter
+windows_iis_server_output_cache_memory_bytes 0
+# HELP windows_iis_server_output_cache_queries_total Total output cache queries (hits + misses)
+# TYPE windows_iis_server_output_cache_queries_total counter
+windows_iis_server_output_cache_queries_total 4
+# HELP windows_iis_server_uri_cache_flushes_total Total number of URI cache flushes (since service startup)
+# TYPE windows_iis_server_uri_cache_flushes_total counter
+windows_iis_server_uri_cache_flushes_total{mode="kernel"} 0
+windows_iis_server_uri_cache_flushes_total{mode="user"} 0
+# HELP windows_iis_server_uri_cache_hits_total Total number of successful lookups in the URI cache (since service startup)
+# TYPE windows_iis_server_uri_cache_hits_total counter
+windows_iis_server_uri_cache_hits_total{mode="kernel"} 0
+windows_iis_server_uri_cache_hits_total{mode="user"} 0
+# HELP windows_iis_server_uri_cache_items Number of URI information blocks currently in the cache
+# TYPE windows_iis_server_uri_cache_items gauge
+windows_iis_server_uri_cache_items{mode="kernel"} 0
+windows_iis_server_uri_cache_items{mode="user"} 0
+# HELP windows_iis_server_uri_cache_items_flushed_total The number of URI information blocks that have been removed from the cache (since service startup)
+# TYPE windows_iis_server_uri_cache_items_flushed_total counter
+windows_iis_server_uri_cache_items_flushed_total{mode="kernel"} 0
+windows_iis_server_uri_cache_items_flushed_total{mode="user"} 0
+# HELP windows_iis_server_uri_cache_items_total Total number of URI information blocks added to the cache (since service startup)
+# TYPE windows_iis_server_uri_cache_items_total counter
+windows_iis_server_uri_cache_items_total{mode="kernel"} 0
+windows_iis_server_uri_cache_items_total{mode="user"} 0
+# HELP windows_iis_server_uri_cache_queries_total Total number of uri cache queries (hits + misses)
+# TYPE windows_iis_server_uri_cache_queries_total counter
+windows_iis_server_uri_cache_queries_total{mode="kernel"} 47
+windows_iis_server_uri_cache_queries_total{mode="user"} 4
+# HELP windows_iis_service_uptime Number of seconds the WebService is up (WebService.ServiceUptime)
+# TYPE windows_iis_service_uptime gauge
+windows_iis_service_uptime{site="Default Web Site"} 258633
+# HELP windows_iis_time_since_last_worker_process_failure The length of time, in seconds, since the last worker process failure occurred for the application pool (TimeSinceLastWorkerProcessFailure)
+# TYPE windows_iis_time_since_last_worker_process_failure gauge
+windows_iis_time_since_last_worker_process_failure{app="DefaultAppPool"} 1.6672399883854828e+09
+# HELP windows_iis_total_application_pool_recycles The number of times that the application pool has been recycled since Windows Process Activation Service (WAS) started (TotalApplicationPoolRecycles)
+# TYPE windows_iis_total_application_pool_recycles counter
+windows_iis_total_application_pool_recycles{app="DefaultAppPool"} 0
+# HELP windows_iis_total_application_pool_start_time The unix timestamp for the application pool of when the Windows Process Activation Service (WAS) started (TotalApplicationPoolUptime)
+# TYPE windows_iis_total_application_pool_start_time counter
+windows_iis_total_application_pool_start_time{app="DefaultAppPool"} 1.6672399883854828e+09
+# HELP windows_iis_total_worker_process_failures The number of times that worker processes have crashed since the application pool was started (TotalWorkerProcessFailures)
+# TYPE windows_iis_total_worker_process_failures counter
+windows_iis_total_worker_process_failures{app="DefaultAppPool"} 0
+# HELP windows_iis_total_worker_process_ping_failures The number of times that Windows Process Activation Service (WAS) did not receive a response to ping messages sent to a worker process (TotalWorkerProcessPingFailures)
+# TYPE windows_iis_total_worker_process_ping_failures counter
+windows_iis_total_worker_process_ping_failures{app="DefaultAppPool"} 0
+# HELP windows_iis_total_worker_process_shutdown_failures The number of times that Windows Process Activation Service (WAS) failed to shut down a worker process (TotalWorkerProcessShutdownFailures)
+# TYPE windows_iis_total_worker_process_shutdown_failures counter
+windows_iis_total_worker_process_shutdown_failures{app="DefaultAppPool"} 0
+# HELP windows_iis_total_worker_process_startup_failures The number of times that Windows Process Activation Service (WAS) failed to start a worker process (TotalWorkerProcessStartupFailures)
+# TYPE windows_iis_total_worker_process_startup_failures counter
+windows_iis_total_worker_process_startup_failures{app="DefaultAppPool"} 0
+# HELP windows_iis_total_worker_processes_created The number of worker processes created for the application pool since Windows Process Activation Service (WAS) started (TotalWorkerProcessesCreated)
+# TYPE windows_iis_total_worker_processes_created counter
+windows_iis_total_worker_processes_created{app="DefaultAppPool"} 1
+# HELP windows_iis_worker_cache_active_flushed_entries Number of file handles cached in user-mode that will be closed when all current transfers complete.
+# TYPE windows_iis_worker_cache_active_flushed_entries gauge
+windows_iis_worker_cache_active_flushed_entries{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_current_requests Current number of requests being processed by the worker process
+# TYPE windows_iis_worker_current_requests counter
+windows_iis_worker_current_requests{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_current_websocket_requests
+# TYPE windows_iis_worker_current_websocket_requests counter
+windows_iis_worker_current_websocket_requests{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_file_cache_flushes_total Total number of files removed from the user-mode cache
+# TYPE windows_iis_worker_file_cache_flushes_total counter
+windows_iis_worker_file_cache_flushes_total{app="DefaultAppPool",pid="880"} 7
+# HELP windows_iis_worker_file_cache_hits_total Total number of successful lookups in the user-mode file cache
+# TYPE windows_iis_worker_file_cache_hits_total counter
+windows_iis_worker_file_cache_hits_total{app="DefaultAppPool",pid="880"} 1
+# HELP windows_iis_worker_file_cache_items Current number of files whose contents are present in user-mode cache
+# TYPE windows_iis_worker_file_cache_items gauge
+windows_iis_worker_file_cache_items{app="DefaultAppPool",pid="880"} 1
+# HELP windows_iis_worker_file_cache_items_flushed_total Total number of file handles that have been removed from the user-mode cache (since service startup)
+# TYPE windows_iis_worker_file_cache_items_flushed_total counter
+windows_iis_worker_file_cache_items_flushed_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_file_cache_items_total Total number of files whose contents were ever added to the user-mode cache (since service startup)
+# TYPE windows_iis_worker_file_cache_items_total counter
+windows_iis_worker_file_cache_items_total{app="DefaultAppPool",pid="880"} 1
+# HELP windows_iis_worker_file_cache_max_memory_bytes Maximum number of bytes used by user-mode file cache
+# TYPE windows_iis_worker_file_cache_max_memory_bytes counter
+windows_iis_worker_file_cache_max_memory_bytes{app="DefaultAppPool",pid="880"} 703
+# HELP windows_iis_worker_file_cache_memory_bytes Current number of bytes used by user-mode file cache
+# TYPE windows_iis_worker_file_cache_memory_bytes gauge
+windows_iis_worker_file_cache_memory_bytes{app="DefaultAppPool",pid="880"} 703
+# HELP windows_iis_worker_file_cache_queries_total Total file cache queries (hits + misses)
+# TYPE windows_iis_worker_file_cache_queries_total counter
+windows_iis_worker_file_cache_queries_total{app="DefaultAppPool",pid="880"} 9
+# HELP windows_iis_worker_max_threads Maximum number of threads to which the thread pool can grow as needed
+# TYPE windows_iis_worker_max_threads counter
+windows_iis_worker_max_threads{app="DefaultAppPool",pid="880"} 256
+# HELP windows_iis_worker_metadata_cache_flushes_total Total number of user-mode metadata cache flushes (since service startup)
+# TYPE windows_iis_worker_metadata_cache_flushes_total counter
+windows_iis_worker_metadata_cache_flushes_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_metadata_cache_hits_total Total number of successful lookups in the user-mode metadata cache (since service startup)
+# TYPE windows_iis_worker_metadata_cache_hits_total counter
+windows_iis_worker_metadata_cache_hits_total{app="DefaultAppPool",pid="880"} 3
+# HELP windows_iis_worker_metadata_cache_items Number of metadata information blocks currently present in user-mode cache
+# TYPE windows_iis_worker_metadata_cache_items gauge
+windows_iis_worker_metadata_cache_items{app="DefaultAppPool",pid="880"} 1
+# HELP windows_iis_worker_metadata_cache_items_cached_total Total number of metadata information blocks added to the user-mode cache (since service startup)
+# TYPE windows_iis_worker_metadata_cache_items_cached_total counter
+windows_iis_worker_metadata_cache_items_cached_total{app="DefaultAppPool",pid="880"} 1
+# HELP windows_iis_worker_metadata_cache_items_flushed_total Total number of metadata information blocks removed from the user-mode cache (since service startup)
+# TYPE windows_iis_worker_metadata_cache_items_flushed_total counter
+windows_iis_worker_metadata_cache_items_flushed_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_metadata_cache_queries_total Total metadata cache queries (hits + misses)
+# TYPE windows_iis_worker_metadata_cache_queries_total counter
+windows_iis_worker_metadata_cache_queries_total{app="DefaultAppPool",pid="880"} 4
+# HELP windows_iis_worker_output_cache_active_flushed_items
+# TYPE windows_iis_worker_output_cache_active_flushed_items counter
+windows_iis_worker_output_cache_active_flushed_items{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_cache_flushes_total Total number of flushes of output cache (since service startup)
+# TYPE windows_iis_worker_output_cache_flushes_total counter
+windows_iis_worker_output_cache_flushes_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_cache_hits_total Total number of successful lookups in output cache (since service startup)
+# TYPE windows_iis_worker_output_cache_hits_total counter
+windows_iis_worker_output_cache_hits_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_cache_items Number of items current present in output cache
+# TYPE windows_iis_worker_output_cache_items counter
+windows_iis_worker_output_cache_items{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_cache_items_flushed_total Total number of items flushed from output cache (since service startup)
+# TYPE windows_iis_worker_output_cache_items_flushed_total counter
+windows_iis_worker_output_cache_items_flushed_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_cache_memory_bytes Current number of bytes used by output cache
+# TYPE windows_iis_worker_output_cache_memory_bytes counter
+windows_iis_worker_output_cache_memory_bytes{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_output_queries_total Total number of output cache queries (hits + misses)
+# TYPE windows_iis_worker_output_queries_total counter
+windows_iis_worker_output_queries_total{app="DefaultAppPool",pid="880"} 4
+# HELP windows_iis_worker_request_errors_total Total number of requests that returned an error
+# TYPE windows_iis_worker_request_errors_total counter
+windows_iis_worker_request_errors_total{app="DefaultAppPool",pid="880",status_code="401"} 0
+windows_iis_worker_request_errors_total{app="DefaultAppPool",pid="880",status_code="403"} 0
+windows_iis_worker_request_errors_total{app="DefaultAppPool",pid="880",status_code="404"} 1
+windows_iis_worker_request_errors_total{app="DefaultAppPool",pid="880",status_code="500"} 0
+# HELP windows_iis_worker_requests_total Total number of HTTP requests served by the worker process
+# TYPE windows_iis_worker_requests_total counter
+windows_iis_worker_requests_total{app="DefaultAppPool",pid="880"} 3
+# HELP windows_iis_worker_threads Number of threads actively processing requests in the worker process
+# TYPE windows_iis_worker_threads gauge
+windows_iis_worker_threads{app="DefaultAppPool",pid="880",state="busy"} 0
+windows_iis_worker_threads{app="DefaultAppPool",pid="880",state="idle"} 0
+# HELP windows_iis_worker_uri_cache_flushes_total Total number of URI cache flushes (since service startup)
+# TYPE windows_iis_worker_uri_cache_flushes_total counter
+windows_iis_worker_uri_cache_flushes_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_uri_cache_hits_total Total number of successful lookups in the user-mode URI cache (since service startup)
+# TYPE windows_iis_worker_uri_cache_hits_total counter
+windows_iis_worker_uri_cache_hits_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_uri_cache_items Number of URI information blocks currently in the user-mode cache
+# TYPE windows_iis_worker_uri_cache_items gauge
+windows_iis_worker_uri_cache_items{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_uri_cache_items_flushed_total The number of URI information blocks that have been removed from the user-mode cache (since service startup)
+# TYPE windows_iis_worker_uri_cache_items_flushed_total counter
+windows_iis_worker_uri_cache_items_flushed_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_uri_cache_items_total Total number of URI information blocks added to the user-mode cache (since service startup)
+# TYPE windows_iis_worker_uri_cache_items_total counter
+windows_iis_worker_uri_cache_items_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_uri_cache_queries_total Total number of uri cache queries (hits + misses)
+# TYPE windows_iis_worker_uri_cache_queries_total counter
+windows_iis_worker_uri_cache_queries_total{app="DefaultAppPool",pid="880"} 4
+# HELP windows_iis_worker_websocket_connection_accepted_total
+# TYPE windows_iis_worker_websocket_connection_accepted_total counter
+windows_iis_worker_websocket_connection_accepted_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_websocket_connection_attempts_total
+# TYPE windows_iis_worker_websocket_connection_attempts_total counter
+windows_iis_worker_websocket_connection_attempts_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_iis_worker_websocket_connection_rejected_total
+# TYPE windows_iis_worker_websocket_connection_rejected_total counter
+windows_iis_worker_websocket_connection_rejected_total{app="DefaultAppPool",pid="880"} 0
+# HELP windows_logical_disk_free_bytes Free space in bytes, updates every 10-15 min (LogicalDisk.PercentFreeSpace)
+# TYPE windows_logical_disk_free_bytes gauge
+windows_logical_disk_free_bytes{volume="C:"} 4.363649024e+10
+windows_logical_disk_free_bytes{volume="HarddiskVolume4"} 8.5983232e+07
+# HELP windows_logical_disk_idle_seconds_total Seconds that the disk was idle (LogicalDisk.PercentIdleTime)
+# TYPE windows_logical_disk_idle_seconds_total counter
+windows_logical_disk_idle_seconds_total{volume="C:"} 164591.55536549998
+windows_logical_disk_idle_seconds_total{volume="HarddiskVolume4"} 164707.1418503
+# HELP windows_logical_disk_read_bytes_total The number of bytes transferred from the disk during read operations (LogicalDisk.DiskReadBytesPerSec)
+# TYPE windows_logical_disk_read_bytes_total counter
+windows_logical_disk_read_bytes_total{volume="C:"} 1.7676328448e+10
+windows_logical_disk_read_bytes_total{volume="HarddiskVolume4"} 24576
+# HELP windows_logical_disk_read_latency_seconds_total Shows the average time, in seconds, of a read operation from the disk (LogicalDisk.AvgDiskSecPerRead)
+# TYPE windows_logical_disk_read_latency_seconds_total counter
+windows_logical_disk_read_latency_seconds_total{volume="C:"} 97.42094709999999
+windows_logical_disk_read_latency_seconds_total{volume="HarddiskVolume4"} 0.0008895999999999999
+# HELP windows_logical_disk_read_seconds_total Seconds that the disk was busy servicing read requests (LogicalDisk.PercentDiskReadTime)
+# TYPE windows_logical_disk_read_seconds_total counter
+windows_logical_disk_read_seconds_total{volume="C:"} 97.42094709999999
+windows_logical_disk_read_seconds_total{volume="HarddiskVolume4"} 0.0008895999999999999
+# HELP windows_logical_disk_read_write_latency_seconds_total Shows the time, in seconds, of the average disk transfer (LogicalDisk.AvgDiskSecPerTransfer)
+# TYPE windows_logical_disk_read_write_latency_seconds_total counter
+windows_logical_disk_read_write_latency_seconds_total{volume="C:"} 221.3335836
+windows_logical_disk_read_write_latency_seconds_total{volume="HarddiskVolume4"} 0.0031135
+# HELP windows_logical_disk_reads_total The number of read operations on the disk (LogicalDisk.DiskReadsPerSec)
+# TYPE windows_logical_disk_reads_total counter
+windows_logical_disk_reads_total{volume="C:"} 350593
+windows_logical_disk_reads_total{volume="HarddiskVolume4"} 6
+# HELP windows_logical_disk_requests_queued The number of requests queued to the disk (LogicalDisk.CurrentDiskQueueLength)
+# TYPE windows_logical_disk_requests_queued gauge
+windows_logical_disk_requests_queued{volume="C:"} 0
+windows_logical_disk_requests_queued{volume="HarddiskVolume4"} 0
+# HELP windows_logical_disk_size_bytes Total space in bytes, updates every 10-15 min (LogicalDisk.PercentFreeSpace_Base)
+# TYPE windows_logical_disk_size_bytes gauge
+windows_logical_disk_size_bytes{volume="C:"} 6.7938287616e+10
+windows_logical_disk_size_bytes{volume="HarddiskVolume4"} 6.54311424e+08
+# HELP windows_logical_disk_split_ios_total The number of I/Os to the disk were split into multiple I/Os (LogicalDisk.SplitIOPerSec)
+# TYPE windows_logical_disk_split_ios_total counter
+windows_logical_disk_split_ios_total{volume="C:"} 37836
+windows_logical_disk_split_ios_total{volume="HarddiskVolume4"} 0
+# HELP windows_logical_disk_write_bytes_total The number of bytes transferred to the disk during write operations (LogicalDisk.DiskWriteBytesPerSec)
+# TYPE windows_logical_disk_write_bytes_total counter
+windows_logical_disk_write_bytes_total{volume="C:"} 9.135282688e+09
+windows_logical_disk_write_bytes_total{volume="HarddiskVolume4"} 53248
+# HELP windows_logical_disk_write_latency_seconds_total Shows the average time, in seconds, of a write operation to the disk (LogicalDisk.AvgDiskSecPerWrite)
+# TYPE windows_logical_disk_write_latency_seconds_total counter
+windows_logical_disk_write_latency_seconds_total{volume="C:"} 123.91263649999999
+windows_logical_disk_write_latency_seconds_total{volume="HarddiskVolume4"} 0.0022239
+# HELP windows_logical_disk_write_seconds_total Seconds that the disk was busy servicing write requests (LogicalDisk.PercentDiskWriteTime)
+# TYPE windows_logical_disk_write_seconds_total counter
+windows_logical_disk_write_seconds_total{volume="C:"} 123.91263649999999
+windows_logical_disk_write_seconds_total{volume="HarddiskVolume4"} 0.0022239
+# HELP windows_logical_disk_writes_total The number of write operations on the disk (LogicalDisk.DiskWritesPerSec)
+# TYPE windows_logical_disk_writes_total counter
+windows_logical_disk_writes_total{volume="C:"} 450705
+windows_logical_disk_writes_total{volume="HarddiskVolume4"} 11
+# HELP windows_logon_logon_type Number of active logon sessions (LogonSession.LogonType)
+# TYPE windows_logon_logon_type gauge
+windows_logon_logon_type{status="batch"} 0
+windows_logon_logon_type{status="cached_interactive"} 0
+windows_logon_logon_type{status="cached_remote_interactive"} 0
+windows_logon_logon_type{status="cached_unlock"} 0
+windows_logon_logon_type{status="interactive"} 2
+windows_logon_logon_type{status="network"} 0
+windows_logon_logon_type{status="network_clear_text"} 0
+windows_logon_logon_type{status="new_credentials"} 0
+windows_logon_logon_type{status="proxy"} 0
+windows_logon_logon_type{status="remote_interactive"} 0
+windows_logon_logon_type{status="service"} 0
+windows_logon_logon_type{status="system"} 0
+windows_logon_logon_type{status="unlock"} 0
+# HELP windows_memory_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 the standby (cached), free and zero page lists (AvailableBytes)
+# TYPE windows_memory_available_bytes gauge
+windows_memory_available_bytes 1.3799424e+09
+# HELP windows_memory_cache_bytes (CacheBytes)
+# TYPE windows_memory_cache_bytes gauge
+windows_memory_cache_bytes 1.70774528e+08
+# HELP windows_memory_cache_bytes_peak (CacheBytesPeak)
+# TYPE windows_memory_cache_bytes_peak gauge
+windows_memory_cache_bytes_peak 2.08621568e+08
+# HELP windows_memory_cache_faults_total Number of faults which occur when a page sought in the file system cache is not found there and must be retrieved from elsewhere in memory (soft fault) or from disk (hard fault) (Cache Faults/sec)
+# TYPE windows_memory_cache_faults_total counter
+windows_memory_cache_faults_total 8.009603e+06
+# HELP windows_memory_commit_limit (CommitLimit)
+# TYPE windows_memory_commit_limit gauge
+windows_memory_commit_limit 5.733113856e+09
+# HELP windows_memory_committed_bytes (CommittedBytes)
+# TYPE windows_memory_committed_bytes gauge
+windows_memory_committed_bytes 3.44743936e+09
+# HELP windows_memory_demand_zero_faults_total The number of zeroed pages required to satisfy faults. Zeroed pages, pages emptied of previously stored data and filled with zeros, are a security feature of Windows that prevent processes from seeing data stored by earlier processes that used the memory space (Demand Zero Faults/sec)
+# TYPE windows_memory_demand_zero_faults_total counter
+windows_memory_demand_zero_faults_total 1.02505136e+08
+# HELP windows_memory_free_and_zero_page_list_bytes The amount of physical memory, in bytes, that is assigned to the free and zero page lists. This memory does not contain cached data. It is immediately available for allocation to a process or for system use (FreeAndZeroPageListBytes)
+# TYPE windows_memory_free_and_zero_page_list_bytes gauge
+windows_memory_free_and_zero_page_list_bytes 2.0410368e+07
+# HELP windows_memory_free_system_page_table_entries (FreeSystemPageTableEntries)
+# TYPE windows_memory_free_system_page_table_entries gauge
+windows_memory_free_system_page_table_entries 1.6722559e+07
+# HELP windows_memory_modified_page_list_bytes The amount of physical memory, in bytes, that is assigned to the modified page list. This memory contains cached data and code that is not actively in use by processes, the system and the system cache (ModifiedPageListBytes)
+# TYPE windows_memory_modified_page_list_bytes gauge
+windows_memory_modified_page_list_bytes 3.2653312e+07
+# HELP windows_memory_page_faults_total Overall rate at which faulted pages are handled by the processor (Page Faults/sec)
+# TYPE windows_memory_page_faults_total counter
+windows_memory_page_faults_total 1.19093924e+08
+# HELP windows_memory_pool_nonpaged_allocs_total The number of calls to allocate space in the nonpaged pool. The nonpaged pool is an area of system memory area for objects that cannot be written to disk, and must remain in physical memory as long as they are allocated (PoolNonpagedAllocs)
+# TYPE windows_memory_pool_nonpaged_allocs_total gauge
+windows_memory_pool_nonpaged_allocs_total 0
+# HELP windows_memory_pool_nonpaged_bytes Number of bytes in the non-paged pool, an area of the system virtual memory that is used for objects that cannot be written to disk, but must remain in physical memory as long as they are allocated (PoolNonpagedBytes)
+# TYPE windows_memory_pool_nonpaged_bytes gauge
+windows_memory_pool_nonpaged_bytes 1.26865408e+08
+# HELP windows_memory_pool_paged_allocs_total Number of calls to allocate space in the paged pool, regardless of the amount of space allocated in each call (PoolPagedAllocs)
+# TYPE windows_memory_pool_paged_allocs_total counter
+windows_memory_pool_paged_allocs_total 0
+# HELP windows_memory_pool_paged_bytes (PoolPagedBytes)
+# TYPE windows_memory_pool_paged_bytes gauge
+windows_memory_pool_paged_bytes 3.03906816e+08
+# HELP windows_memory_pool_paged_resident_bytes The size, in bytes, of the portion of the paged pool that is currently resident and active in physical memory. The paged pool is an area of the system virtual memory that is used for objects that can be written to disk when they are not being used (PoolPagedResidentBytes)
+# TYPE windows_memory_pool_paged_resident_bytes gauge
+windows_memory_pool_paged_resident_bytes 2.94293504e+08
+# HELP windows_memory_standby_cache_core_bytes The amount of physical memory, in bytes, that is assigned to the core standby cache page lists. This memory contains cached data and code that is not actively in use by processes, the system and the system cache (StandbyCacheCoreBytes)
+# TYPE windows_memory_standby_cache_core_bytes gauge
+windows_memory_standby_cache_core_bytes 1.0737664e+08
+# HELP windows_memory_standby_cache_normal_priority_bytes The amount of physical memory, in bytes, that is assigned to the normal priority standby cache page lists. This memory contains cached data and code that is not actively in use by processes, the system and the system cache (StandbyCacheNormalPriorityBytes)
+# TYPE windows_memory_standby_cache_normal_priority_bytes gauge
+windows_memory_standby_cache_normal_priority_bytes 1.019121664e+09
+# HELP windows_memory_standby_cache_reserve_bytes The amount of physical memory, in bytes, that is assigned to the reserve standby cache page lists. This memory contains cached data and code that is not actively in use by processes, the system and the system cache (StandbyCacheReserveBytes)
+# TYPE windows_memory_standby_cache_reserve_bytes gauge
+windows_memory_standby_cache_reserve_bytes 2.33033728e+08
+# HELP windows_memory_swap_page_operations_total Total number of swap page read and writes (PagesPersec)
+# TYPE windows_memory_swap_page_operations_total counter
+windows_memory_swap_page_operations_total 4.956175e+06
+# HELP windows_memory_swap_page_reads_total Number of disk page reads (a single read operation reading several pages is still only counted once) (PageReadsPersec)
+# TYPE windows_memory_swap_page_reads_total counter
+windows_memory_swap_page_reads_total 402087
+# HELP windows_memory_swap_page_writes_total Number of disk page writes (a single write operation writing several pages is still only counted once) (PageWritesPersec)
+# TYPE windows_memory_swap_page_writes_total counter
+windows_memory_swap_page_writes_total 7012
+# HELP windows_memory_swap_pages_read_total Number of pages read across all page reads (ie counting all pages read even if they are read in a single operation) (PagesInputPersec)
+# TYPE windows_memory_swap_pages_read_total counter
+windows_memory_swap_pages_read_total 4.643279e+06
+# HELP windows_memory_swap_pages_written_total Number of pages written across all page writes (ie counting all pages written even if they are written in a single operation) (PagesOutputPersec)
+# TYPE windows_memory_swap_pages_written_total counter
+windows_memory_swap_pages_written_total 312896
+# HELP windows_memory_system_cache_resident_bytes The size, in bytes, of the portion of the system file cache which is currently resident and active in physical memory (SystemCacheResidentBytes)
+# TYPE windows_memory_system_cache_resident_bytes gauge
+windows_memory_system_cache_resident_bytes 1.70774528e+08
+# HELP windows_memory_system_code_resident_bytes The size, in bytes, of the pageable operating system code that is currently resident and active in physical memory (SystemCodeResidentBytes)
+# TYPE windows_memory_system_code_resident_bytes gauge
+windows_memory_system_code_resident_bytes 1.71008e+07
+# HELP windows_memory_system_code_total_bytes The size, in bytes, of the pageable operating system code currently mapped into the system virtual address space (SystemCodeTotalBytes)
+# TYPE windows_memory_system_code_total_bytes gauge
+windows_memory_system_code_total_bytes 8192
+# HELP windows_memory_system_driver_resident_bytes The size, in bytes, of the pageable physical memory being used by device drivers. It is the working set (physical memory area) of the drivers (SystemDriverResidentBytes)
+# TYPE windows_memory_system_driver_resident_bytes gauge
+windows_memory_system_driver_resident_bytes 4.6092288e+07
+# HELP windows_memory_system_driver_total_bytes The size, in bytes, of the pageable virtual memory currently being used by device drivers. Pageable memory can be written to disk when it is not being used (SystemDriverTotalBytes)
+# TYPE windows_memory_system_driver_total_bytes gauge
+windows_memory_system_driver_total_bytes 1.8731008e+07
+# HELP windows_memory_transition_faults_total Number of faults rate at which page faults are resolved by recovering pages that were being used by another process sharing the page, or were on the modified page list or the standby list, or were being written to disk at the time of the page fault (TransitionFaultsPersec)
+# TYPE windows_memory_transition_faults_total counter
+windows_memory_transition_faults_total 2.7183527e+07
+# HELP windows_memory_transition_pages_repurposed_total Transition Pages RePurposed is the rate at which the number of transition cache pages were reused for a different purpose (TransitionPagesRePurposedPersec)
+# TYPE windows_memory_transition_pages_repurposed_total counter
+windows_memory_transition_pages_repurposed_total 2.856471e+06
+# HELP windows_memory_write_copies_total The number of page faults caused by attempting to write that were satisfied by copying the page from elsewhere in physical memory (WriteCopiesPersec)
+# TYPE windows_memory_write_copies_total counter
+windows_memory_write_copies_total 1.194039e+06
+# HELP windows_mssql_accessmethods_au_batch_cleanup_failures (AccessMethods.FailedAUcleanupbatches)
+# TYPE windows_mssql_accessmethods_au_batch_cleanup_failures counter
+windows_mssql_accessmethods_au_batch_cleanup_failures{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_au_batch_cleanups (AccessMethods.AUcleanupbatches)
+# TYPE windows_mssql_accessmethods_au_batch_cleanups counter
+windows_mssql_accessmethods_au_batch_cleanups{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_au_cleanups (AccessMethods.AUcleanups)
+# TYPE windows_mssql_accessmethods_au_cleanups counter
+windows_mssql_accessmethods_au_cleanups{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_by_reference_lob_creates (AccessMethods.ByreferenceLobCreateCount)
+# TYPE windows_mssql_accessmethods_by_reference_lob_creates counter
+windows_mssql_accessmethods_by_reference_lob_creates{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_by_reference_lob_uses (AccessMethods.ByreferenceLobUseCount)
+# TYPE windows_mssql_accessmethods_by_reference_lob_uses counter
+windows_mssql_accessmethods_by_reference_lob_uses{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_column_value_pulls (AccessMethods.CountPullInRow)
+# TYPE windows_mssql_accessmethods_column_value_pulls counter
+windows_mssql_accessmethods_column_value_pulls{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_column_value_pushes (AccessMethods.CountPushOffRow)
+# TYPE windows_mssql_accessmethods_column_value_pushes counter
+windows_mssql_accessmethods_column_value_pushes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_deferred_dropped_aus (AccessMethods.DeferreddroppedAUs)
+# TYPE windows_mssql_accessmethods_deferred_dropped_aus gauge
+windows_mssql_accessmethods_deferred_dropped_aus{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_deferred_dropped_rowsets (AccessMethods.DeferredDroppedrowsets)
+# TYPE windows_mssql_accessmethods_deferred_dropped_rowsets gauge
+windows_mssql_accessmethods_deferred_dropped_rowsets{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_dropped_rowset_cleanups (AccessMethods.Droppedrowsetcleanups)
+# TYPE windows_mssql_accessmethods_dropped_rowset_cleanups counter
+windows_mssql_accessmethods_dropped_rowset_cleanups{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_dropped_rowset_skips (AccessMethods.Droppedrowsetsskipped)
+# TYPE windows_mssql_accessmethods_dropped_rowset_skips counter
+windows_mssql_accessmethods_dropped_rowset_skips{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_extent_allocations (AccessMethods.ExtentsAllocated)
+# TYPE windows_mssql_accessmethods_extent_allocations counter
+windows_mssql_accessmethods_extent_allocations{mssql_instance="SQLEXPRESS"} 16
+# HELP windows_mssql_accessmethods_extent_deallocations (AccessMethods.ExtentDeallocations)
+# TYPE windows_mssql_accessmethods_extent_deallocations counter
+windows_mssql_accessmethods_extent_deallocations{mssql_instance="SQLEXPRESS"} 3
+# HELP windows_mssql_accessmethods_forwarded_records (AccessMethods.ForwardedRecords)
+# TYPE windows_mssql_accessmethods_forwarded_records counter
+windows_mssql_accessmethods_forwarded_records{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_free_space_page_fetches (AccessMethods.FreeSpacePageFetches)
+# TYPE windows_mssql_accessmethods_free_space_page_fetches counter
+windows_mssql_accessmethods_free_space_page_fetches{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_free_space_scans (AccessMethods.FreeSpaceScans)
+# TYPE windows_mssql_accessmethods_free_space_scans counter
+windows_mssql_accessmethods_free_space_scans{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_full_scans (AccessMethods.FullScans)
+# TYPE windows_mssql_accessmethods_full_scans counter
+windows_mssql_accessmethods_full_scans{mssql_instance="SQLEXPRESS"} 8743
+# HELP windows_mssql_accessmethods_ghost_record_skips (AccessMethods.SkippedGhostedRecordsPersec)
+# TYPE windows_mssql_accessmethods_ghost_record_skips counter
+windows_mssql_accessmethods_ghost_record_skips{mssql_instance="SQLEXPRESS"} 20
+# HELP windows_mssql_accessmethods_index_searches (AccessMethods.IndexSearches)
+# TYPE windows_mssql_accessmethods_index_searches counter
+windows_mssql_accessmethods_index_searches{mssql_instance="SQLEXPRESS"} 843808
+# HELP windows_mssql_accessmethods_insysxact_waits (AccessMethods.InSysXactwaits)
+# TYPE windows_mssql_accessmethods_insysxact_waits counter
+windows_mssql_accessmethods_insysxact_waits{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_leaf_page_cookie_failures (AccessMethods.Failedleafpagecookie)
+# TYPE windows_mssql_accessmethods_leaf_page_cookie_failures counter
+windows_mssql_accessmethods_leaf_page_cookie_failures{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_leaf_page_cookie_uses (AccessMethods.Usedleafpagecookie)
+# TYPE windows_mssql_accessmethods_leaf_page_cookie_uses counter
+windows_mssql_accessmethods_leaf_page_cookie_uses{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_lob_handle_creates (AccessMethods.LobHandleCreateCount)
+# TYPE windows_mssql_accessmethods_lob_handle_creates counter
+windows_mssql_accessmethods_lob_handle_creates{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_lob_handle_destroys (AccessMethods.LobHandleDestroyCount)
+# TYPE windows_mssql_accessmethods_lob_handle_destroys counter
+windows_mssql_accessmethods_lob_handle_destroys{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_lob_read_aheads (AccessMethods.CountLobReadahead)
+# TYPE windows_mssql_accessmethods_lob_read_aheads counter
+windows_mssql_accessmethods_lob_read_aheads{mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_accessmethods_lob_ss_provider_creates (AccessMethods.LobSSProviderCreateCount)
+# TYPE windows_mssql_accessmethods_lob_ss_provider_creates counter
+windows_mssql_accessmethods_lob_ss_provider_creates{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_lob_ss_provider_destroys (AccessMethods.LobSSProviderDestroyCount)
+# TYPE windows_mssql_accessmethods_lob_ss_provider_destroys counter
+windows_mssql_accessmethods_lob_ss_provider_destroys{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_lob_ss_provider_truncations (AccessMethods.LobSSProviderTruncationCount)
+# TYPE windows_mssql_accessmethods_lob_ss_provider_truncations counter
+windows_mssql_accessmethods_lob_ss_provider_truncations{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_mixed_page_allocations (AccessMethods.MixedpageallocationsPersec)
+# TYPE windows_mssql_accessmethods_mixed_page_allocations counter
+windows_mssql_accessmethods_mixed_page_allocations{mssql_instance="SQLEXPRESS"} 66
+# HELP windows_mssql_accessmethods_page_allocations (AccessMethods.PagesAllocatedPersec)
+# TYPE windows_mssql_accessmethods_page_allocations counter
+windows_mssql_accessmethods_page_allocations{mssql_instance="SQLEXPRESS"} 83
+# HELP windows_mssql_accessmethods_page_compression_attempts (AccessMethods.PagecompressionattemptsPersec)
+# TYPE windows_mssql_accessmethods_page_compression_attempts counter
+windows_mssql_accessmethods_page_compression_attempts{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_page_compressions (AccessMethods.PagescompressedPersec)
+# TYPE windows_mssql_accessmethods_page_compressions counter
+windows_mssql_accessmethods_page_compressions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_page_deallocations (AccessMethods.PageDeallocationsPersec)
+# TYPE windows_mssql_accessmethods_page_deallocations counter
+windows_mssql_accessmethods_page_deallocations{mssql_instance="SQLEXPRESS"} 60
+# HELP windows_mssql_accessmethods_page_splits (AccessMethods.PageSplitsPersec)
+# TYPE windows_mssql_accessmethods_page_splits counter
+windows_mssql_accessmethods_page_splits{mssql_instance="SQLEXPRESS"} 429
+# HELP windows_mssql_accessmethods_probe_scans (AccessMethods.ProbeScansPersec)
+# TYPE windows_mssql_accessmethods_probe_scans counter
+windows_mssql_accessmethods_probe_scans{mssql_instance="SQLEXPRESS"} 217563
+# HELP windows_mssql_accessmethods_range_scans (AccessMethods.RangeScansPersec)
+# TYPE windows_mssql_accessmethods_range_scans counter
+windows_mssql_accessmethods_range_scans{mssql_instance="SQLEXPRESS"} 590779
+# HELP windows_mssql_accessmethods_scan_point_revalidations (AccessMethods.ScanPointRevalidationsPersec)
+# TYPE windows_mssql_accessmethods_scan_point_revalidations counter
+windows_mssql_accessmethods_scan_point_revalidations{mssql_instance="SQLEXPRESS"} 5
+# HELP windows_mssql_accessmethods_table_lock_escalations (AccessMethods.TableLockEscalationsPersec)
+# TYPE windows_mssql_accessmethods_table_lock_escalations counter
+windows_mssql_accessmethods_table_lock_escalations{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_tree_page_cookie_failures (AccessMethods.Failedtreepagecookie)
+# TYPE windows_mssql_accessmethods_tree_page_cookie_failures counter
+windows_mssql_accessmethods_tree_page_cookie_failures{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_tree_page_cookie_uses (AccessMethods.Usedtreepagecookie)
+# TYPE windows_mssql_accessmethods_tree_page_cookie_uses counter
+windows_mssql_accessmethods_tree_page_cookie_uses{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_accessmethods_workfile_creates (AccessMethods.WorkfilesCreatedPersec)
+# TYPE windows_mssql_accessmethods_workfile_creates counter
+windows_mssql_accessmethods_workfile_creates{mssql_instance="SQLEXPRESS"} 96
+# HELP windows_mssql_accessmethods_worktables_creates (AccessMethods.WorktablesCreatedPersec)
+# TYPE windows_mssql_accessmethods_worktables_creates counter
+windows_mssql_accessmethods_worktables_creates{mssql_instance="SQLEXPRESS"} 557
+# HELP windows_mssql_accessmethods_worktables_from_cache_hits (AccessMethods.WorktablesFromCacheRatio)
+# TYPE windows_mssql_accessmethods_worktables_from_cache_hits counter
+windows_mssql_accessmethods_worktables_from_cache_hits{mssql_instance="SQLEXPRESS"} 357
+# HELP windows_mssql_accessmethods_worktables_from_cache_lookups (AccessMethods.WorktablesFromCacheRatio_Base)
+# TYPE windows_mssql_accessmethods_worktables_from_cache_lookups counter
+windows_mssql_accessmethods_worktables_from_cache_lookups{mssql_instance="SQLEXPRESS"} 364
+# HELP windows_mssql_bufman_background_writer_pages (BufferManager.Backgroundwriterpages)
+# TYPE windows_mssql_bufman_background_writer_pages counter
+windows_mssql_bufman_background_writer_pages{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_buffer_cache_hits (BufferManager.Buffercachehitratio)
+# TYPE windows_mssql_bufman_buffer_cache_hits gauge
+windows_mssql_bufman_buffer_cache_hits{mssql_instance="SQLEXPRESS"} 86
+# HELP windows_mssql_bufman_buffer_cache_lookups (BufferManager.Buffercachehitratio_Base)
+# TYPE windows_mssql_bufman_buffer_cache_lookups gauge
+windows_mssql_bufman_buffer_cache_lookups{mssql_instance="SQLEXPRESS"} 86
+# HELP windows_mssql_bufman_checkpoint_pages (BufferManager.Checkpointpages)
+# TYPE windows_mssql_bufman_checkpoint_pages counter
+windows_mssql_bufman_checkpoint_pages{mssql_instance="SQLEXPRESS"} 82
+# HELP windows_mssql_bufman_database_pages (BufferManager.Databasepages)
+# TYPE windows_mssql_bufman_database_pages gauge
+windows_mssql_bufman_database_pages{mssql_instance="SQLEXPRESS"} 829
+# HELP windows_mssql_bufman_extension_allocated_pages (BufferManager.Extensionallocatedpages)
+# TYPE windows_mssql_bufman_extension_allocated_pages gauge
+windows_mssql_bufman_extension_allocated_pages{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_free_pages (BufferManager.Extensionfreepages)
+# TYPE windows_mssql_bufman_extension_free_pages gauge
+windows_mssql_bufman_extension_free_pages{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_in_use_as_percentage (BufferManager.Extensioninuseaspercentage)
+# TYPE windows_mssql_bufman_extension_in_use_as_percentage gauge
+windows_mssql_bufman_extension_in_use_as_percentage{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_outstanding_io (BufferManager.ExtensionoutstandingIOcounter)
+# TYPE windows_mssql_bufman_extension_outstanding_io gauge
+windows_mssql_bufman_extension_outstanding_io{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_page_evictions (BufferManager.Extensionpageevictions)
+# TYPE windows_mssql_bufman_extension_page_evictions counter
+windows_mssql_bufman_extension_page_evictions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_page_reads (BufferManager.Extensionpagereads)
+# TYPE windows_mssql_bufman_extension_page_reads counter
+windows_mssql_bufman_extension_page_reads{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_page_unreferenced_seconds (BufferManager.Extensionpageunreferencedtime)
+# TYPE windows_mssql_bufman_extension_page_unreferenced_seconds gauge
+windows_mssql_bufman_extension_page_unreferenced_seconds{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_extension_page_writes (BufferManager.Extensionpagewrites)
+# TYPE windows_mssql_bufman_extension_page_writes counter
+windows_mssql_bufman_extension_page_writes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_free_list_stalls (BufferManager.Freeliststalls)
+# TYPE windows_mssql_bufman_free_list_stalls counter
+windows_mssql_bufman_free_list_stalls{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_integral_controller_slope (BufferManager.IntegralControllerSlope)
+# TYPE windows_mssql_bufman_integral_controller_slope gauge
+windows_mssql_bufman_integral_controller_slope{mssql_instance="SQLEXPRESS"} 10
+# HELP windows_mssql_bufman_lazywrites (BufferManager.Lazywrites)
+# TYPE windows_mssql_bufman_lazywrites counter
+windows_mssql_bufman_lazywrites{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_bufman_page_life_expectancy_seconds (BufferManager.Pagelifeexpectancy)
+# TYPE windows_mssql_bufman_page_life_expectancy_seconds gauge
+windows_mssql_bufman_page_life_expectancy_seconds{mssql_instance="SQLEXPRESS"} 191350
+# HELP windows_mssql_bufman_page_lookups (BufferManager.Pagelookups)
+# TYPE windows_mssql_bufman_page_lookups counter
+windows_mssql_bufman_page_lookups{mssql_instance="SQLEXPRESS"} 1.699668e+06
+# HELP windows_mssql_bufman_page_reads (BufferManager.Pagereads)
+# TYPE windows_mssql_bufman_page_reads counter
+windows_mssql_bufman_page_reads{mssql_instance="SQLEXPRESS"} 797
+# HELP windows_mssql_bufman_page_writes (BufferManager.Pagewrites)
+# TYPE windows_mssql_bufman_page_writes counter
+windows_mssql_bufman_page_writes{mssql_instance="SQLEXPRESS"} 92
+# HELP windows_mssql_bufman_read_ahead_issuing_seconds (BufferManager.Readaheadtime)
+# TYPE windows_mssql_bufman_read_ahead_issuing_seconds counter
+windows_mssql_bufman_read_ahead_issuing_seconds{mssql_instance="SQLEXPRESS"} 1292
+# HELP windows_mssql_bufman_read_ahead_pages (BufferManager.Readaheadpages)
+# TYPE windows_mssql_bufman_read_ahead_pages counter
+windows_mssql_bufman_read_ahead_pages{mssql_instance="SQLEXPRESS"} 94
+# HELP windows_mssql_bufman_target_pages (BufferManager.Targetpages)
+# TYPE windows_mssql_bufman_target_pages gauge
+windows_mssql_bufman_target_pages{mssql_instance="SQLEXPRESS"} 180480
+# HELP windows_mssql_collector_duration_seconds windows_exporter: Duration of an mssql child collection.
+# TYPE windows_mssql_collector_duration_seconds gauge
+windows_mssql_collector_duration_seconds{collector="accessmethods",mssql_instance="SQLEXPRESS"} 0.0009723
+windows_mssql_collector_duration_seconds{collector="availreplica",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="bufman",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="databases",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="dbreplica",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="genstats",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="locks",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="memmgr",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="sqlerrors",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="sqlstats",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="transactions",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_collector_duration_seconds{collector="waitstats",mssql_instance="SQLEXPRESS"} 0.0012212
+# HELP windows_mssql_collector_success windows_exporter: Whether a mssql child collector was successful.
+# TYPE windows_mssql_collector_success gauge
+windows_mssql_collector_success{collector="accessmethods",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="availreplica",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="bufman",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="databases",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="dbreplica",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="genstats",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="locks",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="memmgr",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="sqlerrors",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="sqlstats",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="transactions",mssql_instance="SQLEXPRESS"} 1
+windows_mssql_collector_success{collector="waitstats",mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_databases_active_parallel_redo_threads (Databases.ActiveParallelredothreads)
+# TYPE windows_mssql_databases_active_parallel_redo_threads gauge
+windows_mssql_databases_active_parallel_redo_threads{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_parallel_redo_threads{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_parallel_redo_threads{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_parallel_redo_threads{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_parallel_redo_threads{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_active_transactions (Databases.ActiveTransactions)
+# TYPE windows_mssql_databases_active_transactions gauge
+windows_mssql_databases_active_transactions{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_transactions{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_active_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_backup_restore_operations (Databases.BackupPerRestoreThroughput)
+# TYPE windows_mssql_databases_backup_restore_operations counter
+windows_mssql_databases_backup_restore_operations{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_backup_restore_operations{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_backup_restore_operations{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_backup_restore_operations{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_backup_restore_operations{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_bulk_copy_bytes (Databases.BulkCopyThroughput)
+# TYPE windows_mssql_databases_bulk_copy_bytes counter
+windows_mssql_databases_bulk_copy_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_bulk_copy_rows (Databases.BulkCopyRows)
+# TYPE windows_mssql_databases_bulk_copy_rows counter
+windows_mssql_databases_bulk_copy_rows{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_rows{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_rows{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_rows{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_bulk_copy_rows{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_commit_table_entries (Databases.Committableentries)
+# TYPE windows_mssql_databases_commit_table_entries gauge
+windows_mssql_databases_commit_table_entries{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_commit_table_entries{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_commit_table_entries{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_commit_table_entries{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_commit_table_entries{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_data_files_size_bytes (Databases.DataFilesSizeKB)
+# TYPE windows_mssql_databases_data_files_size_bytes gauge
+windows_mssql_databases_data_files_size_bytes{database="master",mssql_instance="SQLEXPRESS"} 4.653056e+06
+windows_mssql_databases_data_files_size_bytes{database="model",mssql_instance="SQLEXPRESS"} 8.388608e+06
+windows_mssql_databases_data_files_size_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 1.5466496e+07
+windows_mssql_databases_data_files_size_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 4.194304e+07
+windows_mssql_databases_data_files_size_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 8.388608e+06
+# HELP windows_mssql_databases_dbcc_logical_scan_bytes (Databases.DBCCLogicalScanBytes)
+# TYPE windows_mssql_databases_dbcc_logical_scan_bytes counter
+windows_mssql_databases_dbcc_logical_scan_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_dbcc_logical_scan_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_dbcc_logical_scan_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_dbcc_logical_scan_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_dbcc_logical_scan_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_group_commit_stall_seconds (Databases.GroupCommitTime)
+# TYPE windows_mssql_databases_group_commit_stall_seconds counter
+windows_mssql_databases_group_commit_stall_seconds{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_group_commit_stall_seconds{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_group_commit_stall_seconds{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_group_commit_stall_seconds{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_group_commit_stall_seconds{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_cache_hits (Databases.LogCacheHitRatio)
+# TYPE windows_mssql_databases_log_cache_hits gauge
+windows_mssql_databases_log_cache_hits{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_hits{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_hits{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_hits{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_hits{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_cache_lookups (Databases.LogCacheHitRatio_Base)
+# TYPE windows_mssql_databases_log_cache_lookups gauge
+windows_mssql_databases_log_cache_lookups{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_lookups{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_lookups{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_lookups{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_lookups{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_cache_reads (Databases.LogCacheReads)
+# TYPE windows_mssql_databases_log_cache_reads counter
+windows_mssql_databases_log_cache_reads{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_reads{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_reads{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_reads{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_cache_reads{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_files_size_bytes (Databases.LogFilesSizeKB)
+# TYPE windows_mssql_databases_log_files_size_bytes gauge
+windows_mssql_databases_log_files_size_bytes{database="master",mssql_instance="SQLEXPRESS"} 2.08896e+06
+windows_mssql_databases_log_files_size_bytes{database="model",mssql_instance="SQLEXPRESS"} 8.380416e+06
+windows_mssql_databases_log_files_size_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 778240
+windows_mssql_databases_log_files_size_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 1.302528e+06
+windows_mssql_databases_log_files_size_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 8.380416e+06
+# HELP windows_mssql_databases_log_files_used_size_bytes (Databases.LogFilesUsedSizeKB)
+# TYPE windows_mssql_databases_log_files_used_size_bytes gauge
+windows_mssql_databases_log_files_used_size_bytes{database="master",mssql_instance="SQLEXPRESS"} 1.210368e+06
+windows_mssql_databases_log_files_used_size_bytes{database="model",mssql_instance="SQLEXPRESS"} 585728
+windows_mssql_databases_log_files_used_size_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 532480
+windows_mssql_databases_log_files_used_size_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 637952
+windows_mssql_databases_log_files_used_size_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 565248
+# HELP windows_mssql_databases_log_flush_wait_seconds (Databases.LogFlushWaitTime)
+# TYPE windows_mssql_databases_log_flush_wait_seconds gauge
+windows_mssql_databases_log_flush_wait_seconds{database="master",mssql_instance="SQLEXPRESS"} 0.226
+windows_mssql_databases_log_flush_wait_seconds{database="model",mssql_instance="SQLEXPRESS"} 0.002
+windows_mssql_databases_log_flush_wait_seconds{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_wait_seconds{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_wait_seconds{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_flush_waits (Databases.LogFlushWaits)
+# TYPE windows_mssql_databases_log_flush_waits counter
+windows_mssql_databases_log_flush_waits{database="master",mssql_instance="SQLEXPRESS"} 245
+windows_mssql_databases_log_flush_waits{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_flush_waits{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_waits{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_waits{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_flush_write_seconds (Databases.LogFlushWriteTimems)
+# TYPE windows_mssql_databases_log_flush_write_seconds gauge
+windows_mssql_databases_log_flush_write_seconds{database="master",mssql_instance="SQLEXPRESS"} 0.164
+windows_mssql_databases_log_flush_write_seconds{database="model",mssql_instance="SQLEXPRESS"} 0.002
+windows_mssql_databases_log_flush_write_seconds{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_write_seconds{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flush_write_seconds{database="tempdb",mssql_instance="SQLEXPRESS"} 0.002
+# HELP windows_mssql_databases_log_flushed_bytes (Databases.LogBytesFlushed)
+# TYPE windows_mssql_databases_log_flushed_bytes counter
+windows_mssql_databases_log_flushed_bytes{database="master",mssql_instance="SQLEXPRESS"} 3.702784e+06
+windows_mssql_databases_log_flushed_bytes{database="model",mssql_instance="SQLEXPRESS"} 12288
+windows_mssql_databases_log_flushed_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flushed_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flushed_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 118784
+# HELP windows_mssql_databases_log_flushes (Databases.LogFlushes)
+# TYPE windows_mssql_databases_log_flushes counter
+windows_mssql_databases_log_flushes{database="master",mssql_instance="SQLEXPRESS"} 252
+windows_mssql_databases_log_flushes{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_flushes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_flushes{database="tempdb",mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_databases_log_growths (Databases.LogGrowths)
+# TYPE windows_mssql_databases_log_growths gauge
+windows_mssql_databases_log_growths{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_growths{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_growths{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_growths{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_growths{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_cache_misses (Databases.LogPoolCacheMisses)
+# TYPE windows_mssql_databases_log_pool_cache_misses counter
+windows_mssql_databases_log_pool_cache_misses{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_cache_misses{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_cache_misses{database="msdb",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_cache_misses{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_cache_misses{database="tempdb",mssql_instance="SQLEXPRESS"} 3
+# HELP windows_mssql_databases_log_pool_disk_reads (Databases.LogPoolDiskReads)
+# TYPE windows_mssql_databases_log_pool_disk_reads counter
+windows_mssql_databases_log_pool_disk_reads{database="master",mssql_instance="SQLEXPRESS"} 2
+windows_mssql_databases_log_pool_disk_reads{database="model",mssql_instance="SQLEXPRESS"} 2
+windows_mssql_databases_log_pool_disk_reads{database="msdb",mssql_instance="SQLEXPRESS"} 2
+windows_mssql_databases_log_pool_disk_reads{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_disk_reads{database="tempdb",mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_databases_log_pool_empty_free_pool_pushes (Databases.LogPoolPushEmptyFreePool)
+# TYPE windows_mssql_databases_log_pool_empty_free_pool_pushes counter
+windows_mssql_databases_log_pool_empty_free_pool_pushes{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_empty_free_pool_pushes{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_empty_free_pool_pushes{database="msdb",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_empty_free_pool_pushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_empty_free_pool_pushes{database="tempdb",mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_databases_log_pool_hash_deletes (Databases.LogPoolHashDeletes)
+# TYPE windows_mssql_databases_log_pool_hash_deletes counter
+windows_mssql_databases_log_pool_hash_deletes{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_deletes{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_deletes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_hash_deletes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_hash_deletes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_hash_inserts (Databases.LogPoolHashInserts)
+# TYPE windows_mssql_databases_log_pool_hash_inserts counter
+windows_mssql_databases_log_pool_hash_inserts{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_inserts{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_inserts{database="msdb",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_inserts{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_hash_inserts{database="tempdb",mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_databases_log_pool_invalid_hash_entries (Databases.LogPoolInvalidHashEntry)
+# TYPE windows_mssql_databases_log_pool_invalid_hash_entries counter
+windows_mssql_databases_log_pool_invalid_hash_entries{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_invalid_hash_entries{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_invalid_hash_entries{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_invalid_hash_entries{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_invalid_hash_entries{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_log_scan_pushes (Databases.LogPoolLogScanPushes)
+# TYPE windows_mssql_databases_log_pool_log_scan_pushes counter
+windows_mssql_databases_log_pool_log_scan_pushes{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_log_scan_pushes{database="model",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_log_scan_pushes{database="msdb",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_log_scan_pushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_pool_log_scan_pushes{database="tempdb",mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_databases_log_pool_log_writer_pushes (Databases.LogPoolLogWriterPushes)
+# TYPE windows_mssql_databases_log_pool_log_writer_pushes counter
+windows_mssql_databases_log_pool_log_writer_pushes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_log_writer_pushes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_log_writer_pushes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_log_writer_pushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_log_writer_pushes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_low_memory_pushes (Databases.LogPoolPushLowMemory)
+# TYPE windows_mssql_databases_log_pool_low_memory_pushes counter
+windows_mssql_databases_log_pool_low_memory_pushes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_low_memory_pushes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_low_memory_pushes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_low_memory_pushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_low_memory_pushes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_no_free_buffer_pushes (Databases.LogPoolPushNoFreeBuffer)
+# TYPE windows_mssql_databases_log_pool_no_free_buffer_pushes counter
+windows_mssql_databases_log_pool_no_free_buffer_pushes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_no_free_buffer_pushes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_no_free_buffer_pushes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_no_free_buffer_pushes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_no_free_buffer_pushes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_req_behind_trunc (Databases.LogPoolReqBehindTrunc)
+# TYPE windows_mssql_databases_log_pool_req_behind_trunc counter
+windows_mssql_databases_log_pool_req_behind_trunc{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_req_behind_trunc{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_req_behind_trunc{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_req_behind_trunc{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_req_behind_trunc{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_pool_requests (Databases.LogPoolRequests)
+# TYPE windows_mssql_databases_log_pool_requests counter
+windows_mssql_databases_log_pool_requests{database="master",mssql_instance="SQLEXPRESS"} 8
+windows_mssql_databases_log_pool_requests{database="model",mssql_instance="SQLEXPRESS"} 8
+windows_mssql_databases_log_pool_requests{database="msdb",mssql_instance="SQLEXPRESS"} 8
+windows_mssql_databases_log_pool_requests{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 8
+windows_mssql_databases_log_pool_requests{database="tempdb",mssql_instance="SQLEXPRESS"} 4
+# HELP windows_mssql_databases_log_pool_requests_old_vlf (Databases.LogPoolRequestsOldVLF)
+# TYPE windows_mssql_databases_log_pool_requests_old_vlf counter
+windows_mssql_databases_log_pool_requests_old_vlf{database="master",mssql_instance="SQLEXPRESS"} 4
+windows_mssql_databases_log_pool_requests_old_vlf{database="model",mssql_instance="SQLEXPRESS"} 4
+windows_mssql_databases_log_pool_requests_old_vlf{database="msdb",mssql_instance="SQLEXPRESS"} 4
+windows_mssql_databases_log_pool_requests_old_vlf{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 4
+windows_mssql_databases_log_pool_requests_old_vlf{database="tempdb",mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_databases_log_pool_total_active_log_bytes (Databases.LogPoolTotalActiveLogSize)
+# TYPE windows_mssql_databases_log_pool_total_active_log_bytes gauge
+windows_mssql_databases_log_pool_total_active_log_bytes{database="master",mssql_instance="SQLEXPRESS"} 806912
+windows_mssql_databases_log_pool_total_active_log_bytes{database="model",mssql_instance="SQLEXPRESS"} 1.855488e+06
+windows_mssql_databases_log_pool_total_active_log_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 118784
+windows_mssql_databases_log_pool_total_active_log_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 107008
+windows_mssql_databases_log_pool_total_active_log_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 2.142208e+06
+# HELP windows_mssql_databases_log_pool_total_shared_pool_bytes (Databases.LogPoolTotalSharedPoolSize)
+# TYPE windows_mssql_databases_log_pool_total_shared_pool_bytes gauge
+windows_mssql_databases_log_pool_total_shared_pool_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_total_shared_pool_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_pool_total_shared_pool_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 16384
+windows_mssql_databases_log_pool_total_shared_pool_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 67584
+windows_mssql_databases_log_pool_total_shared_pool_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 4096
+# HELP windows_mssql_databases_log_shrinks (Databases.LogShrinks)
+# TYPE windows_mssql_databases_log_shrinks gauge
+windows_mssql_databases_log_shrinks{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_shrinks{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_shrinks{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_shrinks{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_shrinks{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_truncations (Databases.LogTruncations)
+# TYPE windows_mssql_databases_log_truncations gauge
+windows_mssql_databases_log_truncations{database="master",mssql_instance="SQLEXPRESS"} 3
+windows_mssql_databases_log_truncations{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_truncations{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_truncations{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_log_truncations{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_log_used_percent (Databases.PercentLogUsed)
+# TYPE windows_mssql_databases_log_used_percent gauge
+windows_mssql_databases_log_used_percent{database="master",mssql_instance="SQLEXPRESS"} 57
+windows_mssql_databases_log_used_percent{database="model",mssql_instance="SQLEXPRESS"} 6
+windows_mssql_databases_log_used_percent{database="msdb",mssql_instance="SQLEXPRESS"} 68
+windows_mssql_databases_log_used_percent{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 49
+windows_mssql_databases_log_used_percent{database="tempdb",mssql_instance="SQLEXPRESS"} 6
+# HELP windows_mssql_databases_pending_repl_transactions (Databases.ReplPendingTransactions)
+# TYPE windows_mssql_databases_pending_repl_transactions gauge
+windows_mssql_databases_pending_repl_transactions{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_pending_repl_transactions{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_pending_repl_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_pending_repl_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_pending_repl_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_repl_transactions (Databases.ReplTranactions)
+# TYPE windows_mssql_databases_repl_transactions counter
+windows_mssql_databases_repl_transactions{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_repl_transactions{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_repl_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_repl_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_repl_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_shrink_data_movement_bytes (Databases.ShrinkDataMovementBytes)
+# TYPE windows_mssql_databases_shrink_data_movement_bytes counter
+windows_mssql_databases_shrink_data_movement_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_shrink_data_movement_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_shrink_data_movement_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_shrink_data_movement_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_shrink_data_movement_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_tracked_transactions (Databases.Trackedtransactions)
+# TYPE windows_mssql_databases_tracked_transactions counter
+windows_mssql_databases_tracked_transactions{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_tracked_transactions{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_tracked_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_tracked_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_tracked_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_transactions (Databases.Transactions)
+# TYPE windows_mssql_databases_transactions counter
+windows_mssql_databases_transactions{database="master",mssql_instance="SQLEXPRESS"} 2183
+windows_mssql_databases_transactions{database="model",mssql_instance="SQLEXPRESS"} 4467
+windows_mssql_databases_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 4582
+windows_mssql_databases_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 2
+windows_mssql_databases_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 1558
+# HELP windows_mssql_databases_write_transactions (Databases.WriteTransactions)
+# TYPE windows_mssql_databases_write_transactions counter
+windows_mssql_databases_write_transactions{database="master",mssql_instance="SQLEXPRESS"} 236
+windows_mssql_databases_write_transactions{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_write_transactions{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_write_transactions{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_write_transactions{database="tempdb",mssql_instance="SQLEXPRESS"} 29
+# HELP windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds (Databases.XTPControllerDLCLatencyPerFetch)
+# TYPE windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds gauge
+windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_fetch_latency_seconds{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds (Databases.XTPControllerDLCPeakLatency)
+# TYPE windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds gauge
+windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_dlc_peak_latency_seconds{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_xtp_controller_log_processed_bytes (Databases.XTPControllerLogProcessed)
+# TYPE windows_mssql_databases_xtp_controller_log_processed_bytes counter
+windows_mssql_databases_xtp_controller_log_processed_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_log_processed_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_log_processed_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_log_processed_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_controller_log_processed_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_databases_xtp_memory_used_bytes (Databases.XTPMemoryUsedKB)
+# TYPE windows_mssql_databases_xtp_memory_used_bytes gauge
+windows_mssql_databases_xtp_memory_used_bytes{database="master",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_memory_used_bytes{database="model",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_memory_used_bytes{database="msdb",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_memory_used_bytes{database="mssqlsystemresource",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_databases_xtp_memory_used_bytes{database="tempdb",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_active_temp_tables (GeneralStatistics.ActiveTempTables)
+# TYPE windows_mssql_genstats_active_temp_tables gauge
+windows_mssql_genstats_active_temp_tables{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_blocked_processes (GeneralStatistics.Processesblocked)
+# TYPE windows_mssql_genstats_blocked_processes gauge
+windows_mssql_genstats_blocked_processes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_connection_resets (GeneralStatistics.ConnectionReset)
+# TYPE windows_mssql_genstats_connection_resets counter
+windows_mssql_genstats_connection_resets{mssql_instance="SQLEXPRESS"} 1108
+# HELP windows_mssql_genstats_event_notifications_delayed_drop (GeneralStatistics.EventNotificationsDelayedDrop)
+# TYPE windows_mssql_genstats_event_notifications_delayed_drop gauge
+windows_mssql_genstats_event_notifications_delayed_drop{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_http_authenticated_requests (GeneralStatistics.HTTPAuthenticatedRequests)
+# TYPE windows_mssql_genstats_http_authenticated_requests gauge
+windows_mssql_genstats_http_authenticated_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_logical_connections (GeneralStatistics.LogicalConnections)
+# TYPE windows_mssql_genstats_logical_connections gauge
+windows_mssql_genstats_logical_connections{mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_genstats_logins (GeneralStatistics.Logins)
+# TYPE windows_mssql_genstats_logins counter
+windows_mssql_genstats_logins{mssql_instance="SQLEXPRESS"} 378
+# HELP windows_mssql_genstats_logouts (GeneralStatistics.Logouts)
+# TYPE windows_mssql_genstats_logouts counter
+windows_mssql_genstats_logouts{mssql_instance="SQLEXPRESS"} 377
+# HELP windows_mssql_genstats_mars_deadlocks (GeneralStatistics.MarsDeadlocks)
+# TYPE windows_mssql_genstats_mars_deadlocks gauge
+windows_mssql_genstats_mars_deadlocks{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_non_atomic_yields (GeneralStatistics.Nonatomicyields)
+# TYPE windows_mssql_genstats_non_atomic_yields counter
+windows_mssql_genstats_non_atomic_yields{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soap_empty_requests (GeneralStatistics.SOAPEmptyRequests)
+# TYPE windows_mssql_genstats_soap_empty_requests gauge
+windows_mssql_genstats_soap_empty_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soap_method_invocations (GeneralStatistics.SOAPMethodInvocations)
+# TYPE windows_mssql_genstats_soap_method_invocations gauge
+windows_mssql_genstats_soap_method_invocations{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soap_session_initiate_requests (GeneralStatistics.SOAPSessionInitiateRequests)
+# TYPE windows_mssql_genstats_soap_session_initiate_requests gauge
+windows_mssql_genstats_soap_session_initiate_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soap_session_terminate_requests (GeneralStatistics.SOAPSessionTerminateRequests)
+# TYPE windows_mssql_genstats_soap_session_terminate_requests gauge
+windows_mssql_genstats_soap_session_terminate_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soapsql_requests (GeneralStatistics.SOAPSQLRequests)
+# TYPE windows_mssql_genstats_soapsql_requests gauge
+windows_mssql_genstats_soapsql_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_soapwsdl_requests (GeneralStatistics.SOAPWSDLRequests)
+# TYPE windows_mssql_genstats_soapwsdl_requests gauge
+windows_mssql_genstats_soapwsdl_requests{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_sql_trace_io_provider_lock_waits (GeneralStatistics.SQLTraceIOProviderLockWaits)
+# TYPE windows_mssql_genstats_sql_trace_io_provider_lock_waits gauge
+windows_mssql_genstats_sql_trace_io_provider_lock_waits{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_temp_tables_awaiting_destruction (GeneralStatistics.TempTablesForDestruction)
+# TYPE windows_mssql_genstats_temp_tables_awaiting_destruction gauge
+windows_mssql_genstats_temp_tables_awaiting_destruction{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_temp_tables_creations (GeneralStatistics.TempTablesCreations)
+# TYPE windows_mssql_genstats_temp_tables_creations counter
+windows_mssql_genstats_temp_tables_creations{mssql_instance="SQLEXPRESS"} 4
+# HELP windows_mssql_genstats_tempdb_recovery_unit_ids_generated (GeneralStatistics.Tempdbrecoveryunitid)
+# TYPE windows_mssql_genstats_tempdb_recovery_unit_ids_generated gauge
+windows_mssql_genstats_tempdb_recovery_unit_ids_generated{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_tempdb_rowset_ids_generated (GeneralStatistics.Tempdbrowsetid)
+# TYPE windows_mssql_genstats_tempdb_rowset_ids_generated gauge
+windows_mssql_genstats_tempdb_rowset_ids_generated{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_trace_event_notification_queue_size (GeneralStatistics.TraceEventNotificationQueue)
+# TYPE windows_mssql_genstats_trace_event_notification_queue_size gauge
+windows_mssql_genstats_trace_event_notification_queue_size{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_transactions (GeneralStatistics.Transactions)
+# TYPE windows_mssql_genstats_transactions gauge
+windows_mssql_genstats_transactions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_genstats_user_connections (GeneralStatistics.UserConnections)
+# TYPE windows_mssql_genstats_user_connections gauge
+windows_mssql_genstats_user_connections{mssql_instance="SQLEXPRESS"} 1
+# HELP windows_mssql_locks_count (Locks.AverageWaitTimems_Base count of how often requests have run into locks)
+# TYPE windows_mssql_locks_count gauge
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Database"} 0.002
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Metadata"} 0.001
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_count{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_deadlocks (Locks.NumberofDeadlocks)
+# TYPE windows_mssql_locks_deadlocks counter
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Database"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Metadata"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_lock_requests (Locks.LockRequests)
+# TYPE windows_mssql_locks_lock_requests counter
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Database"} 204467
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Extent"} 402
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="File"} 19
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="HoBT"} 28
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Key"} 1.681875e+06
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Metadata"} 25785
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Object"} 760875
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Page"} 757
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="RID"} 123
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_lock_requests{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_lock_timeouts (Locks.LockTimeouts)
+# TYPE windows_mssql_locks_lock_timeouts counter
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Database"} 4
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Key"} 216
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Metadata"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_lock_timeouts{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_lock_timeouts_excluding_NOWAIT (Locks.LockTimeoutstimeout0)
+# TYPE windows_mssql_locks_lock_timeouts_excluding_NOWAIT counter
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Database"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Metadata"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_lock_timeouts_excluding_NOWAIT{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_lock_wait_seconds (Locks.LockWaitTimems)
+# TYPE windows_mssql_locks_lock_wait_seconds gauge
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Database"} 0.391
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Metadata"} 0.015
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_lock_wait_seconds{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_lock_waits (Locks.LockWaits)
+# TYPE windows_mssql_locks_lock_waits counter
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Database"} 2
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Metadata"} 1
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_lock_waits{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_deadlocks (Locks.NumberofDeadlocks)
+# TYPE windows_mssql_locks_deadlocks counter
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Database"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Metadata"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_deadlocks{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_locks_wait_time_seconds (Locks.AverageWaitTimems Total time in seconds which locks have been holding resources)
+# TYPE windows_mssql_locks_wait_time_seconds gauge
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="AllocUnit"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Application"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Database"} 0.391
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Extent"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="File"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="HoBT"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Key"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Metadata"} 0.015
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="OIB"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Object"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Page"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="RID"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="RowGroup"} 0
+windows_mssql_locks_wait_time_seconds{mssql_instance="SQLEXPRESS",resource="Xact"} 0
+# HELP windows_mssql_memmgr_allocated_lock_blocks (MemoryManager.LockBlocksAllocated)
+# TYPE windows_mssql_memmgr_allocated_lock_blocks gauge
+windows_mssql_memmgr_allocated_lock_blocks{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_allocated_lock_owner_blocks (MemoryManager.LockOwnerBlocksAllocated)
+# TYPE windows_mssql_memmgr_allocated_lock_owner_blocks gauge
+windows_mssql_memmgr_allocated_lock_owner_blocks{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_connection_memory_bytes (MemoryManager.ConnectionMemoryKB)
+# TYPE windows_mssql_memmgr_connection_memory_bytes gauge
+windows_mssql_memmgr_connection_memory_bytes{mssql_instance="SQLEXPRESS"} 1.015808e+06
+# HELP windows_mssql_memmgr_database_cache_memory_bytes (MemoryManager.DatabaseCacheMemoryKB)
+# TYPE windows_mssql_memmgr_database_cache_memory_bytes gauge
+windows_mssql_memmgr_database_cache_memory_bytes{mssql_instance="SQLEXPRESS"} 6.791168e+06
+# HELP windows_mssql_memmgr_external_benefit_of_memory (MemoryManager.Externalbenefitofmemory)
+# TYPE windows_mssql_memmgr_external_benefit_of_memory gauge
+windows_mssql_memmgr_external_benefit_of_memory{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_free_memory_bytes (MemoryManager.FreeMemoryKB)
+# TYPE windows_mssql_memmgr_free_memory_bytes gauge
+windows_mssql_memmgr_free_memory_bytes{mssql_instance="SQLEXPRESS"} 1.9234816e+07
+# HELP windows_mssql_memmgr_granted_workspace_memory_bytes (MemoryManager.GrantedWorkspaceMemoryKB)
+# TYPE windows_mssql_memmgr_granted_workspace_memory_bytes gauge
+windows_mssql_memmgr_granted_workspace_memory_bytes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_lock_blocks (MemoryManager.LockBlocks)
+# TYPE windows_mssql_memmgr_lock_blocks gauge
+windows_mssql_memmgr_lock_blocks{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_lock_memory_bytes (MemoryManager.LockMemoryKB)
+# TYPE windows_mssql_memmgr_lock_memory_bytes gauge
+windows_mssql_memmgr_lock_memory_bytes{mssql_instance="SQLEXPRESS"} 663552
+# HELP windows_mssql_memmgr_lock_owner_blocks (MemoryManager.LockOwnerBlocks)
+# TYPE windows_mssql_memmgr_lock_owner_blocks gauge
+windows_mssql_memmgr_lock_owner_blocks{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_log_pool_memory_bytes (MemoryManager.LogPoolMemoryKB)
+# TYPE windows_mssql_memmgr_log_pool_memory_bytes gauge
+windows_mssql_memmgr_log_pool_memory_bytes{mssql_instance="SQLEXPRESS"} 2.834432e+06
+# HELP windows_mssql_memmgr_maximum_workspace_memory_bytes (MemoryManager.MaximumWorkspaceMemoryKB)
+# TYPE windows_mssql_memmgr_maximum_workspace_memory_bytes gauge
+windows_mssql_memmgr_maximum_workspace_memory_bytes{mssql_instance="SQLEXPRESS"} 1.36482816e+09
+# HELP windows_mssql_memmgr_optimizer_memory_bytes (MemoryManager.OptimizerMemoryKB)
+# TYPE windows_mssql_memmgr_optimizer_memory_bytes gauge
+windows_mssql_memmgr_optimizer_memory_bytes{mssql_instance="SQLEXPRESS"} 1.007616e+06
+# HELP windows_mssql_memmgr_outstanding_memory_grants (MemoryManager.MemoryGrantsOutstanding)
+# TYPE windows_mssql_memmgr_outstanding_memory_grants gauge
+windows_mssql_memmgr_outstanding_memory_grants{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_pending_memory_grants (MemoryManager.MemoryGrantsPending)
+# TYPE windows_mssql_memmgr_pending_memory_grants gauge
+windows_mssql_memmgr_pending_memory_grants{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_reserved_server_memory_bytes (MemoryManager.ReservedServerMemoryKB)
+# TYPE windows_mssql_memmgr_reserved_server_memory_bytes gauge
+windows_mssql_memmgr_reserved_server_memory_bytes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_memmgr_sql_cache_memory_bytes (MemoryManager.SQLCacheMemoryKB)
+# TYPE windows_mssql_memmgr_sql_cache_memory_bytes gauge
+windows_mssql_memmgr_sql_cache_memory_bytes{mssql_instance="SQLEXPRESS"} 1.728512e+06
+# HELP windows_mssql_memmgr_stolen_server_memory_bytes (MemoryManager.StolenServerMemoryKB)
+# TYPE windows_mssql_memmgr_stolen_server_memory_bytes gauge
+windows_mssql_memmgr_stolen_server_memory_bytes{mssql_instance="SQLEXPRESS"} 1.7281024e+08
+# HELP windows_mssql_memmgr_target_server_memory_bytes (MemoryManager.TargetServerMemoryKB)
+# TYPE windows_mssql_memmgr_target_server_memory_bytes gauge
+windows_mssql_memmgr_target_server_memory_bytes{mssql_instance="SQLEXPRESS"} 1.816387584e+09
+# HELP windows_mssql_memmgr_total_server_memory_bytes (MemoryManager.TotalServerMemoryKB)
+# TYPE windows_mssql_memmgr_total_server_memory_bytes gauge
+windows_mssql_memmgr_total_server_memory_bytes{mssql_instance="SQLEXPRESS"} 1.98836224e+08
+# HELP windows_mssql_sql_errors_total (SQLErrors.Total)
+# TYPE windows_mssql_sql_errors_total counter
+windows_mssql_sql_errors_total{mssql_instance="SQLEXPRESS",resource="DB Offline Errors"} 0
+windows_mssql_sql_errors_total{mssql_instance="SQLEXPRESS",resource="Info Errors"} 766
+windows_mssql_sql_errors_total{mssql_instance="SQLEXPRESS",resource="Kill Connection Errors"} 0
+windows_mssql_sql_errors_total{mssql_instance="SQLEXPRESS",resource="User Errors"} 29
+# HELP windows_mssql_sqlstats_auto_parameterization_attempts (SQLStatistics.AutoParamAttempts)
+# TYPE windows_mssql_sqlstats_auto_parameterization_attempts counter
+windows_mssql_sqlstats_auto_parameterization_attempts{mssql_instance="SQLEXPRESS"} 37
+# HELP windows_mssql_sqlstats_batch_requests (SQLStatistics.BatchRequests)
+# TYPE windows_mssql_sqlstats_batch_requests counter
+windows_mssql_sqlstats_batch_requests{mssql_instance="SQLEXPRESS"} 2972
+# HELP windows_mssql_sqlstats_failed_auto_parameterization_attempts (SQLStatistics.FailedAutoParams)
+# TYPE windows_mssql_sqlstats_failed_auto_parameterization_attempts counter
+windows_mssql_sqlstats_failed_auto_parameterization_attempts{mssql_instance="SQLEXPRESS"} 29
+# HELP windows_mssql_sqlstats_forced_parameterizations (SQLStatistics.ForcedParameterizations)
+# TYPE windows_mssql_sqlstats_forced_parameterizations counter
+windows_mssql_sqlstats_forced_parameterizations{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_sqlstats_guided_plan_executions (SQLStatistics.Guidedplanexecutions)
+# TYPE windows_mssql_sqlstats_guided_plan_executions counter
+windows_mssql_sqlstats_guided_plan_executions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_sqlstats_misguided_plan_executions (SQLStatistics.Misguidedplanexecutions)
+# TYPE windows_mssql_sqlstats_misguided_plan_executions counter
+windows_mssql_sqlstats_misguided_plan_executions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_sqlstats_safe_auto_parameterization_attempts (SQLStatistics.SafeAutoParams)
+# TYPE windows_mssql_sqlstats_safe_auto_parameterization_attempts counter
+windows_mssql_sqlstats_safe_auto_parameterization_attempts{mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_sqlstats_sql_attentions (SQLStatistics.SQLAttentions)
+# TYPE windows_mssql_sqlstats_sql_attentions counter
+windows_mssql_sqlstats_sql_attentions{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_sqlstats_sql_compilations (SQLStatistics.SQLCompilations)
+# TYPE windows_mssql_sqlstats_sql_compilations counter
+windows_mssql_sqlstats_sql_compilations{mssql_instance="SQLEXPRESS"} 376
+# HELP windows_mssql_sqlstats_sql_recompilations (SQLStatistics.SQLReCompilations)
+# TYPE windows_mssql_sqlstats_sql_recompilations counter
+windows_mssql_sqlstats_sql_recompilations{mssql_instance="SQLEXPRESS"} 8
+# HELP windows_mssql_sqlstats_unsafe_auto_parameterization_attempts (SQLStatistics.UnsafeAutoParams)
+# TYPE windows_mssql_sqlstats_unsafe_auto_parameterization_attempts counter
+windows_mssql_sqlstats_unsafe_auto_parameterization_attempts{mssql_instance="SQLEXPRESS"} 6
+# HELP windows_mssql_transactions_active (Transactions.Transactions)
+# TYPE windows_mssql_transactions_active gauge
+windows_mssql_transactions_active{mssql_instance="SQLEXPRESS"} 6
+# HELP windows_mssql_transactions_longest_transaction_running_seconds (Transactions.LongestTransactionRunningTime)
+# TYPE windows_mssql_transactions_longest_transaction_running_seconds gauge
+windows_mssql_transactions_longest_transaction_running_seconds{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_nonsnapshot_version_active_total (Transactions.NonSnapshotVersionTransactions)
+# TYPE windows_mssql_transactions_nonsnapshot_version_active_total counter
+windows_mssql_transactions_nonsnapshot_version_active_total{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_snapshot_active_total (Transactions.SnapshotTransactions)
+# TYPE windows_mssql_transactions_snapshot_active_total counter
+windows_mssql_transactions_snapshot_active_total{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_tempdb_free_space_bytes (Transactions.FreeSpaceInTempDbKB)
+# TYPE windows_mssql_transactions_tempdb_free_space_bytes gauge
+windows_mssql_transactions_tempdb_free_space_bytes{mssql_instance="SQLEXPRESS"} 5.046272e+06
+# HELP windows_mssql_transactions_update_conflicts_total (Transactions.UpdateConflictRatio)
+# TYPE windows_mssql_transactions_update_conflicts_total counter
+windows_mssql_transactions_update_conflicts_total{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_update_snapshot_active_total (Transactions.UpdateSnapshotTransactions)
+# TYPE windows_mssql_transactions_update_snapshot_active_total counter
+windows_mssql_transactions_update_snapshot_active_total{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_version_cleanup_rate_bytes (Transactions.VersionCleanupRateKBs)
+# TYPE windows_mssql_transactions_version_cleanup_rate_bytes gauge
+windows_mssql_transactions_version_cleanup_rate_bytes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_version_generation_rate_bytes (Transactions.VersionGenerationRateKBs)
+# TYPE windows_mssql_transactions_version_generation_rate_bytes gauge
+windows_mssql_transactions_version_generation_rate_bytes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_version_store_creation_units (Transactions.VersionStoreUnitCreation)
+# TYPE windows_mssql_transactions_version_store_creation_units counter
+windows_mssql_transactions_version_store_creation_units{mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_transactions_version_store_size_bytes (Transactions.VersionStoreSizeKB)
+# TYPE windows_mssql_transactions_version_store_size_bytes gauge
+windows_mssql_transactions_version_store_size_bytes{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_version_store_truncation_units (Transactions.VersionStoreUnitTruncation)
+# TYPE windows_mssql_transactions_version_store_truncation_units counter
+windows_mssql_transactions_version_store_truncation_units{mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_transactions_version_store_units (Transactions.VersionStoreUnitCount)
+# TYPE windows_mssql_transactions_version_store_units counter
+windows_mssql_transactions_version_store_units{mssql_instance="SQLEXPRESS"} 2
+# HELP windows_mssql_waitstats_lock_waits (WaitStats.LockWaits)
+# TYPE windows_mssql_waitstats_lock_waits counter
+windows_mssql_waitstats_lock_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_lock_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_lock_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_lock_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_log_buffer_waits (WaitStats.LogBufferWaits)
+# TYPE windows_mssql_waitstats_log_buffer_waits counter
+windows_mssql_waitstats_log_buffer_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_buffer_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_buffer_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_buffer_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_log_write_waits (WaitStats.LogWriteWaits)
+# TYPE windows_mssql_waitstats_log_write_waits counter
+windows_mssql_waitstats_log_write_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_write_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_write_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_log_write_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_memory_grant_queue_waits (WaitStats.MemoryGrantQueueWaits)
+# TYPE windows_mssql_waitstats_memory_grant_queue_waits counter
+windows_mssql_waitstats_memory_grant_queue_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_memory_grant_queue_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_memory_grant_queue_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_memory_grant_queue_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_network_io_waits (WaitStats.NetworkIOWaits)
+# TYPE windows_mssql_waitstats_network_io_waits counter
+windows_mssql_waitstats_network_io_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_network_io_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_network_io_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_network_io_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_nonpage_latch_waits (WaitStats.NonpageLatchWaits)
+# TYPE windows_mssql_waitstats_nonpage_latch_waits counter
+windows_mssql_waitstats_nonpage_latch_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_nonpage_latch_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_nonpage_latch_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_nonpage_latch_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_page_io_latch_waits (WaitStats.PageIOLatchWaits)
+# TYPE windows_mssql_waitstats_page_io_latch_waits counter
+windows_mssql_waitstats_page_io_latch_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_io_latch_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_io_latch_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_io_latch_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_page_latch_waits (WaitStats.PageLatchWaits)
+# TYPE windows_mssql_waitstats_page_latch_waits counter
+windows_mssql_waitstats_page_latch_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_latch_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_latch_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_page_latch_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_thread_safe_memory_objects_waits (WaitStats.ThreadSafeMemoryObjectsWaits)
+# TYPE windows_mssql_waitstats_thread_safe_memory_objects_waits counter
+windows_mssql_waitstats_thread_safe_memory_objects_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_thread_safe_memory_objects_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_thread_safe_memory_objects_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_thread_safe_memory_objects_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_transaction_ownership_waits (WaitStats.TransactionOwnershipWaits)
+# TYPE windows_mssql_waitstats_transaction_ownership_waits counter
+windows_mssql_waitstats_transaction_ownership_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_transaction_ownership_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_transaction_ownership_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_transaction_ownership_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_wait_for_the_worker_waits (WaitStats.WaitForTheWorkerWaits)
+# TYPE windows_mssql_waitstats_wait_for_the_worker_waits counter
+windows_mssql_waitstats_wait_for_the_worker_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_wait_for_the_worker_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_wait_for_the_worker_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_wait_for_the_worker_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_mssql_waitstats_workspace_synchronization_waits (WaitStats.WorkspaceSynchronizationWaits)
+# TYPE windows_mssql_waitstats_workspace_synchronization_waits counter
+windows_mssql_waitstats_workspace_synchronization_waits{item="Average wait time (ms)",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_workspace_synchronization_waits{item="Cumulative wait time (ms) per second",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_workspace_synchronization_waits{item="Waits in progress",mssql_instance="SQLEXPRESS"} 0
+windows_mssql_waitstats_workspace_synchronization_waits{item="Waits started per second",mssql_instance="SQLEXPRESS"} 0
+# HELP windows_net_bytes_received_total (Network.BytesReceivedPerSec)
+# TYPE windows_net_bytes_received_total counter
+windows_net_bytes_received_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 4.786344482e+09
+# HELP windows_net_bytes_sent_total (Network.BytesSentPerSec)
+# TYPE windows_net_bytes_sent_total counter
+windows_net_bytes_sent_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 1.026395688e+09
+# HELP windows_net_bytes_total (Network.BytesTotalPerSec)
+# TYPE windows_net_bytes_total counter
+windows_net_bytes_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 5.81274017e+09
+# HELP windows_net_current_bandwidth_bytes (Network.CurrentBandwidth)
+# TYPE windows_net_current_bandwidth_bytes gauge
+windows_net_current_bandwidth_bytes{nic="Intel_R__PRO_1000_MT_Network_Connection"} 1.25e+08
+# HELP windows_net_packets_outbound_discarded_total (Network.PacketsOutboundDiscarded)
+# TYPE windows_net_packets_outbound_discarded_total counter
+windows_net_packets_outbound_discarded_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 0
+# HELP windows_net_packets_outbound_errors_total (Network.PacketsOutboundErrors)
+# TYPE windows_net_packets_outbound_errors_total counter
+windows_net_packets_outbound_errors_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 0
+# HELP windows_net_packets_received_discarded_total (Network.PacketsReceivedDiscarded)
+# TYPE windows_net_packets_received_discarded_total counter
+windows_net_packets_received_discarded_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 0
+# HELP windows_net_packets_received_errors_total (Network.PacketsReceivedErrors)
+# TYPE windows_net_packets_received_errors_total counter
+windows_net_packets_received_errors_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 0
+# HELP windows_net_packets_received_total (Network.PacketsReceivedPerSec)
+# TYPE windows_net_packets_received_total counter
+windows_net_packets_received_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 4.120869e+06
+# HELP windows_net_packets_received_unknown_total (Network.PacketsReceivedUnknown)
+# TYPE windows_net_packets_received_unknown_total counter
+windows_net_packets_received_unknown_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 0
+# HELP windows_net_packets_sent_total (Network.PacketsSentPerSec)
+# TYPE windows_net_packets_sent_total counter
+windows_net_packets_sent_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 1.332466e+06
+# HELP windows_net_packets_total (Network.PacketsPerSec)
+# TYPE windows_net_packets_total counter
+windows_net_packets_total{nic="Intel_R__PRO_1000_MT_Network_Connection"} 5.453335e+06
+# HELP windows_netframework_clrexceptions_exceptions_filters_total Displays the total number of .NET exception filters executed. An exception filter evaluates regardless of whether an exception is handled.
+# TYPE windows_netframework_clrexceptions_exceptions_filters_total counter
+windows_netframework_clrexceptions_exceptions_filters_total{process="WMSvc"} 0
+windows_netframework_clrexceptions_exceptions_filters_total{process="powershell"} 0
+# HELP windows_netframework_clrexceptions_exceptions_finallys_total Displays the total number of finally blocks executed. Only the finally blocks executed for an exception are counted; finally blocks on normal code paths are not counted by this counter.
+# TYPE windows_netframework_clrexceptions_exceptions_finallys_total counter
+windows_netframework_clrexceptions_exceptions_finallys_total{process="WMSvc"} 0
+windows_netframework_clrexceptions_exceptions_finallys_total{process="powershell"} 56
+# HELP windows_netframework_clrexceptions_exceptions_thrown_total Displays the total number of exceptions thrown since the application started. This includes both .NET exceptions and unmanaged exceptions that are converted into .NET exceptions.
+# TYPE windows_netframework_clrexceptions_exceptions_thrown_total counter
+windows_netframework_clrexceptions_exceptions_thrown_total{process="WMSvc"} 0
+windows_netframework_clrexceptions_exceptions_thrown_total{process="powershell"} 37
+# HELP windows_netframework_clrexceptions_throw_to_catch_depth_total Displays the total number of stack frames traversed, from the frame that threw the exception to the frame that handled the exception.
+# TYPE windows_netframework_clrexceptions_throw_to_catch_depth_total counter
+windows_netframework_clrexceptions_throw_to_catch_depth_total{process="WMSvc"} 0
+windows_netframework_clrexceptions_throw_to_catch_depth_total{process="powershell"} 140
+# HELP windows_netframework_clrinterop_com_callable_wrappers_total Displays the current number of COM callable wrappers (CCWs). A CCW is a proxy for a managed object being referenced from an unmanaged COM client.
+# TYPE windows_netframework_clrinterop_com_callable_wrappers_total counter
+windows_netframework_clrinterop_com_callable_wrappers_total{process="WMSvc"} 2
+windows_netframework_clrinterop_com_callable_wrappers_total{process="powershell"} 5
+# HELP windows_netframework_clrinterop_interop_marshalling_total Displays the total number of times arguments and return values have been marshaled from managed to unmanaged code, and vice versa, since the application started.
+# TYPE windows_netframework_clrinterop_interop_marshalling_total counter
+windows_netframework_clrinterop_interop_marshalling_total{process="WMSvc"} 0
+windows_netframework_clrinterop_interop_marshalling_total{process="powershell"} 0
+# HELP windows_netframework_clrinterop_interop_stubs_created_total Displays the current number of stubs created by the common language runtime. Stubs are responsible for marshaling arguments and return values from managed to unmanaged code, and vice versa, during a COM interop call or a platform invoke call.
+# TYPE windows_netframework_clrinterop_interop_stubs_created_total counter
+windows_netframework_clrinterop_interop_stubs_created_total{process="WMSvc"} 29
+windows_netframework_clrinterop_interop_stubs_created_total{process="powershell"} 345
+# HELP windows_netframework_clrjit_jit_il_bytes_total Displays the total number of Microsoft intermediate language (MSIL) bytes compiled by the just-in-time (JIT) compiler since the application started
+# TYPE windows_netframework_clrjit_jit_il_bytes_total counter
+windows_netframework_clrjit_jit_il_bytes_total{process="WMSvc"} 4007
+windows_netframework_clrjit_jit_il_bytes_total{process="powershell"} 47021
+# HELP windows_netframework_clrjit_jit_methods_total Displays the total number of methods JIT-compiled since the application started. This counter does not include pre-JIT-compiled methods.
+# TYPE windows_netframework_clrjit_jit_methods_total counter
+windows_netframework_clrjit_jit_methods_total{process="WMSvc"} 27
+windows_netframework_clrjit_jit_methods_total{process="powershell"} 344
+# HELP windows_netframework_clrjit_jit_standard_failures_total Displays the peak number of methods the JIT compiler has failed to compile since the application started. This failure can occur if the MSIL cannot be verified or if there is an internal error in the JIT compiler.
+# TYPE windows_netframework_clrjit_jit_standard_failures_total gauge
+windows_netframework_clrjit_jit_standard_failures_total{process="WMSvc"} 0
+windows_netframework_clrjit_jit_standard_failures_total{process="powershell"} 0
+# HELP windows_netframework_clrjit_jit_time_percent Displays the percentage of time spent in JIT compilation. This counter is updated at the end of every JIT compilation phase. A JIT compilation phase occurs when a method and its dependencies are compiled.
+# TYPE windows_netframework_clrjit_jit_time_percent gauge
+windows_netframework_clrjit_jit_time_percent{process="WMSvc"} 0
+windows_netframework_clrjit_jit_time_percent{process="powershell"} 0
+# HELP windows_netframework_clrloading_appdomains_loaded_current Displays the current number of application domains loaded in this application.
+# TYPE windows_netframework_clrloading_appdomains_loaded_current gauge
+windows_netframework_clrloading_appdomains_loaded_current{process="WMSvc"} 1
+windows_netframework_clrloading_appdomains_loaded_current{process="powershell"} 1
+# HELP windows_netframework_clrloading_appdomains_loaded_total Displays the peak number of application domains loaded since the application started.
+# TYPE windows_netframework_clrloading_appdomains_loaded_total counter
+windows_netframework_clrloading_appdomains_loaded_total{process="WMSvc"} 1
+windows_netframework_clrloading_appdomains_loaded_total{process="powershell"} 1
+# HELP windows_netframework_clrloading_appdomains_unloaded_total Displays the total number of application domains unloaded since the application started. If an application domain is loaded and unloaded multiple times, this counter increments each time the application domain is unloaded.
+# TYPE windows_netframework_clrloading_appdomains_unloaded_total counter
+windows_netframework_clrloading_appdomains_unloaded_total{process="WMSvc"} 0
+windows_netframework_clrloading_appdomains_unloaded_total{process="powershell"} 0
+# HELP windows_netframework_clrloading_assemblies_loaded_current Displays the current number of assemblies loaded across all application domains in the currently running application. If the assembly is loaded as domain-neutral from multiple application domains, this counter is incremented only once.
+# TYPE windows_netframework_clrloading_assemblies_loaded_current gauge
+windows_netframework_clrloading_assemblies_loaded_current{process="WMSvc"} 5
+windows_netframework_clrloading_assemblies_loaded_current{process="powershell"} 20
+# HELP windows_netframework_clrloading_assemblies_loaded_total Displays the total number of assemblies loaded since the application started. If the assembly is loaded as domain-neutral from multiple application domains, this counter is incremented only once.
+# TYPE windows_netframework_clrloading_assemblies_loaded_total counter
+windows_netframework_clrloading_assemblies_loaded_total{process="WMSvc"} 5
+windows_netframework_clrloading_assemblies_loaded_total{process="powershell"} 20
+# HELP windows_netframework_clrloading_class_load_failures_total Displays the peak number of classes that have failed to load since the application started.
+# TYPE windows_netframework_clrloading_class_load_failures_total counter
+windows_netframework_clrloading_class_load_failures_total{process="WMSvc"} 0
+windows_netframework_clrloading_class_load_failures_total{process="powershell"} 1
+# HELP windows_netframework_clrloading_classes_loaded_current Displays the current number of classes loaded in all assemblies.
+# TYPE windows_netframework_clrloading_classes_loaded_current gauge
+windows_netframework_clrloading_classes_loaded_current{process="WMSvc"} 18
+windows_netframework_clrloading_classes_loaded_current{process="powershell"} 477
+# HELP windows_netframework_clrloading_classes_loaded_total Displays the cumulative number of classes loaded in all assemblies since the application started.
+# TYPE windows_netframework_clrloading_classes_loaded_total counter
+windows_netframework_clrloading_classes_loaded_total{process="WMSvc"} 18
+windows_netframework_clrloading_classes_loaded_total{process="powershell"} 477
+# HELP windows_netframework_clrloading_loader_heap_size_bytes Displays the current size, in bytes, of the memory committed by the class loader across all application domains. Committed memory is the physical space reserved in the disk paging file.
+# TYPE windows_netframework_clrloading_loader_heap_size_bytes gauge
+windows_netframework_clrloading_loader_heap_size_bytes{process="WMSvc"} 270336
+windows_netframework_clrloading_loader_heap_size_bytes{process="powershell"} 2.285568e+06
+# HELP windows_netframework_clrlocksandthreads_contentions_total Displays the total number of times that threads in the runtime have attempted to acquire a managed lock unsuccessfully.
+# TYPE windows_netframework_clrlocksandthreads_contentions_total counter
+windows_netframework_clrlocksandthreads_contentions_total{process="WMSvc"} 0
+windows_netframework_clrlocksandthreads_contentions_total{process="powershell"} 10
+# HELP windows_netframework_clrlocksandthreads_current_logical_threads Displays the number of current managed thread objects in the application. This counter maintains the count of both running and stopped threads.
+# TYPE windows_netframework_clrlocksandthreads_current_logical_threads gauge
+windows_netframework_clrlocksandthreads_current_logical_threads{process="WMSvc"} 2
+windows_netframework_clrlocksandthreads_current_logical_threads{process="powershell"} 16
+# HELP windows_netframework_clrlocksandthreads_current_queue_length Displays the total number of threads that are currently waiting to acquire a managed lock in the application.
+# TYPE windows_netframework_clrlocksandthreads_current_queue_length gauge
+windows_netframework_clrlocksandthreads_current_queue_length{process="WMSvc"} 0
+windows_netframework_clrlocksandthreads_current_queue_length{process="powershell"} 0
+# HELP windows_netframework_clrlocksandthreads_physical_threads_current Displays the number of native operating system threads created and owned by the common language runtime to act as underlying threads for managed thread objects. This counter's value does not include the threads used by the runtime in its internal operations; it is a subset of the threads in the operating system process.
+# TYPE windows_netframework_clrlocksandthreads_physical_threads_current gauge
+windows_netframework_clrlocksandthreads_physical_threads_current{process="WMSvc"} 1
+windows_netframework_clrlocksandthreads_physical_threads_current{process="powershell"} 13
+# HELP windows_netframework_clrlocksandthreads_queue_length_total Displays the total number of threads that waited to acquire a managed lock since the application started.
+# TYPE windows_netframework_clrlocksandthreads_queue_length_total counter
+windows_netframework_clrlocksandthreads_queue_length_total{process="WMSvc"} 0
+windows_netframework_clrlocksandthreads_queue_length_total{process="powershell"} 3
+# HELP windows_netframework_clrlocksandthreads_recognized_threads_current Displays the number of threads that are currently recognized by the runtime. These threads are associated with a corresponding managed thread object. The runtime does not create these threads, but they have run inside the runtime at least once.
+# TYPE windows_netframework_clrlocksandthreads_recognized_threads_current gauge
+windows_netframework_clrlocksandthreads_recognized_threads_current{process="WMSvc"} 1
+windows_netframework_clrlocksandthreads_recognized_threads_current{process="powershell"} 3
+# HELP windows_netframework_clrlocksandthreads_recognized_threads_total Displays the total number of threads that have been recognized by the runtime since the application started. These threads are associated with a corresponding managed thread object. The runtime does not create these threads, but they have run inside the runtime at least once.
+# TYPE windows_netframework_clrlocksandthreads_recognized_threads_total counter
+windows_netframework_clrlocksandthreads_recognized_threads_total{process="WMSvc"} 1
+windows_netframework_clrlocksandthreads_recognized_threads_total{process="powershell"} 6
+# HELP windows_netframework_clrmemory_allocated_bytes_total Displays the total number of bytes allocated on the garbage collection heap.
+# TYPE windows_netframework_clrmemory_allocated_bytes_total counter
+windows_netframework_clrmemory_allocated_bytes_total{process="WMSvc"} 227792
+windows_netframework_clrmemory_allocated_bytes_total{process="powershell"} 4.63338e+07
+# HELP windows_netframework_clrmemory_collections_total Displays the number of times the generation objects are garbage collected since the application started.
+# TYPE windows_netframework_clrmemory_collections_total counter
+windows_netframework_clrmemory_collections_total{area="Gen0",process="WMSvc"} 1
+windows_netframework_clrmemory_collections_total{area="Gen0",process="powershell"} 7
+windows_netframework_clrmemory_collections_total{area="Gen1",process="WMSvc"} 1
+windows_netframework_clrmemory_collections_total{area="Gen1",process="powershell"} 3
+windows_netframework_clrmemory_collections_total{area="Gen2",process="WMSvc"} 0
+windows_netframework_clrmemory_collections_total{area="Gen2",process="powershell"} 1
+# HELP windows_netframework_clrmemory_committed_bytes Displays the amount of virtual memory, in bytes, currently committed by the garbage collector. Committed memory is the physical memory for which space has been reserved in the disk paging file.
+# TYPE windows_netframework_clrmemory_committed_bytes gauge
+windows_netframework_clrmemory_committed_bytes{process="WMSvc"} 270336
+windows_netframework_clrmemory_committed_bytes{process="powershell"} 2.0475904e+07
+# HELP windows_netframework_clrmemory_finalization_survivors Displays the number of garbage-collected objects that survive a collection because they are waiting to be finalized.
+# TYPE windows_netframework_clrmemory_finalization_survivors gauge
+windows_netframework_clrmemory_finalization_survivors{process="WMSvc"} 7
+windows_netframework_clrmemory_finalization_survivors{process="powershell"} 244
+# HELP windows_netframework_clrmemory_gc_time_percent Displays the percentage of time that was spent performing a garbage collection in the last sample.
+# TYPE windows_netframework_clrmemory_gc_time_percent gauge
+windows_netframework_clrmemory_gc_time_percent{process="WMSvc"} 0
+windows_netframework_clrmemory_gc_time_percent{process="powershell"} 0.00027784979937050934
+# HELP windows_netframework_clrmemory_heap_size_bytes Displays the maximum bytes that can be allocated; it does not indicate the current number of bytes allocated.
+# TYPE windows_netframework_clrmemory_heap_size_bytes gauge
+windows_netframework_clrmemory_heap_size_bytes{area="Gen0",process="WMSvc"} 4.194304e+06
+windows_netframework_clrmemory_heap_size_bytes{area="Gen0",process="powershell"} 2.6417392e+07
+windows_netframework_clrmemory_heap_size_bytes{area="Gen1",process="WMSvc"} 50200
+windows_netframework_clrmemory_heap_size_bytes{area="Gen1",process="powershell"} 122776
+windows_netframework_clrmemory_heap_size_bytes{area="Gen2",process="WMSvc"} 24
+windows_netframework_clrmemory_heap_size_bytes{area="Gen2",process="powershell"} 6.71388e+06
+windows_netframework_clrmemory_heap_size_bytes{area="LOH",process="WMSvc"} 68168
+windows_netframework_clrmemory_heap_size_bytes{area="LOH",process="powershell"} 1.457824e+06
+# HELP windows_netframework_clrmemory_induced_gc_total Displays the peak number of times garbage collection was performed because of an explicit call to GC.Collect.
+# TYPE windows_netframework_clrmemory_induced_gc_total counter
+windows_netframework_clrmemory_induced_gc_total{process="WMSvc"} 0
+windows_netframework_clrmemory_induced_gc_total{process="powershell"} 0
+# HELP windows_netframework_clrmemory_number_gc_handles Displays the current number of garbage collection handles in use. Garbage collection handles are handles to resources external to the common language runtime and the managed environment.
+# TYPE windows_netframework_clrmemory_number_gc_handles gauge
+windows_netframework_clrmemory_number_gc_handles{process="WMSvc"} 24
+windows_netframework_clrmemory_number_gc_handles{process="powershell"} 834
+# HELP windows_netframework_clrmemory_number_pinned_objects Displays the number of pinned objects encountered in the last garbage collection.
+# TYPE windows_netframework_clrmemory_number_pinned_objects gauge
+windows_netframework_clrmemory_number_pinned_objects{process="WMSvc"} 1
+windows_netframework_clrmemory_number_pinned_objects{process="powershell"} 0
+# HELP windows_netframework_clrmemory_number_sink_blocksinuse Displays the current number of synchronization blocks in use. Synchronization blocks are per-object data structures allocated for storing synchronization information. They hold weak references to managed objects and must be scanned by the garbage collector.
+# TYPE windows_netframework_clrmemory_number_sink_blocksinuse gauge
+windows_netframework_clrmemory_number_sink_blocksinuse{process="WMSvc"} 1
+windows_netframework_clrmemory_number_sink_blocksinuse{process="powershell"} 42
+# HELP windows_netframework_clrmemory_promoted_bytes Displays the bytes that were promoted from the generation to the next one during the last GC. Memory is promoted when it survives a garbage collection.
+# TYPE windows_netframework_clrmemory_promoted_bytes gauge
+windows_netframework_clrmemory_promoted_bytes{area="Gen0",process="WMSvc"} 49720
+windows_netframework_clrmemory_promoted_bytes{area="Gen0",process="powershell"} 107352
+windows_netframework_clrmemory_promoted_bytes{area="Gen1",process="WMSvc"} 0
+windows_netframework_clrmemory_promoted_bytes{area="Gen1",process="powershell"} 0
+# HELP windows_netframework_clrmemory_reserved_bytes Displays the amount of virtual memory, in bytes, currently reserved by the garbage collector. Reserved memory is the virtual memory space reserved for the application when no disk or main memory pages have been used.
+# TYPE windows_netframework_clrmemory_reserved_bytes gauge
+windows_netframework_clrmemory_reserved_bytes{process="WMSvc"} 4.02644992e+08
+windows_netframework_clrmemory_reserved_bytes{process="powershell"} 4.02644992e+08
+# HELP windows_netframework_clrremoting_channels_total Displays the total number of remoting channels registered across all application domains since application started.
+# TYPE windows_netframework_clrremoting_channels_total counter
+windows_netframework_clrremoting_channels_total{process="WMSvc"} 0
+windows_netframework_clrremoting_channels_total{process="powershell"} 0
+# HELP windows_netframework_clrremoting_context_bound_classes_loaded Displays the current number of context-bound classes that are loaded.
+# TYPE windows_netframework_clrremoting_context_bound_classes_loaded gauge
+windows_netframework_clrremoting_context_bound_classes_loaded{process="WMSvc"} 0
+windows_netframework_clrremoting_context_bound_classes_loaded{process="powershell"} 0
+# HELP windows_netframework_clrremoting_context_bound_objects_total Displays the total number of context-bound objects allocated.
+# TYPE windows_netframework_clrremoting_context_bound_objects_total counter
+windows_netframework_clrremoting_context_bound_objects_total{process="WMSvc"} 0
+windows_netframework_clrremoting_context_bound_objects_total{process="powershell"} 0
+# HELP windows_netframework_clrremoting_context_proxies_total Displays the total number of remoting proxy objects in this process since it started.
+# TYPE windows_netframework_clrremoting_context_proxies_total counter
+windows_netframework_clrremoting_context_proxies_total{process="WMSvc"} 0
+windows_netframework_clrremoting_context_proxies_total{process="powershell"} 0
+# HELP windows_netframework_clrremoting_contexts Displays the current number of remoting contexts in the application.
+# TYPE windows_netframework_clrremoting_contexts gauge
+windows_netframework_clrremoting_contexts{process="WMSvc"} 1
+windows_netframework_clrremoting_contexts{process="powershell"} 1
+# HELP windows_netframework_clrremoting_remote_calls_total Displays the total number of remote procedure calls invoked since the application started.
+# TYPE windows_netframework_clrremoting_remote_calls_total counter
+windows_netframework_clrremoting_remote_calls_total{process="WMSvc"} 0
+windows_netframework_clrremoting_remote_calls_total{process="powershell"} 0
+# HELP windows_netframework_clrsecurity_link_time_checks_total Displays the total number of link-time code access security checks since the application started.
+# TYPE windows_netframework_clrsecurity_link_time_checks_total counter
+windows_netframework_clrsecurity_link_time_checks_total{process="WMSvc"} 0
+windows_netframework_clrsecurity_link_time_checks_total{process="powershell"} 0
+# HELP windows_netframework_clrsecurity_rt_checks_time_percent Displays the percentage of time spent performing runtime code access security checks in the last sample.
+# TYPE windows_netframework_clrsecurity_rt_checks_time_percent gauge
+windows_netframework_clrsecurity_rt_checks_time_percent{process="WMSvc"} 0
+windows_netframework_clrsecurity_rt_checks_time_percent{process="powershell"} 0
+# HELP windows_netframework_clrsecurity_runtime_checks_total Displays the total number of runtime code access security checks performed since the application started.
+# TYPE windows_netframework_clrsecurity_runtime_checks_total counter
+windows_netframework_clrsecurity_runtime_checks_total{process="WMSvc"} 3
+windows_netframework_clrsecurity_runtime_checks_total{process="powershell"} 4386
+# HELP windows_netframework_clrsecurity_stack_walk_depth Displays the depth of the stack during that last runtime code access security check.
+# TYPE windows_netframework_clrsecurity_stack_walk_depth gauge
+windows_netframework_clrsecurity_stack_walk_depth{process="WMSvc"} 1
+windows_netframework_clrsecurity_stack_walk_depth{process="powershell"} 1
+# HELP windows_os_info OperatingSystem.Caption, OperatingSystem.Version
+# TYPE windows_os_info gauge
+windows_os_info{build_number="22621",major_version="10",minor_version="0",product="Microsoft Windows 10 Pro",version="10.0.22621"} 1
+# HELP windows_os_paging_free_bytes OperatingSystem.FreeSpaceInPagingFiles
+# TYPE windows_os_paging_free_bytes gauge
+windows_os_paging_free_bytes 1.414107136e+09
+# HELP windows_os_paging_limit_bytes OperatingSystem.SizeStoredInPagingFiles
+# TYPE windows_os_paging_limit_bytes gauge
+windows_os_paging_limit_bytes 1.476395008e+09
+# HELP windows_os_physical_memory_free_bytes OperatingSystem.FreePhysicalMemory
+# TYPE windows_os_physical_memory_free_bytes gauge
+windows_os_physical_memory_free_bytes 1.379946496e+09
+# HELP windows_os_process_memory_limit_bytes OperatingSystem.MaxProcessMemorySize
+# TYPE windows_os_process_memory_limit_bytes gauge
+windows_os_process_memory_limit_bytes 1.40737488224256e+14
+# HELP windows_os_processes OperatingSystem.NumberOfProcesses
+# TYPE windows_os_processes gauge
+windows_os_processes 152
+# HELP windows_os_processes_limit OperatingSystem.MaxNumberOfProcesses
+# TYPE windows_os_processes_limit gauge
+windows_os_processes_limit 4.294967295e+09
+# HELP windows_os_time OperatingSystem.LocalDateTime
+# TYPE windows_os_time gauge
+windows_os_time 1.667508748e+09
+# HELP windows_os_timezone OperatingSystem.LocalDateTime
+# TYPE windows_os_timezone gauge
+windows_os_timezone{timezone="EET"} 1
+# HELP windows_os_users OperatingSystem.NumberOfUsers
+# TYPE windows_os_users gauge
+windows_os_users 2
+# HELP windows_os_virtual_memory_bytes OperatingSystem.TotalVirtualMemorySize
+# TYPE windows_os_virtual_memory_bytes gauge
+windows_os_virtual_memory_bytes 5.733113856e+09
+# HELP windows_os_virtual_memory_free_bytes OperatingSystem.FreeVirtualMemory
+# TYPE windows_os_virtual_memory_free_bytes gauge
+windows_os_virtual_memory_free_bytes 2.285674496e+09
+# HELP windows_os_visible_memory_bytes OperatingSystem.TotalVisibleMemorySize
+# TYPE windows_os_visible_memory_bytes gauge
+windows_os_visible_memory_bytes 4.256718848e+09
+# HELP windows_process_cpu_time_total Returns elapsed time that all of the threads of this process used the processor to execute instructions by mode (privileged, user).
+# TYPE windows_process_cpu_time_total counter
+windows_process_cpu_time_total{creating_process_id="4300",mode="privileged",process="msedge",process_id="6032"} 21.78125
+windows_process_cpu_time_total{creating_process_id="4300",mode="user",process="msedge",process_id="6032"} 31.46875
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="1204"} 0.09375
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="2296"} 0.203125
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="3044"} 0.15625
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="3728"} 0.28125
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="5060"} 110.171875
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="5904"} 0.359375
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="5936"} 37.40625
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="7800"} 0.03125
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="844"} 1.765625
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="8512"} 0.40625
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="8736"} 47.796875
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="896"} 69.1875
+windows_process_cpu_time_total{creating_process_id="6032",mode="privileged",process="msedge",process_id="900"} 0.265625
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="1204"} 0.171875
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="2296"} 0.28125
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="3044"} 0.734375
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="3728"} 0.734375
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="5060"} 1281.59375
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="5904"} 0.84375
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="5936"} 52.515625
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="7800"} 0.015625
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="844"} 10.109375
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="8512"} 1.203125
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="8736"} 85.71875
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="896"} 163.78125
+windows_process_cpu_time_total{creating_process_id="6032",mode="user",process="msedge",process_id="900"} 0.828125
+# HELP windows_process_handles Total number of handles the process has open. This number is the sum of the handles currently open by each thread in the process.
+# TYPE windows_process_handles gauge
+windows_process_handles{creating_process_id="4300",process="msedge",process_id="6032"} 1868
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="1204"} 227
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="2296"} 254
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="3044"} 285
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="3728"} 220
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="5060"} 443
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="5904"} 271
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="5936"} 298
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="7800"} 204
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="844"} 379
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="8512"} 274
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="8736"} 245
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="896"} 488
+windows_process_handles{creating_process_id="6032",process="msedge",process_id="900"} 323
+# HELP windows_process_io_bytes_total Bytes issued to I/O operations in different modes (read, write, other).
+# TYPE windows_process_io_bytes_total counter
+windows_process_io_bytes_total{creating_process_id="4300",mode="other",process="msedge",process_id="6032"} 4.348941e+06
+windows_process_io_bytes_total{creating_process_id="4300",mode="read",process="msedge",process_id="6032"} 3.30817247e+08
+windows_process_io_bytes_total{creating_process_id="4300",mode="write",process="msedge",process_id="6032"} 4.71331306e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="1204"} 26082
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="2296"} 26144
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="3044"} 26078
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="3728"} 23912
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="5060"} 26596
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="5904"} 30800
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="5936"} 1.83334e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="7800"} 5128
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="844"} 26598
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="8512"} 26174
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="8736"} 26268
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="896"} 188254
+windows_process_io_bytes_total{creating_process_id="6032",mode="other",process="msedge",process_id="900"} 26142
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="1204"} 68868
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="2296"} 261004
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="3044"} 400260
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="3728"} 734626
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="5060"} 7.35770137e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="5904"} 45529
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="5936"} 2.72541538e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="7800"} 8804
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="844"} 2.4573337e+07
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="8512"} 1.0120572e+07
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="8736"} 7.202112e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="896"} 5.49114536e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="read",process="msedge",process_id="900"} 656823
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="1204"} 249336
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="2296"} 576080
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="3044"} 1.7264e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="3728"} 1.257063e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="5060"} 7.54045349e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="5904"} 217248
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="5936"} 4.55388644e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="7800"} 1128
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="844"} 1.5475693e+07
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="8512"} 3.635552e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="8736"} 7.987096e+06
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="896"} 3.26369864e+08
+windows_process_io_bytes_total{creating_process_id="6032",mode="write",process="msedge",process_id="900"} 1.010769e+06
+# HELP windows_process_io_operations_total I/O operations issued in different modes (read, write, other).
+# TYPE windows_process_io_operations_total counter
+windows_process_io_operations_total{creating_process_id="4300",mode="other",process="msedge",process_id="6032"} 113456
+windows_process_io_operations_total{creating_process_id="4300",mode="read",process="msedge",process_id="6032"} 294229
+windows_process_io_operations_total{creating_process_id="4300",mode="write",process="msedge",process_id="6032"} 200349
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="1204"} 331
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="2296"} 335
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="3044"} 349
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="3728"} 327
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="5060"} 399
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="5904"} 395
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="5936"} 78519
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="7800"} 673
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="844"} 359
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="8512"} 340
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="8736"} 394
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="896"} 4069
+windows_process_io_operations_total{creating_process_id="6032",mode="other",process="msedge",process_id="900"} 337
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="1204"} 74
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="2296"} 732
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="3044"} 950
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="3728"} 1447
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="5060"} 3.995322e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="5904"} 124
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="5936"} 1.571962e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="7800"} 102
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="844"} 20686
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="8512"} 6686
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="8736"} 1.788249e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="896"} 537551
+windows_process_io_operations_total{creating_process_id="6032",mode="read",process="msedge",process_id="900"} 1519
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="1204"} 114
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="2296"} 437
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="3044"} 1405
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="3728"} 3705
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="5060"} 3.848906e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="5904"} 118
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="5936"} 1.701602e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="7800"} 94
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="844"} 24678
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="8512"} 9689
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="8736"} 1.790946e+06
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="896"} 734759
+windows_process_io_operations_total{creating_process_id="6032",mode="write",process="msedge",process_id="900"} 1924
+# HELP windows_process_page_faults_total Page faults by the threads executing in this process.
+# TYPE windows_process_page_faults_total counter
+windows_process_page_faults_total{creating_process_id="4300",process="msedge",process_id="6032"} 296027
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="1204"} 7965
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="2296"} 11749
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="3044"} 41335
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="3728"} 9529
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="5060"} 3.750099e+06
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="5904"} 8101
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="5936"} 533380
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="7800"} 2636
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="844"} 402098
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="8512"} 35487
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="8736"} 9427
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="896"} 205035
+windows_process_page_faults_total{creating_process_id="6032",process="msedge",process_id="900"} 43073
+# HELP windows_process_page_file_bytes Current number of bytes this process has used in the paging file(s).
+# TYPE windows_process_page_file_bytes gauge
+windows_process_page_file_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 7.041024e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 1.3561856e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 1.5511552e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 3.0756864e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 8.298496e+06
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 3.32230656e+08
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 8.97024e+06
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 1.3877248e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 2.060288e+06
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="844"} 9.2012544e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 2.0672512e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 8.126464e+06
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="896"} 4.1484288e+07
+windows_process_page_file_bytes{creating_process_id="6032",process="msedge",process_id="900"} 2.3629824e+07
+# HELP windows_process_pool_bytes Pool Bytes is the last observed number of bytes in the paged or nonpaged pool.
+# TYPE windows_process_pool_bytes gauge
+windows_process_pool_bytes{creating_process_id="4300",pool="nonpaged",process="msedge",process_id="6032"} 72072
+windows_process_pool_bytes{creating_process_id="4300",pool="paged",process="msedge",process_id="6032"} 1.262872e+06
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="1204"} 15544
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="2296"} 16024
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="3044"} 17816
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="3728"} 14544
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="5060"} 24600
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="5904"} 16992
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="5936"} 19088
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="7800"} 9920
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="844"} 18472
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="8512"} 18536
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="8736"} 15944
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="896"} 34464
+windows_process_pool_bytes{creating_process_id="6032",pool="nonpaged",process="msedge",process_id="900"} 17040
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="1204"} 651472
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="2296"} 665496
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="3044"} 674248
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="3728"} 656216
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="5060"} 849040
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="5904"} 722296
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="5936"} 705232
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="7800"} 140256
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="844"} 680896
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="8512"} 679648
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="8736"} 677152
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="896"} 839128
+windows_process_pool_bytes{creating_process_id="6032",pool="paged",process="msedge",process_id="900"} 682408
+# HELP windows_process_priority_base Current base priority of this process. Threads within a process can raise and lower their own base priority relative to the process base priority of the process.
+# TYPE windows_process_priority_base gauge
+windows_process_priority_base{creating_process_id="4300",process="msedge",process_id="6032"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="1204"} 4
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="2296"} 4
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="3044"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="3728"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="5060"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="5904"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="5936"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="7800"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="844"} 4
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="8512"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="8736"} 8
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="896"} 10
+windows_process_priority_base{creating_process_id="6032",process="msedge",process_id="900"} 4
+# HELP windows_process_private_bytes Current number of bytes this process has allocated that cannot be shared with other processes.
+# TYPE windows_process_private_bytes gauge
+windows_process_private_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 7.041024e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 1.3561856e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 1.5511552e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 3.0756864e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 8.298496e+06
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 3.32230656e+08
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 8.97024e+06
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 1.3877248e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 2.060288e+06
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="844"} 9.2012544e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 2.0672512e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 8.126464e+06
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="896"} 4.1484288e+07
+windows_process_private_bytes{creating_process_id="6032",process="msedge",process_id="900"} 2.3629824e+07
+# HELP windows_process_start_time Time of process start.
+# TYPE windows_process_start_time gauge
+windows_process_start_time{creating_process_id="4300",process="msedge",process_id="6032"} 1.6674729863403437e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="1204"} 1.667489261506441e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="2296"} 1.6674729883723967e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="3044"} 1.6674892546961231e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="3728"} 1.667472986486918e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="5060"} 1.6674729865421767e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="5904"} 1.6674730465087523e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="5936"} 1.6674729864704254e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="7800"} 1.667472986365871e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="844"} 1.6674729865463045e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="8512"} 1.6674729970112965e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="8736"} 1.667472989342484e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="896"} 1.667472986462684e+09
+windows_process_start_time{creating_process_id="6032",process="msedge",process_id="900"} 1.667472995850073e+09
+# HELP windows_process_threads Number of threads currently active in this process.
+# TYPE windows_process_threads gauge
+windows_process_threads{creating_process_id="4300",process="msedge",process_id="6032"} 38
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="1204"} 12
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="2296"} 15
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="3044"} 15
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="3728"} 9
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="5060"} 21
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="5904"} 9
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="5936"} 12
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="7800"} 7
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="844"} 17
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="8512"} 15
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="8736"} 9
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="896"} 19
+windows_process_threads{creating_process_id="6032",process="msedge",process_id="900"} 15
+# HELP windows_process_virtual_bytes Current size, in bytes, of the virtual address space that the process is using.
+# TYPE windows_process_virtual_bytes gauge
+windows_process_virtual_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 2.341704609792e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 3.48529324032e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 3.485321392128e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 3.48532901888e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 2.306839302144e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 3.485494009856e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 2.306863792128e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 2.30688589824e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 2.272204521472e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="844"} 3.486428184576e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 3.485333880832e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 2.306843000832e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="896"} 2.307077632e+12
+windows_process_virtual_bytes{creating_process_id="6032",process="msedge",process_id="900"} 3.485325856768e+12
+# HELP windows_process_working_set_bytes Maximum number of bytes in the working set of this process at any point in time. The working set is the set of memory pages touched recently by the threads in the process.
+# TYPE windows_process_working_set_bytes gauge
+windows_process_working_set_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 1.59309824e+08
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 2.7205632e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 3.65568e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 7.5198464e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 1.7866752e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 3.79973632e+08
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 2.3228416e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 3.6646912e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 6.950912e+06
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="844"} 1.32747264e+08
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 5.5025664e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 1.9361792e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="896"} 5.873664e+07
+windows_process_working_set_bytes{creating_process_id="6032",process="msedge",process_id="900"} 5.6283136e+07
+# HELP windows_process_working_set_peak_bytes Maximum size, in bytes, of the Working Set of this process at any point in time. The Working Set is the set of memory pages touched recently by the threads in the process.
+# TYPE windows_process_working_set_peak_bytes gauge
+windows_process_working_set_peak_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 1.73211648e+08
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 2.7205632e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 4.1439232e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 9.2250112e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 1.9263488e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 4.54914048e+08
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 2.4363008e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 4.2278912e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 7.626752e+06
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="844"} 2.28954112e+08
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 5.9830272e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 2.0250624e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="896"} 7.835648e+07
+windows_process_working_set_peak_bytes{creating_process_id="6032",process="msedge",process_id="900"} 5.943296e+07
+# HELP windows_process_working_set_private_bytes Size of the working set, in bytes, that is use for this process only and not shared nor shareable by other processes.
+# TYPE windows_process_working_set_private_bytes gauge
+windows_process_working_set_private_bytes{creating_process_id="4300",process="msedge",process_id="6032"} 3.6057088e+07
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="1204"} 5.373952e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="2296"} 2.072576e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="3044"} 1.9554304e+07
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="3728"} 1.691648e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="5060"} 2.96091648e+08
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="5904"} 1.654784e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="5936"} 6.49216e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="7800"} 421888
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="844"} 6.250496e+07
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="8512"} 7.59808e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="8736"} 1.449984e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="896"} 8.429568e+06
+windows_process_working_set_private_bytes{creating_process_id="6032",process="msedge",process_id="900"} 1.1952128e+07
+# HELP windows_service_info A metric with a constant '1' value labeled with service information
+# TYPE windows_service_info gauge
+windows_service_info{display_name="DHCP Client",name="dhcp",process_id="1908",run_as="NT Authority\\LocalService"} 1
+# HELP windows_service_start_mode The start mode of the service (StartMode)
+# TYPE windows_service_start_mode gauge
+windows_service_start_mode{name="dhcp",start_mode="auto"} 1
+windows_service_start_mode{name="dhcp",start_mode="boot"} 0
+windows_service_start_mode{name="dhcp",start_mode="disabled"} 0
+windows_service_start_mode{name="dhcp",start_mode="manual"} 0
+windows_service_start_mode{name="dhcp",start_mode="system"} 0
+# HELP windows_service_state The state of the service (State)
+# TYPE windows_service_state gauge
+windows_service_state{name="dhcp",state="continue pending"} 0
+windows_service_state{name="dhcp",state="pause pending"} 0
+windows_service_state{name="dhcp",state="paused"} 0
+windows_service_state{name="dhcp",state="running"} 1
+windows_service_state{name="dhcp",state="start pending"} 0
+windows_service_state{name="dhcp",state="stop pending"} 0
+windows_service_state{name="dhcp",state="stopped"} 0
+windows_service_state{name="dhcp",state="unknown"} 0
+# HELP windows_service_status The status of the service (Status)
+# TYPE windows_service_status gauge
+windows_service_status{name="dhcp",status="degraded"} 0
+windows_service_status{name="dhcp",status="error"} 0
+windows_service_status{name="dhcp",status="lost comm"} 0
+windows_service_status{name="dhcp",status="no contact"} 0
+windows_service_status{name="dhcp",status="nonrecover"} 0
+windows_service_status{name="dhcp",status="ok"} 1
+windows_service_status{name="dhcp",status="pred fail"} 0
+windows_service_status{name="dhcp",status="service"} 0
+windows_service_status{name="dhcp",status="starting"} 0
+windows_service_status{name="dhcp",status="stopping"} 0
+windows_service_status{name="dhcp",status="stressed"} 0
+windows_service_status{name="dhcp",status="unknown"} 0
+# HELP windows_system_context_switches_total Total number of context switches (WMI source: PerfOS_System.ContextSwitchesPersec)
+# TYPE windows_system_context_switches_total counter
+windows_system_context_switches_total 4.8655033e+08
+# HELP windows_system_exception_dispatches_total Total number of exceptions dispatched (WMI source: PerfOS_System.ExceptionDispatchesPersec)
+# TYPE windows_system_exception_dispatches_total counter
+windows_system_exception_dispatches_total 160348
+# HELP windows_system_processor_queue_length Length of processor queue (WMI source: PerfOS_System.ProcessorQueueLength)
+# TYPE windows_system_processor_queue_length gauge
+windows_system_processor_queue_length 0
+# HELP windows_system_system_calls_total Total number of system calls (WMI source: PerfOS_System.SystemCallsPersec)
+# TYPE windows_system_system_calls_total counter
+windows_system_system_calls_total 1.886567439e+09
+# HELP windows_system_system_up_time System boot time (WMI source: PerfOS_System.SystemUpTime)
+# TYPE windows_system_system_up_time gauge
+windows_system_system_up_time 1.6673440377290363e+09
+# HELP windows_system_threads Current number of threads (WMI source: PerfOS_System.Threads)
+# TYPE windows_system_threads gauge
+windows_system_threads 1559
+# HELP windows_tcp_connection_failures_total (TCP.ConnectionFailures)
+# TYPE windows_tcp_connection_failures_total counter
+windows_tcp_connection_failures_total{af="ipv4"} 137
+windows_tcp_connection_failures_total{af="ipv6"} 214
+# HELP windows_tcp_connections_active_total (TCP.ConnectionsActive)
+# TYPE windows_tcp_connections_active_total counter
+windows_tcp_connections_active_total{af="ipv4"} 4301
+windows_tcp_connections_active_total{af="ipv6"} 214
+# HELP windows_tcp_connections_established (TCP.ConnectionsEstablished)
+# TYPE windows_tcp_connections_established gauge
+windows_tcp_connections_established{af="ipv4"} 7
+windows_tcp_connections_established{af="ipv6"} 0
+# HELP windows_tcp_connections_passive_total (TCP.ConnectionsPassive)
+# TYPE windows_tcp_connections_passive_total counter
+windows_tcp_connections_passive_total{af="ipv4"} 501
+windows_tcp_connections_passive_total{af="ipv6"} 0
+# HELP windows_tcp_connections_reset_total (TCP.ConnectionsReset)
+# TYPE windows_tcp_connections_reset_total counter
+windows_tcp_connections_reset_total{af="ipv4"} 1282
+windows_tcp_connections_reset_total{af="ipv6"} 0
+# HELP windows_tcp_segments_received_total (TCP.SegmentsReceivedTotal)
+# TYPE windows_tcp_segments_received_total counter
+windows_tcp_segments_received_total{af="ipv4"} 676388
+windows_tcp_segments_received_total{af="ipv6"} 1284
+# HELP windows_tcp_segments_retransmitted_total (TCP.SegmentsRetransmittedTotal)
+# TYPE windows_tcp_segments_retransmitted_total counter
+windows_tcp_segments_retransmitted_total{af="ipv4"} 2120
+windows_tcp_segments_retransmitted_total{af="ipv6"} 428
+# HELP windows_tcp_segments_sent_total (TCP.SegmentsSentTotal)
+# TYPE windows_tcp_segments_sent_total counter
+windows_tcp_segments_sent_total{af="ipv4"} 871379
+windows_tcp_segments_sent_total{af="ipv6"} 856
+# HELP windows_tcp_segments_total (TCP.SegmentsTotal)
+# TYPE windows_tcp_segments_total counter
+windows_tcp_segments_total{af="ipv4"} 1.547767e+06
+windows_tcp_segments_total{af="ipv6"} 2140
diff --git a/src/go/collectors/go.d.plugin/modules/windows/windows.go b/src/go/collectors/go.d.plugin/modules/windows/windows.go
new file mode 100644
index 000000000..99bfecf1d
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/windows.go
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ _ "embed"
+ "errors"
+ "time"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
+)
+
+//go:embed "config_schema.json"
+var configSchema string
+
+func init() {
+ module.Register("windows", module.Creator{
+ JobConfigSchema: configSchema,
+ Defaults: module.Defaults{
+ UpdateEvery: 5,
+ },
+ Create: func() module.Module { return New() },
+ Config: func() any { return &Config{} },
+ })
+}
+
+func New() *Windows {
+ return &Windows{
+ Config: Config{
+ HTTP: web.HTTP{
+ Client: web.Client{
+ Timeout: web.Duration(time.Second * 5),
+ },
+ },
+ },
+ cache: cache{
+ collection: make(map[string]bool),
+ collectors: make(map[string]bool),
+ cores: make(map[string]bool),
+ nics: make(map[string]bool),
+ volumes: make(map[string]bool),
+ thermalZones: make(map[string]bool),
+ processes: make(map[string]bool),
+ iis: make(map[string]bool),
+ adcs: make(map[string]bool),
+ services: make(map[string]bool),
+ netFrameworkCLRExceptions: make(map[string]bool),
+ netFrameworkCLRInterops: make(map[string]bool),
+ netFrameworkCLRJIT: make(map[string]bool),
+ netFrameworkCLRLoading: make(map[string]bool),
+ netFrameworkCLRLocksThreads: make(map[string]bool),
+ netFrameworkCLRMemory: make(map[string]bool),
+ netFrameworkCLRRemoting: make(map[string]bool),
+ netFrameworkCLRSecurity: make(map[string]bool),
+ mssqlInstances: make(map[string]bool),
+ mssqlDBs: make(map[string]bool),
+ exchangeWorkload: make(map[string]bool),
+ exchangeLDAP: make(map[string]bool),
+ exchangeHTTPProxy: make(map[string]bool),
+ hypervVMMem: make(map[string]bool),
+ hypervVMDevices: make(map[string]bool),
+ hypervVMInterfaces: make(map[string]bool),
+ hypervVswitch: make(map[string]bool),
+ },
+ charts: &module.Charts{},
+ }
+}
+
+type Config struct {
+ UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"`
+ web.HTTP `yaml:",inline" json:""`
+ Vnode string `yaml:"vnode,omitempty" json:"vnode"`
+}
+
+type (
+ Windows struct {
+ module.Base
+ Config `yaml:",inline" json:""`
+
+ charts *module.Charts
+
+ prom prometheus.Prometheus
+
+ cache cache
+ }
+ cache struct {
+ cores map[string]bool
+ volumes map[string]bool
+ nics map[string]bool
+ thermalZones map[string]bool
+ processes map[string]bool
+ iis map[string]bool
+ adcs map[string]bool
+ mssqlInstances map[string]bool
+ mssqlDBs map[string]bool
+ services map[string]bool
+ netFrameworkCLRExceptions map[string]bool
+ netFrameworkCLRInterops map[string]bool
+ netFrameworkCLRJIT map[string]bool
+ netFrameworkCLRLoading map[string]bool
+ netFrameworkCLRLocksThreads map[string]bool
+ netFrameworkCLRMemory map[string]bool
+ netFrameworkCLRRemoting map[string]bool
+ netFrameworkCLRSecurity map[string]bool
+ collectors map[string]bool
+ collection map[string]bool
+ exchangeWorkload map[string]bool
+ exchangeLDAP map[string]bool
+ exchangeHTTPProxy map[string]bool
+ hypervVMMem map[string]bool
+ hypervVMDevices map[string]bool
+ hypervVMInterfaces map[string]bool
+ hypervVswitch map[string]bool
+ }
+)
+
+func (w *Windows) Configuration() any {
+ return w.Config
+}
+
+func (w *Windows) Init() error {
+ if err := w.validateConfig(); err != nil {
+ w.Errorf("config validation: %v", err)
+ return err
+ }
+
+ prom, err := w.initPrometheusClient()
+ if err != nil {
+ w.Errorf("init prometheus clients: %v", err)
+ return err
+ }
+ w.prom = prom
+
+ return nil
+}
+
+func (w *Windows) Check() error {
+ mx, err := w.collect()
+ if err != nil {
+ w.Error(err)
+ return err
+ }
+ if len(mx) == 0 {
+ return errors.New("no metrics collected")
+ }
+ return nil
+}
+
+func (w *Windows) Charts() *module.Charts {
+ return w.charts
+}
+
+func (w *Windows) Collect() map[string]int64 {
+ ms, err := w.collect()
+ if err != nil {
+ w.Error(err)
+ }
+
+ if len(ms) == 0 {
+ return nil
+ }
+ return ms
+}
+
+func (w *Windows) Cleanup() {
+ if w.prom != nil && w.prom.HTTPClient() != nil {
+ w.prom.HTTPClient().CloseIdleConnections()
+ }
+}
diff --git a/src/go/collectors/go.d.plugin/modules/windows/windows_test.go b/src/go/collectors/go.d.plugin/modules/windows/windows_test.go
new file mode 100644
index 000000000..6322b0981
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/windows/windows_test.go
@@ -0,0 +1,1100 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package windows
+
+import (
+ "fmt"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "strings"
+ "testing"
+
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+ "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+var (
+ dataConfigJSON, _ = os.ReadFile("testdata/config.json")
+ dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")
+
+ dataVer0200Metrics, _ = os.ReadFile("testdata/v0.20.0/metrics.txt")
+)
+
+func Test_testDataIsValid(t *testing.T) {
+ for name, data := range map[string][]byte{
+ "dataConfigJSON": dataConfigJSON,
+ "dataConfigYAML": dataConfigYAML,
+ "dataVer0200Metrics": dataVer0200Metrics,
+ } {
+ assert.NotNil(t, data, name)
+ }
+}
+
+func TestWindows_ConfigurationSerialize(t *testing.T) {
+ module.TestConfigurationSerialize(t, &Windows{}, dataConfigJSON, dataConfigYAML)
+}
+
+func TestNew(t *testing.T) {
+ assert.IsType(t, (*Windows)(nil), New())
+}
+
+func TestWindows_Init(t *testing.T) {
+ tests := map[string]struct {
+ config Config
+ wantFail bool
+ }{
+ "success if 'url' is set": {
+ config: Config{
+ HTTP: web.HTTP{Request: web.Request{URL: "http://127.0.0.1:9182/metrics"}}},
+ },
+ "fails on default config": {
+ wantFail: true,
+ config: New().Config,
+ },
+ "fails if 'url' is unset": {
+ wantFail: true,
+ config: Config{HTTP: web.HTTP{Request: web.Request{URL: ""}}},
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ win := New()
+ win.Config = test.config
+
+ if test.wantFail {
+ assert.Error(t, win.Init())
+ } else {
+ assert.NoError(t, win.Init())
+ }
+ })
+ }
+}
+
+func TestWindows_Check(t *testing.T) {
+ tests := map[string]struct {
+ prepare func() (win *Windows, cleanup func())
+ wantFail bool
+ }{
+ "success on valid response v0.20.0": {
+ prepare: prepareWindowsV0200,
+ },
+ "fails if endpoint returns invalid data": {
+ wantFail: true,
+ prepare: prepareWindowsReturnsInvalidData,
+ },
+ "fails on connection refused": {
+ wantFail: true,
+ prepare: prepareWindowsConnectionRefused,
+ },
+ "fails on 404 response": {
+ wantFail: true,
+ prepare: prepareWindowsResponse404,
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ win, cleanup := test.prepare()
+ defer cleanup()
+
+ require.NoError(t, win.Init())
+
+ if test.wantFail {
+ assert.Error(t, win.Check())
+ } else {
+ assert.NoError(t, win.Check())
+ }
+ })
+ }
+}
+
+func TestWindows_Charts(t *testing.T) {
+ assert.NotNil(t, New().Charts())
+}
+
+func TestWindows_Cleanup(t *testing.T) {
+ assert.NotPanics(t, New().Cleanup)
+}
+
+func TestWindows_Collect(t *testing.T) {
+ tests := map[string]struct {
+ prepare func() (win *Windows, cleanup func())
+ wantCollected map[string]int64
+ }{
+ "success on valid response v0.20.0": {
+ prepare: prepareWindowsV0200,
+ wantCollected: map[string]int64{
+ "ad_atq_average_request_latency": 0,
+ "ad_atq_outstanding_requests": 0,
+ "ad_binds_total": 184,
+ "ad_database_operations_total_add": 1,
+ "ad_database_operations_total_delete": 0,
+ "ad_database_operations_total_modify": 30,
+ "ad_database_operations_total_recycle": 0,
+ "ad_directory_operations_total_read": 726,
+ "ad_directory_operations_total_search": 831,
+ "ad_directory_operations_total_write": 31,
+ "ad_directory_service_threads": 0,
+ "ad_ldap_last_bind_time_seconds": 0,
+ "ad_ldap_searches_total": 1382,
+ "ad_name_cache_hits_total": 41161,
+ "ad_name_cache_lookups_total": 53046,
+ "ad_replication_data_intersite_bytes_total_inbound": 0,
+ "ad_replication_data_intersite_bytes_total_outbound": 0,
+ "ad_replication_data_intrasite_bytes_total_inbound": 0,
+ "ad_replication_data_intrasite_bytes_total_outbound": 0,
+ "ad_replication_inbound_objects_filtered_total": 0,
+ "ad_replication_inbound_properties_filtered_total": 0,
+ "ad_replication_inbound_properties_updated_total": 0,
+ "ad_replication_inbound_sync_objects_remaining": 0,
+ "ad_replication_pending_synchronizations": 0,
+ "ad_replication_sync_requests_total": 0,
+ "adcs_cert_template_Administrator_challenge_response_processing_time_seconds": 0,
+ "adcs_cert_template_Administrator_challenge_responses_total": 0,
+ "adcs_cert_template_Administrator_failed_requests_total": 0,
+ "adcs_cert_template_Administrator_issued_requests_total": 0,
+ "adcs_cert_template_Administrator_pending_requests_total": 0,
+ "adcs_cert_template_Administrator_request_cryptographic_signing_time_seconds": 0,
+ "adcs_cert_template_Administrator_request_policy_module_processing_time_seconds": 0,
+ "adcs_cert_template_Administrator_request_processing_time_seconds": 0,
+ "adcs_cert_template_Administrator_requests_total": 0,
+ "adcs_cert_template_Administrator_retrievals_processing_time_seconds": 0,
+ "adcs_cert_template_Administrator_retrievals_total": 0,
+ "adcs_cert_template_Administrator_signed_certificate_timestamp_list_processing_time_seconds": 0,
+ "adcs_cert_template_Administrator_signed_certificate_timestamp_lists_total": 0,
+ "adcs_cert_template_DomainController_challenge_response_processing_time_seconds": 0,
+ "adcs_cert_template_DomainController_challenge_responses_total": 0,
+ "adcs_cert_template_DomainController_failed_requests_total": 0,
+ "adcs_cert_template_DomainController_issued_requests_total": 1,
+ "adcs_cert_template_DomainController_pending_requests_total": 0,
+ "adcs_cert_template_DomainController_request_cryptographic_signing_time_seconds": 0,
+ "adcs_cert_template_DomainController_request_policy_module_processing_time_seconds": 16,
+ "adcs_cert_template_DomainController_request_processing_time_seconds": 63,
+ "adcs_cert_template_DomainController_requests_total": 1,
+ "adcs_cert_template_DomainController_retrievals_processing_time_seconds": 0,
+ "adcs_cert_template_DomainController_retrievals_total": 0,
+ "adcs_cert_template_DomainController_signed_certificate_timestamp_list_processing_time_seconds": 0,
+ "adcs_cert_template_DomainController_signed_certificate_timestamp_lists_total": 0,
+ "adfs_ad_login_connection_failures_total": 0,
+ "adfs_certificate_authentications_total": 0,
+ "adfs_db_artifact_failure_total": 0,
+ "adfs_db_artifact_query_time_seconds_total": 0,
+ "adfs_db_config_failure_total": 0,
+ "adfs_db_config_query_time_seconds_total": 101,
+ "adfs_device_authentications_total": 0,
+ "adfs_external_authentications_failure_total": 0,
+ "adfs_external_authentications_success_total": 0,
+ "adfs_extranet_account_lockouts_total": 0,
+ "adfs_federated_authentications_total": 0,
+ "adfs_federation_metadata_requests_total": 1,
+ "adfs_oauth_authorization_requests_total": 0,
+ "adfs_oauth_client_authentication_failure_total": 0,
+ "adfs_oauth_client_authentication_success_total": 0,
+ "adfs_oauth_client_credentials_failure_total": 0,
+ "adfs_oauth_client_credentials_success_total": 0,
+ "adfs_oauth_client_privkey_jtw_authentication_failure_total": 0,
+ "adfs_oauth_client_privkey_jwt_authentications_success_total": 0,
+ "adfs_oauth_client_secret_basic_authentications_failure_total": 0,
+ "adfs_oauth_client_secret_basic_authentications_success_total": 0,
+ "adfs_oauth_client_secret_post_authentications_failure_total": 0,
+ "adfs_oauth_client_secret_post_authentications_success_total": 0,
+ "adfs_oauth_client_windows_authentications_failure_total": 0,
+ "adfs_oauth_client_windows_authentications_success_total": 0,
+ "adfs_oauth_logon_certificate_requests_failure_total": 0,
+ "adfs_oauth_logon_certificate_token_requests_success_total": 0,
+ "adfs_oauth_password_grant_requests_failure_total": 0,
+ "adfs_oauth_password_grant_requests_success_total": 0,
+ "adfs_oauth_token_requests_success_total": 0,
+ "adfs_passive_requests_total": 0,
+ "adfs_passport_authentications_total": 0,
+ "adfs_password_change_failed_total": 0,
+ "adfs_password_change_succeeded_total": 0,
+ "adfs_samlp_token_requests_success_total": 0,
+ "adfs_sso_authentications_failure_total": 0,
+ "adfs_sso_authentications_success_total": 0,
+ "adfs_token_requests_total": 0,
+ "adfs_userpassword_authentications_failure_total": 0,
+ "adfs_userpassword_authentications_success_total": 0,
+ "adfs_windows_integrated_authentications_total": 0,
+ "adfs_wsfed_token_requests_success_total": 0,
+ "adfs_wstrust_token_requests_success_total": 0,
+ "collector_ad_duration": 769,
+ "collector_ad_status_fail": 0,
+ "collector_ad_status_success": 1,
+ "collector_adcs_duration": 0,
+ "collector_adcs_status_fail": 0,
+ "collector_adcs_status_success": 1,
+ "collector_adfs_duration": 3,
+ "collector_adfs_status_fail": 0,
+ "collector_adfs_status_success": 1,
+ "collector_cpu_duration": 0,
+ "collector_cpu_status_fail": 0,
+ "collector_cpu_status_success": 1,
+ "collector_exchange_duration": 33,
+ "collector_exchange_status_fail": 0,
+ "collector_exchange_status_success": 1,
+ "collector_hyperv_duration": 900,
+ "collector_hyperv_status_fail": 0,
+ "collector_hyperv_status_success": 1,
+ "collector_iis_duration": 0,
+ "collector_iis_status_fail": 0,
+ "collector_iis_status_success": 1,
+ "collector_logical_disk_duration": 0,
+ "collector_logical_disk_status_fail": 0,
+ "collector_logical_disk_status_success": 1,
+ "collector_logon_duration": 113,
+ "collector_logon_status_fail": 0,
+ "collector_logon_status_success": 1,
+ "collector_memory_duration": 0,
+ "collector_memory_status_fail": 0,
+ "collector_memory_status_success": 1,
+ "collector_mssql_duration": 3,
+ "collector_mssql_status_fail": 0,
+ "collector_mssql_status_success": 1,
+ "collector_net_duration": 0,
+ "collector_net_status_fail": 0,
+ "collector_net_status_success": 1,
+ "collector_netframework_clrexceptions_duration": 1437,
+ "collector_netframework_clrexceptions_status_fail": 0,
+ "collector_netframework_clrexceptions_status_success": 1,
+ "collector_netframework_clrinterop_duration": 1491,
+ "collector_netframework_clrinterop_status_fail": 0,
+ "collector_netframework_clrinterop_status_success": 1,
+ "collector_netframework_clrjit_duration": 1278,
+ "collector_netframework_clrjit_status_fail": 0,
+ "collector_netframework_clrjit_status_success": 1,
+ "collector_netframework_clrloading_duration": 1323,
+ "collector_netframework_clrloading_status_fail": 0,
+ "collector_netframework_clrloading_status_success": 1,
+ "collector_netframework_clrlocksandthreads_duration": 1357,
+ "collector_netframework_clrlocksandthreads_status_fail": 0,
+ "collector_netframework_clrlocksandthreads_status_success": 1,
+ "collector_netframework_clrmemory_duration": 1406,
+ "collector_netframework_clrmemory_status_fail": 0,
+ "collector_netframework_clrmemory_status_success": 1,
+ "collector_netframework_clrremoting_duration": 1519,
+ "collector_netframework_clrremoting_status_fail": 0,
+ "collector_netframework_clrremoting_status_success": 1,
+ "collector_netframework_clrsecurity_duration": 1467,
+ "collector_netframework_clrsecurity_status_fail": 0,
+ "collector_netframework_clrsecurity_status_success": 1,
+ "collector_os_duration": 2,
+ "collector_os_status_fail": 0,
+ "collector_os_status_success": 1,
+ "collector_process_duration": 115,
+ "collector_process_status_fail": 0,
+ "collector_process_status_success": 1,
+ "collector_service_duration": 101,
+ "collector_service_status_fail": 0,
+ "collector_service_status_success": 1,
+ "collector_system_duration": 0,
+ "collector_system_status_fail": 0,
+ "collector_system_status_success": 1,
+ "collector_tcp_duration": 0,
+ "collector_tcp_status_fail": 0,
+ "collector_tcp_status_success": 1,
+ "cpu_core_0,0_cstate_c1": 160233427,
+ "cpu_core_0,0_cstate_c2": 0,
+ "cpu_core_0,0_cstate_c3": 0,
+ "cpu_core_0,0_dpc_time": 67109,
+ "cpu_core_0,0_dpcs": 4871900,
+ "cpu_core_0,0_idle_time": 162455593,
+ "cpu_core_0,0_interrupt_time": 77281,
+ "cpu_core_0,0_interrupts": 155194331,
+ "cpu_core_0,0_privileged_time": 1182109,
+ "cpu_core_0,0_user_time": 1073671,
+ "cpu_core_0,1_cstate_c1": 159528054,
+ "cpu_core_0,1_cstate_c2": 0,
+ "cpu_core_0,1_cstate_c3": 0,
+ "cpu_core_0,1_dpc_time": 11093,
+ "cpu_core_0,1_dpcs": 1650552,
+ "cpu_core_0,1_idle_time": 159478125,
+ "cpu_core_0,1_interrupt_time": 58093,
+ "cpu_core_0,1_interrupts": 79325847,
+ "cpu_core_0,1_privileged_time": 1801234,
+ "cpu_core_0,1_user_time": 3432000,
+ "cpu_core_0,2_cstate_c1": 159891723,
+ "cpu_core_0,2_cstate_c2": 0,
+ "cpu_core_0,2_cstate_c3": 0,
+ "cpu_core_0,2_dpc_time": 16062,
+ "cpu_core_0,2_dpcs": 2236469,
+ "cpu_core_0,2_idle_time": 159848437,
+ "cpu_core_0,2_interrupt_time": 53515,
+ "cpu_core_0,2_interrupts": 67305419,
+ "cpu_core_0,2_privileged_time": 1812546,
+ "cpu_core_0,2_user_time": 3050250,
+ "cpu_core_0,3_cstate_c1": 159544117,
+ "cpu_core_0,3_cstate_c2": 0,
+ "cpu_core_0,3_cstate_c3": 0,
+ "cpu_core_0,3_dpc_time": 8140,
+ "cpu_core_0,3_dpcs": 1185046,
+ "cpu_core_0,3_idle_time": 159527546,
+ "cpu_core_0,3_interrupt_time": 44484,
+ "cpu_core_0,3_interrupts": 60766938,
+ "cpu_core_0,3_privileged_time": 1760828,
+ "cpu_core_0,3_user_time": 3422875,
+ "cpu_dpc_time": 102404,
+ "cpu_idle_time": 641309701,
+ "cpu_interrupt_time": 233373,
+ "cpu_privileged_time": 6556717,
+ "cpu_user_time": 10978796,
+ "exchange_activesync_ping_cmds_pending": 0,
+ "exchange_activesync_requests_total": 14,
+ "exchange_activesync_sync_cmds_total": 0,
+ "exchange_autodiscover_requests_total": 1,
+ "exchange_avail_service_requests_per_sec": 0,
+ "exchange_http_proxy_autodiscover_avg_auth_latency": 1,
+ "exchange_http_proxy_autodiscover_avg_cas_proccessing_latency_sec": 3,
+ "exchange_http_proxy_autodiscover_mailbox_proxy_failure_rate": 0,
+ "exchange_http_proxy_autodiscover_mailbox_server_locator_avg_latency_sec": 8,
+ "exchange_http_proxy_autodiscover_outstanding_proxy_requests": 0,
+ "exchange_http_proxy_autodiscover_requests_total": 27122,
+ "exchange_http_proxy_eas_avg_auth_latency": 0,
+ "exchange_http_proxy_eas_avg_cas_proccessing_latency_sec": 3,
+ "exchange_http_proxy_eas_mailbox_proxy_failure_rate": 0,
+ "exchange_http_proxy_eas_mailbox_server_locator_avg_latency_sec": 8,
+ "exchange_http_proxy_eas_outstanding_proxy_requests": 0,
+ "exchange_http_proxy_eas_requests_total": 32519,
+ "exchange_ldap_complianceauditservice_10_long_running_ops_per_sec": 0,
+ "exchange_ldap_complianceauditservice_10_read_time_sec": 18,
+ "exchange_ldap_complianceauditservice_10_search_time_sec": 58,
+ "exchange_ldap_complianceauditservice_10_timeout_errors_total": 0,
+ "exchange_ldap_complianceauditservice_10_write_time_sec": 0,
+ "exchange_ldap_complianceauditservice_long_running_ops_per_sec": 0,
+ "exchange_ldap_complianceauditservice_read_time_sec": 8,
+ "exchange_ldap_complianceauditservice_search_time_sec": 46,
+ "exchange_ldap_complianceauditservice_timeout_errors_total": 0,
+ "exchange_ldap_complianceauditservice_write_time_sec": 0,
+ "exchange_owa_current_unique_users": 0,
+ "exchange_owa_requests_total": 0,
+ "exchange_rpc_active_user_count": 0,
+ "exchange_rpc_avg_latency_sec": 1,
+ "exchange_rpc_connection_count": 0,
+ "exchange_rpc_operations_total": 9,
+ "exchange_rpc_requests": 0,
+ "exchange_rpc_user_count": 0,
+ "exchange_transport_queues_active_mailbox_delivery_high_priority": 0,
+ "exchange_transport_queues_active_mailbox_delivery_low_priority": 0,
+ "exchange_transport_queues_active_mailbox_delivery_none_priority": 0,
+ "exchange_transport_queues_active_mailbox_delivery_normal_priority": 0,
+ "exchange_transport_queues_external_active_remote_delivery_high_priority": 0,
+ "exchange_transport_queues_external_active_remote_delivery_low_priority": 0,
+ "exchange_transport_queues_external_active_remote_delivery_none_priority": 0,
+ "exchange_transport_queues_external_active_remote_delivery_normal_priority": 0,
+ "exchange_transport_queues_external_largest_delivery_high_priority": 0,
+ "exchange_transport_queues_external_largest_delivery_low_priority": 0,
+ "exchange_transport_queues_external_largest_delivery_none_priority": 0,
+ "exchange_transport_queues_external_largest_delivery_normal_priority": 0,
+ "exchange_transport_queues_internal_active_remote_delivery_high_priority": 0,
+ "exchange_transport_queues_internal_active_remote_delivery_low_priority": 0,
+ "exchange_transport_queues_internal_active_remote_delivery_none_priority": 0,
+ "exchange_transport_queues_internal_active_remote_delivery_normal_priority": 0,
+ "exchange_transport_queues_internal_largest_delivery_high_priority": 0,
+ "exchange_transport_queues_internal_largest_delivery_low_priority": 0,
+ "exchange_transport_queues_internal_largest_delivery_none_priority": 0,
+ "exchange_transport_queues_internal_largest_delivery_normal_priority": 0,
+ "exchange_transport_queues_poison_high_priority": 0,
+ "exchange_transport_queues_poison_low_priority": 0,
+ "exchange_transport_queues_poison_none_priority": 0,
+ "exchange_transport_queues_poison_normal_priority": 0,
+ "exchange_transport_queues_retry_mailbox_delivery_high_priority": 0,
+ "exchange_transport_queues_retry_mailbox_delivery_low_priority": 0,
+ "exchange_transport_queues_retry_mailbox_delivery_none_priority": 0,
+ "exchange_transport_queues_retry_mailbox_delivery_normal_priority": 0,
+ "exchange_transport_queues_unreachable_high_priority": 0,
+ "exchange_transport_queues_unreachable_low_priority": 0,
+ "exchange_transport_queues_unreachable_none_priority": 0,
+ "exchange_transport_queues_unreachable_normal_priority": 0,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_active_tasks": 0,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_completed_tasks": 0,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_is_active": 1,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_is_paused": 0,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_queued_tasks": 0,
+ "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_yielded_tasks": 0,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_active_tasks": 0,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_completed_tasks": 0,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_is_active": 1,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_is_paused": 0,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_queued_tasks": 0,
+ "exchange_workload_microsoft_exchange_servicehost_darruntime_yielded_tasks": 0,
+ "hyperv_health_critical": 0,
+ "hyperv_health_ok": 1,
+ "hyperv_root_partition_1G_device_pages": 0,
+ "hyperv_root_partition_1G_gpa_pages": 6,
+ "hyperv_root_partition_2M_device_pages": 0,
+ "hyperv_root_partition_2M_gpa_pages": 5255,
+ "hyperv_root_partition_4K_device_pages": 0,
+ "hyperv_root_partition_4K_gpa_pages": 58880,
+ "hyperv_root_partition_address_spaces": 0,
+ "hyperv_root_partition_attached_devices": 1,
+ "hyperv_root_partition_deposited_pages": 31732,
+ "hyperv_root_partition_device_dma_errors": 0,
+ "hyperv_root_partition_device_interrupt_errors": 0,
+ "hyperv_root_partition_device_interrupt_throttle_events": 0,
+ "hyperv_root_partition_gpa_space_modifications": 0,
+ "hyperv_root_partition_io_tlb_flush": 23901,
+ "hyperv_root_partition_physical_pages_allocated": 0,
+ "hyperv_root_partition_virtual_tlb_flush_entires": 15234,
+ "hyperv_root_partition_virtual_tlb_pages": 64,
+ "hyperv_vid_ubuntu_22_04_lts_physical_pages_allocated": 745472,
+ "hyperv_vid_ubuntu_22_04_lts_remote_physical_pages": 0,
+ "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_bytes_read": 83456,
+ "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_bytes_written": 1148928,
+ "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_error_count": 0,
+ "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_operations_read": 6,
+ "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_operations_written": 34,
+ "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_bytes_read": 531184640,
+ "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_bytes_written": 425905152,
+ "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_error_count": 3,
+ "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_operations_read": 13196,
+ "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_operations_written": 3866,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_bytes_received": 473654,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_bytes_sent": 43550457,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_incoming_dropped": 0,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_outgoing_dropped": 284,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_received": 6137,
+ "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_sent": 8905,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_bytes_received": 43509444,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_bytes_sent": 473654,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_incoming_dropped": 0,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_outgoing_dropped": 0,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_received": 8621,
+ "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_sent": 6137,
+ "hyperv_vm_ubuntu_22_04_lts_cpu_guest_run_time": 62534217,
+ "hyperv_vm_ubuntu_22_04_lts_cpu_hypervisor_run_time": 4457712,
+ "hyperv_vm_ubuntu_22_04_lts_cpu_remote_run_time": 0,
+ "hyperv_vm_ubuntu_22_04_lts_memory_physical": 2628,
+ "hyperv_vm_ubuntu_22_04_lts_memory_physical_guest_visible": 2904,
+ "hyperv_vm_ubuntu_22_04_lts_memory_pressure_current": 83,
+ "hyperv_vswitch_default_switch_broadcast_packets_received_total": 51,
+ "hyperv_vswitch_default_switch_broadcast_packets_sent_total": 18,
+ "hyperv_vswitch_default_switch_bytes_received_total": 44024111,
+ "hyperv_vswitch_default_switch_bytes_sent_total": 43983098,
+ "hyperv_vswitch_default_switch_directed_packets_received_total": 14603,
+ "hyperv_vswitch_default_switch_directed_packets_send_total": 14603,
+ "hyperv_vswitch_default_switch_dropped_packets_incoming_total": 284,
+ "hyperv_vswitch_default_switch_dropped_packets_outcoming_total": 0,
+ "hyperv_vswitch_default_switch_extensions_dropped_packets_incoming_total": 0,
+ "hyperv_vswitch_default_switch_extensions_dropped_packets_outcoming_total": 0,
+ "hyperv_vswitch_default_switch_learned_mac_addresses_total": 2,
+ "hyperv_vswitch_default_switch_multicast_packets_received_total": 388,
+ "hyperv_vswitch_default_switch_multicast_packets_sent_total": 137,
+ "hyperv_vswitch_default_switch_number_of_send_channel_moves_total": 0,
+ "hyperv_vswitch_default_switch_number_of_vmq_moves_total": 0,
+ "hyperv_vswitch_default_switch_packets_flooded_total": 0,
+ "hyperv_vswitch_default_switch_packets_received_total": 15042,
+ "hyperv_vswitch_default_switch_purged_mac_addresses_total": 0,
+ "iis_website_Default_Web_Site_connection_attempts_all_instances_total": 1,
+ "iis_website_Default_Web_Site_current_anonymous_users": 0,
+ "iis_website_Default_Web_Site_current_connections": 0,
+ "iis_website_Default_Web_Site_current_isapi_extension_requests": 0,
+ "iis_website_Default_Web_Site_current_non_anonymous_users": 0,
+ "iis_website_Default_Web_Site_files_received_total": 0,
+ "iis_website_Default_Web_Site_files_sent_total": 2,
+ "iis_website_Default_Web_Site_isapi_extension_requests_total": 0,
+ "iis_website_Default_Web_Site_locked_errors_total": 0,
+ "iis_website_Default_Web_Site_logon_attempts_total": 4,
+ "iis_website_Default_Web_Site_not_found_errors_total": 1,
+ "iis_website_Default_Web_Site_received_bytes_total": 10289,
+ "iis_website_Default_Web_Site_requests_total": 3,
+ "iis_website_Default_Web_Site_sent_bytes_total": 105882,
+ "iis_website_Default_Web_Site_service_uptime": 258633,
+ "logical_disk_C:_free_space": 43636490240,
+ "logical_disk_C:_read_bytes_total": 17676328448,
+ "logical_disk_C:_read_latency": 97420,
+ "logical_disk_C:_reads_total": 350593,
+ "logical_disk_C:_total_space": 67938287616,
+ "logical_disk_C:_used_space": 24301797376,
+ "logical_disk_C:_write_bytes_total": 9135282688,
+ "logical_disk_C:_write_latency": 123912,
+ "logical_disk_C:_writes_total": 450705,
+ "logon_type_batch_sessions": 0,
+ "logon_type_cached_interactive_sessions": 0,
+ "logon_type_cached_remote_interactive_sessions": 0,
+ "logon_type_cached_unlock_sessions": 0,
+ "logon_type_interactive_sessions": 2,
+ "logon_type_network_clear_text_sessions": 0,
+ "logon_type_network_sessions": 0,
+ "logon_type_new_credentials_sessions": 0,
+ "logon_type_proxy_sessions": 0,
+ "logon_type_remote_interactive_sessions": 0,
+ "logon_type_service_sessions": 0,
+ "logon_type_system_sessions": 0,
+ "logon_type_unlock_sessions": 0,
+ "memory_available_bytes": 1379942400,
+ "memory_cache_faults_total": 8009603,
+ "memory_cache_total": 1392185344,
+ "memory_commit_limit": 5733113856,
+ "memory_committed_bytes": 3447439360,
+ "memory_modified_page_list_bytes": 32653312,
+ "memory_not_committed_bytes": 2285674496,
+ "memory_page_faults_total": 119093924,
+ "memory_pool_nonpaged_bytes_total": 126865408,
+ "memory_pool_paged_bytes": 303906816,
+ "memory_standby_cache_core_bytes": 107376640,
+ "memory_standby_cache_normal_priority_bytes": 1019121664,
+ "memory_standby_cache_reserve_bytes": 233033728,
+ "memory_standby_cache_total": 1359532032,
+ "memory_swap_page_reads_total": 402087,
+ "memory_swap_page_writes_total": 7012,
+ "memory_swap_pages_read_total": 4643279,
+ "memory_swap_pages_written_total": 312896,
+ "memory_used_bytes": 2876776448,
+ "mssql_db_master_instance_SQLEXPRESS_active_transactions": 0,
+ "mssql_db_master_instance_SQLEXPRESS_backup_restore_operations": 0,
+ "mssql_db_master_instance_SQLEXPRESS_data_files_size_bytes": 4653056,
+ "mssql_db_master_instance_SQLEXPRESS_log_flushed_bytes": 3702784,
+ "mssql_db_master_instance_SQLEXPRESS_log_flushes": 252,
+ "mssql_db_master_instance_SQLEXPRESS_transactions": 2183,
+ "mssql_db_master_instance_SQLEXPRESS_write_transactions": 236,
+ "mssql_db_model_instance_SQLEXPRESS_active_transactions": 0,
+ "mssql_db_model_instance_SQLEXPRESS_backup_restore_operations": 0,
+ "mssql_db_model_instance_SQLEXPRESS_data_files_size_bytes": 8388608,
+ "mssql_db_model_instance_SQLEXPRESS_log_flushed_bytes": 12288,
+ "mssql_db_model_instance_SQLEXPRESS_log_flushes": 3,
+ "mssql_db_model_instance_SQLEXPRESS_transactions": 4467,
+ "mssql_db_model_instance_SQLEXPRESS_write_transactions": 0,
+ "mssql_db_msdb_instance_SQLEXPRESS_active_transactions": 0,
+ "mssql_db_msdb_instance_SQLEXPRESS_backup_restore_operations": 0,
+ "mssql_db_msdb_instance_SQLEXPRESS_data_files_size_bytes": 15466496,
+ "mssql_db_msdb_instance_SQLEXPRESS_log_flushed_bytes": 0,
+ "mssql_db_msdb_instance_SQLEXPRESS_log_flushes": 0,
+ "mssql_db_msdb_instance_SQLEXPRESS_transactions": 4582,
+ "mssql_db_msdb_instance_SQLEXPRESS_write_transactions": 0,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_active_transactions": 0,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_backup_restore_operations": 0,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_data_files_size_bytes": 41943040,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_log_flushed_bytes": 0,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_log_flushes": 0,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_transactions": 2,
+ "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_write_transactions": 0,
+ "mssql_db_tempdb_instance_SQLEXPRESS_active_transactions": 0,
+ "mssql_db_tempdb_instance_SQLEXPRESS_backup_restore_operations": 0,
+ "mssql_db_tempdb_instance_SQLEXPRESS_data_files_size_bytes": 8388608,
+ "mssql_db_tempdb_instance_SQLEXPRESS_log_flushed_bytes": 118784,
+ "mssql_db_tempdb_instance_SQLEXPRESS_log_flushes": 2,
+ "mssql_db_tempdb_instance_SQLEXPRESS_transactions": 1558,
+ "mssql_db_tempdb_instance_SQLEXPRESS_write_transactions": 29,
+ "mssql_instance_SQLEXPRESS_accessmethods_page_splits": 429,
+ "mssql_instance_SQLEXPRESS_bufman_buffer_cache_hits": 86,
+ "mssql_instance_SQLEXPRESS_bufman_checkpoint_pages": 82,
+ "mssql_instance_SQLEXPRESS_bufman_page_life_expectancy_seconds": 191350,
+ "mssql_instance_SQLEXPRESS_bufman_page_reads": 797,
+ "mssql_instance_SQLEXPRESS_bufman_page_writes": 92,
+ "mssql_instance_SQLEXPRESS_cache_hit_ratio": 100,
+ "mssql_instance_SQLEXPRESS_genstats_blocked_processes": 0,
+ "mssql_instance_SQLEXPRESS_genstats_user_connections": 1,
+ "mssql_instance_SQLEXPRESS_memmgr_connection_memory_bytes": 1015808,
+ "mssql_instance_SQLEXPRESS_memmgr_external_benefit_of_memory": 0,
+ "mssql_instance_SQLEXPRESS_memmgr_pending_memory_grants": 0,
+ "mssql_instance_SQLEXPRESS_memmgr_total_server_memory_bytes": 198836224,
+ "mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Application_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Application_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Database_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Database_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Extent_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Extent_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_File_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_File_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_HoBT_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_HoBT_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Key_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Key_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Metadata_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Metadata_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_OIB_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_OIB_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Object_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Object_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Page_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Page_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_RID_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_RID_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_RowGroup_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_RowGroup_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_resource_Xact_locks_deadlocks": 0,
+ "mssql_instance_SQLEXPRESS_resource_Xact_locks_lock_wait_seconds": 0,
+ "mssql_instance_SQLEXPRESS_sql_errors_total_db_offline_errors": 0,
+ "mssql_instance_SQLEXPRESS_sql_errors_total_info_errors": 766,
+ "mssql_instance_SQLEXPRESS_sql_errors_total_kill_connection_errors": 0,
+ "mssql_instance_SQLEXPRESS_sql_errors_total_user_errors": 29,
+ "mssql_instance_SQLEXPRESS_sqlstats_auto_parameterization_attempts": 37,
+ "mssql_instance_SQLEXPRESS_sqlstats_batch_requests": 2972,
+ "mssql_instance_SQLEXPRESS_sqlstats_safe_auto_parameterization_attempts": 2,
+ "mssql_instance_SQLEXPRESS_sqlstats_sql_compilations": 376,
+ "mssql_instance_SQLEXPRESS_sqlstats_sql_recompilations": 8,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_bytes_received": 38290755856,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_bytes_sent": 8211165504,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_outbound_discarded": 0,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_outbound_errors": 0,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_discarded": 0,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_errors": 0,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_total": 4120869,
+ "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_sent_total": 1332466,
+ "netframework_WMSvc_clrexception_filters_total": 0,
+ "netframework_WMSvc_clrexception_finallys_total": 0,
+ "netframework_WMSvc_clrexception_throw_to_catch_depth_total": 0,
+ "netframework_WMSvc_clrexception_thrown_total": 0,
+ "netframework_WMSvc_clrinterop_com_callable_wrappers_total": 2,
+ "netframework_WMSvc_clrinterop_interop_marshalling_total": 0,
+ "netframework_WMSvc_clrinterop_interop_stubs_created_total": 29,
+ "netframework_WMSvc_clrjit_il_bytes_total": 4007,
+ "netframework_WMSvc_clrjit_methods_total": 27,
+ "netframework_WMSvc_clrjit_standard_failures_total": 0,
+ "netframework_WMSvc_clrjit_time_percent": 0,
+ "netframework_WMSvc_clrloading_appdomains_loaded_total": 1,
+ "netframework_WMSvc_clrloading_appdomains_unloaded_total": 0,
+ "netframework_WMSvc_clrloading_assemblies_loaded_total": 5,
+ "netframework_WMSvc_clrloading_class_load_failures_total": 0,
+ "netframework_WMSvc_clrloading_classes_loaded_total": 18,
+ "netframework_WMSvc_clrloading_loader_heap_size_bytes": 270336,
+ "netframework_WMSvc_clrlocksandthreads_contentions_total": 0,
+ "netframework_WMSvc_clrlocksandthreads_current_logical_threads": 2,
+ "netframework_WMSvc_clrlocksandthreads_physical_threads_current": 1,
+ "netframework_WMSvc_clrlocksandthreads_queue_length_total": 0,
+ "netframework_WMSvc_clrlocksandthreads_recognized_threads_total": 1,
+ "netframework_WMSvc_clrmemory_allocated_bytes_total": 227792,
+ "netframework_WMSvc_clrmemory_collections_total": 2,
+ "netframework_WMSvc_clrmemory_committed_bytes": 270336,
+ "netframework_WMSvc_clrmemory_finalization_survivors": 7,
+ "netframework_WMSvc_clrmemory_gc_time_percent": 0,
+ "netframework_WMSvc_clrmemory_heap_size_bytes": 4312696,
+ "netframework_WMSvc_clrmemory_induced_gc_total": 0,
+ "netframework_WMSvc_clrmemory_number_gc_handles": 24,
+ "netframework_WMSvc_clrmemory_number_pinned_objects": 1,
+ "netframework_WMSvc_clrmemory_number_sink_blocksinuse": 1,
+ "netframework_WMSvc_clrmemory_promoted_bytes": 49720,
+ "netframework_WMSvc_clrmemory_reserved_bytes": 402644992,
+ "netframework_WMSvc_clrremoting_channels_total": 0,
+ "netframework_WMSvc_clrremoting_context_bound_classes_loaded": 0,
+ "netframework_WMSvc_clrremoting_context_bound_objects_total": 0,
+ "netframework_WMSvc_clrremoting_context_proxies_total": 0,
+ "netframework_WMSvc_clrremoting_contexts": 1,
+ "netframework_WMSvc_clrremoting_remote_calls_total": 0,
+ "netframework_WMSvc_clrsecurity_checks_time_percent": 0,
+ "netframework_WMSvc_clrsecurity_link_time_checks_total": 0,
+ "netframework_WMSvc_clrsecurity_runtime_checks_total": 3,
+ "netframework_WMSvc_clrsecurity_stack_walk_depth": 1,
+ "netframework_powershell_clrexception_filters_total": 0,
+ "netframework_powershell_clrexception_finallys_total": 56,
+ "netframework_powershell_clrexception_throw_to_catch_depth_total": 140,
+ "netframework_powershell_clrexception_thrown_total": 37,
+ "netframework_powershell_clrinterop_com_callable_wrappers_total": 5,
+ "netframework_powershell_clrinterop_interop_marshalling_total": 0,
+ "netframework_powershell_clrinterop_interop_stubs_created_total": 345,
+ "netframework_powershell_clrjit_il_bytes_total": 47021,
+ "netframework_powershell_clrjit_methods_total": 344,
+ "netframework_powershell_clrjit_standard_failures_total": 0,
+ "netframework_powershell_clrjit_time_percent": 0,
+ "netframework_powershell_clrloading_appdomains_loaded_total": 1,
+ "netframework_powershell_clrloading_appdomains_unloaded_total": 0,
+ "netframework_powershell_clrloading_assemblies_loaded_total": 20,
+ "netframework_powershell_clrloading_class_load_failures_total": 1,
+ "netframework_powershell_clrloading_classes_loaded_total": 477,
+ "netframework_powershell_clrloading_loader_heap_size_bytes": 2285568,
+ "netframework_powershell_clrlocksandthreads_contentions_total": 10,
+ "netframework_powershell_clrlocksandthreads_current_logical_threads": 16,
+ "netframework_powershell_clrlocksandthreads_physical_threads_current": 13,
+ "netframework_powershell_clrlocksandthreads_queue_length_total": 3,
+ "netframework_powershell_clrlocksandthreads_recognized_threads_total": 6,
+ "netframework_powershell_clrmemory_allocated_bytes_total": 46333800,
+ "netframework_powershell_clrmemory_collections_total": 11,
+ "netframework_powershell_clrmemory_committed_bytes": 20475904,
+ "netframework_powershell_clrmemory_finalization_survivors": 244,
+ "netframework_powershell_clrmemory_gc_time_percent": 0,
+ "netframework_powershell_clrmemory_heap_size_bytes": 34711872,
+ "netframework_powershell_clrmemory_induced_gc_total": 0,
+ "netframework_powershell_clrmemory_number_gc_handles": 834,
+ "netframework_powershell_clrmemory_number_pinned_objects": 0,
+ "netframework_powershell_clrmemory_number_sink_blocksinuse": 42,
+ "netframework_powershell_clrmemory_promoted_bytes": 107352,
+ "netframework_powershell_clrmemory_reserved_bytes": 402644992,
+ "netframework_powershell_clrremoting_channels_total": 0,
+ "netframework_powershell_clrremoting_context_bound_classes_loaded": 0,
+ "netframework_powershell_clrremoting_context_bound_objects_total": 0,
+ "netframework_powershell_clrremoting_context_proxies_total": 0,
+ "netframework_powershell_clrremoting_contexts": 1,
+ "netframework_powershell_clrremoting_remote_calls_total": 0,
+ "netframework_powershell_clrsecurity_checks_time_percent": 0,
+ "netframework_powershell_clrsecurity_link_time_checks_total": 0,
+ "netframework_powershell_clrsecurity_runtime_checks_total": 4386,
+ "netframework_powershell_clrsecurity_stack_walk_depth": 1,
+ "os_paging_free_bytes": 1414107136,
+ "os_paging_limit_bytes": 1476395008,
+ "os_paging_used_bytes": 62287872,
+ "os_physical_memory_free_bytes": 1379946496,
+ "os_processes": 152,
+ "os_processes_limit": 4294967295,
+ "os_users": 2,
+ "os_visible_memory_bytes": 4256718848,
+ "os_visible_memory_used_bytes": 2876772352,
+ "process_msedge_cpu_time": 1919893,
+ "process_msedge_handles": 5779,
+ "process_msedge_io_bytes": 3978227378,
+ "process_msedge_io_operations": 16738642,
+ "process_msedge_page_faults": 5355941,
+ "process_msedge_page_file_bytes": 681603072,
+ "process_msedge_threads": 213,
+ "process_msedge_working_set_private_bytes": 461344768,
+ "service_dhcp_state_continue_pending": 0,
+ "service_dhcp_state_pause_pending": 0,
+ "service_dhcp_state_paused": 0,
+ "service_dhcp_state_running": 1,
+ "service_dhcp_state_start_pending": 0,
+ "service_dhcp_state_stop_pending": 0,
+ "service_dhcp_state_stopped": 0,
+ "service_dhcp_state_unknown": 0,
+ "service_dhcp_status_degraded": 0,
+ "service_dhcp_status_error": 0,
+ "service_dhcp_status_lost_comm": 0,
+ "service_dhcp_status_no_contact": 0,
+ "service_dhcp_status_nonrecover": 0,
+ "service_dhcp_status_ok": 1,
+ "service_dhcp_status_pred_fail": 0,
+ "service_dhcp_status_service": 0,
+ "service_dhcp_status_starting": 0,
+ "service_dhcp_status_stopping": 0,
+ "service_dhcp_status_stressed": 0,
+ "service_dhcp_status_unknown": 0,
+ "system_threads": 1559,
+ "system_up_time": 16208210,
+ "tcp_ipv4_conns_active": 4301,
+ "tcp_ipv4_conns_established": 7,
+ "tcp_ipv4_conns_failures": 137,
+ "tcp_ipv4_conns_passive": 501,
+ "tcp_ipv4_conns_resets": 1282,
+ "tcp_ipv4_segments_received": 676388,
+ "tcp_ipv4_segments_retransmitted": 2120,
+ "tcp_ipv4_segments_sent": 871379,
+ "tcp_ipv6_conns_active": 214,
+ "tcp_ipv6_conns_established": 0,
+ "tcp_ipv6_conns_failures": 214,
+ "tcp_ipv6_conns_passive": 0,
+ "tcp_ipv6_conns_resets": 0,
+ "tcp_ipv6_segments_received": 1284,
+ "tcp_ipv6_segments_retransmitted": 428,
+ "tcp_ipv6_segments_sent": 856,
+ },
+ },
+ "fails if endpoint returns invalid data": {
+ prepare: prepareWindowsReturnsInvalidData,
+ },
+ "fails on connection refused": {
+ prepare: prepareWindowsConnectionRefused,
+ },
+ "fails on 404 response": {
+ prepare: prepareWindowsResponse404,
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ win, cleanup := test.prepare()
+ defer cleanup()
+
+ require.NoError(t, win.Init())
+
+ mx := win.Collect()
+
+ if mx != nil && test.wantCollected != nil {
+ mx["system_up_time"] = test.wantCollected["system_up_time"]
+ }
+
+ assert.Equal(t, test.wantCollected, mx)
+ if len(test.wantCollected) > 0 {
+ testCharts(t, win, mx)
+ }
+ })
+ }
+}
+
+func testCharts(t *testing.T, win *Windows, mx map[string]int64) {
+ ensureChartsDimsCreated(t, win)
+ ensureCollectedHasAllChartsDimsVarsIDs(t, win, mx)
+}
+
+func ensureChartsDimsCreated(t *testing.T, w *Windows) {
+ for _, chart := range cpuCharts {
+ if w.cache.collection[collectorCPU] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range memCharts {
+ if w.cache.collection[collectorMemory] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range tcpCharts {
+ if w.cache.collection[collectorTCP] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range osCharts {
+ if w.cache.collection[collectorOS] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range systemCharts {
+ if w.cache.collection[collectorSystem] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range logonCharts {
+ if w.cache.collection[collectorLogon] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range processesCharts {
+ if w.cache.collection[collectorProcess] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRExceptionsChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRExceptions] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRInteropChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRInterop] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRJITChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRJIT] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRLoadingChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRLoading] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRLocksAndThreadsChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRLocksAndThreads] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRMemoryChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRMemory] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRRemotingChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRRemoting] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for _, chart := range netFrameworkCLRSecurityChartsTmpl {
+ if w.cache.collection[collectorNetFrameworkCLRSecurity] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+
+ for core := range w.cache.cores {
+ for _, chart := range cpuCoreChartsTmpl {
+ id := fmt.Sprintf(chart.ID, core)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' core", id, core)
+ }
+ }
+ for disk := range w.cache.volumes {
+ for _, chart := range diskChartsTmpl {
+ id := fmt.Sprintf(chart.ID, disk)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' disk", id, disk)
+ }
+ }
+ for nic := range w.cache.nics {
+ for _, chart := range nicChartsTmpl {
+ id := fmt.Sprintf(chart.ID, nic)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' nic", id, nic)
+ }
+ }
+ for zone := range w.cache.thermalZones {
+ for _, chart := range thermalzoneChartsTmpl {
+ id := fmt.Sprintf(chart.ID, zone)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' thermalzone", id, zone)
+ }
+ }
+ for svc := range w.cache.services {
+ for _, chart := range serviceChartsTmpl {
+ id := fmt.Sprintf(chart.ID, svc)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' service", id, svc)
+ }
+ }
+ for website := range w.cache.iis {
+ for _, chart := range iisWebsiteChartsTmpl {
+ id := fmt.Sprintf(chart.ID, website)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' website", id, website)
+ }
+ }
+ for instance := range w.cache.mssqlInstances {
+ for _, chart := range mssqlInstanceChartsTmpl {
+ id := fmt.Sprintf(chart.ID, instance)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' instance", id, instance)
+ }
+ }
+ for instanceDB := range w.cache.mssqlDBs {
+ s := strings.Split(instanceDB, ":")
+ if assert.Lenf(t, s, 2, "can not extract intance/database from cache.mssqlDBs") {
+ instance, db := s[0], s[1]
+ for _, chart := range mssqlDatabaseChartsTmpl {
+ id := fmt.Sprintf(chart.ID, db, instance)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' instance", id, instance)
+ }
+ }
+ }
+ for _, chart := range adCharts {
+ if w.cache.collection[collectorAD] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for template := range w.cache.adcs {
+ for _, chart := range adcsCertTemplateChartsTmpl {
+ id := fmt.Sprintf(chart.ID, template)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' template certificate", id, template)
+ }
+ }
+ for name := range w.cache.collectors {
+ for _, chart := range collectorChartsTmpl {
+ id := fmt.Sprintf(chart.ID, name)
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' collector", id, name)
+ }
+ }
+
+ for _, chart := range processesCharts {
+ if chart = w.Charts().Get(chart.ID); chart == nil {
+ continue
+ }
+ for proc := range w.cache.processes {
+ var found bool
+ for _, dim := range chart.Dims {
+ if found = strings.HasPrefix(dim.ID, "process_"+proc); found {
+ break
+ }
+ }
+ assert.Truef(t, found, "chart '%s' has not dim for '%s' process", chart.ID, proc)
+ }
+ }
+
+ for _, chart := range hypervChartsTmpl {
+ if w.cache.collection[collectorHyperv] {
+ assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID)
+ } else {
+ assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID)
+ }
+ }
+ for vm := range w.cache.hypervVMMem {
+ for _, chart := range hypervVMChartsTemplate {
+ id := fmt.Sprintf(chart.ID, hypervCleanName(vm))
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' virtual machine", id, vm)
+ }
+ }
+ for device := range w.cache.hypervVMDevices {
+ for _, chart := range hypervVMDeviceChartsTemplate {
+ id := fmt.Sprintf(chart.ID, hypervCleanName(device))
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' vm storage device", id, device)
+ }
+ }
+ for iface := range w.cache.hypervVMInterfaces {
+ for _, chart := range hypervVMInterfaceChartsTemplate {
+ id := fmt.Sprintf(chart.ID, hypervCleanName(iface))
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' vm network interface", id, iface)
+ }
+ }
+ for vswitch := range w.cache.hypervVswitch {
+ for _, chart := range hypervVswitchChartsTemplate {
+ id := fmt.Sprintf(chart.ID, hypervCleanName(vswitch))
+ assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' virtual switch", id, vswitch)
+ }
+ }
+}
+
+func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, w *Windows, mx map[string]int64) {
+ for _, chart := range *w.Charts() {
+ for _, dim := range chart.Dims {
+ _, ok := mx[dim.ID]
+ assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID)
+ }
+ for _, v := range chart.Vars {
+ _, ok := mx[v.ID]
+ assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID)
+ }
+ }
+}
+
+func prepareWindowsV0200() (win *Windows, cleanup func()) {
+ ts := httptest.NewServer(http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ _, _ = w.Write(dataVer0200Metrics)
+ }))
+
+ win = New()
+ win.URL = ts.URL
+ return win, ts.Close
+}
+
+func prepareWindowsReturnsInvalidData() (win *Windows, cleanup func()) {
+ ts := httptest.NewServer(http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ _, _ = w.Write([]byte("hello and\n goodbye"))
+ }))
+
+ win = New()
+ win.URL = ts.URL
+ return win, ts.Close
+}
+
+func prepareWindowsConnectionRefused() (win *Windows, cleanup func()) {
+ win = New()
+ win.URL = "http://127.0.0.1:38001"
+ return win, func() {}
+}
+
+func prepareWindowsResponse404() (win *Windows, cleanup func()) {
+ ts := httptest.NewServer(http.HandlerFunc(
+ func(w http.ResponseWriter, r *http.Request) {
+ w.WriteHeader(http.StatusNotFound)
+ }))
+
+ win = New()
+ win.URL = ts.URL
+ return win, ts.Close
+}