summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/windows/charts.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/windows/charts.go4933
1 files changed, 4933 insertions, 0 deletions
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()
+ }
+ }
+}