github.com/netdata/go.d.plugin@v0.58.1/modules/windows/charts.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package windows 4 5 import ( 6 "fmt" 7 "strings" 8 9 "github.com/netdata/go.d.plugin/agent/module" 10 ) 11 12 const ( 13 prioCPUUtil = module.Priority + iota 14 prioCPUCoreUtil 15 prioCPUInterrupts 16 prioCPUDPCs 17 prioCPUCoreCState 18 19 prioMemUtil 20 prioMemPageFaults 21 prioMemSwapUtil 22 prioMemSwapOperations 23 prioMemSwapPages 24 prioMemCache 25 prioMemCacheFaults 26 prioMemSystemPool 27 28 prioDiskSpaceUsage 29 prioDiskBandwidth 30 prioDiskOperations 31 prioDiskAvgLatency 32 33 prioNICBandwidth 34 prioNICPackets 35 prioNICErrors 36 prioNICDiscards 37 38 prioTCPConnsEstablished 39 prioTCPConnsActive 40 prioTCPConnsPassive 41 prioTCPConnsFailure 42 prioTCPConnsReset 43 prioTCPSegmentsReceived 44 prioTCPSegmentsSent 45 prioTCPSegmentsRetransmitted 46 47 prioOSProcesses 48 prioOSUsers 49 prioOSVisibleMemoryUsage 50 prioOSPagingUsage 51 52 prioSystemThreads 53 prioSystemUptime 54 55 prioLogonSessions 56 57 prioThermalzoneTemperature 58 59 prioProcessesCPUUtilization 60 prioProcessesMemoryUsage 61 prioProcessesIOBytes 62 prioProcessesIOOperations 63 prioProcessesPageFaults 64 prioProcessesPageFileBytes 65 prioProcessesThreads 66 prioProcessesHandles 67 68 prioIISWebsiteTraffic 69 prioIISWebsiteFTPFileTransferRate 70 prioIISWebsiteActiveConnectionsCount 71 prioIISWebsiteRequestsRate 72 prioIISWebsiteConnectionAttemptsRate 73 prioIISWebsiteUsersCount 74 prioIISWebsiteISAPIExtRequestsCount 75 prioIISWebsiteISAPIExtRequestsRate 76 prioIISWebsiteErrorsRate 77 prioIISWebsiteLogonAttemptsRate 78 prioIISWebsiteUptime 79 80 // Connections 81 prioMSSQLUserConnections 82 83 // Transactions 84 prioMSSQLDatabaseTransactions 85 prioMSSQLDatabaseActiveTransactions 86 prioMSSQLDatabaseWriteTransactions 87 prioMSSQLDatabaseBackupRestoreOperations 88 prioMSSQLDatabaseLogFlushes 89 prioMSSQLDatabaseLogFlushed 90 91 // Size 92 prioMSSQLDatabaseDataFileSize 93 94 // SQL activity 95 prioMSSQLStatsBatchRequests 96 prioMSSQLStatsCompilations 97 prioMSSQLStatsRecompilations 98 prioMSSQLStatsAutoParameterization 99 prioMSSQLStatsSafeAutoParameterization 100 101 // Processes 102 prioMSSQLBlockedProcess 103 104 // Buffer Cache 105 prioMSSQLCacheHitRatio 106 prioMSSQLBufManIOPS 107 prioMSSQLBufferCheckpointPages 108 prioMSSQLAccessMethodPageSplits 109 prioMSSQLBufferPageLifeExpectancy 110 111 // Memory 112 prioMSSQLMemmgrConnectionMemoryBytes 113 prioMSSQLMemTotalServer 114 prioMSSQLMemmgrExternalBenefitOfMemory 115 prioMSSQLMemmgrPendingMemoryGrants 116 117 // Locks 118 prioMSSQLLocksLockWait 119 prioMSSQLLocksDeadLocks 120 121 // Error 122 prioMSSQLSqlErrorsTotal 123 124 // NET Framework 125 // Exceptions 126 prioNETFrameworkCLRExceptionsThrown 127 prioNETFrameworkCLRExceptionsFilters 128 prioNETFrameworkCLRExceptionsFinallys 129 prioNETFrameworkCLRExceptionsThrowToCatchDepth 130 131 // InterOP 132 prioNETFrameworkCLRInteropCOMCallableWrappers 133 prioNETFrameworkCLRInteropMarshalling 134 prioNETFrameworkCLRInteropStubsCreated 135 prioNETFrameworkCLRJITMethods 136 137 // JIT 138 prioNETFrameworkCLRJITTime 139 prioNETFrameworkCLRJITStandardFailures 140 prioNETFrameworkCLRJITILBytes 141 142 // Loading 143 prioNETFrameworkCLRLoadingLoaderHeapSize 144 prioNETFrameworkCLRLoadingAppDomainsLoaded 145 prioNETFrameworkCLRLoadingAppDomainsUnloaded 146 prioNETFrameworkCLRLoadingAssembliesLoaded 147 prioNETFrameworkCLRLoadingClassesLoaded 148 prioNETFrameworkCLRLoadingClassLoadFailure 149 150 // Locks and threads 151 prioNETFrameworkCLRLocksAndThreadsQueueLength 152 prioNETFrameworkCLRLocksAndThreadsCurrentLogicalThreads 153 prioNETFrameworkCLRLocksAndThreadsCurrentPhysicalThreads 154 prioNETFrameworkCLRLocksAndThreadsRecognizedThreads 155 prioNETFrameworkCLRLocksAndThreadsContentions 156 157 // Memory 158 prioNETFrameworkCLRMemoryAllocatedBytes 159 prioNETFrameworkCLRMemoryFinalizationSurvivors 160 prioNETFrameworkCLRMemoryHeapSize 161 prioNETFrameworkCLRMemoryPromoted 162 prioNETFrameworkCLRMemoryNumberGCHandles 163 prioNETFrameworkCLRMemoryCollections 164 prioNETFrameworkCLRMemoryInducedGC 165 prioNETFrameworkCLRMemoryNumberPinnedObjects 166 prioNETFrameworkCLRMemoryNumberSinkBlocksInUse 167 prioNETFrameworkCLRMemoryCommitted 168 prioNETFrameworkCLRMemoryReserved 169 prioNETFrameworkCLRMemoryGCTime 170 171 // Remoting 172 prioNETFrameworkCLRRemotingChannels 173 prioNETFrameworkCLRRemotingContextBoundClassesLoaded 174 prioNETFrameworkCLRRemotingContextBoundObjects 175 prioNETFrameworkCLRRemotingContextProxies 176 prioNETFrameworkCLRRemotingContexts 177 prioNETFrameworkCLRRemotingRemoteCalls 178 179 // Security 180 prioNETFrameworkCLRSecurityLinkTimeChecks 181 prioNETFrameworkCLRSecurityRTChecksTime 182 prioNETFrameworkCLRSecurityStackWalkDepth 183 prioNETFrameworkCLRSecurityRuntimeChecks 184 185 prioServiceState 186 prioServiceStatus 187 188 // Database 189 prioADDatabaseOperations 190 prioADDirectoryOperations 191 prioADNameCacheLookups 192 prioADCacheHits 193 194 // Replication 195 prioADDRAReplicationIntersiteCompressedTraffic 196 prioADDRAReplicationIntrasiteCompressedTraffic 197 prioADDRAReplicationSyncObjectsRemaining 198 prioADDRAReplicationPropertiesUpdated 199 prioADDRAReplicationPropertiesFiltered 200 prioADDRAReplicationObjectsFiltered 201 prioADReplicationPendingSyncs 202 prioADDRASyncRequests 203 prioADDirectoryServiceThreadsInUse 204 205 // Bind 206 prioADLDAPBindTime 207 prioADBindsTotal 208 209 // LDAP 210 prioADLDAPSearchesTotal 211 212 // Thread Queue 213 prioADATQAverageRequestLatency 214 prioADATQOutstandingRequests 215 216 // Requests 217 prioADCSCertTemplateRequests 218 prioADCSCertTemplateRequestProcessingTime 219 prioADCSCertTemplateRetrievals 220 prioADCSCertTemplateFailedRequests 221 prioADCSCertTemplateIssuesRequests 222 prioADCSCertTemplatePendingRequests 223 224 // Response 225 prioADCSCertTemplateChallengeResponses 226 227 // Retrieval 228 prioADCSCertTemplateRetrievalProcessingTime 229 230 // Timing 231 prioADCSCertTemplateRequestCryptoSigningTime 232 prioADCSCertTemplateRequestPolicyModuleProcessingTime 233 prioADCSCertTemplateChallengeResponseProcessingTime 234 prioADCSCertTemplateSignedCertificateTimestampLists 235 prioADCSCertTemplateSignedCertificateTimestampListProcessingTime 236 237 // ADFS 238 // AD 239 prioADFSADLoginConnectionFailures 240 241 // DB Artifacts 242 prioADFSDBArtifactFailures 243 prioADFSDBArtifactQueryTimeSeconds 244 245 // DB Config 246 prioADFSDBConfigFailures 247 prioADFSDBConfigQueryTimeSeconds 248 249 // Auth 250 prioADFSDeviceAuthentications 251 prioADFSExternalAuthentications 252 prioADFSOauthAuthorizationRequests 253 prioADFSCertificateAuthentications 254 prioADFSOauthClientAuthentications 255 prioADFSPassportAuthentications 256 prioADFSSSOAuthentications 257 prioADFSUserPasswordAuthentications 258 prioADFSWindowsIntegratedAuthentications 259 260 // OAuth 261 prioADFSOauthClientCredentials 262 prioADFSOauthClientPrivkeyJwtAuthentication 263 prioADFSOauthClientSecretBasicAuthentications 264 prioADFSOauthClientSecretPostAuthentications 265 prioADFSOauthClientWindowsAuthentications 266 prioADFSOauthLogonCertificateRequests 267 prioADFSOauthPasswordGrantRequests 268 prioADFSOauthTokenRequestsSuccess 269 prioADFSFederatedAuthentications 270 271 // Requests 272 prioADFSFederationMetadataRequests 273 prioADFSPassiveRequests 274 prioADFSPasswordChangeRequests 275 prioADFSSAMLPTokenRequests 276 prioADFSWSTrustTokenRequestsSuccess 277 prioADFSTokenRequests 278 prioADFSWSFedTokenRequestsSuccess 279 280 // Exchange 281 // Transport Queue 282 prioExchangeTransportQueuesActiveMailboxDelivery 283 prioExchangeTransportQueuesExternalActiveRemoteDelivery 284 prioExchangeTransportQueuesExternalLargestDelivery 285 prioExchangeTransportQueuesInternalActiveRemoteDeliery 286 prioExchangeTransportQueuesInternalLargestDelivery 287 prioExchangeTransportQueuesRetryMailboxDelivery 288 prioExchangeTransportQueuesUnreachable 289 prioExchangeTransportQueuesPoison 290 291 // LDAP 292 prioExchangeLDAPLongRunningOPS 293 prioExchangeLDAPReadTime 294 prioExchangeLDAPSearchTime 295 prioExchangeLDAPWriteTime 296 prioExchangeLDAPTimeoutErrors 297 298 // OWA 299 prioExchangeOWACurrentUniqueUsers 300 prioExchangeOWARequestsTotal 301 302 // Sync 303 prioExchangeActiveSyncPingCMDsPending 304 prioExchangeActiveSyncRequests 305 prioExchangeActiveSyncSyncCMDs 306 307 // RPC 308 prioExchangeRPCActiveUserCount 309 prioExchangeRPCAvgLatency 310 prioExchangeRPCConnectionCount 311 prioExchangeRPCOperationsTotal 312 prioExchangeRPCRequests 313 prioExchangeRpcUserCount 314 315 // Workload 316 prioExchangeWorkloadActiveTasks 317 prioExchangeWorkloadCompleteTasks 318 prioExchangeWorkloadQueueTasks 319 prioExchangeWorkloadYieldedTasks 320 prioExchangeWorkloadActivityStatus 321 322 // HTTP Proxy 323 prioExchangeHTTPProxyAVGAuthLatency 324 prioExchangeHTTPProxyAVGCASProcessingLatency 325 prioExchangeHTTPProxyMailboxProxyFailureRate 326 prioExchangeHTTPProxyServerLocatorAvgLatency 327 prioExchangeHTTPProxyOutstandingProxyRequests 328 prioExchangeHTTPProxyRequestsTotal 329 330 // Request 331 prioExchangeAutoDiscoverRequests 332 prioExchangeAvailServiceRequests 333 334 // Hyperv Health 335 prioHypervVMHealth 336 337 // Hyperv Partition 338 prioHypervRootPartitionDeviceSpacePages 339 prioHypervRootPartitionGPASpacePages 340 prioHypervRootPartitionGPASpaceModifications 341 prioHypervRootPartitionAttachedDevices 342 prioHypervRootPartitionDepositedPages 343 prioHypervRootPartitionSkippedInterrupts 344 prioHypervRootPartitionDeviceDMAErrors 345 prioHypervRootPartitionDeviceInterruptErrors 346 prioHypervRootPartitionDeviceInterruptThrottleEvents 347 prioHypervRootPartitionIOTlbFlush 348 prioHypervRootPartitionAddressSpace 349 prioHypervRootPartitionVirtualTlbFlushEntires 350 prioHypervRootPartitionVirtualTlbPages 351 352 // Hyperv VM (Memory) 353 prioHypervVMCPUUsage 354 prioHypervVMMemoryPhysical 355 prioHypervVMMemoryPhysicalGuestVisible 356 prioHypervVMMemoryPressureCurrent 357 prioHypervVIDPhysicalPagesAllocated 358 prioHypervVIDRemotePhysicalPages 359 360 // Hyperv Device 361 prioHypervVMDeviceBytes 362 prioHypervVMDeviceOperations 363 prioHypervVMDeviceErrors 364 365 // Hyperv Interface 366 prioHypervVMInterfaceBytes 367 prioHypervVMInterfacePacketsDropped 368 prioHypervVMInterfacePackets 369 370 // Hyperv Vswitch 371 prioHypervVswitchTrafficTotal 372 prioHypervVswitchPackets 373 prioHypervVswitchDirectedPackets 374 prioHypervVswitchBroadcastPackets 375 prioHypervVswitchMulticastPackets 376 prioHypervVswitchDroppedPackets 377 prioHypervVswitchExtensionsDroppedPackets 378 prioHypervVswitchPacketsFlooded 379 prioHypervVswitchLearnedMACAddresses 380 prioHypervVswitchPurgeMACAddress 381 382 prioCollectorDuration 383 prioCollectorStatus 384 ) 385 386 // CPU 387 var ( 388 cpuCharts = module.Charts{ 389 cpuUtilChart.Copy(), 390 } 391 cpuUtilChart = module.Chart{ 392 ID: "cpu_utilization_total", 393 Title: "Total CPU Utilization (all cores)", 394 Units: "percentage", 395 Fam: "cpu", 396 Ctx: "windows.cpu_utilization_total", 397 Type: module.Stacked, 398 Priority: prioCPUUtil, 399 Dims: module.Dims{ 400 {ID: "cpu_idle_time", Name: "idle", Algo: module.PercentOfIncremental, Div: 1000, DimOpts: module.DimOpts{Hidden: true}}, 401 {ID: "cpu_dpc_time", Name: "dpc", Algo: module.PercentOfIncremental, Div: 1000}, 402 {ID: "cpu_user_time", Name: "user", Algo: module.PercentOfIncremental, Div: 1000}, 403 {ID: "cpu_privileged_time", Name: "privileged", Algo: module.PercentOfIncremental, Div: 1000}, 404 {ID: "cpu_interrupt_time", Name: "interrupt", Algo: module.PercentOfIncremental, Div: 1000}, 405 }, 406 } 407 ) 408 409 // CPU core 410 var ( 411 cpuCoreChartsTmpl = module.Charts{ 412 cpuCoreUtilChartTmpl.Copy(), 413 cpuCoreInterruptsChartTmpl.Copy(), 414 cpuDPCsChartTmpl.Copy(), 415 cpuCoreCStateChartTmpl.Copy(), 416 } 417 cpuCoreUtilChartTmpl = module.Chart{ 418 ID: "core_%s_cpu_utilization", 419 Title: "Core CPU Utilization", 420 Units: "percentage", 421 Fam: "cpu", 422 Ctx: "windows.cpu_core_utilization", 423 Type: module.Stacked, 424 Priority: prioCPUCoreUtil, 425 Dims: module.Dims{ 426 {ID: "cpu_core_%s_idle_time", Name: "idle", Algo: module.PercentOfIncremental, Div: precision, DimOpts: module.DimOpts{Hidden: true}}, 427 {ID: "cpu_core_%s_dpc_time", Name: "dpc", Algo: module.PercentOfIncremental, Div: precision}, 428 {ID: "cpu_core_%s_user_time", Name: "user", Algo: module.PercentOfIncremental, Div: precision}, 429 {ID: "cpu_core_%s_privileged_time", Name: "privileged", Algo: module.PercentOfIncremental, Div: precision}, 430 {ID: "cpu_core_%s_interrupt_time", Name: "interrupt", Algo: module.PercentOfIncremental, Div: precision}, 431 }, 432 } 433 cpuCoreInterruptsChartTmpl = module.Chart{ 434 ID: "cpu_core_%s_interrupts", 435 Title: "Received and Serviced Hardware Interrupts", 436 Units: "interrupts/s", 437 Fam: "cpu", 438 Ctx: "windows.cpu_core_interrupts", 439 Priority: prioCPUInterrupts, 440 Dims: module.Dims{ 441 {ID: "cpu_core_%s_interrupts", Name: "interrupts", Algo: module.Incremental}, 442 }, 443 } 444 cpuDPCsChartTmpl = module.Chart{ 445 ID: "cpu_core_%s_dpcs", 446 Title: "Received and Serviced Deferred Procedure Calls (DPC)", 447 Units: "dpc/s", 448 Fam: "cpu", 449 Ctx: "windows.cpu_core_dpcs", 450 Priority: prioCPUDPCs, 451 Dims: module.Dims{ 452 {ID: "cpu_core_%s_dpcs", Name: "dpcs", Algo: module.Incremental}, 453 }, 454 } 455 cpuCoreCStateChartTmpl = module.Chart{ 456 ID: "cpu_core_%s_cpu_cstate", 457 Title: "Core Time Spent in Low-Power Idle State", 458 Units: "percentage", 459 Fam: "cpu", 460 Ctx: "windows.cpu_core_cstate", 461 Type: module.Stacked, 462 Priority: prioCPUCoreCState, 463 Dims: module.Dims{ 464 {ID: "cpu_core_%s_cstate_c1", Name: "c1", Algo: module.PercentOfIncremental, Div: precision}, 465 {ID: "cpu_core_%s_cstate_c2", Name: "c2", Algo: module.PercentOfIncremental, Div: precision}, 466 {ID: "cpu_core_%s_cstate_c3", Name: "c3", Algo: module.PercentOfIncremental, Div: precision}, 467 }, 468 } 469 ) 470 471 // Memory 472 var ( 473 memCharts = module.Charts{ 474 memUtilChart.Copy(), 475 memPageFaultsChart.Copy(), 476 memSwapUtilChart.Copy(), 477 memSwapOperationsChart.Copy(), 478 memSwapPagesChart.Copy(), 479 memCacheChart.Copy(), 480 memCacheFaultsChart.Copy(), 481 memSystemPoolChart.Copy(), 482 } 483 memUtilChart = module.Chart{ 484 ID: "memory_utilization", 485 Title: "Memory Utilization", 486 Units: "bytes", 487 Fam: "mem", 488 Ctx: "windows.memory_utilization", 489 Type: module.Stacked, 490 Priority: prioMemUtil, 491 Dims: module.Dims{ 492 {ID: "memory_available_bytes", Name: "available"}, 493 {ID: "memory_used_bytes", Name: "used"}, 494 }, 495 } 496 memPageFaultsChart = module.Chart{ 497 ID: "memory_page_faults", 498 Title: "Memory Page Faults", 499 Units: "pgfaults/s", 500 Fam: "mem", 501 Ctx: "windows.memory_page_faults", 502 Priority: prioMemPageFaults, 503 Dims: module.Dims{ 504 {ID: "memory_page_faults_total", Name: "page_faults", Algo: module.Incremental}, 505 }, 506 } 507 memSwapUtilChart = module.Chart{ 508 ID: "memory_swap_utilization", 509 Title: "Swap Utilization", 510 Units: "bytes", 511 Fam: "mem", 512 Ctx: "windows.memory_swap_utilization", 513 Type: module.Stacked, 514 Priority: prioMemSwapUtil, 515 Dims: module.Dims{ 516 {ID: "memory_not_committed_bytes", Name: "available"}, 517 {ID: "memory_committed_bytes", Name: "used"}, 518 }, 519 Vars: module.Vars{ 520 {ID: "memory_commit_limit"}, 521 }, 522 } 523 memSwapOperationsChart = module.Chart{ 524 ID: "memory_swap_operations", 525 Title: "Swap Operations", 526 Units: "operations/s", 527 Fam: "mem", 528 Ctx: "windows.memory_swap_operations", 529 Type: module.Area, 530 Priority: prioMemSwapOperations, 531 Dims: module.Dims{ 532 {ID: "memory_swap_page_reads_total", Name: "read", Algo: module.Incremental}, 533 {ID: "memory_swap_page_writes_total", Name: "write", Algo: module.Incremental, Mul: -1}, 534 }, 535 } 536 memSwapPagesChart = module.Chart{ 537 ID: "memory_swap_pages", 538 Title: "Swap Pages", 539 Units: "pages/s", 540 Fam: "mem", 541 Ctx: "windows.memory_swap_pages", 542 Priority: prioMemSwapPages, 543 Dims: module.Dims{ 544 {ID: "memory_swap_pages_read_total", Name: "read", Algo: module.Incremental}, 545 {ID: "memory_swap_pages_written_total", Name: "written", Algo: module.Incremental, Mul: -1}, 546 }, 547 } 548 memCacheChart = module.Chart{ 549 ID: "memory_cached", 550 Title: "Cached", 551 Units: "bytes", 552 Fam: "mem", 553 Ctx: "windows.memory_cached", 554 Type: module.Area, 555 Priority: prioMemCache, 556 Dims: module.Dims{ 557 {ID: "memory_cache_total", Name: "cached"}, 558 }, 559 } 560 memCacheFaultsChart = module.Chart{ 561 ID: "memory_cache_faults", 562 Title: "Cache Faults", 563 Units: "faults/s", 564 Fam: "mem", 565 Ctx: "windows.memory_cache_faults", 566 Priority: prioMemCacheFaults, 567 Dims: module.Dims{ 568 {ID: "memory_cache_faults_total", Name: "cache_faults", Algo: module.Incremental}, 569 }, 570 } 571 memSystemPoolChart = module.Chart{ 572 ID: "memory_system_pool", 573 Title: "System Memory Pool", 574 Units: "bytes", 575 Fam: "mem", 576 Ctx: "windows.memory_system_pool", 577 Type: module.Stacked, 578 Priority: prioMemSystemPool, 579 Dims: module.Dims{ 580 {ID: "memory_pool_paged_bytes", Name: "paged"}, 581 {ID: "memory_pool_nonpaged_bytes_total", Name: "non-paged"}, 582 }, 583 } 584 ) 585 586 // Logical Disks 587 var ( 588 diskChartsTmpl = module.Charts{ 589 diskSpaceUsageChartTmpl.Copy(), 590 diskBandwidthChartTmpl.Copy(), 591 diskOperationsChartTmpl.Copy(), 592 diskAvgLatencyChartTmpl.Copy(), 593 } 594 diskSpaceUsageChartTmpl = module.Chart{ 595 ID: "logical_disk_%s_space_usage", 596 Title: "Space usage", 597 Units: "bytes", 598 Fam: "disk", 599 Ctx: "windows.logical_disk_space_usage", 600 Type: module.Stacked, 601 Priority: prioDiskSpaceUsage, 602 Dims: module.Dims{ 603 {ID: "logical_disk_%s_free_space", Name: "free"}, 604 {ID: "logical_disk_%s_used_space", Name: "used"}, 605 }, 606 } 607 diskBandwidthChartTmpl = module.Chart{ 608 ID: "logical_disk_%s_bandwidth", 609 Title: "Bandwidth", 610 Units: "bytes/s", 611 Fam: "disk", 612 Ctx: "windows.logical_disk_bandwidth", 613 Type: module.Area, 614 Priority: prioDiskBandwidth, 615 Dims: module.Dims{ 616 {ID: "logical_disk_%s_read_bytes_total", Name: "read", Algo: module.Incremental}, 617 {ID: "logical_disk_%s_write_bytes_total", Name: "write", Algo: module.Incremental, Mul: -1}, 618 }, 619 } 620 diskOperationsChartTmpl = module.Chart{ 621 ID: "logical_disk_%s_operations", 622 Title: "Operations", 623 Units: "operations/s", 624 Fam: "disk", 625 Ctx: "windows.logical_disk_operations", 626 Priority: prioDiskOperations, 627 Dims: module.Dims{ 628 {ID: "logical_disk_%s_reads_total", Name: "reads", Algo: module.Incremental}, 629 {ID: "logical_disk_%s_writes_total", Name: "writes", Algo: module.Incremental, Mul: -1}, 630 }, 631 } 632 diskAvgLatencyChartTmpl = module.Chart{ 633 ID: "logical_disk_%s_latency", 634 Title: "Average Read/Write Latency", 635 Units: "seconds", 636 Fam: "disk", 637 Ctx: "windows.logical_disk_latency", 638 Priority: prioDiskAvgLatency, 639 Dims: module.Dims{ 640 {ID: "logical_disk_%s_read_latency", Name: "read", Algo: module.Incremental, Div: precision}, 641 {ID: "logical_disk_%s_write_latency", Name: "write", Algo: module.Incremental, Div: precision}, 642 }, 643 } 644 ) 645 646 // Network interfaces 647 var ( 648 nicChartsTmpl = module.Charts{ 649 nicBandwidthChartTmpl.Copy(), 650 nicPacketsChartTmpl.Copy(), 651 nicErrorsChartTmpl.Copy(), 652 nicDiscardsChartTmpl.Copy(), 653 } 654 nicBandwidthChartTmpl = module.Chart{ 655 ID: "nic_%s_bandwidth", 656 Title: "Bandwidth", 657 Units: "kilobits/s", 658 Fam: "net", 659 Ctx: "windows.net_nic_bandwidth", 660 Type: module.Area, 661 Priority: prioNICBandwidth, 662 Dims: module.Dims{ 663 {ID: "net_nic_%s_bytes_received", Name: "received", Algo: module.Incremental, Div: 1000}, 664 {ID: "net_nic_%s_bytes_sent", Name: "sent", Algo: module.Incremental, Mul: -1, Div: 1000}, 665 }, 666 } 667 nicPacketsChartTmpl = module.Chart{ 668 ID: "nic_%s_packets", 669 Title: "Packets", 670 Units: "packets/s", 671 Fam: "net", 672 Ctx: "windows.net_nic_packets", 673 Priority: prioNICPackets, 674 Dims: module.Dims{ 675 {ID: "net_nic_%s_packets_received_total", Name: "received", Algo: module.Incremental}, 676 {ID: "net_nic_%s_packets_sent_total", Name: "sent", Algo: module.Incremental, Mul: -1}, 677 }, 678 } 679 nicErrorsChartTmpl = module.Chart{ 680 ID: "nic_%s_errors", 681 Title: "Errors", 682 Units: "errors/s", 683 Fam: "net", 684 Ctx: "windows.net_nic_errors", 685 Priority: prioNICErrors, 686 Dims: module.Dims{ 687 {ID: "net_nic_%s_packets_received_errors", Name: "inbound", Algo: module.Incremental}, 688 {ID: "net_nic_%s_packets_outbound_errors", Name: "outbound", Algo: module.Incremental, Mul: -1}, 689 }, 690 } 691 nicDiscardsChartTmpl = module.Chart{ 692 ID: "nic_%s_discarded", 693 Title: "Discards", 694 Units: "discards/s", 695 Fam: "net", 696 Ctx: "windows.net_nic_discarded", 697 Priority: prioNICDiscards, 698 Dims: module.Dims{ 699 {ID: "net_nic_%s_packets_received_discarded", Name: "inbound", Algo: module.Incremental}, 700 {ID: "net_nic_%s_packets_outbound_discarded", Name: "outbound", Algo: module.Incremental, Mul: -1}, 701 }, 702 } 703 ) 704 705 // TCP 706 var ( 707 tcpCharts = module.Charts{ 708 tcpConnsActiveChart.Copy(), 709 tcpConnsEstablishedChart.Copy(), 710 tcpConnsFailuresChart.Copy(), 711 tcpConnsPassiveChart.Copy(), 712 tcpConnsResetsChart.Copy(), 713 tcpSegmentsReceivedChart.Copy(), 714 tcpSegmentsRetransmittedChart.Copy(), 715 tcpSegmentsSentChart.Copy(), 716 } 717 tcpConnsEstablishedChart = module.Chart{ 718 ID: "tcp_conns_established", 719 Title: "TCP established connections", 720 Units: "connections", 721 Fam: "tcp", 722 Ctx: "windows.tcp_conns_established", 723 Priority: prioTCPConnsEstablished, 724 Dims: module.Dims{ 725 {ID: "tcp_ipv4_conns_established", Name: "ipv4"}, 726 {ID: "tcp_ipv6_conns_established", Name: "ipv6"}, 727 }, 728 } 729 tcpConnsActiveChart = module.Chart{ 730 ID: "tcp_conns_active", 731 Title: "TCP active connections", 732 Units: "connections/s", 733 Fam: "tcp", 734 Ctx: "windows.tcp_conns_active", 735 Priority: prioTCPConnsActive, 736 Dims: module.Dims{ 737 {ID: "tcp_ipv4_conns_active", Name: "ipv4", Algo: module.Incremental}, 738 {ID: "tcp_ipv6_conns_active", Name: "ipv6", Algo: module.Incremental}, 739 }, 740 } 741 tcpConnsPassiveChart = module.Chart{ 742 ID: "tcp_conns_passive", 743 Title: "TCP passive connections", 744 Units: "connections/s", 745 Fam: "tcp", 746 Ctx: "windows.tcp_conns_passive", 747 Priority: prioTCPConnsPassive, 748 Dims: module.Dims{ 749 {ID: "tcp_ipv4_conns_passive", Name: "ipv4", Algo: module.Incremental}, 750 {ID: "tcp_ipv6_conns_passive", Name: "ipv6", Algo: module.Incremental}, 751 }, 752 } 753 tcpConnsFailuresChart = module.Chart{ 754 ID: "tcp_conns_failures", 755 Title: "TCP connection failures", 756 Units: "failures/s", 757 Fam: "tcp", 758 Ctx: "windows.tcp_conns_failures", 759 Priority: prioTCPConnsFailure, 760 Dims: module.Dims{ 761 {ID: "tcp_ipv4_conns_failures", Name: "ipv4", Algo: module.Incremental}, 762 {ID: "tcp_ipv6_conns_failures", Name: "ipv6", Algo: module.Incremental}, 763 }, 764 } 765 tcpConnsResetsChart = module.Chart{ 766 ID: "tcp_conns_resets", 767 Title: "TCP connections resets", 768 Units: "resets/s", 769 Fam: "tcp", 770 Ctx: "windows.tcp_conns_resets", 771 Priority: prioTCPConnsReset, 772 Dims: module.Dims{ 773 {ID: "tcp_ipv4_conns_resets", Name: "ipv4", Algo: module.Incremental}, 774 {ID: "tcp_ipv6_conns_resets", Name: "ipv6", Algo: module.Incremental}, 775 }, 776 } 777 tcpSegmentsReceivedChart = module.Chart{ 778 ID: "tcp_segments_received", 779 Title: "Number of TCP segments received", 780 Units: "segments/s", 781 Fam: "tcp", 782 Ctx: "windows.tcp_segments_received", 783 Priority: prioTCPSegmentsReceived, 784 Dims: module.Dims{ 785 {ID: "tcp_ipv4_segments_received", Name: "ipv4", Algo: module.Incremental}, 786 {ID: "tcp_ipv6_segments_received", Name: "ipv6", Algo: module.Incremental}, 787 }, 788 } 789 tcpSegmentsSentChart = module.Chart{ 790 ID: "tcp_segments_sent", 791 Title: "Number of TCP segments sent", 792 Units: "segments/s", 793 Fam: "tcp", 794 Ctx: "windows.tcp_segments_sent", 795 Priority: prioTCPSegmentsSent, 796 Dims: module.Dims{ 797 {ID: "tcp_ipv4_segments_sent", Name: "ipv4", Algo: module.Incremental}, 798 {ID: "tcp_ipv6_segments_sent", Name: "ipv6", Algo: module.Incremental}, 799 }, 800 } 801 tcpSegmentsRetransmittedChart = module.Chart{ 802 ID: "tcp_segments_retransmitted", 803 Title: "Number of TCP segments retransmitted", 804 Units: "segments/s", 805 Fam: "tcp", 806 Ctx: "windows.tcp_segments_retransmitted", 807 Priority: prioTCPSegmentsRetransmitted, 808 Dims: module.Dims{ 809 {ID: "tcp_ipv4_segments_retransmitted", Name: "ipv4", Algo: module.Incremental}, 810 {ID: "tcp_ipv6_segments_retransmitted", Name: "ipv6", Algo: module.Incremental}, 811 }, 812 } 813 ) 814 815 // OS 816 var ( 817 osCharts = module.Charts{ 818 osProcessesChart.Copy(), 819 osUsersChart.Copy(), 820 osMemoryUsage.Copy(), 821 osPagingFilesUsageChart.Copy(), 822 } 823 osProcessesChart = module.Chart{ 824 ID: "os_processes", 825 Title: "Processes", 826 Units: "number", 827 Fam: "os", 828 Ctx: "windows.os_processes", 829 Priority: prioOSProcesses, 830 Dims: module.Dims{ 831 {ID: "os_processes", Name: "processes"}, 832 }, 833 Vars: module.Vars{ 834 {ID: "os_processes_limit"}, 835 }, 836 } 837 osUsersChart = module.Chart{ 838 ID: "os_users", 839 Title: "Number of Users", 840 Units: "users", 841 Fam: "os", 842 Ctx: "windows.os_users", 843 Priority: prioOSUsers, 844 Dims: module.Dims{ 845 {ID: "os_users", Name: "users"}, 846 }, 847 } 848 osMemoryUsage = module.Chart{ 849 ID: "os_visible_memory_usage", 850 Title: "Visible Memory Usage", 851 Units: "bytes", 852 Fam: "os", 853 Ctx: "windows.os_visible_memory_usage", 854 Type: module.Stacked, 855 Priority: prioOSVisibleMemoryUsage, 856 Dims: module.Dims{ 857 {ID: "os_physical_memory_free_bytes", Name: "free"}, 858 {ID: "os_visible_memory_used_bytes", Name: "used"}, 859 }, 860 Vars: module.Vars{ 861 {ID: "os_visible_memory_bytes"}, 862 }, 863 } 864 osPagingFilesUsageChart = module.Chart{ 865 ID: "os_paging_files_usage", 866 Title: "Paging Files Usage", 867 Units: "bytes", 868 Fam: "os", 869 Ctx: "windows.os_paging_files_usage", 870 Type: module.Stacked, 871 Priority: prioOSPagingUsage, 872 Dims: module.Dims{ 873 {ID: "os_paging_free_bytes", Name: "free"}, 874 {ID: "os_paging_used_bytes", Name: "used"}, 875 }, 876 Vars: module.Vars{ 877 {ID: "os_paging_limit_bytes"}, 878 }, 879 } 880 ) 881 882 // System 883 var ( 884 systemCharts = module.Charts{ 885 systemThreadsChart.Copy(), 886 systemUptimeChart.Copy(), 887 } 888 systemThreadsChart = module.Chart{ 889 ID: "system_threads", 890 Title: "Threads", 891 Units: "number", 892 Fam: "system", 893 Ctx: "windows.system_threads", 894 Priority: prioSystemThreads, 895 Dims: module.Dims{ 896 {ID: "system_threads", Name: "threads"}, 897 }, 898 } 899 systemUptimeChart = module.Chart{ 900 ID: "system_uptime", 901 Title: "Uptime", 902 Units: "seconds", 903 Fam: "system", 904 Ctx: "windows.system_uptime", 905 Priority: prioSystemUptime, 906 Dims: module.Dims{ 907 {ID: "system_up_time", Name: "time"}, 908 }, 909 } 910 ) 911 912 // IIS 913 var ( 914 iisWebsiteChartsTmpl = module.Charts{ 915 iisWebsiteTrafficChartTempl.Copy(), 916 iisWebsiteRequestsRateChartTmpl.Copy(), 917 iisWebsiteActiveConnectionsCountChartTmpl.Copy(), 918 iisWebsiteUsersCountChartTmpl.Copy(), 919 iisWebsiteConnectionAttemptsRate.Copy(), 920 iisWebsiteISAPIExtRequestsCountChartTmpl.Copy(), 921 iisWebsiteISAPIExtRequestsRateChartTmpl.Copy(), 922 iisWebsiteFTPFileTransferRateChartTempl.Copy(), 923 iisWebsiteLogonAttemptsRateChartTmpl.Copy(), 924 iisWebsiteErrorsRateChart.Copy(), 925 iisWebsiteUptimeChartTmpl.Copy(), 926 } 927 iisWebsiteTrafficChartTempl = module.Chart{ 928 OverModule: "iis", 929 ID: "iis_website_%s_traffic", 930 Title: "Website traffic", 931 Units: "bytes/s", 932 Fam: "traffic", 933 Ctx: "iis.website_traffic", 934 Type: module.Area, 935 Priority: prioIISWebsiteTraffic, 936 Dims: module.Dims{ 937 {ID: "iis_website_%s_received_bytes_total", Name: "received", Algo: module.Incremental}, 938 {ID: "iis_website_%s_sent_bytes_total", Name: "sent", Algo: module.Incremental, Mul: -1}, 939 }, 940 } 941 iisWebsiteFTPFileTransferRateChartTempl = module.Chart{ 942 OverModule: "iis", 943 ID: "iis_website_%s_ftp_file_transfer_rate", 944 Title: "Website FTP file transfer rate", 945 Units: "files/s", 946 Fam: "traffic", 947 Ctx: "iis.website_ftp_file_transfer_rate", 948 Priority: prioIISWebsiteFTPFileTransferRate, 949 Dims: module.Dims{ 950 {ID: "iis_website_%s_files_received_total", Name: "received", Algo: module.Incremental}, 951 {ID: "iis_website_%s_files_sent_total", Name: "sent", Algo: module.Incremental}, 952 }, 953 } 954 iisWebsiteActiveConnectionsCountChartTmpl = module.Chart{ 955 OverModule: "iis", 956 ID: "iis_website_%s_active_connections_count", 957 Title: "Website active connections", 958 Units: "connections", 959 Fam: "connections", 960 Ctx: "iis.website_active_connections_count", 961 Priority: prioIISWebsiteActiveConnectionsCount, 962 Dims: module.Dims{ 963 {ID: "iis_website_%s_current_connections", Name: "active"}, 964 }, 965 } 966 iisWebsiteConnectionAttemptsRate = module.Chart{ 967 OverModule: "iis", 968 ID: "iis_website_%s_connection_attempts_rate", 969 Title: "Website connections attempts", 970 Units: "attempts/s", 971 Fam: "connections", 972 Ctx: "iis.website_connection_attempts_rate", 973 Priority: prioIISWebsiteConnectionAttemptsRate, 974 Dims: module.Dims{ 975 {ID: "iis_website_%s_connection_attempts_all_instances_total", Name: "connection", Algo: module.Incremental}, 976 }, 977 } 978 iisWebsiteRequestsRateChartTmpl = module.Chart{ 979 OverModule: "iis", 980 ID: "iis_website_%s_requests_rate", 981 Title: "Website requests rate", 982 Units: "requests/s", 983 Fam: "requests", 984 Ctx: "iis.website_requests_rate", 985 Priority: prioIISWebsiteRequestsRate, 986 Dims: module.Dims{ 987 {ID: "iis_website_%s_requests_total", Name: "requests", Algo: module.Incremental}, 988 }, 989 } 990 iisWebsiteUsersCountChartTmpl = module.Chart{ 991 OverModule: "iis", 992 ID: "iis_website_%s_users_count", 993 Title: "Website users with pending requests", 994 Units: "users", 995 Fam: "requests", 996 Ctx: "iis.website_users_count", 997 Type: module.Stacked, 998 Priority: prioIISWebsiteUsersCount, 999 Dims: module.Dims{ 1000 {ID: "iis_website_%s_current_anonymous_users", Name: "anonymous"}, 1001 {ID: "iis_website_%s_current_non_anonymous_users", Name: "non_anonymous"}, 1002 }, 1003 } 1004 iisWebsiteISAPIExtRequestsCountChartTmpl = module.Chart{ 1005 OverModule: "iis", 1006 ID: "iis_website_%s_isapi_extension_requests_count", 1007 Title: "ISAPI extension requests", 1008 Units: "requests", 1009 Fam: "requests", 1010 Ctx: "iis.website_isapi_extension_requests_count", 1011 Priority: prioIISWebsiteISAPIExtRequestsCount, 1012 Dims: module.Dims{ 1013 {ID: "iis_website_%s_current_isapi_extension_requests", Name: "isapi"}, 1014 }, 1015 } 1016 iisWebsiteISAPIExtRequestsRateChartTmpl = module.Chart{ 1017 OverModule: "iis", 1018 ID: "iis_website_%s_isapi_extension_requests_rate", 1019 Title: "Website extensions request", 1020 Units: "requests/s", 1021 Fam: "requests", 1022 Ctx: "iis.website_isapi_extension_requests_rate", 1023 Priority: prioIISWebsiteISAPIExtRequestsRate, 1024 Dims: module.Dims{ 1025 {ID: "iis_website_%s_isapi_extension_requests_total", Name: "isapi", Algo: module.Incremental}, 1026 }, 1027 } 1028 iisWebsiteErrorsRateChart = module.Chart{ 1029 OverModule: "iis", 1030 ID: "iis_website_%s_errors_rate", 1031 Title: "Website errors", 1032 Units: "errors/s", 1033 Fam: "requests", 1034 Ctx: "iis.website_errors_rate", 1035 Type: module.Stacked, 1036 Priority: prioIISWebsiteErrorsRate, 1037 Dims: module.Dims{ 1038 {ID: "iis_website_%s_locked_errors_total", Name: "document_locked", Algo: module.Incremental}, 1039 {ID: "iis_website_%s_not_found_errors_total", Name: "document_not_found", Algo: module.Incremental}, 1040 }, 1041 } 1042 iisWebsiteLogonAttemptsRateChartTmpl = module.Chart{ 1043 OverModule: "iis", 1044 ID: "iis_website_%s_logon_attempts_rate", 1045 Title: "Website logon attempts", 1046 Units: "attempts/s", 1047 Fam: "logon", 1048 Ctx: "iis.website_logon_attempts_rate", 1049 Priority: prioIISWebsiteLogonAttemptsRate, 1050 Dims: module.Dims{ 1051 {ID: "iis_website_%s_logon_attempts_total", Name: "logon", Algo: module.Incremental}, 1052 }, 1053 } 1054 iisWebsiteUptimeChartTmpl = module.Chart{ 1055 OverModule: "iis", 1056 ID: "iis_website_%s_uptime", 1057 Title: "Website uptime", 1058 Units: "seconds", 1059 Fam: "uptime", 1060 Ctx: "iis.website_uptime", 1061 Priority: prioIISWebsiteUptime, 1062 Dims: module.Dims{ 1063 {ID: "iis_website_%s_service_uptime", Name: "uptime"}, 1064 }, 1065 } 1066 ) 1067 1068 // MS-SQL 1069 var ( 1070 mssqlInstanceChartsTmpl = module.Charts{ 1071 mssqlAccessMethodPageSplitsChart.Copy(), 1072 mssqlCacheHitRatioChart.Copy(), 1073 mssqlBufferCheckpointPageChart.Copy(), 1074 mssqlBufferPageLifeExpectancyChart.Copy(), 1075 mssqlBufManIOPSChart.Copy(), 1076 mssqlBlockedProcessChart.Copy(), 1077 mssqlLocksWaitChart.Copy(), 1078 mssqlDeadLocksChart.Copy(), 1079 mssqlMemmgrConnectionMemoryBytesChart.Copy(), 1080 mssqlMemmgrExternalBenefitOfMemoryChart.Copy(), 1081 mssqlMemmgrPendingMemoryChart.Copy(), 1082 mssqlMemmgrTotalServerChart.Copy(), 1083 mssqlSQLErrorsTotalChart.Copy(), 1084 mssqlStatsAutoParamChart.Copy(), 1085 mssqlStatsBatchRequestsChart.Copy(), 1086 mssqlStatsSafeAutoChart.Copy(), 1087 mssqlStatsCompilationChart.Copy(), 1088 mssqlStatsRecompilationChart.Copy(), 1089 mssqlUserConnectionChart.Copy(), 1090 } 1091 mssqlDatabaseChartsTmpl = module.Charts{ 1092 mssqlDatabaseActiveTransactionsChart.Copy(), 1093 mssqlDatabaseBackupRestoreOperationsChart.Copy(), 1094 mssqlDatabaseSizeChart.Copy(), 1095 mssqlDatabaseLogFlushedChart.Copy(), 1096 mssqlDatabaseLogFlushesChart.Copy(), 1097 mssqlDatabaseTransactionsChart.Copy(), 1098 mssqlDatabaseWriteTransactionsChart.Copy(), 1099 } 1100 // Access Method: 1101 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-access-methods-object?view=sql-server-ver16 1102 mssqlAccessMethodPageSplitsChart = module.Chart{ 1103 OverModule: "mssql", 1104 ID: "mssql_instance_%s_accessmethods_page_splits", 1105 Title: "Page splits", 1106 Units: "splits/s", 1107 Fam: "buffer cache", 1108 Ctx: "mssql.instance_accessmethods_page_splits", 1109 Priority: prioMSSQLAccessMethodPageSplits, 1110 Dims: module.Dims{ 1111 {ID: "mssql_instance_%s_accessmethods_page_splits", Name: "page", Algo: module.Incremental}, 1112 }, 1113 } 1114 // Buffer Management 1115 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-buffer-manager-object?view=sql-server-ver16 1116 mssqlCacheHitRatioChart = module.Chart{ 1117 OverModule: "mssql", 1118 ID: "mssql_instance_%s_cache_hit_ratio", 1119 Title: "Buffer Cache hit ratio", 1120 Units: "percentage", 1121 Fam: "buffer cache", 1122 Ctx: "mssql.instance_cache_hit_ratio", 1123 Priority: prioMSSQLCacheHitRatio, 1124 Dims: module.Dims{ 1125 {ID: "mssql_instance_%s_cache_hit_ratio", Name: "hit_ratio"}, 1126 }, 1127 } 1128 mssqlBufferCheckpointPageChart = module.Chart{ 1129 OverModule: "mssql", 1130 ID: "mssql_instance_%s_bufman_checkpoint_pages", 1131 Title: "Flushed pages", 1132 Units: "pages/s", 1133 Fam: "buffer cache", 1134 Ctx: "mssql.instance_bufman_checkpoint_pages", 1135 Priority: prioMSSQLBufferCheckpointPages, 1136 Dims: module.Dims{ 1137 {ID: "mssql_instance_%s_bufman_checkpoint_pages", Name: "flushed", Algo: module.Incremental}, 1138 }, 1139 } 1140 mssqlBufferPageLifeExpectancyChart = module.Chart{ 1141 OverModule: "mssql", 1142 ID: "mssql_instance_%s_bufman_page_life_expectancy", 1143 Title: "Page life expectancy", 1144 Units: "seconds", 1145 Fam: "buffer cache", 1146 Ctx: "mssql.instance_bufman_page_life_expectancy", 1147 Priority: prioMSSQLBufferPageLifeExpectancy, 1148 Dims: module.Dims{ 1149 {ID: "mssql_instance_%s_bufman_page_life_expectancy_seconds", Name: "life_expectancy"}, 1150 }, 1151 } 1152 mssqlBufManIOPSChart = module.Chart{ 1153 OverModule: "mssql", 1154 ID: "mssql_instance_%s_bufman_iops", 1155 Title: "Number of pages input and output", 1156 Units: "pages/s", 1157 Fam: "buffer cache", 1158 Ctx: "mssql.instance_bufman_iops", 1159 Priority: prioMSSQLBufManIOPS, 1160 Dims: module.Dims{ 1161 {ID: "mssql_instance_%s_bufman_page_reads", Name: "read", Algo: module.Incremental}, 1162 {ID: "mssql_instance_%s_bufman_page_writes", Name: "written", Mul: -1, Algo: module.Incremental}, 1163 }, 1164 } 1165 // General Statistic 1166 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object?view=sql-server-ver16 1167 mssqlBlockedProcessChart = module.Chart{ 1168 OverModule: "mssql", 1169 ID: "mssql_instance_%s_blocked_process", 1170 Title: "Blocked processes", 1171 Units: "process", 1172 Fam: "processes", 1173 Ctx: "mssql.instance_blocked_processes", 1174 Priority: prioMSSQLBlockedProcess, 1175 Dims: module.Dims{ 1176 {ID: "mssql_instance_%s_genstats_blocked_processes", Name: "blocked"}, 1177 }, 1178 } 1179 mssqlUserConnectionChart = module.Chart{ 1180 OverModule: "mssql", 1181 ID: "mssql_instance_%s_user_connection", 1182 Title: "User connections", 1183 Units: "connections", 1184 Fam: "connections", 1185 Ctx: "mssql.instance_user_connection", 1186 Priority: prioMSSQLUserConnections, 1187 Dims: module.Dims{ 1188 {ID: "mssql_instance_%s_genstats_user_connections", Name: "user"}, 1189 }, 1190 } 1191 // Lock Wait 1192 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object?view=sql-server-ver16 1193 mssqlLocksWaitChart = module.Chart{ 1194 OverModule: "mssql", 1195 ID: "mssql_instance_%s_locks_lock_wait", 1196 Title: "Lock requests that required the caller to wait", 1197 Units: "locks/s", 1198 Fam: "locks", 1199 Ctx: "mssql.instance_locks_lock_wait", 1200 Priority: prioMSSQLLocksLockWait, 1201 Dims: module.Dims{ 1202 {ID: "mssql_instance_%s_resource_AllocUnit_locks_lock_wait_seconds", Name: "alloc_unit", Algo: module.Incremental}, 1203 {ID: "mssql_instance_%s_resource_Application_locks_lock_wait_seconds", Name: "application", Algo: module.Incremental}, 1204 {ID: "mssql_instance_%s_resource_Database_locks_lock_wait_seconds", Name: "database", Algo: module.Incremental}, 1205 {ID: "mssql_instance_%s_resource_Extent_locks_lock_wait_seconds", Name: "extent", Algo: module.Incremental}, 1206 {ID: "mssql_instance_%s_resource_File_locks_lock_wait_seconds", Name: "file", Algo: module.Incremental}, 1207 {ID: "mssql_instance_%s_resource_HoBT_locks_lock_wait_seconds", Name: "hobt", Algo: module.Incremental}, 1208 {ID: "mssql_instance_%s_resource_Key_locks_lock_wait_seconds", Name: "key", Algo: module.Incremental}, 1209 {ID: "mssql_instance_%s_resource_Metadata_locks_lock_wait_seconds", Name: "metadata", Algo: module.Incremental}, 1210 {ID: "mssql_instance_%s_resource_OIB_locks_lock_wait_seconds", Name: "oib", Algo: module.Incremental}, 1211 {ID: "mssql_instance_%s_resource_Object_locks_lock_wait_seconds", Name: "object", Algo: module.Incremental}, 1212 {ID: "mssql_instance_%s_resource_Page_locks_lock_wait_seconds", Name: "page", Algo: module.Incremental}, 1213 {ID: "mssql_instance_%s_resource_RID_locks_lock_wait_seconds", Name: "rid", Algo: module.Incremental}, 1214 {ID: "mssql_instance_%s_resource_RowGroup_locks_lock_wait_seconds", Name: "row_group", Algo: module.Incremental}, 1215 {ID: "mssql_instance_%s_resource_Xact_locks_lock_wait_seconds", Name: "xact", Algo: module.Incremental}, 1216 }, 1217 } 1218 mssqlDeadLocksChart = module.Chart{ 1219 OverModule: "mssql", 1220 ID: "mssql_instance_%s_locks_deadlocks", 1221 Title: "Lock requests that resulted in deadlock", 1222 Units: "locks/s", 1223 Fam: "locks", 1224 Ctx: "mssql.instance_locks_deadlocks", 1225 Priority: prioMSSQLLocksDeadLocks, 1226 Dims: module.Dims{ 1227 {ID: "mssql_instance_%s_resource_AllocUnit_locks_deadlocks", Name: "alloc_unit", Algo: module.Incremental}, 1228 {ID: "mssql_instance_%s_resource_Application_locks_deadlocks", Name: "application", Algo: module.Incremental}, 1229 {ID: "mssql_instance_%s_resource_Database_locks_deadlocks", Name: "database", Algo: module.Incremental}, 1230 {ID: "mssql_instance_%s_resource_Extent_locks_deadlocks", Name: "extent", Algo: module.Incremental}, 1231 {ID: "mssql_instance_%s_resource_File_locks_deadlocks", Name: "file", Algo: module.Incremental}, 1232 {ID: "mssql_instance_%s_resource_HoBT_locks_deadlocks", Name: "hobt", Algo: module.Incremental}, 1233 {ID: "mssql_instance_%s_resource_Key_locks_deadlocks", Name: "key", Algo: module.Incremental}, 1234 {ID: "mssql_instance_%s_resource_Metadata_locks_deadlocks", Name: "metadata", Algo: module.Incremental}, 1235 {ID: "mssql_instance_%s_resource_OIB_locks_deadlocks", Name: "oib", Algo: module.Incremental}, 1236 {ID: "mssql_instance_%s_resource_Object_locks_deadlocks", Name: "object", Algo: module.Incremental}, 1237 {ID: "mssql_instance_%s_resource_Page_locks_deadlocks", Name: "page", Algo: module.Incremental}, 1238 {ID: "mssql_instance_%s_resource_RID_locks_deadlocks", Name: "rid", Algo: module.Incremental}, 1239 {ID: "mssql_instance_%s_resource_RowGroup_locks_deadlocks", Name: "row_group", Algo: module.Incremental}, 1240 {ID: "mssql_instance_%s_resource_Xact_locks_deadlocks", Name: "xact", Algo: module.Incremental}, 1241 }, 1242 } 1243 1244 // Memory Manager 1245 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-memory-manager-object?view=sql-server-ver16 1246 mssqlMemmgrConnectionMemoryBytesChart = module.Chart{ 1247 OverModule: "mssql", 1248 ID: "mssql_instance_%s_memmgr_connection_memory_bytes", 1249 Title: "Amount of dynamic memory to maintain connections", 1250 Units: "bytes", 1251 Fam: "memory", 1252 Ctx: "mssql.instance_memmgr_connection_memory_bytes", 1253 Priority: prioMSSQLMemmgrConnectionMemoryBytes, 1254 Dims: module.Dims{ 1255 {ID: "mssql_instance_%s_memmgr_connection_memory_bytes", Name: "memory", Algo: module.Incremental}, 1256 }, 1257 } 1258 mssqlMemmgrExternalBenefitOfMemoryChart = module.Chart{ 1259 OverModule: "mssql", 1260 ID: "mssql_instance_%s_memmgr_external_benefit_of_memory", 1261 Title: "Performance benefit from adding memory to a specific cache", 1262 Units: "bytes", 1263 Fam: "memory", 1264 Ctx: "mssql.instance_memmgr_external_benefit_of_memory", 1265 Priority: prioMSSQLMemmgrExternalBenefitOfMemory, 1266 Dims: module.Dims{ 1267 {ID: "mssql_instance_%s_memmgr_external_benefit_of_memory", Name: "benefit", Algo: module.Incremental}, 1268 }, 1269 } 1270 mssqlMemmgrPendingMemoryChart = module.Chart{ 1271 OverModule: "mssql", 1272 ID: "mssql_instance_%s_memmgr_pending_memory_grants", 1273 Title: "Process waiting for memory grant", 1274 Units: "process", 1275 Fam: "memory", 1276 Ctx: "mssql.instance_memmgr_pending_memory_grants", 1277 Priority: prioMSSQLMemmgrPendingMemoryGrants, 1278 Dims: module.Dims{ 1279 {ID: "mssql_instance_%s_memmgr_pending_memory_grants", Name: "pending"}, 1280 }, 1281 } 1282 mssqlMemmgrTotalServerChart = module.Chart{ 1283 OverModule: "mssql", 1284 ID: "mssql_instance_%s_memmgr_server_memory", 1285 Title: "Memory committed", 1286 Units: "bytes", 1287 Fam: "memory", 1288 Ctx: "mssql.instance_memmgr_server_memory", 1289 Priority: prioMSSQLMemTotalServer, 1290 Dims: module.Dims{ 1291 {ID: "mssql_instance_%s_memmgr_total_server_memory_bytes", Name: "memory"}, 1292 }, 1293 } 1294 1295 // SQL errors 1296 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-errors-object?view=sql-server-ver16 1297 mssqlSQLErrorsTotalChart = module.Chart{ 1298 OverModule: "mssql", 1299 ID: "mssql_instance_%s_sql_errors_total", 1300 Title: "Errors", 1301 Units: "errors/s", 1302 Fam: "errors", 1303 Ctx: "mssql.instance_sql_errors", 1304 Priority: prioMSSQLSqlErrorsTotal, 1305 Dims: module.Dims{ 1306 {ID: "mssql_instance_%s_sql_errors_total_db_offline_errors", Name: "db_offline", Algo: module.Incremental}, 1307 {ID: "mssql_instance_%s_sql_errors_total_info_errors", Name: "info", Algo: module.Incremental}, 1308 {ID: "mssql_instance_%s_sql_errors_total_kill_connection_errors", Name: "kill_connection", Algo: module.Incremental}, 1309 {ID: "mssql_instance_%s_sql_errors_total_user_errors", Name: "user", Algo: module.Incremental}, 1310 }, 1311 } 1312 1313 // SQL Statistic 1314 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-sql-statistics-object?view=sql-server-ver16 1315 mssqlStatsAutoParamChart = module.Chart{ 1316 OverModule: "mssql", 1317 ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts", 1318 Title: "Failed auto-parameterization attempts", 1319 Units: "attempts/s", 1320 Fam: "sql activity", 1321 Ctx: "mssql.instance_sqlstats_auto_parameterization_attempts", 1322 Priority: prioMSSQLStatsAutoParameterization, 1323 Dims: module.Dims{ 1324 {ID: "mssql_instance_%s_sqlstats_auto_parameterization_attempts", Name: "failed", Algo: module.Incremental}, 1325 }, 1326 } 1327 mssqlStatsBatchRequestsChart = module.Chart{ 1328 OverModule: "mssql", 1329 ID: "mssql_instance_%s_sqlstats_batch_requests", 1330 Title: "Total of batches requests", 1331 Units: "requests/s", 1332 Fam: "sql activity", 1333 Ctx: "mssql.instance_sqlstats_batch_requests", 1334 Priority: prioMSSQLStatsBatchRequests, 1335 Dims: module.Dims{ 1336 {ID: "mssql_instance_%s_sqlstats_batch_requests", Name: "batch", Algo: module.Incremental}, 1337 }, 1338 } 1339 mssqlStatsSafeAutoChart = module.Chart{ 1340 OverModule: "mssql", 1341 ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts", 1342 Title: "Safe auto-parameterization attempts", 1343 Units: "attempts/s", 1344 Fam: "sql activity", 1345 Ctx: "mssql.instance_sqlstats_safe_auto_parameterization_attempts", 1346 Priority: prioMSSQLStatsSafeAutoParameterization, 1347 Dims: module.Dims{ 1348 {ID: "mssql_instance_%s_sqlstats_safe_auto_parameterization_attempts", Name: "safe", Algo: module.Incremental}, 1349 }, 1350 } 1351 mssqlStatsCompilationChart = module.Chart{ 1352 OverModule: "mssql", 1353 ID: "mssql_instance_%s_sqlstats_sql_compilations", 1354 Title: "SQL compilations", 1355 Units: "compilations/s", 1356 Fam: "sql activity", 1357 Ctx: "mssql.instance_sqlstats_sql_compilations", 1358 Priority: prioMSSQLStatsCompilations, 1359 Dims: module.Dims{ 1360 {ID: "mssql_instance_%s_sqlstats_sql_compilations", Name: "compilations", Algo: module.Incremental}, 1361 }, 1362 } 1363 mssqlStatsRecompilationChart = module.Chart{ 1364 OverModule: "mssql", 1365 ID: "mssql_instance_%s_sqlstats_sql_recompilations", 1366 Title: "SQL re-compilations", 1367 Units: "recompiles/s", 1368 Fam: "sql activity", 1369 Ctx: "mssql.instance_sqlstats_sql_recompilations", 1370 Priority: prioMSSQLStatsRecompilations, 1371 Dims: module.Dims{ 1372 {ID: "mssql_instance_%s_sqlstats_sql_recompilations", Name: "recompiles", Algo: module.Incremental}, 1373 }, 1374 } 1375 1376 // Database 1377 // Source: https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object?view=sql-server-2017 1378 mssqlDatabaseActiveTransactionsChart = module.Chart{ 1379 OverModule: "mssql", 1380 ID: "mssql_db_%s_instance_%s_active_transactions", 1381 Title: "Active transactions per database", 1382 Units: "transactions", 1383 Fam: "transactions", 1384 Ctx: "mssql.database_active_transactions", 1385 Priority: prioMSSQLDatabaseActiveTransactions, 1386 Dims: module.Dims{ 1387 {ID: "mssql_db_%s_instance_%s_active_transactions", Name: "active"}, 1388 }, 1389 } 1390 mssqlDatabaseBackupRestoreOperationsChart = module.Chart{ 1391 OverModule: "mssql", 1392 ID: "mssql_db_%s_instance_%s_backup_restore_operations", 1393 Title: "Backup IO per database", 1394 Units: "operations/s", 1395 Fam: "transactions", 1396 Ctx: "mssql.database_backup_restore_operations", 1397 Priority: prioMSSQLDatabaseBackupRestoreOperations, 1398 Dims: module.Dims{ 1399 {ID: "mssql_db_%s_instance_%s_backup_restore_operations", Name: "backup", Algo: module.Incremental}, 1400 }, 1401 } 1402 mssqlDatabaseSizeChart = module.Chart{ 1403 OverModule: "mssql", 1404 ID: "mssql_db_%s_instance_%s_data_files_size", 1405 Title: "Current database size", 1406 Units: "bytes", 1407 Fam: "size", 1408 Ctx: "mssql.database_data_files_size", 1409 Priority: prioMSSQLDatabaseDataFileSize, 1410 Dims: module.Dims{ 1411 {ID: "mssql_db_%s_instance_%s_data_files_size_bytes", Name: "size"}, 1412 }, 1413 } 1414 mssqlDatabaseLogFlushedChart = module.Chart{ 1415 OverModule: "mssql", 1416 ID: "mssql_db_%s_instance_%s_log_flushed", 1417 Title: "Log flushed", 1418 Units: "bytes/s", 1419 Fam: "transactions", 1420 Ctx: "mssql.database_log_flushed", 1421 Priority: prioMSSQLDatabaseLogFlushed, 1422 Dims: module.Dims{ 1423 {ID: "mssql_db_%s_instance_%s_log_flushed_bytes", Name: "flushed", Algo: module.Incremental}, 1424 }, 1425 } 1426 mssqlDatabaseLogFlushesChart = module.Chart{ 1427 OverModule: "mssql", 1428 ID: "mssql_db_%s_instance_%s_log_flushes", 1429 Title: "Log flushes", 1430 Units: "flushes/s", 1431 Fam: "transactions", 1432 Ctx: "mssql.database_log_flushes", 1433 Priority: prioMSSQLDatabaseLogFlushes, 1434 Dims: module.Dims{ 1435 {ID: "mssql_db_%s_instance_%s_log_flushes", Name: "log", Algo: module.Incremental}, 1436 }, 1437 } 1438 mssqlDatabaseTransactionsChart = module.Chart{ 1439 OverModule: "mssql", 1440 ID: "mssql_db_%s_instance_%s_transactions", 1441 Title: "Transactions", 1442 Units: "transactions/s", 1443 Fam: "transactions", 1444 Ctx: "mssql.database_transactions", 1445 Priority: prioMSSQLDatabaseTransactions, 1446 Dims: module.Dims{ 1447 {ID: "mssql_db_%s_instance_%s_transactions", Name: "transactions", Algo: module.Incremental}, 1448 }, 1449 } 1450 mssqlDatabaseWriteTransactionsChart = module.Chart{ 1451 OverModule: "mssql", 1452 ID: "mssql_db_%s_instance_%s_write_transactions", 1453 Title: "Write transactions", 1454 Units: "transactions/s", 1455 Fam: "transactions", 1456 Ctx: "mssql.database_write_transactions", 1457 Priority: prioMSSQLDatabaseWriteTransactions, 1458 Dims: module.Dims{ 1459 {ID: "mssql_db_%s_instance_%s_write_transactions", Name: "write", Algo: module.Incremental}, 1460 }, 1461 } 1462 ) 1463 1464 // AD 1465 var ( 1466 adCharts = module.Charts{ 1467 adDatabaseOperationsChart.Copy(), 1468 adDirectoryOperationsChart.Copy(), 1469 adNameCacheLookupsChart.Copy(), 1470 adNameCacheHitsChart.Copy(), 1471 adDRAReplicationIntersiteCompressedTrafficChart.Copy(), 1472 adDRAReplicationIntrasiteCompressedTrafficChart.Copy(), 1473 adDRAReplicationSyncObjectRemainingChart.Copy(), 1474 adDRAReplicationObjectsFilteredChart.Copy(), 1475 adDRAReplicationPropertiesUpdatedChart.Copy(), 1476 adDRAReplicationPropertiesFilteredChart.Copy(), 1477 adDRAReplicationPendingSyncsChart.Copy(), 1478 adDRAReplicationSyncRequestsChart.Copy(), 1479 adDirectoryServiceThreadsChart.Copy(), 1480 adLDAPLastBindTimeChart.Copy(), 1481 adBindsTotalChart.Copy(), 1482 adLDAPSearchesChart.Copy(), 1483 adATQAverageRequestLatencyChart.Copy(), 1484 adATQOutstandingRequestsChart.Copy(), 1485 } 1486 adDatabaseOperationsChart = module.Chart{ 1487 OverModule: "ad", 1488 ID: "ad_database_operations", 1489 Title: "AD database operations", 1490 Units: "operations/s", 1491 Fam: "database", 1492 Ctx: "ad.database_operations", 1493 Priority: prioADDatabaseOperations, 1494 Dims: module.Dims{ 1495 {ID: "ad_database_operations_total_add", Name: "add", Algo: module.Incremental}, 1496 {ID: "ad_database_operations_total_delete", Name: "delete", Algo: module.Incremental}, 1497 {ID: "ad_database_operations_total_modify", Name: "modify", Algo: module.Incremental}, 1498 {ID: "ad_database_operations_total_recycle", Name: "recycle", Algo: module.Incremental}, 1499 }, 1500 } 1501 adDirectoryOperationsChart = module.Chart{ 1502 OverModule: "ad", 1503 ID: "ad_directory_operations_read", 1504 Title: "AD directory operations", 1505 Units: "operations/s", 1506 Fam: "database", 1507 Ctx: "ad.directory_operations", 1508 Priority: prioADDirectoryOperations, 1509 Dims: module.Dims{ 1510 {ID: "ad_directory_operations_total_read", Name: "read", Algo: module.Incremental}, 1511 {ID: "ad_directory_operations_total_write", Name: "write", Algo: module.Incremental}, 1512 {ID: "ad_directory_operations_total_search", Name: "search", Algo: module.Incremental}, 1513 }, 1514 } 1515 adNameCacheLookupsChart = module.Chart{ 1516 OverModule: "ad", 1517 ID: "ad_name_cache_lookups", 1518 Title: "Name cache lookups", 1519 Units: "lookups/s", 1520 Fam: "database", 1521 Ctx: "ad.name_cache_lookups", 1522 Priority: prioADNameCacheLookups, 1523 Dims: module.Dims{ 1524 {ID: "ad_name_cache_lookups_total", Name: "lookups", Algo: module.Incremental}, 1525 }, 1526 } 1527 adNameCacheHitsChart = module.Chart{ 1528 OverModule: "ad", 1529 ID: "ad_name_cache_hits", 1530 Title: "Name cache hits", 1531 Units: "hits/s", 1532 Fam: "database", 1533 Ctx: "ad.name_cache_hits", 1534 Priority: prioADCacheHits, 1535 Dims: module.Dims{ 1536 {ID: "ad_name_cache_hits_total", Name: "hits", Algo: module.Incremental}, 1537 }, 1538 } 1539 adDRAReplicationIntersiteCompressedTrafficChart = module.Chart{ 1540 OverModule: "ad", 1541 ID: "ad_dra_replication_intersite_compressed_traffic", 1542 Title: "DRA replication compressed traffic withing site", 1543 Units: "bytes/s", 1544 Fam: "replication", 1545 Ctx: "ad.dra_replication_intersite_compressed_traffic", 1546 Priority: prioADDRAReplicationIntersiteCompressedTraffic, 1547 Type: module.Area, 1548 Dims: module.Dims{ 1549 {ID: "ad_replication_data_intersite_bytes_total_inbound", Name: "inbound", Algo: module.Incremental}, 1550 {ID: "ad_replication_data_intersite_bytes_total_outbound", Name: "outbound", Algo: module.Incremental, Mul: -1}, 1551 }, 1552 } 1553 adDRAReplicationIntrasiteCompressedTrafficChart = module.Chart{ 1554 OverModule: "ad", 1555 ID: "ad_dra_replication_intrasite_compressed_traffic", 1556 Title: "DRA replication compressed traffic between sites", 1557 Units: "bytes/s", 1558 Fam: "replication", 1559 Ctx: "ad.dra_replication_intrasite_compressed_traffic", 1560 Priority: prioADDRAReplicationIntrasiteCompressedTraffic, 1561 Type: module.Area, 1562 Dims: module.Dims{ 1563 {ID: "ad_replication_data_intrasite_bytes_total_inbound", Name: "inbound", Algo: module.Incremental}, 1564 {ID: "ad_replication_data_intrasite_bytes_total_outbound", Name: "outbound", Algo: module.Incremental, Mul: -1}, 1565 }, 1566 } 1567 adDRAReplicationSyncObjectRemainingChart = module.Chart{ 1568 OverModule: "ad", 1569 ID: "ad_dra_replication_sync_objects_remaining", 1570 Title: "DRA replication full sync objects remaining", 1571 Units: "objects", 1572 Fam: "replication", 1573 Ctx: "ad.dra_replication_sync_objects_remaining", 1574 Priority: prioADDRAReplicationSyncObjectsRemaining, 1575 Dims: module.Dims{ 1576 {ID: "ad_replication_inbound_sync_objects_remaining", Name: "inbound"}, 1577 }, 1578 } 1579 adDRAReplicationObjectsFilteredChart = module.Chart{ 1580 OverModule: "ad", 1581 ID: "ad_dra_replication_objects_filtered", 1582 Title: "DRA replication objects filtered", 1583 Units: "objects/s", 1584 Fam: "replication", 1585 Ctx: "ad.dra_replication_objects_filtered", 1586 Priority: prioADDRAReplicationObjectsFiltered, 1587 Dims: module.Dims{ 1588 {ID: "ad_replication_inbound_objects_filtered_total", Name: "inbound", Algo: module.Incremental}, 1589 }, 1590 } 1591 adDRAReplicationPropertiesUpdatedChart = module.Chart{ 1592 OverModule: "ad", 1593 ID: "ad_dra_replication_properties_updated", 1594 Title: "DRA replication properties updated", 1595 Units: "properties/s", 1596 Fam: "replication", 1597 Ctx: "ad.dra_replication_properties_updated", 1598 Priority: prioADDRAReplicationPropertiesUpdated, 1599 Dims: module.Dims{ 1600 {ID: "ad_replication_inbound_properties_updated_total", Name: "inbound", Algo: module.Incremental}, 1601 }, 1602 } 1603 adDRAReplicationPropertiesFilteredChart = module.Chart{ 1604 OverModule: "ad", 1605 ID: "ad_dra_replication_properties_filtered", 1606 Title: "DRA replication properties filtered", 1607 Units: "properties/s", 1608 Fam: "replication", 1609 Ctx: "ad.dra_replication_properties_filtered", 1610 Priority: prioADDRAReplicationPropertiesFiltered, 1611 Dims: module.Dims{ 1612 {ID: "ad_replication_inbound_properties_filtered_total", Name: "inbound", Algo: module.Incremental}, 1613 }, 1614 } 1615 adDRAReplicationPendingSyncsChart = module.Chart{ 1616 OverModule: "ad", 1617 ID: "ad_dra_replication_pending_syncs", 1618 Title: "DRA replication pending syncs", 1619 Units: "syncs", 1620 Fam: "replication", 1621 Ctx: "ad.dra_replication_pending_syncs", 1622 Priority: prioADReplicationPendingSyncs, 1623 Dims: module.Dims{ 1624 {ID: "ad_replication_pending_synchronizations", Name: "pending"}, 1625 }, 1626 } 1627 adDRAReplicationSyncRequestsChart = module.Chart{ 1628 OverModule: "ad", 1629 ID: "ad_dra_replication_sync_requests", 1630 Title: "DRA replication sync requests", 1631 Units: "requests/s", 1632 Fam: "replication", 1633 Ctx: "ad.dra_replication_sync_requests", 1634 Priority: prioADDRASyncRequests, 1635 Dims: module.Dims{ 1636 {ID: "ad_replication_sync_requests_total", Name: "request", Algo: module.Incremental}, 1637 }, 1638 } 1639 adDirectoryServiceThreadsChart = module.Chart{ 1640 OverModule: "ad", 1641 ID: "ad_ds_threads", 1642 Title: "Directory Service threads", 1643 Units: "threads", 1644 Fam: "replication", 1645 Ctx: "ad.ds_threads", 1646 Priority: prioADDirectoryServiceThreadsInUse, 1647 Dims: module.Dims{ 1648 {ID: "ad_directory_service_threads", Name: "in_use"}, 1649 }, 1650 } 1651 adLDAPLastBindTimeChart = module.Chart{ 1652 OverModule: "ad", 1653 ID: "ad_ldap_last_bind_time", 1654 Title: "LDAP last successful bind time", 1655 Units: "seconds", 1656 Fam: "bind", 1657 Ctx: "ad.ldap_last_bind_time", 1658 Priority: prioADLDAPBindTime, 1659 Dims: module.Dims{ 1660 {ID: "ad_ldap_last_bind_time_seconds", Name: "last_bind"}, 1661 }, 1662 } 1663 adBindsTotalChart = module.Chart{ 1664 OverModule: "ad", 1665 ID: "ad_binds", 1666 Title: "Successful binds", 1667 Units: "bind/s", 1668 Fam: "bind", 1669 Ctx: "ad.binds", 1670 Priority: prioADBindsTotal, 1671 Dims: module.Dims{ 1672 {ID: "ad_binds_total", Name: "binds", Algo: module.Incremental}, 1673 }, 1674 } 1675 adLDAPSearchesChart = module.Chart{ 1676 OverModule: "ad", 1677 ID: "ad_ldap_searches", 1678 Title: "LDAP client search operations", 1679 Units: "searches/s", 1680 Fam: "ldap", 1681 Ctx: "ad.ldap_searches", 1682 Priority: prioADLDAPSearchesTotal, 1683 Dims: module.Dims{ 1684 {ID: "ad_ldap_searches_total", Name: "searches", Algo: module.Incremental}, 1685 }, 1686 } 1687 // https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/understanding-atq-performance-counters-yet-another-twist-in-the/ba-p/400293 1688 adATQAverageRequestLatencyChart = module.Chart{ 1689 OverModule: "ad", 1690 ID: "ad_atq_average_request_latency", 1691 Title: "Average request processing time", 1692 Units: "seconds", 1693 Fam: "queue", 1694 Ctx: "ad.atq_average_request_latency", 1695 Priority: prioADATQAverageRequestLatency, 1696 Dims: module.Dims{ 1697 {ID: "ad_atq_average_request_latency", Name: "time", Div: precision}, 1698 }, 1699 } 1700 adATQOutstandingRequestsChart = module.Chart{ 1701 OverModule: "ad", 1702 ID: "ad_atq_outstanding_requests", 1703 Title: "Outstanding requests", 1704 Units: "requests", 1705 Fam: "queue", 1706 Ctx: "ad.atq_outstanding_requests", 1707 Priority: prioADATQOutstandingRequests, 1708 Dims: module.Dims{ 1709 {ID: "ad_atq_outstanding_requests", Name: "outstanding"}, 1710 }, 1711 } 1712 ) 1713 1714 // AD CS 1715 var ( 1716 adcsCertTemplateChartsTmpl = module.Charts{ 1717 adcsCertTemplateRequestsChartTmpl.Copy(), 1718 adcsCertTemplateFailedRequestsChartTmpl.Copy(), 1719 adcsCertTemplateIssuedRequestsChartTmpl.Copy(), 1720 adcsCertTemplatePendingRequestsChartTmpl.Copy(), 1721 adcsCertTemplateRequestProcessingTimeChartTmpl.Copy(), 1722 1723 adcsCertTemplateRetrievalsChartTmpl.Copy(), 1724 adcsCertificateRetrievalsTimeChartTmpl.Copy(), 1725 adcsCertTemplateRequestCryptoSigningTimeChartTmpl.Copy(), 1726 adcsCertTemplateRequestPolicyModuleProcessingTimeChartTmpl.Copy(), 1727 adcsCertTemplateChallengeResponseChartTmpl.Copy(), 1728 adcsCertTemplateChallengeResponseProcessingTimeChartTmpl.Copy(), 1729 adcsCertTemplateSignedCertificateTimestampListsChartTmpl.Copy(), 1730 adcsCertTemplateSignedCertificateTimestampListProcessingTimeChartTmpl.Copy(), 1731 } 1732 adcsCertTemplateRequestsChartTmpl = module.Chart{ 1733 OverModule: "adcs", 1734 ID: "adcs_cert_template%s_requests", 1735 Title: "Certificate requests processed", 1736 Units: "requests/s", 1737 Fam: "requests", 1738 Ctx: "adcs.cert_template_requests", 1739 Priority: prioADCSCertTemplateRequests, 1740 Dims: module.Dims{ 1741 {ID: "adcs_cert_template_%s_requests_total", Name: "requests", Algo: module.Incremental}, 1742 }, 1743 } 1744 adcsCertTemplateFailedRequestsChartTmpl = module.Chart{ 1745 OverModule: "adcs", 1746 ID: "adcs_cert_template_%s_failed_requests", 1747 Title: "Certificate failed requests processed", 1748 Units: "requests/s", 1749 Fam: "requests", 1750 Ctx: "adcs.cert_template_failed_requests", 1751 Priority: prioADCSCertTemplateFailedRequests, 1752 Dims: module.Dims{ 1753 {ID: "adcs_cert_template_%s_failed_requests_total", Name: "failed", Algo: module.Incremental}, 1754 }, 1755 } 1756 adcsCertTemplateIssuedRequestsChartTmpl = module.Chart{ 1757 OverModule: "adcs", 1758 ID: "adcs_cert_template_%s_issued_requests", 1759 Title: "Certificate issued requests processed", 1760 Units: "requests/s", 1761 Fam: "requests", 1762 Ctx: "adcs.cert_template_issued_requests", 1763 Priority: prioADCSCertTemplateIssuesRequests, 1764 Dims: module.Dims{ 1765 {ID: "adcs_cert_template_%s_issued_requests_total", Name: "issued", Algo: module.Incremental}, 1766 }, 1767 } 1768 adcsCertTemplatePendingRequestsChartTmpl = module.Chart{ 1769 OverModule: "adcs", 1770 ID: "adcs_cert_template_%s_pending_requests", 1771 Title: "Certificate pending requests processed", 1772 Units: "requests/s", 1773 Fam: "requests", 1774 Ctx: "adcs.cert_template_pending_requests", 1775 Priority: prioADCSCertTemplatePendingRequests, 1776 Dims: module.Dims{ 1777 {ID: "adcs_cert_template_%s_pending_requests_total", Name: "pending", Algo: module.Incremental}, 1778 }, 1779 } 1780 adcsCertTemplateRequestProcessingTimeChartTmpl = module.Chart{ 1781 OverModule: "adcs", 1782 ID: "adcs_cert_template_%s_request_processing_time", 1783 Title: "Certificate last request processing time", 1784 Units: "seconds", 1785 Fam: "requests", 1786 Ctx: "adcs.cert_template_request_processing_time", 1787 Priority: prioADCSCertTemplateRequestProcessingTime, 1788 Dims: module.Dims{ 1789 {ID: "adcs_cert_template_%s_request_processing_time_seconds", Name: "processing_time", Div: precision}, 1790 }, 1791 } 1792 adcsCertTemplateChallengeResponseChartTmpl = module.Chart{ 1793 OverModule: "adcs", 1794 ID: "adcs_cert_template_%s_challenge_responses", 1795 Title: "Certificate challenge responses", 1796 Units: "responses/s", 1797 Fam: "responses", 1798 Ctx: "adcs.cert_template_challenge_responses", 1799 Priority: prioADCSCertTemplateChallengeResponses, 1800 Dims: module.Dims{ 1801 {ID: "adcs_cert_template_%s_challenge_responses_total", Name: "challenge", Algo: module.Incremental}, 1802 }, 1803 } 1804 adcsCertTemplateRetrievalsChartTmpl = module.Chart{ 1805 OverModule: "adcs", 1806 ID: "adcs_cert_template_%s_retrievals", 1807 Title: "Total of certificate retrievals", 1808 Units: "retrievals/s", 1809 Fam: "retrievals", 1810 Ctx: "adcs.cert_template_retrievals", 1811 Priority: prioADCSCertTemplateRetrievals, 1812 Dims: module.Dims{ 1813 {ID: "adcs_cert_template_%s_retrievals_total", Name: "retrievals", Algo: module.Incremental}, 1814 }, 1815 } 1816 adcsCertificateRetrievalsTimeChartTmpl = module.Chart{ 1817 OverModule: "adcs", 1818 ID: "adcs_cert_template_%s_retrievals_processing_time", 1819 Title: "Certificate last retrieval processing time", 1820 Units: "seconds", 1821 Fam: "retrievals", 1822 Ctx: "adcs.cert_template_retrieval_processing_time", 1823 Priority: prioADCSCertTemplateRetrievalProcessingTime, 1824 Dims: module.Dims{ 1825 {ID: "adcs_cert_template_%s_retrievals_processing_time_seconds", Name: "processing_time", Div: precision}, 1826 }, 1827 } 1828 adcsCertTemplateRequestCryptoSigningTimeChartTmpl = module.Chart{ 1829 OverModule: "adcs", 1830 ID: "adcs_cert_template_%s_request_cryptographic_signing_time", 1831 Title: "Certificate last signing operation request time", 1832 Units: "seconds", 1833 Fam: "timings", 1834 Ctx: "adcs.cert_template_request_cryptographic_signing_time", 1835 Priority: prioADCSCertTemplateRequestCryptoSigningTime, 1836 Dims: module.Dims{ 1837 {ID: "adcs_cert_template_%s_request_cryptographic_signing_time_seconds", Name: "singing_time", Div: precision}, 1838 }, 1839 } 1840 adcsCertTemplateRequestPolicyModuleProcessingTimeChartTmpl = module.Chart{ 1841 OverModule: "adcs", 1842 ID: "adcs_cert_template_%s_request_policy_module_processing_time", 1843 Title: "Certificate last policy module processing request time", 1844 Units: "seconds", 1845 Fam: "timings", 1846 Ctx: "adcs.cert_template_request_policy_module_processing", 1847 Priority: prioADCSCertTemplateRequestPolicyModuleProcessingTime, 1848 Dims: module.Dims{ 1849 {ID: "adcs_cert_template_%s_request_policy_module_processing_time_seconds", Name: "processing_time", Div: precision}, 1850 }, 1851 } 1852 adcsCertTemplateChallengeResponseProcessingTimeChartTmpl = module.Chart{ 1853 OverModule: "adcs", 1854 ID: "adcs_cert_template_%s_challenge_response_processing_time", 1855 Title: "Certificate last challenge response time", 1856 Units: "seconds", 1857 Fam: "timings", 1858 Ctx: "adcs.cert_template_challenge_response_processing_time", 1859 Priority: prioADCSCertTemplateChallengeResponseProcessingTime, 1860 Dims: module.Dims{ 1861 {ID: "adcs_cert_template_%s_challenge_response_processing_time_seconds", Name: "processing_time", Div: precision}, 1862 }, 1863 } 1864 adcsCertTemplateSignedCertificateTimestampListsChartTmpl = module.Chart{ 1865 OverModule: "adcs", 1866 ID: "adcs_cert_template_%s_signed_certificate_timestamp_lists", 1867 Title: "Certificate Signed Certificate Timestamp Lists processed", 1868 Units: "lists/s", 1869 Fam: "timings", 1870 Ctx: "adcs.cert_template_signed_certificate_timestamp_lists", 1871 Priority: prioADCSCertTemplateSignedCertificateTimestampLists, 1872 Dims: module.Dims{ 1873 {ID: "adcs_cert_template_%s_signed_certificate_timestamp_lists_total", Name: "processed", Algo: module.Incremental}, 1874 }, 1875 } 1876 adcsCertTemplateSignedCertificateTimestampListProcessingTimeChartTmpl = module.Chart{ 1877 OverModule: "adcs", 1878 ID: "adcs_cert_template_%s_signed_certificate_timestamp_list_processing_time", 1879 Title: "Certificate last Signed Certificate Timestamp List process time", 1880 Units: "seconds", 1881 Fam: "timings", 1882 Ctx: "adcs.cert_template_signed_certificate_timestamp_list_processing_time", 1883 Priority: prioADCSCertTemplateSignedCertificateTimestampListProcessingTime, 1884 Dims: module.Dims{ 1885 {ID: "adcs_cert_template_%s_signed_certificate_timestamp_list_processing_time_seconds", Name: "processing_time", Div: precision}, 1886 }, 1887 } 1888 ) 1889 1890 // AD FS 1891 var ( 1892 adfsCharts = module.Charts{ 1893 adfsADLoginConnectionFailuresChart.Copy(), 1894 adfsCertificateAuthenticationsChart.Copy(), 1895 adfsDBArtifactFailuresChart.Copy(), 1896 adfsDBArtifactQueryTimeSecondsChart.Copy(), 1897 adfsDBConfigFailuresChart.Copy(), 1898 adfsDBConfigQueryTimeSecondsChart.Copy(), 1899 adfsDeviceAuthenticationsChart.Copy(), 1900 adfsExternalAuthenticationsChart.Copy(), 1901 adfsFederatedAuthenticationsChart.Copy(), 1902 adfsFederationMetadataRequestsChart.Copy(), 1903 1904 adfsOAuthAuthorizationRequestsChart.Copy(), 1905 adfsOAuthClientAuthenticationsChart.Copy(), 1906 adfsOAuthClientCredentialRequestsChart.Copy(), 1907 adfsOAuthClientPrivKeyJwtAuthenticationsChart.Copy(), 1908 adfsOAuthClientSecretBasicAuthenticationsChart.Copy(), 1909 adfsOAuthClientSecretPostAuthenticationsChart.Copy(), 1910 adfsOAuthClientWindowsAuthenticationsChart.Copy(), 1911 adfsOAuthLogonCertificateRequestsChart.Copy(), 1912 adfsOAuthPasswordGrantRequestsChart.Copy(), 1913 adfsOAuthTokenRequestsChart.Copy(), 1914 1915 adfsPassiveRequestsChart.Copy(), 1916 adfsPassportAuthenticationsChart.Copy(), 1917 adfsPasswordChangeChart.Copy(), 1918 adfsSAMLPTokenRequestsChart.Copy(), 1919 adfsSSOAuthenticationsChart.Copy(), 1920 adfsTokenRequestsChart.Copy(), 1921 adfsUserPasswordAuthenticationsChart.Copy(), 1922 adfsWindowsIntegratedAuthenticationsChart.Copy(), 1923 adfsWSFedTokenRequestsSuccessChart.Copy(), 1924 adfsWSTrustTokenRequestsSuccessChart.Copy(), 1925 } 1926 1927 adfsADLoginConnectionFailuresChart = module.Chart{ 1928 OverModule: "adfs", 1929 ID: "adfs_ad_login_connection_failures", 1930 Title: "Connection failures", 1931 Units: "failures/s", 1932 Fam: "ad", 1933 Ctx: "adfs.ad_login_connection_failures", 1934 Priority: prioADFSADLoginConnectionFailures, 1935 Dims: module.Dims{ 1936 {ID: "adfs_ad_login_connection_failures_total", Name: "connection", Algo: module.Incremental}, 1937 }, 1938 } 1939 adfsCertificateAuthenticationsChart = module.Chart{ 1940 OverModule: "adfs", 1941 ID: "adfs_certificate_authentications", 1942 Title: "User Certificate authentications", 1943 Units: "authentications/s", 1944 Fam: "auth", 1945 Ctx: "adfs.certificate_authentications", 1946 Priority: prioADFSCertificateAuthentications, 1947 Dims: module.Dims{ 1948 {ID: "adfs_certificate_authentications_total", Name: "authentications", Algo: module.Incremental}, 1949 }, 1950 } 1951 1952 adfsDBArtifactFailuresChart = module.Chart{ 1953 OverModule: "adfs", 1954 ID: "adfs_db_artifact_failures", 1955 Title: "Connection failures to the artifact database", 1956 Units: "failures/s", 1957 Fam: "db artifact", 1958 Ctx: "adfs.db_artifact_failures", 1959 Priority: prioADFSDBArtifactFailures, 1960 Dims: module.Dims{ 1961 {ID: "adfs_db_artifact_failure_total", Name: "connection", Algo: module.Incremental}, 1962 }, 1963 } 1964 adfsDBArtifactQueryTimeSecondsChart = module.Chart{ 1965 OverModule: "adfs", 1966 ID: "adfs_db_artifact_query_time_seconds", 1967 Title: "Time taken for an artifact database query", 1968 Units: "seconds/s", 1969 Fam: "db artifact", 1970 Ctx: "adfs.db_artifact_query_time_seconds", 1971 Priority: prioADFSDBArtifactQueryTimeSeconds, 1972 Dims: module.Dims{ 1973 {ID: "adfs_db_artifact_query_time_seconds_total", Name: "query_time", Algo: module.Incremental, Div: precision}, 1974 }, 1975 } 1976 adfsDBConfigFailuresChart = module.Chart{ 1977 OverModule: "adfs", 1978 ID: "adfs_db_config_failures", 1979 Title: "Connection failures to the configuration database", 1980 Units: "failures/s", 1981 Fam: "db config", 1982 Ctx: "adfs.db_config_failures", 1983 Priority: prioADFSDBConfigFailures, 1984 Dims: module.Dims{ 1985 {ID: "adfs_db_config_failure_total", Name: "connection", Algo: module.Incremental}, 1986 }, 1987 } 1988 adfsDBConfigQueryTimeSecondsChart = module.Chart{ 1989 OverModule: "adfs", 1990 ID: "adfs_db_config_query_time_seconds", 1991 Title: "Time taken for a configuration database query", 1992 Units: "seconds/s", 1993 Fam: "db config", 1994 Ctx: "adfs.db_config_query_time_seconds", 1995 Priority: prioADFSDBConfigQueryTimeSeconds, 1996 Dims: module.Dims{ 1997 {ID: "adfs_db_config_query_time_seconds_total", Name: "query_time", Algo: module.Incremental, Div: precision}, 1998 }, 1999 } 2000 adfsDeviceAuthenticationsChart = module.Chart{ 2001 OverModule: "adfs", 2002 ID: "adfs_device_authentications", 2003 Title: "Device authentications", 2004 Units: "authentications/s", 2005 Fam: "auth", 2006 Ctx: "adfs.device_authentications", 2007 Priority: prioADFSDeviceAuthentications, 2008 Dims: module.Dims{ 2009 {ID: "adfs_device_authentications_total", Name: "authentications", Algo: module.Incremental}, 2010 }, 2011 } 2012 adfsExternalAuthenticationsChart = module.Chart{ 2013 OverModule: "adfs", 2014 ID: "adfs_external_authentications", 2015 Title: "Authentications from external MFA providers", 2016 Units: "authentications/s", 2017 Fam: "auth", 2018 Ctx: "adfs.external_authentications", 2019 Priority: prioADFSExternalAuthentications, 2020 Dims: module.Dims{ 2021 {ID: "adfs_external_authentications_success_total", Name: "success", Algo: module.Incremental}, 2022 {ID: "adfs_external_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2023 }, 2024 } 2025 adfsFederatedAuthenticationsChart = module.Chart{ 2026 OverModule: "adfs", 2027 ID: "adfs_federated_authentications", 2028 Title: "Authentications from Federated Sources", 2029 Units: "authentications/s", 2030 Fam: "auth", 2031 Ctx: "adfs.federated_authentications", 2032 Priority: prioADFSFederatedAuthentications, 2033 Dims: module.Dims{ 2034 {ID: "adfs_federated_authentications_total", Name: "authentications", Algo: module.Incremental}, 2035 }, 2036 } 2037 adfsFederationMetadataRequestsChart = module.Chart{ 2038 OverModule: "adfs", 2039 ID: "adfs_federation_metadata_requests", 2040 Title: "Federation Metadata requests", 2041 Units: "requests/s", 2042 Fam: "requests", 2043 Ctx: "adfs.federation_metadata_requests", 2044 Priority: prioADFSFederationMetadataRequests, 2045 Dims: module.Dims{ 2046 {ID: "adfs_federation_metadata_requests_total", Name: "requests", Algo: module.Incremental}, 2047 }, 2048 } 2049 2050 adfsOAuthAuthorizationRequestsChart = module.Chart{ 2051 OverModule: "adfs", 2052 ID: "adfs_oauth_authorization_requests", 2053 Title: "Incoming requests to the OAuth Authorization endpoint", 2054 Units: "requests/s", 2055 Fam: "oauth", 2056 Ctx: "adfs.oauth_authorization_requests", 2057 Priority: prioADFSOauthAuthorizationRequests, 2058 Dims: module.Dims{ 2059 {ID: "adfs_oauth_authorization_requests_total", Name: "requests", Algo: module.Incremental}, 2060 }, 2061 } 2062 adfsOAuthClientAuthenticationsChart = module.Chart{ 2063 OverModule: "adfs", 2064 ID: "adfs_oauth_client_authentications", 2065 Title: "OAuth client authentications", 2066 Units: "authentications/s", 2067 Fam: "oauth", 2068 Ctx: "adfs.oauth_client_authentications", 2069 Priority: prioADFSOauthClientAuthentications, 2070 Dims: module.Dims{ 2071 {ID: "adfs_oauth_client_authentication_success_total", Name: "success", Algo: module.Incremental}, 2072 {ID: "adfs_oauth_client_authentication_failure_total", Name: "failure", Algo: module.Incremental}, 2073 }, 2074 } 2075 adfsOAuthClientCredentialRequestsChart = module.Chart{ 2076 OverModule: "adfs", 2077 ID: "adfs_oauth_client_credentials_requests", 2078 Title: "OAuth client credentials requests", 2079 Units: "requests/s", 2080 Fam: "oauth", 2081 Ctx: "adfs.oauth_client_credentials_requests", 2082 Priority: prioADFSOauthClientCredentials, 2083 Dims: module.Dims{ 2084 {ID: "adfs_oauth_client_credentials_success_total", Name: "success", Algo: module.Incremental}, 2085 {ID: "adfs_oauth_client_credentials_failure_total", Name: "failure", Algo: module.Incremental}, 2086 }, 2087 } 2088 adfsOAuthClientPrivKeyJwtAuthenticationsChart = module.Chart{ 2089 OverModule: "adfs", 2090 ID: "adfs_oauth_client_privkey_jwt_authentications", 2091 Title: "OAuth client private key JWT authentications", 2092 Units: "authentications/s", 2093 Fam: "oauth", 2094 Ctx: "adfs.oauth_client_privkey_jwt_authentications", 2095 Priority: prioADFSOauthClientPrivkeyJwtAuthentication, 2096 Dims: module.Dims{ 2097 {ID: "adfs_oauth_client_privkey_jwt_authentications_success_total", Name: "success", Algo: module.Incremental}, 2098 {ID: "adfs_oauth_client_privkey_jtw_authentication_failure_total", Name: "failure", Algo: module.Incremental}, 2099 }, 2100 } 2101 adfsOAuthClientSecretBasicAuthenticationsChart = module.Chart{ 2102 OverModule: "adfs", 2103 ID: "adfs_oauth_client_secret_basic_authentications", 2104 Title: "OAuth client secret basic authentications", 2105 Units: "authentications/s", 2106 Fam: "oauth", 2107 Ctx: "adfs.oauth_client_secret_basic_authentications", 2108 Priority: prioADFSOauthClientSecretBasicAuthentications, 2109 Dims: module.Dims{ 2110 {ID: "adfs_oauth_client_secret_basic_authentications_success_total", Name: "success", Algo: module.Incremental}, 2111 {ID: "adfs_oauth_client_secret_basic_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2112 }, 2113 } 2114 adfsOAuthClientSecretPostAuthenticationsChart = module.Chart{ 2115 OverModule: "adfs", 2116 ID: "adfs_oauth_client_secret_post_authentications", 2117 Title: "OAuth client secret post authentications", 2118 Units: "authentications/s", 2119 Fam: "oauth", 2120 Ctx: "adfs.oauth_client_secret_post_authentications", 2121 Priority: prioADFSOauthClientSecretPostAuthentications, 2122 Dims: module.Dims{ 2123 {ID: "adfs_oauth_client_secret_post_authentications_success_total", Name: "success", Algo: module.Incremental}, 2124 {ID: "adfs_oauth_client_secret_post_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2125 }, 2126 } 2127 adfsOAuthClientWindowsAuthenticationsChart = module.Chart{ 2128 OverModule: "adfs", 2129 ID: "adfs_oauth_client_windows_authentications", 2130 Title: "OAuth client windows integrated authentications", 2131 Units: "authentications/s", 2132 Fam: "oauth", 2133 Ctx: "adfs.oauth_client_windows_authentications", 2134 Priority: prioADFSOauthClientWindowsAuthentications, 2135 Dims: module.Dims{ 2136 {ID: "adfs_oauth_client_windows_authentications_success_total", Name: "success", Algo: module.Incremental}, 2137 {ID: "adfs_oauth_client_windows_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2138 }, 2139 } 2140 adfsOAuthLogonCertificateRequestsChart = module.Chart{ 2141 OverModule: "adfs", 2142 ID: "adfs_oauth_logon_certificate_requests", 2143 Title: "OAuth logon certificate requests", 2144 Units: "requests/s", 2145 Fam: "oauth", 2146 Ctx: "adfs.oauth_logon_certificate_requests", 2147 Priority: prioADFSOauthLogonCertificateRequests, 2148 Dims: module.Dims{ 2149 {ID: "adfs_oauth_logon_certificate_token_requests_success_total", Name: "success", Algo: module.Incremental}, 2150 {ID: "adfs_oauth_logon_certificate_requests_failure_total", Name: "failure", Algo: module.Incremental}, 2151 }, 2152 } 2153 adfsOAuthPasswordGrantRequestsChart = module.Chart{ 2154 OverModule: "adfs", 2155 ID: "adfs_oauth_password_grant_requests", 2156 Title: "OAuth password grant requests", 2157 Units: "requests/s", 2158 Fam: "oauth", 2159 Ctx: "adfs.oauth_password_grant_requests", 2160 Priority: prioADFSOauthPasswordGrantRequests, 2161 Dims: module.Dims{ 2162 {ID: "adfs_oauth_password_grant_requests_success_total", Name: "success", Algo: module.Incremental}, 2163 {ID: "adfs_oauth_password_grant_requests_failure_total", Name: "failure", Algo: module.Incremental}, 2164 }, 2165 } 2166 adfsOAuthTokenRequestsChart = module.Chart{ 2167 OverModule: "adfs", 2168 ID: "adfs_oauth_token_requests_success", 2169 Title: "Successful RP token requests over OAuth protocol", 2170 Units: "requests/s", 2171 Fam: "oauth", 2172 Ctx: "adfs.oauth_token_requests_success", 2173 Priority: prioADFSOauthTokenRequestsSuccess, 2174 Dims: module.Dims{ 2175 {ID: "adfs_oauth_token_requests_success_total", Name: "success", Algo: module.Incremental}, 2176 }, 2177 } 2178 2179 adfsPassiveRequestsChart = module.Chart{ 2180 OverModule: "adfs", 2181 ID: "adfs_passive_requests", 2182 Title: "Passive requests", 2183 Units: "requests/s", 2184 Fam: "requests", 2185 Ctx: "adfs.passive_requests", 2186 Priority: prioADFSPassiveRequests, 2187 Dims: module.Dims{ 2188 {ID: "adfs_passive_requests_total", Name: "passive", Algo: module.Incremental}, 2189 }, 2190 } 2191 adfsPassportAuthenticationsChart = module.Chart{ 2192 OverModule: "adfs", 2193 ID: "adfs_passport_authentications", 2194 Title: "Microsoft Passport SSO authentications", 2195 Units: "authentications/s", 2196 Fam: "auth", 2197 Ctx: "adfs.passport_authentications", 2198 Priority: prioADFSPassportAuthentications, 2199 Dims: module.Dims{ 2200 {ID: "adfs_passport_authentications_total", Name: "passport", Algo: module.Incremental}, 2201 }, 2202 } 2203 adfsPasswordChangeChart = module.Chart{ 2204 OverModule: "adfs", 2205 ID: "adfs_password_change_requests", 2206 Title: "Password change requests", 2207 Units: "requests/s", 2208 Fam: "requests", 2209 Ctx: "adfs.password_change_requests", 2210 Priority: prioADFSPasswordChangeRequests, 2211 Dims: module.Dims{ 2212 {ID: "adfs_password_change_succeeded_total", Name: "success", Algo: module.Incremental}, 2213 {ID: "adfs_password_change_failed_total", Name: "failed", Algo: module.Incremental}, 2214 }, 2215 } 2216 adfsSAMLPTokenRequestsChart = module.Chart{ 2217 OverModule: "adfs", 2218 ID: "adfs_samlp_token_requests_success", 2219 Title: "Successful RP token requests over SAML-P protocol", 2220 Units: "requests/s", 2221 Fam: "requests", 2222 Ctx: "adfs.samlp_token_requests_success", 2223 Priority: prioADFSSAMLPTokenRequests, 2224 Dims: module.Dims{ 2225 {ID: "adfs_samlp_token_requests_success_total", Name: "success", Algo: module.Incremental}, 2226 }, 2227 } 2228 adfsWSTrustTokenRequestsSuccessChart = module.Chart{ 2229 OverModule: "adfs", 2230 ID: "adfs_wstrust_token_requests_success", 2231 Title: "Successful RP token requests over WS-Trust protocol", 2232 Units: "requests/s", 2233 Fam: "requests", 2234 Ctx: "adfs.wstrust_token_requests_success", 2235 Priority: prioADFSWSTrustTokenRequestsSuccess, 2236 Dims: module.Dims{ 2237 {ID: "adfs_wstrust_token_requests_success_total", Name: "success", Algo: module.Incremental}, 2238 }, 2239 } 2240 adfsSSOAuthenticationsChart = module.Chart{ 2241 OverModule: "adfs", 2242 ID: "adfs_sso_authentications", 2243 Title: "SSO authentications", 2244 Units: "authentications/s", 2245 Fam: "auth", 2246 Ctx: "adfs.sso_authentications", 2247 Priority: prioADFSSSOAuthentications, 2248 Dims: module.Dims{ 2249 {ID: "adfs_sso_authentications_success_total", Name: "success", Algo: module.Incremental}, 2250 {ID: "adfs_sso_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2251 }, 2252 } 2253 adfsTokenRequestsChart = module.Chart{ 2254 OverModule: "adfs", 2255 ID: "adfs_token_requests", 2256 Title: "Token access requests", 2257 Units: "requests/s", 2258 Fam: "requests", 2259 Ctx: "adfs.token_requests", 2260 Priority: prioADFSTokenRequests, 2261 Dims: module.Dims{ 2262 {ID: "adfs_token_requests_total", Name: "requests", Algo: module.Incremental}, 2263 }, 2264 } 2265 adfsUserPasswordAuthenticationsChart = module.Chart{ 2266 OverModule: "adfs", 2267 ID: "adfs_userpassword_authentications", 2268 Title: "AD U/P authentications", 2269 Units: "authentications/s", 2270 Fam: "auth", 2271 Ctx: "adfs.userpassword_authentications", 2272 Priority: prioADFSUserPasswordAuthentications, 2273 Dims: module.Dims{ 2274 {ID: "adfs_sso_authentications_success_total", Name: "success", Algo: module.Incremental}, 2275 {ID: "adfs_sso_authentications_failure_total", Name: "failure", Algo: module.Incremental}, 2276 }, 2277 } 2278 adfsWindowsIntegratedAuthenticationsChart = module.Chart{ 2279 OverModule: "adfs", 2280 ID: "adfs_windows_integrated_authentications", 2281 Title: "Windows integrated authentications using Kerberos or NTLM", 2282 Units: "authentications/s", 2283 Fam: "auth", 2284 Ctx: "adfs.windows_integrated_authentications", 2285 Priority: prioADFSWindowsIntegratedAuthentications, 2286 Dims: module.Dims{ 2287 {ID: "adfs_windows_integrated_authentications_total", Name: "authentications", Algo: module.Incremental}, 2288 }, 2289 } 2290 adfsWSFedTokenRequestsSuccessChart = module.Chart{ 2291 OverModule: "adfs", 2292 ID: "adfs_wsfed_token_requests_success", 2293 Title: "Successful RP token requests over WS-Fed protocol", 2294 Units: "requests/s", 2295 Fam: "requests", 2296 Ctx: "adfs.wsfed_token_requests_success", 2297 Priority: prioADFSWSFedTokenRequestsSuccess, 2298 Dims: module.Dims{ 2299 {ID: "adfs_wsfed_token_requests_success_total", Name: "success", Algo: module.Incremental}, 2300 }, 2301 } 2302 ) 2303 2304 // Exchange 2305 var ( 2306 exchangeCharts = module.Charts{ 2307 exchangeActiveSyncPingCMDsPendingChart.Copy(), 2308 exchangeActiveSyncRequestsChart.Copy(), 2309 exchangeActiveSyncCMDsChart.Copy(), 2310 exchangeAutoDiscoverRequestsChart.Copy(), 2311 exchangeAvailableServiceRequestsChart.Copy(), 2312 exchangeOWACurrentUniqueUsersChart.Copy(), 2313 exchangeOWARequestsChart.Copy(), 2314 exchangeRPCActiveUsersCountChart.Copy(), 2315 exchangeRPCAvgLatencyChart.Copy(), 2316 exchangeRPCConnectionChart.Copy(), 2317 exchangeRPCOperationsChart.Copy(), 2318 exchangeRPCRequestsChart.Copy(), 2319 exchangeRPCUserChart.Copy(), 2320 exchangeTransportQueuesActiveMailBoxDelivery.Copy(), 2321 exchangeTransportQueuesExternalActiveRemoteDelivery.Copy(), 2322 exchangeTransportQueuesExternalLargestDelivery.Copy(), 2323 exchangeTransportQueuesInternalActiveRemoteDelivery.Copy(), 2324 exchangeTransportQueuesInternalLargestDelivery.Copy(), 2325 exchangeTransportQueuesRetryMailboxDelivery.Copy(), 2326 exchangeTransportQueuesUnreachable.Copy(), 2327 exchangeTransportQueuesPoison.Copy(), 2328 } 2329 exchangeWorkloadChartsTmpl = module.Charts{ 2330 exchangeWorkloadActiveTasks.Copy(), 2331 exchangeWorkloadCompletedTasks.Copy(), 2332 exchangeWorkloadQueuedTasks.Copy(), 2333 exchangeWorkloadYieldedTasks.Copy(), 2334 2335 exchangeWorkloadActivityStatus.Copy(), 2336 } 2337 exchangeLDAPChartsTmpl = module.Charts{ 2338 exchangeLDAPLongRunningOPS.Copy(), 2339 exchangeLDAPReadTime.Copy(), 2340 exchangeLDAPSearchTime.Copy(), 2341 exchangeLDAPTimeoutErrors.Copy(), 2342 exchangeLDAPWriteTime.Copy(), 2343 } 2344 exchangeHTTPProxyChartsTmpl = module.Charts{ 2345 exchangeProxyAvgAuthLatency.Copy(), 2346 exchangeProxyAvgCasProcessingLatencySec.Copy(), 2347 exchangeProxyMailboxProxyFailureRace.Copy(), 2348 exchangeProxyMailboxServerLocatorAvgLatencySec.Copy(), 2349 exchangeProxyOutstandingProxyRequests.Copy(), 2350 exchangeProxyRequestsTotal.Copy(), 2351 } 2352 2353 exchangeActiveSyncPingCMDsPendingChart = module.Chart{ 2354 OverModule: "exchange", 2355 ID: "exchange_activesync_ping_cmds_pending", 2356 Title: "Ping commands pending in queue", 2357 Units: "commands", 2358 Fam: "sync", 2359 Ctx: "exchange.activesync_ping_cmds_pending", 2360 Priority: prioExchangeActiveSyncPingCMDsPending, 2361 Dims: module.Dims{ 2362 {ID: "exchange_activesync_ping_cmds_pending", Name: "pending"}, 2363 }, 2364 } 2365 exchangeActiveSyncRequestsChart = module.Chart{ 2366 OverModule: "exchange", 2367 ID: "exchange_activesync_requests", 2368 Title: "HTTP requests received from ASP.NET", 2369 Units: "requests/s", 2370 Fam: "sync", 2371 Ctx: "exchange.activesync_requests", 2372 Priority: prioExchangeActiveSyncRequests, 2373 Dims: module.Dims{ 2374 {ID: "exchange_activesync_requests_total", Name: "received", Algo: module.Incremental}, 2375 }, 2376 } 2377 exchangeActiveSyncCMDsChart = module.Chart{ 2378 OverModule: "exchange", 2379 ID: "exchange_activesync_sync_cmds", 2380 Title: "Sync commands processed", 2381 Units: "commands/s", 2382 Fam: "sync", 2383 Ctx: "exchange.activesync_sync_cmds", 2384 Priority: prioExchangeActiveSyncSyncCMDs, 2385 Dims: module.Dims{ 2386 {ID: "exchange_activesync_sync_cmds_total", Name: "processed", Algo: module.Incremental}, 2387 }, 2388 } 2389 exchangeAutoDiscoverRequestsChart = module.Chart{ 2390 OverModule: "exchange", 2391 ID: "exchange_autodiscover_requests", 2392 Title: "Autodiscover service requests processed", 2393 Units: "requests/s", 2394 Fam: "requests", 2395 Ctx: "exchange.autodiscover_requests", 2396 Priority: prioExchangeAutoDiscoverRequests, 2397 Dims: module.Dims{ 2398 {ID: "exchange_autodiscover_requests_total", Name: "processed", Algo: module.Incremental}, 2399 }, 2400 } 2401 exchangeAvailableServiceRequestsChart = module.Chart{ 2402 OverModule: "exchange", 2403 ID: "exchange_avail_service_requests", 2404 Title: "Requests serviced", 2405 Units: "requests/s", 2406 Fam: "requests", 2407 Ctx: "exchange.avail_service_requests", 2408 Priority: prioExchangeAvailServiceRequests, 2409 Dims: module.Dims{ 2410 {ID: "exchange_avail_service_requests_per_sec", Name: "serviced", Algo: module.Incremental}, 2411 }, 2412 } 2413 exchangeOWACurrentUniqueUsersChart = module.Chart{ 2414 OverModule: "exchange", 2415 ID: "exchange_owa_current_unique_users", 2416 Title: "Unique users currently logged on to Outlook Web App", 2417 Units: "users", 2418 Fam: "owa", 2419 Ctx: "exchange.owa_current_unique_users", 2420 Priority: prioExchangeOWACurrentUniqueUsers, 2421 Dims: module.Dims{ 2422 {ID: "exchange_owa_current_unique_users", Name: "logged-in"}, 2423 }, 2424 } 2425 exchangeOWARequestsChart = module.Chart{ 2426 OverModule: "exchange", 2427 ID: "exchange_owa_requests_total", 2428 Title: "Requests handled by Outlook Web App", 2429 Units: "requests/s", 2430 Fam: "owa", 2431 Ctx: "exchange.owa_requests_total", 2432 Priority: prioExchangeOWARequestsTotal, 2433 Dims: module.Dims{ 2434 {ID: "exchange_owa_requests_total", Name: "handled", Algo: module.Incremental}, 2435 }, 2436 } 2437 exchangeRPCActiveUsersCountChart = module.Chart{ 2438 OverModule: "exchange", 2439 ID: "exchange_rpc_active_user", 2440 Title: "Active unique users in the last 2 minutes", 2441 Units: "users", 2442 Fam: "rpc", 2443 Ctx: "exchange.rpc_active_user_count", 2444 Priority: prioExchangeRPCActiveUserCount, 2445 Dims: module.Dims{ 2446 {ID: "exchange_rpc_active_user_count", Name: "active"}, 2447 }, 2448 } 2449 exchangeRPCAvgLatencyChart = module.Chart{ 2450 OverModule: "exchange", 2451 ID: "exchange_rpc_avg_latency", 2452 Title: "Average latency", 2453 Units: "seconds", 2454 Fam: "rpc", 2455 Ctx: "exchange.rpc_avg_latency", 2456 Priority: prioExchangeRPCAvgLatency, 2457 Dims: module.Dims{ 2458 {ID: "exchange_rpc_avg_latency_sec", Name: "latency", Div: precision}, 2459 }, 2460 } 2461 exchangeRPCConnectionChart = module.Chart{ 2462 OverModule: "exchange", 2463 ID: "exchange_rpc_connection", 2464 Title: "Client connections", 2465 Units: "connections", 2466 Fam: "rpc", 2467 Ctx: "exchange.rpc_connection_count", 2468 Priority: prioExchangeRPCConnectionCount, 2469 Dims: module.Dims{ 2470 {ID: "exchange_rpc_connection_count", Name: "connections"}, 2471 }, 2472 } 2473 exchangeRPCOperationsChart = module.Chart{ 2474 OverModule: "exchange", 2475 ID: "exchange_rpc_operations", 2476 Title: "RPC operations", 2477 Units: "operations/s", 2478 Fam: "rpc", 2479 Ctx: "exchange.rpc_operations", 2480 Priority: prioExchangeRPCOperationsTotal, 2481 Dims: module.Dims{ 2482 {ID: "exchange_rpc_operations_total", Name: "operations", Algo: module.Incremental}, 2483 }, 2484 } 2485 exchangeRPCRequestsChart = module.Chart{ 2486 OverModule: "exchange", 2487 ID: "exchange_rpc_requests_total", 2488 Title: "Clients requests currently being processed", 2489 Units: "requests", 2490 Fam: "rpc", 2491 Ctx: "exchange.rpc_requests", 2492 Priority: prioExchangeRPCRequests, 2493 Dims: module.Dims{ 2494 {ID: "exchange_rpc_requests", Name: "processed"}, 2495 }, 2496 } 2497 exchangeRPCUserChart = module.Chart{ 2498 OverModule: "exchange", 2499 ID: "exchange_rpc_user", 2500 Title: "RPC users", 2501 Units: "users", 2502 Fam: "rpc", 2503 Ctx: "exchange.rpc_user_count", 2504 Priority: prioExchangeRpcUserCount, 2505 Dims: module.Dims{ 2506 {ID: "exchange_rpc_user_count", Name: "users"}, 2507 }, 2508 } 2509 2510 // Source: https://learn.microsoft.com/en-us/exchange/mail-flow/queues/queues?view=exchserver-2019 2511 exchangeTransportQueuesActiveMailBoxDelivery = module.Chart{ 2512 OverModule: "exchange", 2513 ID: "exchange_transport_queues_active_mailbox_delivery", 2514 Title: "Active Mailbox Delivery Queue length", 2515 Units: "messages", 2516 Fam: "queue", 2517 Ctx: "exchange.transport_queues_active_mail_box_delivery", 2518 Priority: prioExchangeTransportQueuesActiveMailboxDelivery, 2519 Dims: module.Dims{ 2520 {ID: "exchange_transport_queues_active_mailbox_delivery_low_priority", Name: "low"}, 2521 {ID: "exchange_transport_queues_active_mailbox_delivery_high_priority", Name: "high"}, 2522 {ID: "exchange_transport_queues_active_mailbox_delivery_none_priority", Name: "none"}, 2523 {ID: "exchange_transport_queues_active_mailbox_delivery_normal_priority", Name: "normal"}, 2524 }, 2525 } 2526 exchangeTransportQueuesExternalActiveRemoteDelivery = module.Chart{ 2527 OverModule: "exchange", 2528 ID: "exchange_transport_queues_external_active_remote_delivery", 2529 Title: "External Active Remote Delivery Queue length", 2530 Units: "messages", 2531 Fam: "queue", 2532 Ctx: "exchange.transport_queues_external_active_remote_delivery", 2533 Priority: prioExchangeTransportQueuesExternalActiveRemoteDelivery, 2534 Dims: module.Dims{ 2535 {ID: "exchange_transport_queues_external_active_remote_delivery_low_priority", Name: "low"}, 2536 {ID: "exchange_transport_queues_external_active_remote_delivery_high_priority", Name: "high"}, 2537 {ID: "exchange_transport_queues_external_active_remote_delivery_none_priority", Name: "none"}, 2538 {ID: "exchange_transport_queues_external_active_remote_delivery_normal_priority", Name: "normal"}, 2539 }, 2540 } 2541 exchangeTransportQueuesExternalLargestDelivery = module.Chart{ 2542 OverModule: "exchange", 2543 ID: "exchange_transport_queues_external_largest_delivery", 2544 Title: "External Largest Delivery Queue length", 2545 Units: "messages", 2546 Fam: "queue", 2547 Ctx: "exchange.transport_queues_external_largest_delivery", 2548 Priority: prioExchangeTransportQueuesExternalLargestDelivery, 2549 Dims: module.Dims{ 2550 {ID: "exchange_transport_queues_external_largest_delivery_low_priority", Name: "low"}, 2551 {ID: "exchange_transport_queues_external_largest_delivery_high_priority", Name: "high"}, 2552 {ID: "exchange_transport_queues_external_largest_delivery_none_priority", Name: "none"}, 2553 {ID: "exchange_transport_queues_external_largest_delivery_normal_priority", Name: "normal"}, 2554 }, 2555 } 2556 exchangeTransportQueuesInternalActiveRemoteDelivery = module.Chart{ 2557 OverModule: "exchange", 2558 ID: "exchange_transport_queues_internal_active_remote_delivery", 2559 Title: "Internal Active Remote Delivery Queue length", 2560 Units: "messages", 2561 Fam: "queue", 2562 Ctx: "exchange.transport_queues_internal_active_remote_delivery", 2563 Priority: prioExchangeTransportQueuesInternalActiveRemoteDeliery, 2564 Dims: module.Dims{ 2565 {ID: "exchange_transport_queues_internal_active_remote_delivery_low_priority", Name: "low"}, 2566 {ID: "exchange_transport_queues_internal_active_remote_delivery_high_priority", Name: "high"}, 2567 {ID: "exchange_transport_queues_internal_active_remote_delivery_none_priority", Name: "none"}, 2568 {ID: "exchange_transport_queues_internal_active_remote_delivery_normal_priority", Name: "normal"}, 2569 }, 2570 } 2571 exchangeTransportQueuesInternalLargestDelivery = module.Chart{ 2572 OverModule: "exchange", 2573 ID: "exchange_transport_queues_internal_largest_delivery", 2574 Title: "Internal Largest Delivery Queue length", 2575 Units: "messages", 2576 Fam: "queue", 2577 Ctx: "exchange.transport_queues_internal_largest_delivery", 2578 Priority: prioExchangeTransportQueuesInternalLargestDelivery, 2579 Dims: module.Dims{ 2580 {ID: "exchange_transport_queues_internal_largest_delivery_low_priority", Name: "low"}, 2581 {ID: "exchange_transport_queues_internal_largest_delivery_high_priority", Name: "high"}, 2582 {ID: "exchange_transport_queues_internal_largest_delivery_none_priority", Name: "none"}, 2583 {ID: "exchange_transport_queues_internal_largest_delivery_normal_priority", Name: "normal"}, 2584 }, 2585 } 2586 exchangeTransportQueuesRetryMailboxDelivery = module.Chart{ 2587 OverModule: "exchange", 2588 ID: "exchange_transport_queues_retry_mailbox_delivery", 2589 Title: "Internal Active Remote Delivery Queue length", 2590 Units: "messages", 2591 Fam: "queue", 2592 Ctx: "exchange.transport_queues_retry_mailbox_delivery", 2593 Priority: prioExchangeTransportQueuesRetryMailboxDelivery, 2594 Dims: module.Dims{ 2595 {ID: "exchange_transport_queues_retry_mailbox_delivery_low_priority", Name: "low"}, 2596 {ID: "exchange_transport_queues_retry_mailbox_delivery_high_priority", Name: "high"}, 2597 {ID: "exchange_transport_queues_retry_mailbox_delivery_none_priority", Name: "none"}, 2598 {ID: "exchange_transport_queues_retry_mailbox_delivery_normal_priority", Name: "normal"}, 2599 }, 2600 } 2601 exchangeTransportQueuesUnreachable = module.Chart{ 2602 OverModule: "exchange", 2603 ID: "exchange_transport_queues_unreachable", 2604 Title: "Unreachable Queue length", 2605 Units: "messages", 2606 Fam: "queue", 2607 Ctx: "exchange.transport_queues_unreachable", 2608 Priority: prioExchangeTransportQueuesUnreachable, 2609 Dims: module.Dims{ 2610 {ID: "exchange_transport_queues_unreachable_low_priority", Name: "low"}, 2611 {ID: "exchange_transport_queues_unreachable_high_priority", Name: "high"}, 2612 {ID: "exchange_transport_queues_unreachable_none_priority", Name: "none"}, 2613 {ID: "exchange_transport_queues_unreachable_normal_priority", Name: "normal"}, 2614 }, 2615 } 2616 exchangeTransportQueuesPoison = module.Chart{ 2617 OverModule: "exchange", 2618 ID: "exchange_transport_queues_poison", 2619 Title: "Poison Queue Length", 2620 Units: "messages/s", 2621 Fam: "queue", 2622 Ctx: "exchange.transport_queues_poison", 2623 Priority: prioExchangeTransportQueuesPoison, 2624 Dims: module.Dims{ 2625 {ID: "exchange_transport_queues_poison_high_priority", Name: "high"}, 2626 {ID: "exchange_transport_queues_poison_low_priority", Name: "low"}, 2627 {ID: "exchange_transport_queues_poison_none_priority", Name: "none"}, 2628 {ID: "exchange_transport_queues_poison_normal_priority", Name: "normal"}, 2629 }, 2630 } 2631 2632 exchangeWorkloadActiveTasks = module.Chart{ 2633 OverModule: "exchange", 2634 ID: "exchange_workload_%s_tasks", 2635 Title: "Workload active tasks", 2636 Units: "tasks", 2637 Fam: "workload", 2638 Ctx: "exchange.workload_active_tasks", 2639 Priority: prioExchangeWorkloadActiveTasks, 2640 Dims: module.Dims{ 2641 {ID: "exchange_workload_%s_active_tasks", Name: "active"}, 2642 }, 2643 } 2644 exchangeWorkloadCompletedTasks = module.Chart{ 2645 OverModule: "exchange", 2646 ID: "exchange_workload_%s_completed_tasks", 2647 Title: "Workload completed tasks", 2648 Units: "tasks/s", 2649 Fam: "workload", 2650 Ctx: "exchange.workload_completed_tasks", 2651 Priority: prioExchangeWorkloadCompleteTasks, 2652 Dims: module.Dims{ 2653 {ID: "exchange_workload_%s_completed_tasks", Name: "completed", Algo: module.Incremental}, 2654 }, 2655 } 2656 exchangeWorkloadQueuedTasks = module.Chart{ 2657 OverModule: "exchange", 2658 ID: "exchange_workload_%s_queued_tasks", 2659 Title: "Workload queued tasks", 2660 Units: "tasks/s", 2661 Fam: "workload", 2662 Ctx: "exchange.workload_queued_tasks", 2663 Priority: prioExchangeWorkloadQueueTasks, 2664 Dims: module.Dims{ 2665 {ID: "exchange_workload_%s_queued_tasks", Name: "queued", Algo: module.Incremental}, 2666 }, 2667 } 2668 exchangeWorkloadYieldedTasks = module.Chart{ 2669 OverModule: "exchange", 2670 ID: "exchange_workload_%s_yielded_tasks", 2671 Title: "Workload yielded tasks", 2672 Units: "tasks/s", 2673 Fam: "workload", 2674 Ctx: "exchange.workload_yielded_tasks", 2675 Priority: prioExchangeWorkloadYieldedTasks, 2676 Dims: module.Dims{ 2677 {ID: "exchange_workload_%s_yielded_tasks", Name: "yielded", Algo: module.Incremental}, 2678 }, 2679 } 2680 exchangeWorkloadActivityStatus = module.Chart{ 2681 OverModule: "exchange", 2682 ID: "exchange_workload_%s_activity_status", 2683 Title: "Workload activity status", 2684 Units: "status", 2685 Fam: "workload", 2686 Ctx: "exchange.workload_activity_status", 2687 Priority: prioExchangeWorkloadActivityStatus, 2688 Dims: module.Dims{ 2689 {ID: "exchange_workload_%s_is_active", Name: "active"}, 2690 {ID: "exchange_workload_%s_is_paused", Name: "paused"}, 2691 }, 2692 } 2693 2694 exchangeLDAPLongRunningOPS = module.Chart{ 2695 OverModule: "exchange", 2696 ID: "exchange_ldap_%s_long_running_ops", 2697 Title: "Long Running LDAP operations", 2698 Units: "operations/s", 2699 Fam: "ldap", 2700 Ctx: "exchange.ldap_long_running_ops_per_sec", 2701 Priority: prioExchangeLDAPLongRunningOPS, 2702 Dims: module.Dims{ 2703 {ID: "exchange_ldap_%s_long_running_ops_per_sec", Name: "long-running", Algo: module.Incremental}, 2704 }, 2705 } 2706 exchangeLDAPReadTime = module.Chart{ 2707 OverModule: "exchange", 2708 ID: "exchange_ldap_%s_read_time", 2709 Title: "Time to send an LDAP read request and receive a response", 2710 Units: "seconds", 2711 Fam: "ldap", 2712 Ctx: "exchange.ldap_read_time", 2713 Priority: prioExchangeLDAPReadTime, 2714 Dims: module.Dims{ 2715 {ID: "exchange_ldap_%s_read_time_sec", Name: "read", Algo: module.Incremental, Div: precision}, 2716 }, 2717 } 2718 exchangeLDAPSearchTime = module.Chart{ 2719 OverModule: "exchange", 2720 ID: "exchange_ldap_%s_search_time", 2721 Title: "Time to send an LDAP search request and receive a response", 2722 Units: "seconds", 2723 Fam: "ldap", 2724 Ctx: "exchange.ldap_search_time", 2725 Priority: prioExchangeLDAPSearchTime, 2726 Dims: module.Dims{ 2727 {ID: "exchange_ldap_%s_search_time_sec", Name: "search", Algo: module.Incremental, Div: precision}, 2728 }, 2729 } 2730 exchangeLDAPWriteTime = module.Chart{ 2731 OverModule: "exchange", 2732 ID: "exchange_ldap_%s_write_time", 2733 Title: "Time to send an LDAP search request and receive a response", 2734 Units: "second", 2735 Fam: "ldap", 2736 Ctx: "exchange.ldap_write_time", 2737 Priority: prioExchangeLDAPWriteTime, 2738 Dims: module.Dims{ 2739 {ID: "exchange_ldap_%s_write_time_sec", Name: "write", Algo: module.Incremental, Div: precision}, 2740 }, 2741 } 2742 exchangeLDAPTimeoutErrors = module.Chart{ 2743 OverModule: "exchange", 2744 ID: "exchange_ldap_%s_timeout_errors", 2745 Title: "LDAP timeout errors", 2746 Units: "errors/s", 2747 Fam: "ldap", 2748 Ctx: "exchange.ldap_timeout_errors", 2749 Priority: prioExchangeLDAPTimeoutErrors, 2750 Dims: module.Dims{ 2751 {ID: "exchange_ldap_%s_timeout_errors_total", Name: "timeout", Algo: module.Incremental}, 2752 }, 2753 } 2754 2755 exchangeProxyAvgAuthLatency = module.Chart{ 2756 OverModule: "exchange", 2757 ID: "exchange_proxy_%s_avg_auth_latency", 2758 Title: "Average time spent authenticating CAS", 2759 Units: "seconds", 2760 Fam: "proxy", 2761 Ctx: "exchange.http_proxy_avg_auth_latency", 2762 Priority: prioExchangeHTTPProxyAVGAuthLatency, 2763 Dims: module.Dims{ 2764 {ID: "exchange_http_proxy_%s_avg_auth_latency", Name: "latency"}, 2765 }, 2766 } 2767 exchangeProxyAvgCasProcessingLatencySec = module.Chart{ 2768 OverModule: "exchange", 2769 ID: "exchange_proxy_%s_avg_cas_processing_latency_sec", 2770 Title: "Average time spent authenticating CAS", 2771 Units: "seconds", 2772 Fam: "proxy", 2773 Ctx: "exchange.http_proxy_avg_cas_processing_latency_sec", 2774 Priority: prioExchangeHTTPProxyAVGCASProcessingLatency, 2775 Dims: module.Dims{ 2776 {ID: "exchange_http_proxy_%s_avg_cas_proccessing_latency_sec", Name: "latency"}, 2777 }, 2778 } 2779 exchangeProxyMailboxProxyFailureRace = module.Chart{ 2780 OverModule: "exchange", 2781 ID: "exchange_proxy_%s_mailbox_proxy_failure_rate", 2782 Title: "Percentage of failures between this CAS and MBX servers", 2783 Units: "percentage", 2784 Fam: "proxy", 2785 Ctx: "exchange.http_proxy_mailbox_proxy_failure_rate", 2786 Priority: prioExchangeHTTPProxyMailboxProxyFailureRate, 2787 Dims: module.Dims{ 2788 {ID: "exchange_http_proxy_%s_mailbox_proxy_failure_rate", Name: "failures", Div: precision}, 2789 }, 2790 } 2791 exchangeProxyMailboxServerLocatorAvgLatencySec = module.Chart{ 2792 OverModule: "exchange", 2793 ID: "exchange_proxy_%s_mailbox_server_locator_avg_latency_sec", 2794 Title: "Average latency of MailboxServerLocator web service calls", 2795 Units: "seconds", 2796 Fam: "proxy", 2797 Ctx: "exchange.http_proxy_mailbox_server_locator_avg_latency_sec", 2798 Priority: prioExchangeHTTPProxyServerLocatorAvgLatency, 2799 Dims: module.Dims{ 2800 {ID: "exchange_http_proxy_%s_mailbox_server_locator_avg_latency_sec", Name: "latency", Div: precision}, 2801 }, 2802 } 2803 exchangeProxyOutstandingProxyRequests = module.Chart{ 2804 OverModule: "exchange", 2805 ID: "exchange_proxy_%s_outstanding_proxy_requests", 2806 Title: "Concurrent outstanding proxy requests", 2807 Units: "requests", 2808 Fam: "proxy", 2809 Ctx: "exchange.http_proxy_outstanding_proxy_requests", 2810 Priority: prioExchangeHTTPProxyOutstandingProxyRequests, 2811 Dims: module.Dims{ 2812 {ID: "exchange_http_proxy_%s_outstanding_proxy_requests", Name: "outstanding"}, 2813 }, 2814 } 2815 exchangeProxyRequestsTotal = module.Chart{ 2816 OverModule: "exchange", 2817 ID: "exchange_proxy_%s_requests_total", 2818 Title: "Number of proxy requests processed each second", 2819 Units: "requests/s", 2820 Fam: "proxy", 2821 Ctx: "exchange.http_proxy_requests", 2822 Priority: prioExchangeHTTPProxyRequestsTotal, 2823 Dims: module.Dims{ 2824 {ID: "exchange_http_proxy_%s_requests_total", Name: "processed", Algo: module.Incremental}, 2825 }, 2826 } 2827 ) 2828 2829 // Logon 2830 var ( 2831 logonCharts = module.Charts{ 2832 logonSessionsChart.Copy(), 2833 } 2834 logonSessionsChart = module.Chart{ 2835 ID: "logon_active_sessions_by_type", 2836 Title: "Active User Logon Sessions By Type", 2837 Units: "sessions", 2838 Fam: "logon", 2839 Ctx: "windows.logon_type_sessions", 2840 Type: module.Stacked, 2841 Priority: prioLogonSessions, 2842 Dims: module.Dims{ 2843 {ID: "logon_type_system_sessions", Name: "system"}, 2844 {ID: "logon_type_proxy_sessions", Name: "proxy"}, 2845 {ID: "logon_type_network_sessions", Name: "network"}, 2846 {ID: "logon_type_interactive_sessions", Name: "interactive"}, 2847 {ID: "logon_type_batch_sessions", Name: "batch"}, 2848 {ID: "logon_type_service_sessions", Name: "service"}, 2849 {ID: "logon_type_unlock_sessions", Name: "unlock"}, 2850 {ID: "logon_type_network_clear_text_sessions", Name: "network_clear_text"}, 2851 {ID: "logon_type_new_credentials_sessions", Name: "new_credentials"}, 2852 {ID: "logon_type_remote_interactive_sessions", Name: "remote_interactive"}, 2853 {ID: "logon_type_cached_interactive_sessions", Name: "cached_interactive"}, 2854 {ID: "logon_type_cached_remote_interactive_sessions", Name: "cached_remote_interactive"}, 2855 {ID: "logon_type_cached_unlock_sessions", Name: "cached_unlock"}, 2856 }, 2857 } 2858 ) 2859 2860 // Thermal zone 2861 var ( 2862 thermalzoneChartsTmpl = module.Charts{ 2863 thermalzoneTemperatureChartTmpl.Copy(), 2864 } 2865 thermalzoneTemperatureChartTmpl = module.Chart{ 2866 ID: "thermalzone_%s_temperature", 2867 Title: "Thermal zone temperature", 2868 Units: "Celsius", 2869 Fam: "thermalzone", 2870 Ctx: "windows.thermalzone_temperature", 2871 Priority: prioThermalzoneTemperature, 2872 Dims: module.Dims{ 2873 {ID: "thermalzone_%s_temperature", Name: "temperature"}, 2874 }, 2875 } 2876 ) 2877 2878 // Processes 2879 var ( 2880 processesCharts = module.Charts{ 2881 processesCPUUtilizationTotalChart.Copy(), 2882 processesMemoryUsageChart.Copy(), 2883 processesHandlesChart.Copy(), 2884 processesIOBytesChart.Copy(), 2885 processesIOOperationsChart.Copy(), 2886 processesPageFaultsChart.Copy(), 2887 processesPageFileBytes.Copy(), 2888 processesThreads.Copy(), 2889 } 2890 processesCPUUtilizationTotalChart = module.Chart{ 2891 ID: "processes_cpu_utilization", 2892 Title: "CPU usage (100% = 1 core)", 2893 Units: "percentage", 2894 Fam: "processes", 2895 Ctx: "windows.processes_cpu_utilization", 2896 Type: module.Stacked, 2897 Priority: prioProcessesCPUUtilization, 2898 } 2899 processesMemoryUsageChart = module.Chart{ 2900 ID: "processes_memory_usage", 2901 Title: "Memory usage", 2902 Units: "bytes", 2903 Fam: "processes", 2904 Ctx: "windows.processes_memory_usage", 2905 Type: module.Stacked, 2906 Priority: prioProcessesMemoryUsage, 2907 } 2908 processesIOBytesChart = module.Chart{ 2909 ID: "processes_io_bytes", 2910 Title: "Total of IO bytes (read, write, other)", 2911 Units: "bytes/s", 2912 Fam: "processes", 2913 Ctx: "windows.processes_io_bytes", 2914 Type: module.Stacked, 2915 Priority: prioProcessesIOBytes, 2916 } 2917 processesIOOperationsChart = module.Chart{ 2918 ID: "processes_io_operations", 2919 Title: "Total of IO events (read, write, other)", 2920 Units: "operations/s", 2921 Fam: "processes", 2922 Ctx: "windows.processes_io_operations", 2923 Type: module.Stacked, 2924 Priority: prioProcessesIOOperations, 2925 } 2926 processesPageFaultsChart = module.Chart{ 2927 ID: "processes_page_faults", 2928 Title: "Number of page faults", 2929 Units: "pgfaults/s", 2930 Fam: "processes", 2931 Ctx: "windows.processes_page_faults", 2932 Type: module.Stacked, 2933 Priority: prioProcessesPageFaults, 2934 } 2935 processesPageFileBytes = module.Chart{ 2936 ID: "processes_page_file_bytes", 2937 Title: "Bytes used in page file(s)", 2938 Units: "bytes", 2939 Fam: "processes", 2940 Ctx: "windows.processes_file_bytes", 2941 Type: module.Stacked, 2942 Priority: prioProcessesPageFileBytes, 2943 } 2944 processesThreads = module.Chart{ 2945 ID: "processes_threads", 2946 Title: "Active threads", 2947 Units: "threads", 2948 Fam: "processes", 2949 Ctx: "windows.processes_threads", 2950 Type: module.Stacked, 2951 Priority: prioProcessesThreads, 2952 } 2953 processesHandlesChart = module.Chart{ 2954 ID: "processes_handles", 2955 Title: "Number of handles open", 2956 Units: "handles", 2957 Fam: "processes", 2958 Ctx: "windows.processes_handles", 2959 Type: module.Stacked, 2960 Priority: prioProcessesHandles, 2961 } 2962 ) 2963 2964 // .NET 2965 var ( 2966 netFrameworkCLRExceptionsChartsTmpl = module.Charts{ 2967 netFrameworkCLRExceptionsThrown.Copy(), 2968 netFrameworkCLRExceptionsFilters.Copy(), 2969 netFrameworkCLRExceptionsFinallys.Copy(), 2970 netFrameworkCLRExceptionsThrowToCatchDepth.Copy(), 2971 } 2972 2973 netFrameworkCLRInteropChartsTmpl = module.Charts{ 2974 netFrameworkCLRInteropCOMCallableWrapper.Copy(), 2975 netFrameworkCLRInteropMarshalling.Copy(), 2976 netFrameworkCLRInteropStubsCreated.Copy(), 2977 } 2978 2979 netFrameworkCLRJITChartsTmpl = module.Charts{ 2980 netFrameworkCLRJITMethods.Copy(), 2981 netFrameworkCLRJITTime.Copy(), 2982 netFrameworkCLRJITStandardFailures.Copy(), 2983 netFrameworkCLRJITILBytes.Copy(), 2984 } 2985 2986 netFrameworkCLRLoadingChartsTmpl = module.Charts{ 2987 netFrameworkCLRLoadingLoaderHeapSize.Copy(), 2988 netFrameworkCLRLoadingAppDomainsLoaded.Copy(), 2989 netFrameworkCLRLoadingAppDomainsUnloaded.Copy(), 2990 netFrameworkCLRLoadingAssembliesLoaded.Copy(), 2991 netFrameworkCLRLoadingClassesLoaded.Copy(), 2992 netFrameworkCLRLoadingClassLoadFailure.Copy(), 2993 } 2994 2995 netFrameworkCLRLocksAndThreadsChartsTmpl = module.Charts{ 2996 netFrameworkCLRLockAndThreadsQueueLength.Copy(), 2997 netFrameworkCLRLockAndThreadsCurrentLogicalThreads.Copy(), 2998 netFrameworkCLRLockAndThreadsCurrentPhysicalThreads.Copy(), 2999 netFrameworkCLRLockAndThreadsRecognizedThreads.Copy(), 3000 netFrameworkCLRLockAndThreadsContentions.Copy(), 3001 } 3002 3003 netFrameworkCLRMemoryChartsTmpl = module.Charts{ 3004 netFrameworkCLRMemoryAllocatedBytes.Copy(), 3005 netFrameworkCLRMemoryFinalizationSurvivors.Copy(), 3006 netFrameworkCLRMemoryHeapSize.Copy(), 3007 netFrameworkCLRMemoryPromoted.Copy(), 3008 netFrameworkCLRMemoryNumberGCHandles.Copy(), 3009 netFrameworkCLRMemoryCollections.Copy(), 3010 netFrameworkCLRMemoryInducedGC.Copy(), 3011 netFrameworkCLRMemoryNumberPinnedObjects.Copy(), 3012 netFrameworkCLRMemoryNumberSinkBlocksInUse.Copy(), 3013 netFrameworkCLRMemoryCommitted.Copy(), 3014 netFrameworkCLRMemoryReserved.Copy(), 3015 netFrameworkCLRMemoryGCTime.Copy(), 3016 } 3017 3018 netFrameworkCLRRemotingChartsTmpl = module.Charts{ 3019 netFrameworkCLRRemotingChannels.Copy(), 3020 netFrameworkCLRRemotingContextBoundClassesLoaded.Copy(), 3021 netFrameworkCLRRemotingContextBoundObjects.Copy(), 3022 netFrameworkCLRRemotingContextProxies.Copy(), 3023 netFrameworkCLRRemotingContexts.Copy(), 3024 netFrameworkCLRRemotingCalls.Copy(), 3025 } 3026 3027 netFrameworkCLRSecurityChartsTmpl = module.Charts{ 3028 netFrameworkCLRSecurityLinkTimeChecks.Copy(), 3029 netFrameworkCLRSecurityChecksTime.Copy(), 3030 netFrameworkCLRSecurityStackWalkDepth.Copy(), 3031 netFrameworkCLRSecurityRuntimeChecks.Copy(), 3032 } 3033 3034 // Exceptions 3035 netFrameworkCLRExceptionsThrown = module.Chart{ 3036 OverModule: "netframework", 3037 ID: "netframework_%s_clrexception_thrown", 3038 Title: "Thrown exceptions", 3039 Units: "exceptions/s", 3040 Fam: "exceptions", 3041 Ctx: "netframework.clrexception_thrown", 3042 Priority: prioNETFrameworkCLRExceptionsThrown, 3043 Dims: module.Dims{ 3044 {ID: "netframework_%s_clrexception_thrown_total", Name: "exceptions", Algo: module.Incremental}, 3045 }, 3046 } 3047 netFrameworkCLRExceptionsFilters = module.Chart{ 3048 OverModule: "netframework", 3049 ID: "netframework_%s_clrexception_filters", 3050 Title: "Executed exception filters", 3051 Units: "filters/s", 3052 Fam: "exceptions", 3053 Ctx: "netframework.clrexception_filters", 3054 Priority: prioNETFrameworkCLRExceptionsFilters, 3055 Dims: module.Dims{ 3056 {ID: "netframework_%s_clrexception_filters_total", Name: "filters", Algo: module.Incremental}, 3057 }, 3058 } 3059 netFrameworkCLRExceptionsFinallys = module.Chart{ 3060 OverModule: "netframework", 3061 ID: "netframework_%s_clrexception_finallys", 3062 Title: "Executed finally blocks", 3063 Units: "finallys/s", 3064 Fam: "exceptions", 3065 Ctx: "netframework.clrexception_finallys", 3066 Priority: prioNETFrameworkCLRExceptionsFinallys, 3067 Dims: module.Dims{ 3068 {ID: "netframework_%s_clrexception_finallys_total", Name: "finallys", Algo: module.Incremental}, 3069 }, 3070 } 3071 netFrameworkCLRExceptionsThrowToCatchDepth = module.Chart{ 3072 OverModule: "netframework", 3073 ID: "netframework_%s_clrexception_throw_to_catch_depth", 3074 Title: "Traversed stack frames", 3075 Units: "stack_frames/s", 3076 Fam: "exceptions", 3077 Ctx: "netframework.clrexception_throw_to_catch_depth", 3078 Priority: prioNETFrameworkCLRExceptionsThrowToCatchDepth, 3079 Dims: module.Dims{ 3080 {ID: "netframework_%s_clrexception_throw_to_catch_depth_total", Name: "traversed", Algo: module.Incremental}, 3081 }, 3082 } 3083 3084 // Interop 3085 netFrameworkCLRInteropCOMCallableWrapper = module.Chart{ 3086 OverModule: "netframework", 3087 ID: "netframework_%s_clrinterop_com_callable_wrappers", 3088 Title: "COM callable wrappers (CCW)", 3089 Units: "ccw/s", 3090 Fam: "interop", 3091 Ctx: "netframework.clrinterop_com_callable_wrappers", 3092 Priority: prioNETFrameworkCLRInteropCOMCallableWrappers, 3093 Dims: module.Dims{ 3094 {ID: "netframework_%s_clrinterop_com_callable_wrappers_total", Name: "com_callable_wrappers", Algo: module.Incremental}, 3095 }, 3096 } 3097 netFrameworkCLRInteropMarshalling = module.Chart{ 3098 OverModule: "netframework", 3099 ID: "netframework_%s_clrinterop_interop_marshalling", 3100 Title: "Arguments and return values marshallings", 3101 Units: "marshalling/s", 3102 Fam: "interop", 3103 Ctx: "netframework.clrinterop_interop_marshallings", 3104 Priority: prioNETFrameworkCLRInteropMarshalling, 3105 Dims: module.Dims{ 3106 {ID: "netframework_%s_clrinterop_interop_marshalling_total", Name: "marshallings", Algo: module.Incremental}, 3107 }, 3108 } 3109 netFrameworkCLRInteropStubsCreated = module.Chart{ 3110 OverModule: "netframework", 3111 ID: "netframework_%s_clrinterop_interop_stubs_created", 3112 Title: "Created stubs", 3113 Units: "stubs/s", 3114 Fam: "interop", 3115 Ctx: "netframework.clrinterop_interop_stubs_created", 3116 Priority: prioNETFrameworkCLRInteropStubsCreated, 3117 Dims: module.Dims{ 3118 {ID: "netframework_%s_clrinterop_interop_stubs_created_total", Name: "created", Algo: module.Incremental}, 3119 }, 3120 } 3121 3122 // JIT 3123 netFrameworkCLRJITMethods = module.Chart{ 3124 OverModule: "netframework", 3125 ID: "netframework_%s_clrjit_methods", 3126 Title: "JIT-compiled methods", 3127 Units: "methods/s", 3128 Fam: "jit", 3129 Ctx: "netframework.clrjit_methods", 3130 Priority: prioNETFrameworkCLRJITMethods, 3131 Dims: module.Dims{ 3132 {ID: "netframework_%s_clrjit_methods_total", Name: "jit-compiled", Algo: module.Incremental}, 3133 }, 3134 } 3135 netFrameworkCLRJITTime = module.Chart{ 3136 OverModule: "netframework", 3137 ID: "netframework_%s_clrjit_time", 3138 Title: "Time spent in JIT compilation", 3139 Units: "percentage", 3140 Fam: "jit", 3141 Ctx: "netframework.clrjit_time", 3142 Priority: prioNETFrameworkCLRJITTime, 3143 Dims: module.Dims{ 3144 {ID: "netframework_%s_clrjit_time_percent", Name: "time"}, 3145 }, 3146 } 3147 netFrameworkCLRJITStandardFailures = module.Chart{ 3148 OverModule: "netframework", 3149 ID: "netframework_%s_clrjit_standard_failures", 3150 Title: "JIT compiler failures", 3151 Units: "failures/s", 3152 Fam: "jit", 3153 Ctx: "netframework.clrjit_standard_failures", 3154 Priority: prioNETFrameworkCLRJITStandardFailures, 3155 Dims: module.Dims{ 3156 {ID: "netframework_%s_clrjit_standard_failures_total", Name: "failures", Algo: module.Incremental}, 3157 }, 3158 } 3159 netFrameworkCLRJITILBytes = module.Chart{ 3160 OverModule: "netframework", 3161 ID: "netframework_%s_clrjit_il_bytes", 3162 Title: "Compiled Microsoft intermediate language (MSIL) bytes", 3163 Units: "bytes/s", 3164 Fam: "jit", 3165 Ctx: "netframework.clrjit_il_bytes", 3166 Priority: prioNETFrameworkCLRJITILBytes, 3167 Dims: module.Dims{ 3168 {ID: "netframework_%s_clrjit_il_bytes_total", Name: "compiled_msil", Algo: module.Incremental}, 3169 }, 3170 } 3171 3172 // Loading 3173 netFrameworkCLRLoadingLoaderHeapSize = module.Chart{ 3174 OverModule: "netframework", 3175 ID: "netframework_%s_clrloading_loader_heap_size", 3176 Title: "Memory committed by class loader", 3177 Units: "bytes", 3178 Fam: "loading", 3179 Ctx: "netframework.clrloading_loader_heap_size", 3180 Priority: prioNETFrameworkCLRLoadingLoaderHeapSize, 3181 Dims: module.Dims{ 3182 {ID: "netframework_%s_clrloading_loader_heap_size_bytes", Name: "committed"}, 3183 }, 3184 } 3185 netFrameworkCLRLoadingAppDomainsLoaded = module.Chart{ 3186 OverModule: "netframework", 3187 ID: "netframework_%s_clrloading_appdomains_loaded", 3188 Title: "Loaded application domains", 3189 Units: "domain/s", 3190 Fam: "loading", 3191 Ctx: "netframework.clrloading_appdomains_loaded", 3192 Priority: prioNETFrameworkCLRLoadingAppDomainsLoaded, 3193 Dims: module.Dims{ 3194 {ID: "netframework_%s_clrloading_appdomains_loaded_total", Name: "loaded", Algo: module.Incremental}, 3195 }, 3196 } 3197 netFrameworkCLRLoadingAppDomainsUnloaded = module.Chart{ 3198 OverModule: "netframework", 3199 ID: "netframework_%s_clrloading_appdomains_unloaded", 3200 Title: "Unloaded application domains", 3201 Units: "domain/s", 3202 Fam: "loading", 3203 Ctx: "netframework.clrloading_appdomains_unloaded", 3204 Priority: prioNETFrameworkCLRLoadingAppDomainsUnloaded, 3205 Dims: module.Dims{ 3206 {ID: "netframework_%s_clrloading_appdomains_unloaded_total", Name: "unloaded", Algo: module.Incremental}, 3207 }, 3208 } 3209 netFrameworkCLRLoadingAssembliesLoaded = module.Chart{ 3210 OverModule: "netframework", 3211 ID: "netframework_%s_clrloading_assemblies_loaded", 3212 Title: "Loaded assemblies", 3213 Units: "assemblies/s", 3214 Fam: "loading", 3215 Ctx: "netframework.clrloading_assemblies_loaded", 3216 Priority: prioNETFrameworkCLRLoadingAssembliesLoaded, 3217 Dims: module.Dims{ 3218 {ID: "netframework_%s_clrloading_assemblies_loaded_total", Name: "loaded", Algo: module.Incremental}, 3219 }, 3220 } 3221 netFrameworkCLRLoadingClassesLoaded = module.Chart{ 3222 OverModule: "netframework", 3223 ID: "netframework_%s_clrloading_classes_loaded", 3224 Title: "Loaded classes in all assemblies", 3225 Units: "classes/s", 3226 Fam: "loading", 3227 Ctx: "netframework.clrloading_classes_loaded", 3228 Priority: prioNETFrameworkCLRLoadingClassesLoaded, 3229 Dims: module.Dims{ 3230 {ID: "netframework_%s_clrloading_classes_loaded_total", Name: "loaded", Algo: module.Incremental}, 3231 }, 3232 } 3233 netFrameworkCLRLoadingClassLoadFailure = module.Chart{ 3234 OverModule: "netframework", 3235 ID: "netframework_%s_clrloading_class_load_failure", 3236 Title: "Class load failures", 3237 Units: "failures/s", 3238 Fam: "loading", 3239 Ctx: "netframework.clrloading_class_load_failures", 3240 Priority: prioNETFrameworkCLRLoadingClassLoadFailure, 3241 Dims: module.Dims{ 3242 {ID: "netframework_%s_clrloading_class_load_failures_total", Name: "class_load", Algo: module.Incremental}, 3243 }, 3244 } 3245 3246 // Lock and Threads 3247 netFrameworkCLRLockAndThreadsQueueLength = module.Chart{ 3248 OverModule: "netframework", 3249 ID: "netframework_%s_clrlocksandthreads_queue_length", 3250 Title: "Threads waited to acquire a managed lock", 3251 Units: "threads/s", 3252 Fam: "locks threads", 3253 Ctx: "netframework.clrlocksandthreads_queue_length", 3254 Priority: prioNETFrameworkCLRLocksAndThreadsQueueLength, 3255 Dims: module.Dims{ 3256 {ID: "netframework_%s_clrlocksandthreads_queue_length_total", Name: "threads", Algo: module.Incremental}, 3257 }, 3258 } 3259 netFrameworkCLRLockAndThreadsCurrentLogicalThreads = module.Chart{ 3260 OverModule: "netframework", 3261 ID: "netframework_%s_clrlocksandthreads_current_logical_threads", 3262 Title: "Logical threads", 3263 Units: "threads", 3264 Fam: "locks threads", 3265 Ctx: "netframework.clrlocksandthreads_current_logical_threads", 3266 Priority: prioNETFrameworkCLRLocksAndThreadsCurrentLogicalThreads, 3267 Dims: module.Dims{ 3268 {ID: "netframework_%s_clrlocksandthreads_current_logical_threads", Name: "logical"}, 3269 }, 3270 } 3271 netFrameworkCLRLockAndThreadsCurrentPhysicalThreads = module.Chart{ 3272 OverModule: "netframework", 3273 ID: "netframework_%s_clrlocksandthreads_current_physical_threads", 3274 Title: "Physical threads", 3275 Units: "threads", 3276 Fam: "locks threads", 3277 Ctx: "netframework.clrlocksandthreads_current_physical_threads", 3278 Priority: prioNETFrameworkCLRLocksAndThreadsCurrentPhysicalThreads, 3279 Dims: module.Dims{ 3280 {ID: "netframework_%s_clrlocksandthreads_physical_threads_current", Name: "physical"}, 3281 }, 3282 } 3283 netFrameworkCLRLockAndThreadsRecognizedThreads = module.Chart{ 3284 OverModule: "netframework", 3285 ID: "netframework_%s_clrlocksandthreads_recognized_threads", 3286 Title: "Threads recognized by the runtime", 3287 Units: "threads/s", 3288 Fam: "locks threads", 3289 Ctx: "netframework.clrlocksandthreads_recognized_threads", 3290 Priority: prioNETFrameworkCLRLocksAndThreadsRecognizedThreads, 3291 Dims: module.Dims{ 3292 {ID: "netframework_%s_clrlocksandthreads_recognized_threads_total", Name: "threads", Algo: module.Incremental}, 3293 }, 3294 } 3295 netFrameworkCLRLockAndThreadsContentions = module.Chart{ 3296 OverModule: "netframework", 3297 ID: "netframework_%s_clrlocksandthreads_contentions", 3298 Title: "Fails to acquire a managed lock", 3299 Units: "contentions/s", 3300 Fam: "locks threads", 3301 Ctx: "netframework.clrlocksandthreads_contentions", 3302 Priority: prioNETFrameworkCLRLocksAndThreadsContentions, 3303 Dims: module.Dims{ 3304 {ID: "netframework_%s_clrlocksandthreads_contentions_total", Name: "contentions", Algo: module.Incremental}, 3305 }, 3306 } 3307 3308 // Memory 3309 netFrameworkCLRMemoryAllocatedBytes = module.Chart{ 3310 OverModule: "netframework", 3311 ID: "netframework_%s_clrmemory_allocated_bytes", 3312 Title: "Memory allocated on the garbage collection heap", 3313 Units: "bytes/s", 3314 Fam: "memory", 3315 Ctx: "netframework.clrmemory_allocated_bytes", 3316 Priority: prioNETFrameworkCLRMemoryAllocatedBytes, 3317 Dims: module.Dims{ 3318 {ID: "netframework_%s_clrmemory_allocated_bytes_total", Name: "allocated", Algo: module.Incremental}, 3319 }, 3320 } 3321 netFrameworkCLRMemoryFinalizationSurvivors = module.Chart{ 3322 OverModule: "netframework", 3323 ID: "netframework_%s_clrmemory_finalization_survivors", 3324 Title: "Objects that survived garbage-collection", 3325 Units: "objects", 3326 Fam: "memory", 3327 Ctx: "netframework.clrmemory_finalization_survivors", 3328 Priority: prioNETFrameworkCLRMemoryFinalizationSurvivors, 3329 Dims: module.Dims{ 3330 {ID: "netframework_%s_clrmemory_finalization_survivors", Name: "survived"}, 3331 }, 3332 } 3333 netFrameworkCLRMemoryHeapSize = module.Chart{ 3334 OverModule: "netframework", 3335 ID: "netframework_%s_clrmemory_heap_size", 3336 Title: "Maximum bytes that can be allocated", 3337 Units: "bytes", 3338 Fam: "memory", 3339 Ctx: "netframework.clrmemory_heap_size", 3340 Priority: prioNETFrameworkCLRMemoryHeapSize, 3341 Dims: module.Dims{ 3342 {ID: "netframework_%s_clrmemory_heap_size_bytes", Name: "heap"}, 3343 }, 3344 } 3345 netFrameworkCLRMemoryPromoted = module.Chart{ 3346 OverModule: "netframework", 3347 ID: "netframework_%s_clrmemory_promoted", 3348 Title: "Memory promoted to the next generation", 3349 Units: "bytes", 3350 Fam: "memory", 3351 Ctx: "netframework.clrmemory_promoted", 3352 Priority: prioNETFrameworkCLRMemoryPromoted, 3353 Dims: module.Dims{ 3354 {ID: "netframework_%s_clrmemory_promoted_bytes", Name: "promoted"}, 3355 }, 3356 } 3357 netFrameworkCLRMemoryNumberGCHandles = module.Chart{ 3358 OverModule: "netframework", 3359 ID: "netframework_%s_clrmemory_number_gc_handles", 3360 Title: "Garbage collection handles", 3361 Units: "handles", 3362 Fam: "memory", 3363 Ctx: "netframework.clrmemory_number_gc_handles", 3364 Priority: prioNETFrameworkCLRMemoryNumberGCHandles, 3365 Dims: module.Dims{ 3366 {ID: "netframework_%s_clrmemory_number_gc_handles", Name: "used"}, 3367 }, 3368 } 3369 netFrameworkCLRMemoryCollections = module.Chart{ 3370 OverModule: "netframework", 3371 ID: "netframework_%s_clrmemory_collections", 3372 Title: "Garbage collections", 3373 Units: "gc/s", 3374 Fam: "memory", 3375 Ctx: "netframework.clrmemory_collections", 3376 Priority: prioNETFrameworkCLRMemoryCollections, 3377 Dims: module.Dims{ 3378 {ID: "netframework_%s_clrmemory_collections_total", Name: "gc", Algo: module.Incremental}, 3379 }, 3380 } 3381 netFrameworkCLRMemoryInducedGC = module.Chart{ 3382 OverModule: "netframework", 3383 ID: "netframework_%s_clrmemory_induced_gc", 3384 Title: "Garbage collections induced", 3385 Units: "gc/s", 3386 Fam: "memory", 3387 Ctx: "netframework.clrmemory_induced_gc", 3388 Priority: prioNETFrameworkCLRMemoryInducedGC, 3389 Dims: module.Dims{ 3390 {ID: "netframework_%s_clrmemory_induced_gc_total", Name: "gc", Algo: module.Incremental}, 3391 }, 3392 } 3393 netFrameworkCLRMemoryNumberPinnedObjects = module.Chart{ 3394 OverModule: "netframework", 3395 ID: "netframework_%s_clrmemory_number_pinned_objects", 3396 Title: "Pinned objects encountered", 3397 Units: "objects", 3398 Fam: "memory", 3399 Ctx: "netframework.clrmemory_number_pinned_objects", 3400 Priority: prioNETFrameworkCLRMemoryNumberPinnedObjects, 3401 Dims: module.Dims{ 3402 {ID: "netframework_%s_clrmemory_number_pinned_objects", Name: "pinned"}, 3403 }, 3404 } 3405 netFrameworkCLRMemoryNumberSinkBlocksInUse = module.Chart{ 3406 OverModule: "netframework", 3407 ID: "netframework_%s_clrmemory_number_sink_blocks_in_use", 3408 Title: "Synchronization blocks in use", 3409 Units: "blocks", 3410 Fam: "memory", 3411 Ctx: "netframework.clrmemory_number_sink_blocks_in_use", 3412 Priority: prioNETFrameworkCLRMemoryNumberSinkBlocksInUse, 3413 Dims: module.Dims{ 3414 {ID: "netframework_%s_clrmemory_number_sink_blocksinuse", Name: "used"}, 3415 }, 3416 } 3417 netFrameworkCLRMemoryCommitted = module.Chart{ 3418 OverModule: "netframework", 3419 ID: "netframework_%s_clrmemory_committed", 3420 Title: "Virtual memory committed by GC", 3421 Units: "bytes", 3422 Fam: "memory", 3423 Ctx: "netframework.clrmemory_committed", 3424 Priority: prioNETFrameworkCLRMemoryCommitted, 3425 Dims: module.Dims{ 3426 {ID: "netframework_%s_clrmemory_committed_bytes", Name: "committed"}, 3427 }, 3428 } 3429 netFrameworkCLRMemoryReserved = module.Chart{ 3430 OverModule: "netframework", 3431 ID: "netframework_%s_clrmemory_reserved", 3432 Title: "Virtual memory reserved by GC", 3433 Units: "bytes", 3434 Fam: "memory", 3435 Ctx: "netframework.clrmemory_reserved", 3436 Priority: prioNETFrameworkCLRMemoryReserved, 3437 Dims: module.Dims{ 3438 {ID: "netframework_%s_clrmemory_reserved_bytes", Name: "reserved"}, 3439 }, 3440 } 3441 netFrameworkCLRMemoryGCTime = module.Chart{ 3442 OverModule: "netframework", 3443 ID: "netframework_%s_clrmemory_gc_time", 3444 Title: "Time spent on GC", 3445 Units: "percentage", 3446 Fam: "memory", 3447 Ctx: "netframework.clrmemory_gc_time", 3448 Priority: prioNETFrameworkCLRMemoryGCTime, 3449 Dims: module.Dims{ 3450 {ID: "netframework_%s_clrmemory_gc_time_percent", Name: "time"}, 3451 }, 3452 } 3453 3454 // Remoting 3455 netFrameworkCLRRemotingChannels = module.Chart{ 3456 OverModule: "netframework", 3457 ID: "netframework_%s_clrremoting_channels", 3458 Title: "Registered channels", 3459 Units: "channels/s", 3460 Fam: "remoting", 3461 Ctx: "netframework.clrremoting_channels", 3462 Priority: prioNETFrameworkCLRRemotingChannels, 3463 Dims: module.Dims{ 3464 {ID: "netframework_%s_clrremoting_channels_total", Name: "registered", Algo: module.Incremental}, 3465 }, 3466 } 3467 netFrameworkCLRRemotingContextBoundClassesLoaded = module.Chart{ 3468 OverModule: "netframework", 3469 ID: "netframework_%s_clrremoting_context_bound_classes_loaded", 3470 Title: "Loaded context-bound classes", 3471 Units: "classes", 3472 Fam: "remoting", 3473 Ctx: "netframework.clrremoting_context_bound_classes_loaded", 3474 Priority: prioNETFrameworkCLRRemotingContextBoundClassesLoaded, 3475 Dims: module.Dims{ 3476 {ID: "netframework_%s_clrremoting_context_bound_classes_loaded", Name: "loaded"}, 3477 }, 3478 } 3479 netFrameworkCLRRemotingContextBoundObjects = module.Chart{ 3480 OverModule: "netframework", 3481 ID: "netframework_%s_clrremoting_context_bound_objects", 3482 Title: "Allocated context-bound objects", 3483 Units: "objects/s", 3484 Fam: "remoting", 3485 Ctx: "netframework.clrremoting_context_bound_objects", 3486 Priority: prioNETFrameworkCLRRemotingContextBoundObjects, 3487 Dims: module.Dims{ 3488 {ID: "netframework_%s_clrremoting_context_bound_objects_total", Name: "allocated", Algo: module.Incremental}, 3489 }, 3490 } 3491 netFrameworkCLRRemotingContextProxies = module.Chart{ 3492 OverModule: "netframework", 3493 ID: "netframework_%s_clrremoting_context_proxies", 3494 Title: "Remoting proxy objects", 3495 Units: "objects/s", 3496 Fam: "remoting", 3497 Ctx: "netframework.clrremoting_context_proxies", 3498 Priority: prioNETFrameworkCLRRemotingContextProxies, 3499 Dims: module.Dims{ 3500 {ID: "netframework_%s_clrremoting_context_proxies_total", Name: "objects", Algo: module.Incremental}, 3501 }, 3502 } 3503 netFrameworkCLRRemotingContexts = module.Chart{ 3504 OverModule: "netframework", 3505 ID: "netframework_%s_clrremoting_contexts", 3506 Title: "Total of remoting contexts", 3507 Units: "contexts", 3508 Fam: "remoting", 3509 Ctx: "netframework.clrremoting_contexts", 3510 Priority: prioNETFrameworkCLRRemotingContexts, 3511 Dims: module.Dims{ 3512 {ID: "netframework_%s_clrremoting_contexts", Name: "contexts"}, 3513 }, 3514 } 3515 netFrameworkCLRRemotingCalls = module.Chart{ 3516 OverModule: "netframework", 3517 ID: "netframework_%s_clrremoting_calls", 3518 Title: "Remote Procedure Calls (RPC) invoked", 3519 Units: "calls/s", 3520 Fam: "remoting", 3521 Ctx: "netframework.clrremoting_remote_calls", 3522 Priority: prioNETFrameworkCLRRemotingRemoteCalls, 3523 Dims: module.Dims{ 3524 {ID: "netframework_%s_clrremoting_remote_calls_total", Name: "rpc", Algo: module.Incremental}, 3525 }, 3526 } 3527 3528 // Security 3529 netFrameworkCLRSecurityLinkTimeChecks = module.Chart{ 3530 OverModule: "netframework", 3531 ID: "netframework_%s_clrsecurity_link_time_checks", 3532 Title: "Link-time code access security checks", 3533 Units: "checks/s", 3534 Fam: "security", 3535 Ctx: "netframework.clrsecurity_link_time_checks", 3536 Priority: prioNETFrameworkCLRSecurityLinkTimeChecks, 3537 Dims: module.Dims{ 3538 {ID: "netframework_%s_clrsecurity_link_time_checks_total", Name: "linktime", Algo: module.Incremental}, 3539 }, 3540 } 3541 netFrameworkCLRSecurityChecksTime = module.Chart{ 3542 OverModule: "netframework", 3543 ID: "netframework_%s_clrsecurity_checks_time", 3544 Title: "Time spent performing runtime code access security checks", 3545 Units: "percentage", 3546 Fam: "security", 3547 Ctx: "netframework.clrsecurity_checks_time", 3548 Priority: prioNETFrameworkCLRSecurityRTChecksTime, 3549 Dims: module.Dims{ 3550 {ID: "netframework_%s_clrsecurity_checks_time_percent", Name: "time"}, 3551 }, 3552 } 3553 netFrameworkCLRSecurityStackWalkDepth = module.Chart{ 3554 OverModule: "netframework", 3555 ID: "netframework_%s_clrsecurity_stack_walk_depth", 3556 Title: "Depth of the stack", 3557 Units: "depth", 3558 Fam: "security", 3559 Ctx: "netframework.clrsecurity_stack_walk_depth", 3560 Priority: prioNETFrameworkCLRSecurityStackWalkDepth, 3561 Dims: module.Dims{ 3562 {ID: "netframework_%s_clrsecurity_stack_walk_depth", Name: "stack"}, 3563 }, 3564 } 3565 netFrameworkCLRSecurityRuntimeChecks = module.Chart{ 3566 OverModule: "netframework", 3567 ID: "netframework_%s_clrsecurity_runtime_checks", 3568 Title: "Runtime code access security checks performed", 3569 Units: "checks/s", 3570 Fam: "security", 3571 Ctx: "netframework.clrsecurity_runtime_checks", 3572 Priority: prioNETFrameworkCLRSecurityRuntimeChecks, 3573 Dims: module.Dims{ 3574 {ID: "netframework_%s_clrsecurity_runtime_checks_total", Name: "runtime", Algo: module.Incremental}, 3575 }, 3576 } 3577 ) 3578 3579 // Service 3580 var ( 3581 serviceChartsTmpl = module.Charts{ 3582 serviceStateChartTmpl.Copy(), 3583 serviceStatusChartTmpl.Copy(), 3584 } 3585 serviceStateChartTmpl = module.Chart{ 3586 ID: "service_%s_state", 3587 Title: "Service state", 3588 Units: "state", 3589 Fam: "services", 3590 Ctx: "windows.service_state", 3591 Priority: prioServiceState, 3592 Dims: module.Dims{ 3593 {ID: "service_%s_state_running", Name: "running"}, 3594 {ID: "service_%s_state_stopped", Name: "stopped"}, 3595 {ID: "service_%s_state_start_pending", Name: "start_pending"}, 3596 {ID: "service_%s_state_stop_pending", Name: "stop_pending"}, 3597 {ID: "service_%s_state_continue_pending", Name: "continue_pending"}, 3598 {ID: "service_%s_state_pause_pending", Name: "pause_pending"}, 3599 {ID: "service_%s_state_paused", Name: "paused"}, 3600 {ID: "service_%s_state_unknown", Name: "unknown"}, 3601 }, 3602 } 3603 serviceStatusChartTmpl = module.Chart{ 3604 ID: "service_%s_status", 3605 Title: "Service status", 3606 Units: "status", 3607 Fam: "services", 3608 Ctx: "windows.service_status", 3609 Priority: prioServiceStatus, 3610 Dims: module.Dims{ 3611 {ID: "service_%s_status_ok", Name: "ok"}, 3612 {ID: "service_%s_status_error", Name: "error"}, 3613 {ID: "service_%s_status_unknown", Name: "unknown"}, 3614 {ID: "service_%s_status_degraded", Name: "degraded"}, 3615 {ID: "service_%s_status_pred_fail", Name: "pred_fail"}, 3616 {ID: "service_%s_status_starting", Name: "starting"}, 3617 {ID: "service_%s_status_stopping", Name: "stopping"}, 3618 {ID: "service_%s_status_service", Name: "service"}, 3619 {ID: "service_%s_status_stressed", Name: "stressed"}, 3620 {ID: "service_%s_status_nonrecover", Name: "nonrecover"}, 3621 {ID: "service_%s_status_no_contact", Name: "no_contact"}, 3622 {ID: "service_%s_status_lost_comm", Name: "lost_comm"}, 3623 }, 3624 } 3625 ) 3626 3627 // HyperV 3628 var ( 3629 hypervChartsTmpl = module.Charts{ 3630 hypervVirtualMachinesHealthChart.Copy(), 3631 hypervRootPartitionDeviceSpacePagesChart.Copy(), 3632 hypervRootPartitionGPASpacePagesChart.Copy(), 3633 hypervRootPartitionGPASpaceModificationsChart.Copy(), 3634 hypervRootPartitionAttachedDevicesChart.Copy(), 3635 hypervRootPartitionDepositedPagesChart.Copy(), 3636 hypervRootPartitionSkippedInterrupts.Copy(), 3637 hypervRootPartitionDeviceDMAErrorsChart.Copy(), 3638 hypervRootPartitionDeviceInterruptErrorsChart.Copy(), 3639 hypervRootPartitionDeviceInterruptThrottledEventsChart.Copy(), 3640 hypervRootPartitionIOTlbFlushChart.Copy(), 3641 hypervRootPartitionAddressSpaceChart.Copy(), 3642 hypervRootPartitionVirtualTlbFlushEntries.Copy(), 3643 hypervRootPartitionVirtualTlbPages.Copy(), 3644 } 3645 hypervVirtualMachinesHealthChart = module.Chart{ 3646 OverModule: "hyperv", 3647 ID: "health_vm", 3648 Title: "Virtual machines health status", 3649 Units: "vms", 3650 Fam: "vms health", 3651 Ctx: "hyperv.vms_health", 3652 Priority: prioHypervVMHealth, 3653 Type: module.Stacked, 3654 Dims: module.Dims{ 3655 {ID: "hyperv_health_ok", Name: "ok"}, 3656 {ID: "hyperv_health_critical", Name: "critical"}, 3657 }, 3658 } 3659 hypervRootPartitionDeviceSpacePagesChart = module.Chart{ 3660 OverModule: "hyperv", 3661 ID: "root_partition_device_space_pages", 3662 Title: "Root partition pages in the device space", 3663 Units: "pages", 3664 Fam: "root partition", 3665 Ctx: "hyperv.root_partition_device_space_pages", 3666 Priority: prioHypervRootPartitionDeviceSpacePages, 3667 Dims: module.Dims{ 3668 {ID: "hyperv_root_partition_4K_device_pages", Name: "4K"}, 3669 {ID: "hyperv_root_partition_2M_device_pages", Name: "2M"}, 3670 {ID: "hyperv_root_partition_1G_device_pages", Name: "1G"}, 3671 }, 3672 } 3673 hypervRootPartitionGPASpacePagesChart = module.Chart{ 3674 OverModule: "hyperv", 3675 ID: "root_partition_gpa_space_pages", 3676 Title: "Root partition pages in the GPA space", 3677 Units: "pages", 3678 Fam: "root partition", 3679 Ctx: "windows.hyperv_root_partition_gpa_space_pages", 3680 Priority: prioHypervRootPartitionGPASpacePages, 3681 Dims: module.Dims{ 3682 {ID: "hyperv_root_partition_4K_gpa_pages", Name: "4K"}, 3683 {ID: "hyperv_root_partition_2M_gpa_pages", Name: "2M"}, 3684 {ID: "hyperv_root_partition_1G_gpa_pages", Name: "1G"}, 3685 }, 3686 } 3687 hypervRootPartitionGPASpaceModificationsChart = module.Chart{ 3688 OverModule: "hyperv", 3689 ID: "root_partition_gpa_space_modifications", 3690 Title: "Root partition GPA space modifications", 3691 Units: "modifications/s", 3692 Fam: "root partition", 3693 Ctx: "hyperv.root_partition_gpa_space_modifications", 3694 Priority: prioHypervRootPartitionGPASpaceModifications, 3695 Dims: module.Dims{ 3696 {ID: "hyperv_root_partition_gpa_space_modifications", Name: "gpa", Algo: module.Incremental}, 3697 }, 3698 } 3699 hypervRootPartitionAttachedDevicesChart = module.Chart{ 3700 OverModule: "hyperv", 3701 ID: "root_partition_attached_devices", 3702 Title: "Root partition attached devices", 3703 Units: "devices", 3704 Fam: "root partition", 3705 Ctx: "hyperv.root_partition_attached_devices", 3706 Priority: prioHypervRootPartitionAttachedDevices, 3707 Dims: module.Dims{ 3708 {ID: "hyperv_root_partition_attached_devices", Name: "attached"}, 3709 }, 3710 } 3711 hypervRootPartitionDepositedPagesChart = module.Chart{ 3712 OverModule: "hyperv", 3713 ID: "root_partition_deposited_pages", 3714 Title: "Root partition deposited pages", 3715 Units: "pages", 3716 Fam: "root partition", 3717 Ctx: "hyperv.root_partition_deposited_pages", 3718 Priority: prioHypervRootPartitionDepositedPages, 3719 Dims: module.Dims{ 3720 {ID: "hyperv_root_partition_deposited_pages", Name: "deposited"}, 3721 }, 3722 } 3723 hypervRootPartitionSkippedInterrupts = module.Chart{ 3724 OverModule: "hyperv", 3725 ID: "root_partition_skipped_interrupts", 3726 Title: "Root partition skipped interrupts", 3727 Units: "interrupts", 3728 Fam: "root partition", 3729 Ctx: "hyperv.root_partition_skipped_interrupts", 3730 Priority: prioHypervRootPartitionSkippedInterrupts, 3731 Dims: module.Dims{ 3732 {ID: "hyperv_root_partition_physical_pages_allocated", Name: "skipped"}, 3733 }, 3734 } 3735 hypervRootPartitionDeviceDMAErrorsChart = module.Chart{ 3736 OverModule: "hyperv", 3737 ID: "root_partition_device_dma_errors", 3738 Title: "Root partition illegal DMA requests", 3739 Units: "requests", 3740 Fam: "root partition", 3741 Ctx: "hyperv.root_partition_device_dma_errors", 3742 Priority: prioHypervRootPartitionDeviceDMAErrors, 3743 Dims: module.Dims{ 3744 {ID: "hyperv_root_partition_deposited_pages", Name: "illegal_dma"}, 3745 }, 3746 } 3747 hypervRootPartitionDeviceInterruptErrorsChart = module.Chart{ 3748 OverModule: "hyperv", 3749 ID: "partition_device_interrupt_errors", 3750 Title: "Root partition illegal interrupt requests", 3751 Units: "requests", 3752 Fam: "root partition", 3753 Ctx: "hyperv.root_partition_device_interrupt_errors", 3754 Priority: prioHypervRootPartitionDeviceInterruptErrors, 3755 Dims: module.Dims{ 3756 {ID: "hyperv_root_partition_device_interrupt_errors", Name: "illegal_interrupt"}, 3757 }, 3758 } 3759 hypervRootPartitionDeviceInterruptThrottledEventsChart = module.Chart{ 3760 OverModule: "hyperv", 3761 ID: "root_partition_device_interrupt_throttle_events", 3762 Title: "Root partition throttled interrupts", 3763 Units: "events", 3764 Fam: "root partition", 3765 Ctx: "hyperv.root_partition_device_interrupt_throttle_events", 3766 Priority: prioHypervRootPartitionDeviceInterruptThrottleEvents, 3767 Dims: module.Dims{ 3768 {ID: "hyperv_root_partition_device_interrupt_throttle_events", Name: "throttling"}, 3769 }, 3770 } 3771 hypervRootPartitionIOTlbFlushChart = module.Chart{ 3772 OverModule: "hyperv", 3773 ID: "root_partition_io_tbl_flush", 3774 Title: "Root partition flushes of I/O TLBs", 3775 Units: "flushes/s", 3776 Fam: "root partition", 3777 Ctx: "hyperv.root_partition_io_tlb_flush", 3778 Priority: prioHypervRootPartitionIOTlbFlush, 3779 Dims: module.Dims{ 3780 {ID: "hyperv_root_partition_io_tlb_flush", Name: "flushes", Algo: module.Incremental}, 3781 }, 3782 } 3783 hypervRootPartitionAddressSpaceChart = module.Chart{ 3784 OverModule: "hyperv", 3785 ID: "root_partition_address_space", 3786 Title: "Root partition address spaces in the virtual TLB", 3787 Units: "address spaces", 3788 Fam: "root partition", 3789 Ctx: "hyperv.root_partition_address_space", 3790 Priority: prioHypervRootPartitionAddressSpace, 3791 Dims: module.Dims{ 3792 {ID: "hyperv_root_partition_address_spaces", Name: "address_spaces"}, 3793 }, 3794 } 3795 hypervRootPartitionVirtualTlbFlushEntries = module.Chart{ 3796 OverModule: "hyperv", 3797 ID: "root_partition_virtual_tbl_flush_entries", 3798 Title: "Root partition flushes of the entire virtual TLB", 3799 Units: "flushes/s", 3800 Fam: "root partition", 3801 Ctx: "hyperv.root_partition_virtual_tlb_flush_entries", 3802 Priority: prioHypervRootPartitionVirtualTlbFlushEntires, 3803 Dims: module.Dims{ 3804 {ID: "hyperv_root_partition_virtual_tlb_flush_entires", Name: "flushes", Algo: module.Incremental}, 3805 }, 3806 } 3807 hypervRootPartitionVirtualTlbPages = module.Chart{ 3808 OverModule: "hyperv", 3809 ID: "root_partition_virtual_tlb_pages", 3810 Title: "Root partition pages used by the virtual TLB", 3811 Units: "pages", 3812 Fam: "root partition", 3813 Ctx: "hyperv.root_partition_virtual_tlb_pages", 3814 Priority: prioHypervRootPartitionVirtualTlbPages, 3815 Dims: module.Dims{ 3816 {ID: "hyperv_root_partition_virtual_tlb_pages", Name: "used"}, 3817 }, 3818 } 3819 ) 3820 3821 // HyperV VM Memory 3822 var ( 3823 hypervVMChartsTemplate = module.Charts{ 3824 hypervHypervVMCPUUsageChartTmpl.Copy(), 3825 hypervHypervVMMemoryPhysicalChartTmpl.Copy(), 3826 hypervHypervVMMemoryPhysicalGuestVisibleChartTmpl.Copy(), 3827 hypervHypervVMMemoryPressureCurrentChartTmpl.Copy(), 3828 hypervVIDPhysicalPagesAllocatedChartTmpl.Copy(), 3829 hypervVIDRemotePhysicalPagesChartTmpl.Copy(), 3830 } 3831 hypervHypervVMCPUUsageChartTmpl = module.Chart{ 3832 OverModule: "hyperv", 3833 ID: "vm_%s_cpu_usage", 3834 Title: "VM CPU usage (100% = 1 core)", 3835 Units: "percentage", 3836 Fam: "vm cpu", 3837 Ctx: "hyperv.vm_cpu_usage", 3838 Priority: prioHypervVMCPUUsage, 3839 Type: module.Stacked, 3840 Dims: module.Dims{ 3841 {ID: "hyperv_vm_%s_cpu_guest_run_time", Name: "guest", Div: 1e5, Algo: module.Incremental}, 3842 {ID: "hyperv_vm_%s_cpu_hypervisor_run_time", Name: "hypervisor", Div: 1e5, Algo: module.Incremental}, 3843 {ID: "hyperv_vm_%s_cpu_remote_run_time", Name: "remote", Div: 1e5, Algo: module.Incremental}, 3844 }, 3845 } 3846 hypervHypervVMMemoryPhysicalChartTmpl = module.Chart{ 3847 OverModule: "hyperv", 3848 ID: "vm_%s_memory_physical", 3849 Title: "VM assigned memory", 3850 Units: "MiB", 3851 Fam: "vm mem", 3852 Ctx: "hyperv.vm_memory_physical", 3853 Priority: prioHypervVMMemoryPhysical, 3854 Dims: module.Dims{ 3855 {ID: "hyperv_vm_%s_memory_physical", Name: "assigned_memory"}, 3856 }, 3857 } 3858 hypervHypervVMMemoryPhysicalGuestVisibleChartTmpl = module.Chart{ 3859 OverModule: "hyperv", 3860 ID: "vm_%s_memory_physical_guest_visible", 3861 Title: "VM guest visible memory", 3862 Units: "MiB", 3863 Fam: "vm mem", 3864 Ctx: "hyperv.vm_memory_physical_guest_visible", 3865 Priority: prioHypervVMMemoryPhysicalGuestVisible, 3866 Dims: module.Dims{ 3867 {ID: "hyperv_vm_%s_memory_physical_guest_visible", Name: "visible_memory"}, 3868 }, 3869 } 3870 hypervHypervVMMemoryPressureCurrentChartTmpl = module.Chart{ 3871 OverModule: "hyperv", 3872 ID: "vm_%s_memory_pressure_current", 3873 Title: "VM current pressure", 3874 Units: "percentage", 3875 Fam: "vm mem", 3876 Ctx: "hyperv.vm_memory_pressure_current", 3877 Priority: prioHypervVMMemoryPressureCurrent, 3878 Dims: module.Dims{ 3879 {ID: "hyperv_vm_%s_memory_pressure_current", Name: "pressure"}, 3880 }, 3881 } 3882 hypervVIDPhysicalPagesAllocatedChartTmpl = module.Chart{ 3883 OverModule: "hyperv", 3884 ID: "vm_%s_vid_physical_pages_allocated", 3885 Title: "VM physical pages allocated", 3886 Units: "pages", 3887 Fam: "vm mem", 3888 Ctx: "hyperv.vm_vid_physical_pages_allocated", 3889 Priority: prioHypervVIDPhysicalPagesAllocated, 3890 Dims: module.Dims{ 3891 {ID: "hyperv_vid_%s_physical_pages_allocated", Name: "allocated"}, 3892 }, 3893 } 3894 hypervVIDRemotePhysicalPagesChartTmpl = module.Chart{ 3895 OverModule: "hyperv", 3896 ID: "vm_%s_remote_physical_pages", 3897 Title: "VM physical pages not allocated from the preferred NUMA node", 3898 Units: "pages", 3899 Fam: "vm mem", 3900 Ctx: "hyperv.vm_vid_remote_physical_pages", 3901 Priority: prioHypervVIDRemotePhysicalPages, 3902 Dims: module.Dims{ 3903 {ID: "hyperv_vid_%s_remote_physical_pages", Name: "remote_physical"}, 3904 }, 3905 } 3906 ) 3907 3908 // HyperV VM storage device 3909 var ( 3910 hypervVMDeviceChartsTemplate = module.Charts{ 3911 hypervVMDeviceIOChartTmpl.Copy(), 3912 hypervVMDeviceIOPSChartTmpl.Copy(), 3913 hypervVMDeviceErrorCountChartTmpl.Copy(), 3914 } 3915 hypervVMDeviceIOChartTmpl = module.Chart{ 3916 OverModule: "hyperv", 3917 ID: "vm_device_%s_bytes_read", 3918 Title: "VM storage device IO", 3919 Units: "bytes/s", 3920 Fam: "vm disk", 3921 Ctx: "hyperv.vm_device_bytes", 3922 Priority: prioHypervVMDeviceBytes, 3923 Type: module.Area, 3924 Dims: module.Dims{ 3925 {ID: "hyperv_vm_device_%s_bytes_read", Name: "read", Algo: module.Incremental}, 3926 {ID: "hyperv_vm_device_%s_bytes_written", Name: "written", Algo: module.Incremental}, 3927 }, 3928 } 3929 hypervVMDeviceIOPSChartTmpl = module.Chart{ 3930 OverModule: "hyperv", 3931 ID: "vm_device_%s_operation_read", 3932 Title: "VM storage device IOPS", 3933 Units: "operations/s", 3934 Fam: "vm disk", 3935 Ctx: "hyperv.vm_device_operations", 3936 Priority: prioHypervVMDeviceOperations, 3937 Dims: module.Dims{ 3938 {ID: "hyperv_vm_device_%s_operations_read", Name: "read", Algo: module.Incremental}, 3939 {ID: "hyperv_vm_device_%s_operations_written", Name: "write", Algo: module.Incremental}, 3940 }, 3941 } 3942 hypervVMDeviceErrorCountChartTmpl = module.Chart{ 3943 OverModule: "hyperv", 3944 ID: "vm_device_%s_error_count", 3945 Title: "VM storage device errors", 3946 Units: "errors/s", 3947 Fam: "vm disk", 3948 Ctx: "hyperv.vm_device_errors", 3949 Priority: prioHypervVMDeviceErrors, 3950 Dims: module.Dims{ 3951 {ID: "hyperv_vm_device_%s_error_count", Name: "errors", Algo: module.Incremental}, 3952 }, 3953 } 3954 ) 3955 3956 // HyperV VM network interface 3957 var ( 3958 hypervVMInterfaceChartsTemplate = module.Charts{ 3959 hypervVMInterfaceTrafficChartTmpl.Copy(), 3960 hypervVMInterfacePacketsChartTmpl.Copy(), 3961 hypervVMInterfacePacketsDroppedChartTmpl.Copy(), 3962 } 3963 3964 hypervVMInterfaceTrafficChartTmpl = module.Chart{ 3965 OverModule: "hyperv", 3966 ID: "vm_interface_%s_bytes", 3967 Title: "VM interface traffic", 3968 Units: "bytes/s", 3969 Fam: "vm net", 3970 Ctx: "hyperv.vm_interface_bytes", 3971 Priority: prioHypervVMInterfaceBytes, 3972 Type: module.Area, 3973 Dims: module.Dims{ 3974 {ID: "hyperv_vm_interface_%s_bytes_received", Name: "received", Algo: module.Incremental}, 3975 {ID: "hyperv_vm_interface_%s_bytes_sent", Name: "sent", Algo: module.Incremental}, 3976 }, 3977 } 3978 hypervVMInterfacePacketsChartTmpl = module.Chart{ 3979 OverModule: "hyperv", 3980 ID: "vm_interface_%s_packets", 3981 Title: "VM interface packets", 3982 Units: "packets/s", 3983 Fam: "vm net", 3984 Ctx: "hyperv.vm_interface_packets", 3985 Priority: prioHypervVMInterfacePackets, 3986 Dims: module.Dims{ 3987 {ID: "hyperv_vm_interface_%s_packets_received", Name: "received", Algo: module.Incremental}, 3988 {ID: "hyperv_vm_interface_%s_packets_sent", Name: "sent", Algo: module.Incremental}, 3989 }, 3990 } 3991 hypervVMInterfacePacketsDroppedChartTmpl = module.Chart{ 3992 OverModule: "hyperv", 3993 ID: "vm_interface_%s_packets_dropped", 3994 Title: "VM interface packets dropped", 3995 Units: "drops/s", 3996 Fam: "vm net", 3997 Ctx: "hyperv.vm_interface_packets_dropped", 3998 Priority: prioHypervVMInterfacePacketsDropped, 3999 Dims: module.Dims{ 4000 {ID: "hyperv_vm_interface_%s_packets_incoming_dropped", Name: "incoming", Algo: module.Incremental}, 4001 {ID: "hyperv_vm_interface_%s_packets_outgoing_dropped", Name: "outgoing", Algo: module.Incremental}, 4002 }, 4003 } 4004 ) 4005 4006 // HyperV Virtual Switch 4007 var ( 4008 hypervVswitchChartsTemplate = module.Charts{ 4009 hypervVswitchTrafficChartTmpl.Copy(), 4010 hypervVswitchPacketsChartTmpl.Copy(), 4011 hypervVswitchDirectedPacketsChartTmpl.Copy(), 4012 hypervVswitchBroadcastPacketsChartTmpl.Copy(), 4013 hypervVswitchMulticastPacketsChartTmpl.Copy(), 4014 hypervVswitchDroppedPacketsChartTmpl.Copy(), 4015 hypervVswitchExtensionDroppedPacketsChartTmpl.Copy(), 4016 hypervVswitchPacketsFloodedTotalChartTmpl.Copy(), 4017 hypervVswitchLearnedMACAddressChartTmpl.Copy(), 4018 hypervVswitchPurgedMACAddressChartTmpl.Copy(), 4019 } 4020 4021 hypervVswitchTrafficChartTmpl = module.Chart{ 4022 OverModule: "hyperv", 4023 ID: "vswitch_%s_traffic", 4024 Title: "Virtual switch traffic", 4025 Units: "bytes/s", 4026 Fam: "vswitch traffic", 4027 Ctx: "hyperv.vswitch_bytes", 4028 Priority: prioHypervVswitchTrafficTotal, 4029 Type: module.Area, 4030 Dims: module.Dims{ 4031 {ID: "hyperv_vswitch_%s_bytes_received_total", Name: "received", Algo: module.Incremental}, 4032 {ID: "hyperv_vswitch_%s_bytes_sent_total", Name: "sent", Algo: module.Incremental}, 4033 }, 4034 } 4035 hypervVswitchPacketsChartTmpl = module.Chart{ 4036 OverModule: "hyperv", 4037 ID: "vswitch_%s_packets", 4038 Title: "Virtual switch packets", 4039 Units: "packets/s", 4040 Fam: "vswitch packets", 4041 Ctx: "hyperv.vswitch_packets", 4042 Priority: prioHypervVswitchPackets, 4043 Dims: module.Dims{ 4044 {ID: "hyperv_vswitch_%s_packets_received_total", Name: "received", Algo: module.Incremental}, 4045 // FIXME: https://github.com/prometheus-community/windows_exporter/pull/1201 4046 //{ID: "hyperv_vswitch_%s_packets_sent_total", Name: "sent", Algo: module.Incremental}, 4047 }, 4048 } 4049 hypervVswitchDirectedPacketsChartTmpl = module.Chart{ 4050 OverModule: "hyperv", 4051 ID: "vswitch_%s_directed_packets", 4052 Title: "Virtual switch directed packets", 4053 Units: "packets/s", 4054 Fam: "vswitch packets", 4055 Ctx: "hyperv.vswitch_directed_packets", 4056 Priority: prioHypervVswitchDirectedPackets, 4057 Dims: module.Dims{ 4058 {ID: "hyperv_vswitch_%s_directed_packets_received_total", Name: "received", Algo: module.Incremental}, 4059 {ID: "hyperv_vswitch_%s_directed_packets_send_total", Name: "sent", Algo: module.Incremental}, 4060 }, 4061 } 4062 hypervVswitchBroadcastPacketsChartTmpl = module.Chart{ 4063 OverModule: "hyperv", 4064 ID: "vswitch_%s_broadcast_packets", 4065 Title: "Virtual switch broadcast packets", 4066 Units: "packets/s", 4067 Fam: "vswitch packets", 4068 Ctx: "hyperv.vswitch_broadcast_packets", 4069 Priority: prioHypervVswitchBroadcastPackets, 4070 Dims: module.Dims{ 4071 {ID: "hyperv_vswitch_%s_broadcast_packets_received_total", Name: "received", Algo: module.Incremental}, 4072 {ID: "hyperv_vswitch_%s_broadcast_packets_sent_total", Name: "sent", Algo: module.Incremental}, 4073 }, 4074 } 4075 hypervVswitchMulticastPacketsChartTmpl = module.Chart{ 4076 OverModule: "hyperv", 4077 ID: "vswitch_%s_multicast_packets", 4078 Title: "Virtual switch multicast packets", 4079 Units: "packets/s", 4080 Fam: "vswitch packets", 4081 Ctx: "hyperv.vswitch_multicast_packets", 4082 Priority: prioHypervVswitchMulticastPackets, 4083 Dims: module.Dims{ 4084 {ID: "hyperv_vswitch_%s_multicast_packets_received_total", Name: "received", Algo: module.Incremental}, 4085 {ID: "hyperv_vswitch_%s_multicast_packets_sent_total", Name: "sent", Algo: module.Incremental}, 4086 }, 4087 } 4088 hypervVswitchDroppedPacketsChartTmpl = module.Chart{ 4089 OverModule: "hyperv", 4090 ID: "vswitch_%s_dropped_packets", 4091 Title: "Virtual switch dropped packets", 4092 Units: "drops/s", 4093 Fam: "vswitch drops", 4094 Ctx: "hyperv.vswitch_dropped_packets", 4095 Priority: prioHypervVswitchDroppedPackets, 4096 Dims: module.Dims{ 4097 {ID: "hyperv_vswitch_%s_dropped_packets_incoming_total", Name: "incoming", Algo: module.Incremental}, 4098 {ID: "hyperv_vswitch_%s_dropped_packets_outcoming_total", Name: "outgoing", Algo: module.Incremental}, 4099 }, 4100 } 4101 hypervVswitchExtensionDroppedPacketsChartTmpl = module.Chart{ 4102 OverModule: "hyperv", 4103 ID: "vswitch_%s_extensions_dropped_packets_incoming", 4104 Title: "Virtual switch extensions dropped packets", 4105 Units: "drops/s", 4106 Fam: "vswitch drops", 4107 Ctx: "hyperv.vswitch_extensions_dropped_packets", 4108 Priority: prioHypervVswitchExtensionsDroppedPackets, 4109 Dims: module.Dims{ 4110 {ID: "hyperv_vswitch_%s_extensions_dropped_packets_incoming_total", Name: "incoming", Algo: module.Incremental}, 4111 {ID: "hyperv_vswitch_%s_extensions_dropped_packets_outcoming_total", Name: "outgoing", Algo: module.Incremental}, 4112 }, 4113 } 4114 hypervVswitchPacketsFloodedTotalChartTmpl = module.Chart{ 4115 OverModule: "hyperv", 4116 ID: "vswitch_%s_packets_flooded", 4117 Title: "Virtual switch flooded packets", 4118 Units: "packets/s", 4119 Fam: "vswitch flood", 4120 Ctx: "hyperv.vswitch_packets_flooded", 4121 Priority: prioHypervVswitchPacketsFlooded, 4122 Dims: module.Dims{ 4123 {ID: "hyperv_vswitch_%s_packets_flooded_total", Name: "flooded", Algo: module.Incremental}, 4124 }, 4125 } 4126 hypervVswitchLearnedMACAddressChartTmpl = module.Chart{ 4127 OverModule: "hyperv", 4128 ID: "vswitch_%s_learned_mac_addresses", 4129 Title: "Virtual switch learned MAC addresses", 4130 Units: "mac addresses/s", 4131 Fam: "vswitch mac addresses", 4132 Ctx: "hyperv.vswitch_learned_mac_addresses", 4133 Priority: prioHypervVswitchLearnedMACAddresses, 4134 Dims: module.Dims{ 4135 {ID: "hyperv_vswitch_%s_learned_mac_addresses_total", Name: "learned", Algo: module.Incremental}, 4136 }, 4137 } 4138 hypervVswitchPurgedMACAddressChartTmpl = module.Chart{ 4139 OverModule: "hyperv", 4140 ID: "vswitch_%s_purged_mac_addresses", 4141 Title: "Virtual switch purged MAC addresses", 4142 Units: "mac addresses/s", 4143 Fam: "vswitch mac addresses", 4144 Ctx: "hyperv.vswitch_purged_mac_addresses", 4145 Priority: prioHypervVswitchPurgeMACAddress, 4146 Dims: module.Dims{ 4147 {ID: "hyperv_vswitch_%s_purged_mac_addresses_total", Name: "purged", Algo: module.Incremental}, 4148 }, 4149 } 4150 ) 4151 4152 // Collectors 4153 var ( 4154 collectorChartsTmpl = module.Charts{ 4155 collectorDurationChartTmpl.Copy(), 4156 collectorStatusChartTmpl.Copy(), 4157 } 4158 collectorDurationChartTmpl = module.Chart{ 4159 ID: "collector_%s_duration", 4160 Title: "Duration of a data collection", 4161 Units: "seconds", 4162 Fam: "collection", 4163 Ctx: "windows.collector_duration", 4164 Priority: prioCollectorDuration, 4165 Dims: module.Dims{ 4166 {ID: "collector_%s_duration", Name: "duration", Div: precision}, 4167 }, 4168 } 4169 collectorStatusChartTmpl = module.Chart{ 4170 ID: "collector_%s_status", 4171 Title: "Status of a data collection", 4172 Units: "status", 4173 Fam: "collection", 4174 Ctx: "windows.collector_status", 4175 Priority: prioCollectorStatus, 4176 Dims: module.Dims{ 4177 {ID: "collector_%s_status_success", Name: "success"}, 4178 {ID: "collector_%s_status_fail", Name: "fail"}, 4179 }, 4180 } 4181 ) 4182 4183 func (w *Windows) addCPUCharts() { 4184 charts := cpuCharts.Copy() 4185 4186 if err := w.Charts().Add(*charts...); err != nil { 4187 w.Warning(err) 4188 } 4189 } 4190 4191 func (w *Windows) addCPUCoreCharts(core string) { 4192 charts := cpuCoreChartsTmpl.Copy() 4193 4194 for _, chart := range *charts { 4195 chart.ID = fmt.Sprintf(chart.ID, core) 4196 chart.Labels = []module.Label{ 4197 {Key: "core", Value: core}, 4198 } 4199 for _, dim := range chart.Dims { 4200 dim.ID = fmt.Sprintf(dim.ID, core) 4201 } 4202 } 4203 4204 if err := w.Charts().Add(*charts...); err != nil { 4205 w.Warning(err) 4206 } 4207 } 4208 4209 func (w *Windows) removeCPUCoreCharts(core string) { 4210 px := fmt.Sprintf("cpu_core_%s", core) 4211 w.removeCharts(px) 4212 } 4213 4214 func (w *Windows) addMemoryCharts() { 4215 charts := memCharts.Copy() 4216 4217 if err := w.Charts().Add(*charts...); err != nil { 4218 w.Warning(err) 4219 } 4220 } 4221 4222 func (w *Windows) addDiskCharts(disk string) { 4223 charts := diskChartsTmpl.Copy() 4224 4225 for _, chart := range *charts { 4226 chart.ID = fmt.Sprintf(chart.ID, disk) 4227 chart.Labels = []module.Label{ 4228 {Key: "disk", Value: disk}, 4229 } 4230 for _, dim := range chart.Dims { 4231 dim.ID = fmt.Sprintf(dim.ID, disk) 4232 } 4233 } 4234 4235 if err := w.Charts().Add(*charts...); err != nil { 4236 w.Warning(err) 4237 } 4238 } 4239 4240 func (w *Windows) removeDiskCharts(disk string) { 4241 px := fmt.Sprintf("logical_disk_%s", disk) 4242 w.removeCharts(px) 4243 } 4244 4245 func (w *Windows) addNICCharts(nic string) { 4246 charts := nicChartsTmpl.Copy() 4247 4248 for _, chart := range *charts { 4249 chart.ID = fmt.Sprintf(chart.ID, nic) 4250 chart.Labels = []module.Label{ 4251 {Key: "nic", Value: nic}, 4252 } 4253 for _, dim := range chart.Dims { 4254 dim.ID = fmt.Sprintf(dim.ID, nic) 4255 } 4256 } 4257 4258 if err := w.Charts().Add(*charts...); err != nil { 4259 w.Warning(err) 4260 } 4261 } 4262 4263 func (w *Windows) removeNICCharts(nic string) { 4264 px := fmt.Sprintf("nic_%s", nic) 4265 w.removeCharts(px) 4266 } 4267 4268 func (w *Windows) addTCPCharts() { 4269 charts := tcpCharts.Copy() 4270 4271 if err := w.Charts().Add(*charts...); err != nil { 4272 w.Warning(err) 4273 } 4274 } 4275 4276 func (w *Windows) addOSCharts() { 4277 charts := osCharts.Copy() 4278 4279 if err := w.Charts().Add(*charts...); err != nil { 4280 w.Warning(err) 4281 } 4282 } 4283 4284 func (w *Windows) addSystemCharts() { 4285 charts := systemCharts.Copy() 4286 4287 if err := w.Charts().Add(*charts...); err != nil { 4288 w.Warning(err) 4289 } 4290 } 4291 4292 func (w *Windows) addLogonCharts() { 4293 charts := logonCharts.Copy() 4294 4295 if err := w.Charts().Add(*charts...); err != nil { 4296 w.Warning(err) 4297 } 4298 } 4299 4300 func (w *Windows) addADFSCharts() { 4301 charts := adfsCharts.Copy() 4302 4303 if err := w.Charts().Add(*charts...); err != nil { 4304 w.Warning(err) 4305 } 4306 } 4307 4308 func (w *Windows) addExchangeCharts() { 4309 charts := exchangeCharts.Copy() 4310 4311 if err := w.Charts().Add(*charts...); err != nil { 4312 w.Warning(err) 4313 } 4314 } 4315 4316 func (w *Windows) addExchangeWorkloadCharts(name string) { 4317 charts := exchangeWorkloadChartsTmpl.Copy() 4318 4319 for _, chart := range *charts { 4320 chart.ID = fmt.Sprintf(chart.ID, name) 4321 chart.Labels = []module.Label{ 4322 {Key: "workload", Value: name}, 4323 } 4324 for _, dim := range chart.Dims { 4325 dim.ID = fmt.Sprintf(dim.ID, name) 4326 } 4327 } 4328 4329 if err := w.Charts().Add(*charts...); err != nil { 4330 w.Warning(err) 4331 } 4332 } 4333 4334 func (w *Windows) removeExchangeWorkloadCharts(name string) { 4335 px := fmt.Sprintf("exchange_workload_%s", name) 4336 w.removeCharts(px) 4337 } 4338 4339 func (w *Windows) addExchangeLDAPCharts(name string) { 4340 charts := exchangeLDAPChartsTmpl.Copy() 4341 4342 for _, chart := range *charts { 4343 chart.ID = fmt.Sprintf(chart.ID, name) 4344 chart.Labels = []module.Label{ 4345 {Key: "ldap_process", Value: name}, 4346 } 4347 for _, dim := range chart.Dims { 4348 dim.ID = fmt.Sprintf(dim.ID, name) 4349 } 4350 } 4351 4352 if err := w.Charts().Add(*charts...); err != nil { 4353 w.Warning(err) 4354 } 4355 } 4356 4357 func (w *Windows) removeExchangeLDAPCharts(name string) { 4358 px := fmt.Sprintf("exchange_ldap_%s", name) 4359 w.removeCharts(px) 4360 } 4361 4362 func (w *Windows) addExchangeHTTPProxyCharts(name string) { 4363 charts := exchangeHTTPProxyChartsTmpl.Copy() 4364 4365 for _, chart := range *charts { 4366 chart.ID = fmt.Sprintf(chart.ID, name) 4367 chart.Labels = []module.Label{ 4368 {Key: "http_proxy", Value: name}, 4369 } 4370 for _, dim := range chart.Dims { 4371 dim.ID = fmt.Sprintf(dim.ID, name) 4372 } 4373 } 4374 4375 if err := w.Charts().Add(*charts...); err != nil { 4376 w.Warning(err) 4377 } 4378 } 4379 4380 func (w *Windows) removeExchangeHTTPProxyCharts(name string) { 4381 px := fmt.Sprintf("exchange_http_proxy_%s", name) 4382 w.removeCharts(px) 4383 } 4384 4385 func (w *Windows) addThermalZoneCharts(zone string) { 4386 charts := thermalzoneChartsTmpl.Copy() 4387 4388 for _, chart := range *charts { 4389 chart.ID = fmt.Sprintf(chart.ID, zone) 4390 chart.Labels = []module.Label{ 4391 {Key: "thermalzone", Value: zone}, 4392 } 4393 for _, dim := range chart.Dims { 4394 dim.ID = fmt.Sprintf(dim.ID, zone) 4395 } 4396 } 4397 4398 if err := w.Charts().Add(*charts...); err != nil { 4399 w.Warning(err) 4400 } 4401 } 4402 4403 func (w *Windows) removeThermalZoneCharts(zone string) { 4404 px := fmt.Sprintf("thermalzone_%s", zone) 4405 w.removeCharts(px) 4406 } 4407 4408 func (w *Windows) addIISWebsiteCharts(website string) { 4409 charts := iisWebsiteChartsTmpl.Copy() 4410 4411 for _, chart := range *charts { 4412 chart.ID = fmt.Sprintf(chart.ID, website) 4413 chart.Labels = []module.Label{ 4414 {Key: "website", Value: website}, 4415 } 4416 for _, dim := range chart.Dims { 4417 dim.ID = fmt.Sprintf(dim.ID, website) 4418 } 4419 } 4420 4421 if err := w.Charts().Add(*charts...); err != nil { 4422 w.Warning(err) 4423 } 4424 } 4425 4426 func (w *Windows) removeIIWebsiteSCharts(website string) { 4427 px := fmt.Sprintf("iis_website_%s", website) 4428 w.removeCharts(px) 4429 } 4430 4431 func (w *Windows) addMSSQLDBCharts(instance string, dbname string) { 4432 charts := mssqlDatabaseChartsTmpl.Copy() 4433 4434 for _, chart := range *charts { 4435 chart.ID = fmt.Sprintf(chart.ID, dbname, instance) 4436 chart.Labels = []module.Label{ 4437 {Key: "mssql_instance", Value: instance}, 4438 {Key: "database", Value: dbname}, 4439 } 4440 for _, dim := range chart.Dims { 4441 dim.ID = fmt.Sprintf(dim.ID, dbname, instance) 4442 } 4443 } 4444 4445 if err := w.Charts().Add(*charts...); err != nil { 4446 w.Warning(err) 4447 } 4448 } 4449 4450 func (w *Windows) removeMSSQLDBCharts(instance string, dbname string) { 4451 px := fmt.Sprintf("mssql_db_%s_instance_%s", dbname, instance) 4452 w.removeCharts(px) 4453 } 4454 4455 func (w *Windows) addMSSQLInstanceCharts(instance string) { 4456 charts := mssqlInstanceChartsTmpl.Copy() 4457 4458 for _, chart := range *charts { 4459 chart.ID = fmt.Sprintf(chart.ID, instance) 4460 chart.Labels = []module.Label{ 4461 {Key: "mssql_instance", Value: instance}, 4462 } 4463 for _, dim := range chart.Dims { 4464 dim.ID = fmt.Sprintf(dim.ID, instance) 4465 } 4466 } 4467 4468 if err := w.Charts().Add(*charts...); err != nil { 4469 w.Warning(err) 4470 } 4471 } 4472 4473 func (w *Windows) removeMSSQLInstanceCharts(instance string) { 4474 px := fmt.Sprintf("mssql_instance_%s", instance) 4475 w.removeCharts(px) 4476 } 4477 4478 func (w *Windows) addProcessesCharts() { 4479 charts := processesCharts.Copy() 4480 4481 if err := w.Charts().Add(*charts...); err != nil { 4482 w.Warning(err) 4483 } 4484 } 4485 4486 func (w *Windows) addADCharts() { 4487 charts := adCharts.Copy() 4488 4489 if err := w.Charts().Add(*charts...); err != nil { 4490 w.Warning(err) 4491 } 4492 } 4493 4494 func (w *Windows) addCertificateTemplateCharts(template string) { 4495 charts := adcsCertTemplateChartsTmpl.Copy() 4496 4497 for _, chart := range *charts { 4498 chart.ID = fmt.Sprintf(chart.ID, template) 4499 chart.Labels = []module.Label{ 4500 {Key: "cert_template", Value: template}, 4501 } 4502 for _, dim := range chart.Dims { 4503 dim.ID = fmt.Sprintf(dim.ID, template) 4504 } 4505 } 4506 4507 if err := w.Charts().Add(*charts...); err != nil { 4508 w.Warning(err) 4509 } 4510 } 4511 4512 func (w *Windows) removeCertificateTemplateCharts(template string) { 4513 px := fmt.Sprintf("adcs_cert_template_%s", template) 4514 w.removeCharts(px) 4515 } 4516 4517 func (w *Windows) addProcessToCharts(procID string) { 4518 for _, chart := range *w.Charts() { 4519 var dim *module.Dim 4520 switch chart.ID { 4521 case processesCPUUtilizationTotalChart.ID: 4522 id := fmt.Sprintf("process_%s_cpu_time", procID) 4523 dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental, Div: 1000, Mul: 100} 4524 if procID == "Idle" { 4525 dim.Hidden = true 4526 } 4527 case processesMemoryUsageChart.ID: 4528 id := fmt.Sprintf("process_%s_working_set_private_bytes", procID) 4529 dim = &module.Dim{ID: id, Name: procID} 4530 case processesIOBytesChart.ID: 4531 id := fmt.Sprintf("process_%s_io_bytes", procID) 4532 dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental} 4533 case processesIOOperationsChart.ID: 4534 id := fmt.Sprintf("process_%s_io_operations", procID) 4535 dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental} 4536 case processesPageFaultsChart.ID: 4537 id := fmt.Sprintf("process_%s_page_faults", procID) 4538 dim = &module.Dim{ID: id, Name: procID, Algo: module.Incremental} 4539 case processesPageFileBytes.ID: 4540 id := fmt.Sprintf("process_%s_page_file_bytes", procID) 4541 dim = &module.Dim{ID: id, Name: procID} 4542 case processesThreads.ID: 4543 id := fmt.Sprintf("process_%s_threads", procID) 4544 dim = &module.Dim{ID: id, Name: procID} 4545 case processesHandlesChart.ID: 4546 id := fmt.Sprintf("process_%s_handles", procID) 4547 dim = &module.Dim{ID: id, Name: procID} 4548 default: 4549 continue 4550 } 4551 4552 if dim == nil { 4553 continue 4554 } 4555 if err := chart.AddDim(dim); err != nil { 4556 w.Warning(err) 4557 continue 4558 } 4559 chart.MarkNotCreated() 4560 } 4561 } 4562 4563 func (w *Windows) removeProcessFromCharts(procID string) { 4564 for _, chart := range *w.Charts() { 4565 var id string 4566 switch chart.ID { 4567 case processesCPUUtilizationTotalChart.ID: 4568 id = fmt.Sprintf("process_%s_cpu_time", procID) 4569 case processesMemoryUsageChart.ID: 4570 id = fmt.Sprintf("process_%s_working_set_private_bytes", procID) 4571 case processesIOBytesChart.ID: 4572 id = fmt.Sprintf("process_%s_io_bytes", procID) 4573 case processesIOOperationsChart.ID: 4574 id = fmt.Sprintf("process_%s_io_operations", procID) 4575 case processesPageFaultsChart.ID: 4576 id = fmt.Sprintf("process_%s_page_faults", procID) 4577 case processesPageFileBytes.ID: 4578 id = fmt.Sprintf("process_%s_page_file_bytes", procID) 4579 case processesThreads.ID: 4580 id = fmt.Sprintf("process_%s_threads", procID) 4581 case processesHandlesChart.ID: 4582 id = fmt.Sprintf("process_%s_handles", procID) 4583 default: 4584 continue 4585 } 4586 4587 if err := chart.MarkDimRemove(id, false); err != nil { 4588 w.Warning(err) 4589 continue 4590 } 4591 chart.MarkNotCreated() 4592 } 4593 } 4594 4595 func (w *Windows) addProcessNetFrameworkExceptionsCharts(procName string) { 4596 charts := netFrameworkCLRExceptionsChartsTmpl.Copy() 4597 4598 for _, chart := range *charts { 4599 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4600 chart.Labels = []module.Label{ 4601 {Key: "process", Value: procName}, 4602 } 4603 for _, dim := range chart.Dims { 4604 dim.ID = fmt.Sprintf(dim.ID, procName) 4605 } 4606 } 4607 4608 if err := w.Charts().Add(*charts...); err != nil { 4609 w.Warning(err) 4610 } 4611 } 4612 4613 func (w *Windows) removeProcessFromNetFrameworkExceptionsCharts(procName string) { 4614 px := fmt.Sprintf("netframework_%s_clrexception", strings.ToLower(procName)) 4615 w.removeCharts(px) 4616 } 4617 4618 func (w *Windows) addProcessNetFrameworkInteropCharts(procName string) { 4619 charts := netFrameworkCLRInteropChartsTmpl.Copy() 4620 4621 for _, chart := range *charts { 4622 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4623 chart.Labels = []module.Label{ 4624 {Key: "process", Value: procName}, 4625 } 4626 for _, dim := range chart.Dims { 4627 dim.ID = fmt.Sprintf(dim.ID, procName) 4628 } 4629 } 4630 4631 if err := w.Charts().Add(*charts...); err != nil { 4632 w.Warning(err) 4633 } 4634 } 4635 4636 func (w *Windows) removeProcessNetFrameworkInteropCharts(procName string) { 4637 px := fmt.Sprintf("netframework_%s_clrinterop", strings.ToLower(procName)) 4638 w.removeCharts(px) 4639 } 4640 4641 func (w *Windows) addProcessNetFrameworkJITCharts(procName string) { 4642 charts := netFrameworkCLRJITChartsTmpl.Copy() 4643 4644 for _, chart := range *charts { 4645 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4646 chart.Labels = []module.Label{ 4647 {Key: "process", Value: procName}, 4648 } 4649 for _, dim := range chart.Dims { 4650 dim.ID = fmt.Sprintf(dim.ID, procName) 4651 } 4652 } 4653 4654 if err := w.Charts().Add(*charts...); err != nil { 4655 w.Warning(err) 4656 } 4657 } 4658 4659 func (w *Windows) removeProcessNetFrameworkJITCharts(procName string) { 4660 px := fmt.Sprintf("netframework_%s_clrjit", strings.ToLower(procName)) 4661 w.removeCharts(px) 4662 } 4663 4664 func (w *Windows) addProcessNetFrameworkLoadingCharts(procName string) { 4665 charts := netFrameworkCLRLoadingChartsTmpl.Copy() 4666 4667 for _, chart := range *charts { 4668 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4669 chart.Labels = []module.Label{ 4670 {Key: "process", Value: procName}, 4671 } 4672 for _, dim := range chart.Dims { 4673 dim.ID = fmt.Sprintf(dim.ID, procName) 4674 } 4675 } 4676 4677 if err := w.Charts().Add(*charts...); err != nil { 4678 w.Warning(err) 4679 } 4680 } 4681 4682 func (w *Windows) removeProcessNetFrameworkLoadingCharts(procName string) { 4683 px := fmt.Sprintf("netframework_%s_clrloading", strings.ToLower(procName)) 4684 w.removeCharts(px) 4685 } 4686 4687 func (w *Windows) addProcessNetFrameworkLocksAndThreadsCharts(procName string) { 4688 charts := netFrameworkCLRLocksAndThreadsChartsTmpl.Copy() 4689 4690 for _, chart := range *charts { 4691 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4692 chart.Labels = []module.Label{ 4693 {Key: "process", Value: procName}, 4694 } 4695 for _, dim := range chart.Dims { 4696 dim.ID = fmt.Sprintf(dim.ID, procName) 4697 } 4698 } 4699 4700 if err := w.Charts().Add(*charts...); err != nil { 4701 w.Warning(err) 4702 } 4703 } 4704 4705 func (w *Windows) removeProcessNetFrameworkLocksAndThreadsCharts(procName string) { 4706 px := fmt.Sprintf("netframework_%s_clrlocksandthreads", strings.ToLower(procName)) 4707 w.removeCharts(px) 4708 } 4709 4710 func (w *Windows) addProcessNetFrameworkMemoryCharts(procName string) { 4711 charts := netFrameworkCLRMemoryChartsTmpl.Copy() 4712 4713 for _, chart := range *charts { 4714 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4715 chart.Labels = []module.Label{ 4716 {Key: "process", Value: procName}, 4717 } 4718 for _, dim := range chart.Dims { 4719 dim.ID = fmt.Sprintf(dim.ID, procName) 4720 } 4721 } 4722 4723 if err := w.Charts().Add(*charts...); err != nil { 4724 w.Warning(err) 4725 } 4726 } 4727 4728 func (w *Windows) removeProcessNetFrameworkMemoryCharts(procName string) { 4729 px := fmt.Sprintf("netframework_%s_clrmemory", strings.ToLower(procName)) 4730 w.removeCharts(px) 4731 } 4732 4733 func (w *Windows) addProcessNetFrameworkRemotingCharts(procName string) { 4734 charts := netFrameworkCLRRemotingChartsTmpl.Copy() 4735 4736 for _, chart := range *charts { 4737 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4738 chart.Labels = []module.Label{ 4739 {Key: "process", Value: procName}, 4740 } 4741 for _, dim := range chart.Dims { 4742 dim.ID = fmt.Sprintf(dim.ID, procName) 4743 } 4744 } 4745 4746 if err := w.Charts().Add(*charts...); err != nil { 4747 w.Warning(err) 4748 } 4749 } 4750 4751 func (w *Windows) removeProcessNetFrameworkRemotingCharts(procName string) { 4752 px := fmt.Sprintf("netframework_%s_clrremoting", strings.ToLower(procName)) 4753 w.removeCharts(px) 4754 } 4755 4756 func (w *Windows) addProcessNetFrameworkSecurityCharts(procName string) { 4757 charts := netFrameworkCLRSecurityChartsTmpl.Copy() 4758 4759 for _, chart := range *charts { 4760 chart.ID = fmt.Sprintf(chart.ID, strings.ToLower(procName)) 4761 chart.Labels = []module.Label{ 4762 {Key: "process", Value: procName}, 4763 } 4764 for _, dim := range chart.Dims { 4765 dim.ID = fmt.Sprintf(dim.ID, procName) 4766 } 4767 } 4768 4769 if err := w.Charts().Add(*charts...); err != nil { 4770 w.Warning(err) 4771 } 4772 } 4773 4774 func (w *Windows) removeProcessNetFrameworkSecurityCharts(procName string) { 4775 px := fmt.Sprintf("netframework_%s_clrsecurity", strings.ToLower(procName)) 4776 w.removeCharts(px) 4777 } 4778 4779 func (w *Windows) addServiceCharts(svc string) { 4780 charts := serviceChartsTmpl.Copy() 4781 4782 for _, chart := range *charts { 4783 chart.ID = fmt.Sprintf(chart.ID, svc) 4784 chart.Labels = []module.Label{ 4785 {Key: "service", Value: svc}, 4786 } 4787 for _, dim := range chart.Dims { 4788 dim.ID = fmt.Sprintf(dim.ID, svc) 4789 } 4790 } 4791 4792 if err := w.Charts().Add(*charts...); err != nil { 4793 w.Warning(err) 4794 } 4795 } 4796 4797 func (w *Windows) removeServiceCharts(svc string) { 4798 px := fmt.Sprintf("service_%s", svc) 4799 w.removeCharts(px) 4800 } 4801 4802 func (w *Windows) addCollectorCharts(name string) { 4803 charts := collectorChartsTmpl.Copy() 4804 4805 for _, chart := range *charts { 4806 chart.ID = fmt.Sprintf(chart.ID, name) 4807 chart.Labels = []module.Label{ 4808 {Key: "collector", Value: name}, 4809 } 4810 for _, dim := range chart.Dims { 4811 dim.ID = fmt.Sprintf(dim.ID, name) 4812 } 4813 } 4814 4815 if err := w.Charts().Add(*charts...); err != nil { 4816 w.Warning(err) 4817 } 4818 } 4819 4820 func (w *Windows) addHypervCharts() { 4821 charts := hypervChartsTmpl.Copy() 4822 4823 if err := w.Charts().Add(*charts...); err != nil { 4824 w.Warning(err) 4825 } 4826 } 4827 4828 func (w *Windows) addHypervVMCharts(vm string) { 4829 charts := hypervVMChartsTemplate.Copy() 4830 n := hypervCleanName(vm) 4831 4832 for _, chart := range *charts { 4833 chart.ID = fmt.Sprintf(chart.ID, n) 4834 chart.Labels = []module.Label{ 4835 {Key: "vm_name", Value: vm}, 4836 } 4837 for _, dim := range chart.Dims { 4838 dim.ID = fmt.Sprintf(dim.ID, n) 4839 } 4840 } 4841 4842 if err := w.Charts().Add(*charts...); err != nil { 4843 w.Warning(err) 4844 } 4845 } 4846 4847 func (w *Windows) removeHypervVMCharts(vm string) { 4848 px := fmt.Sprintf("vm_%s", hypervCleanName(vm)) 4849 w.removeCharts(px) 4850 } 4851 4852 func (w *Windows) addHypervVMDeviceCharts(device string) { 4853 charts := hypervVMDeviceChartsTemplate.Copy() 4854 n := hypervCleanName(device) 4855 4856 for _, chart := range *charts { 4857 chart.ID = fmt.Sprintf(chart.ID, n) 4858 chart.Labels = []module.Label{ 4859 {Key: "vm_device", Value: device}, 4860 } 4861 for _, dim := range chart.Dims { 4862 dim.ID = fmt.Sprintf(dim.ID, n) 4863 } 4864 } 4865 4866 if err := w.Charts().Add(*charts...); err != nil { 4867 w.Warning(err) 4868 } 4869 } 4870 4871 func (w *Windows) removeHypervVMDeviceCharts(device string) { 4872 px := fmt.Sprintf("vm_device_%s", hypervCleanName(device)) 4873 w.removeCharts(px) 4874 } 4875 4876 func (w *Windows) addHypervVMInterfaceCharts(iface string) { 4877 charts := hypervVMInterfaceChartsTemplate.Copy() 4878 n := hypervCleanName(iface) 4879 4880 for _, chart := range *charts { 4881 chart.ID = fmt.Sprintf(chart.ID, n) 4882 chart.Labels = []module.Label{ 4883 {Key: "vm_interface", Value: iface}, 4884 } 4885 for _, dim := range chart.Dims { 4886 dim.ID = fmt.Sprintf(dim.ID, n) 4887 } 4888 } 4889 4890 if err := w.Charts().Add(*charts...); err != nil { 4891 w.Warning(err) 4892 } 4893 } 4894 4895 func (w *Windows) removeHypervVMInterfaceCharts(iface string) { 4896 px := fmt.Sprintf("vm_interface_%s", hypervCleanName(iface)) 4897 w.removeCharts(px) 4898 } 4899 4900 func (w *Windows) addHypervVSwitchCharts(vswitch string) { 4901 charts := hypervVswitchChartsTemplate.Copy() 4902 n := hypervCleanName(vswitch) 4903 4904 for _, chart := range *charts { 4905 chart.ID = fmt.Sprintf(chart.ID, n) 4906 chart.Labels = []module.Label{ 4907 {Key: "vswitch", Value: vswitch}, 4908 } 4909 for _, dim := range chart.Dims { 4910 dim.ID = fmt.Sprintf(dim.ID, n) 4911 } 4912 } 4913 4914 if err := w.Charts().Add(*charts...); err != nil { 4915 w.Warning(err) 4916 } 4917 } 4918 4919 func (w *Windows) removeHypervVSwitchCharts(vswitch string) { 4920 px := fmt.Sprintf("vswitch_%s", hypervCleanName(vswitch)) 4921 w.removeCharts(px) 4922 } 4923 4924 func (w *Windows) removeCollectorCharts(name string) { 4925 px := fmt.Sprintf("collector_%s", name) 4926 w.removeCharts(px) 4927 } 4928 4929 func (w *Windows) removeCharts(prefix string) { 4930 for _, chart := range *w.Charts() { 4931 if strings.HasPrefix(chart.ID, prefix) { 4932 chart.MarkRemove() 4933 chart.MarkNotCreated() 4934 } 4935 } 4936 }