mirror of
https://github.com/netdata/netdata.git
synced 2025-04-24 13:14:11 +00:00
remove go.d/windows (#19290)
This commit is contained in:
parent
3f1a1bd55e
commit
9069ef33af
35 changed files with 0 additions and 13191 deletions
src
go/plugin/go.d
README.md
collector
init.go
windows
README.mdcharts.gocollect.gocollect_ad.gocollect_adcs.gocollect_adfs.gocollect_collector.gocollect_cpu.gocollect_exchange.gocollect_hyperv.gocollect_iis.gocollect_logical_disk.gocollect_logon.gocollect_memory.gocollect_mssql.gocollect_net.gocollect_netframework.gocollect_os.gocollect_process.gocollect_service.gocollect_system.gocollect_tcp.gocollect_thermalzone.gocollector.gocollector_test.goconfig_schema.jsoninit.go
testdata
config
health/health.d
|
@ -144,7 +144,6 @@ All capabilities are set automatically during Netdata installation using the [of
|
||||||
| [web_log](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/weblog) | Apache/NGINX |
|
| [web_log](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/weblog) | Apache/NGINX |
|
||||||
| [wireguard](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/wireguard) | WireGuard |
|
| [wireguard](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/wireguard) | WireGuard |
|
||||||
| [whoisquery](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/whoisquery) | Domain Expiry |
|
| [whoisquery](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/whoisquery) | Domain Expiry |
|
||||||
| [windows](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/windows) | Windows |
|
|
||||||
| [x509check](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/x509check) | Digital Certificates |
|
| [x509check](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/x509check) | Digital Certificates |
|
||||||
| [zfspool](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/zfspool) | ZFS Pools |
|
| [zfspool](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/zfspool) | ZFS Pools |
|
||||||
| [zookeeper](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/zookeeper) | ZooKeeper |
|
| [zookeeper](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/zookeeper) | ZooKeeper |
|
||||||
|
|
|
@ -121,7 +121,6 @@ import (
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/w1sensor"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/w1sensor"
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/weblog"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/weblog"
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/whoisquery"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/whoisquery"
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/windows"
|
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/wireguard"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/wireguard"
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/x509check"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/x509check"
|
||||||
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/zfspool"
|
_ "github.com/netdata/netdata/go/plugins/plugin/go.d/collector/zfspool"
|
||||||
|
|
|
@ -1,837 +0,0 @@
|
||||||
# Windows
|
|
||||||
|
|
||||||
<img src="https://netdata.cloud/img/windows.svg" width="150"/>
|
|
||||||
|
|
||||||
|
|
||||||
Plugin: go.d.plugin
|
|
||||||
Module: windows
|
|
||||||
|
|
||||||
<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
**Deprecation Notice**: This collector is no longer the recommended method for Windows monitoring and will be removed in a future release.
|
|
||||||
|
|
||||||
The official Netdata Agent for Windows now provides a robust and user-friendly solution for real-time system and application performance monitoring. By installing Netdata on your Windows host, you'll gain access to a wide range of metrics and visualizations without the need for additional collectors or complex configurations.
|
|
||||||
|
|
||||||
To get started with Netdata on Windows, see the [Netdata Windows Installer](https://github.com/netdata/netdata/blob/master/packaging/windows/WINDOWS_INSTALLER.md).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
This collector monitors the performance of Windows machines, collects both host metrics and metrics from various Windows applications (e.g. Active Directory, MSSQL).
|
|
||||||
|
|
||||||
|
|
||||||
It collect metrics by periodically sending HTTP requests to [Prometheus exporter for Windows machines](https://github.com/prometheus-community/windows_exporter), a native Windows Agent running on each host.
|
|
||||||
|
|
||||||
|
|
||||||
This collector is supported on all platforms.
|
|
||||||
|
|
||||||
This collector supports collecting metrics from multiple instances of this integration, including remote instances.
|
|
||||||
|
|
||||||
|
|
||||||
### Default Behavior
|
|
||||||
|
|
||||||
#### Auto-Detection
|
|
||||||
|
|
||||||
This integration doesn't support auto-detection.
|
|
||||||
|
|
||||||
#### Limits
|
|
||||||
|
|
||||||
The default configuration for this integration does not impose any limits on data collection.
|
|
||||||
|
|
||||||
#### Performance Impact
|
|
||||||
|
|
||||||
Data collection affects the CPU usage of the Windows host. CPU usage depends on the frequency of data collection and the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Metrics
|
|
||||||
|
|
||||||
Metrics grouped by *scope*.
|
|
||||||
|
|
||||||
The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
|
|
||||||
|
|
||||||
The collected set of metrics depends on the [enabled collectors](https://github.com/prometheus-community/windows_exporter#collectors).
|
|
||||||
|
|
||||||
Supported collectors:
|
|
||||||
|
|
||||||
- [cpu](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.cpu.md)
|
|
||||||
- [iis](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.iis.md)
|
|
||||||
- [memory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.memory.md)
|
|
||||||
- [net](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.net.md)
|
|
||||||
- [logical_disk](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logical_disk.md)
|
|
||||||
- [os](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.os.md)
|
|
||||||
- [system](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.system.md)
|
|
||||||
- [logon](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.logon.md)
|
|
||||||
- [tcp](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.tcp.md)
|
|
||||||
- [thermalzone](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.thermalzone.md)
|
|
||||||
- [process](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.process.md)
|
|
||||||
- [service](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.service.md)
|
|
||||||
- [mssql](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.mssql.md)
|
|
||||||
- [ad](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md)
|
|
||||||
- [adcs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adcs.md)
|
|
||||||
- [adfs](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.adfs.md)
|
|
||||||
- [netframework_clrexceptions](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-exceptions)
|
|
||||||
- [netframework_clrinterop](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-interop)
|
|
||||||
- [netframework_clrjit](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-jit)
|
|
||||||
- [netframework_clrloading](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-loading)
|
|
||||||
- [netframework_clrlocksandthreads](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-locks-and-threads)
|
|
||||||
- [netframework_clrmemory](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-memory)
|
|
||||||
- [netframework_clrremoting](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.netframework.md#clr-remoting)
|
|
||||||
- [exchange](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.exchange.md)
|
|
||||||
- [hyperv](https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.hyperv.md)
|
|
||||||
|
|
||||||
|
|
||||||
### Per Active Directory instance
|
|
||||||
|
|
||||||
These metrics refer to the entire monitored host.
|
|
||||||
|
|
||||||
This scope has no labels.
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.cpu_utilization_total | dpc, user, privileged, interrupt | percentage |
|
|
||||||
| windows.memory_utilization | available, used | bytes |
|
|
||||||
| windows.memory_page_faults | page_faults | events/s |
|
|
||||||
| windows.memory_swap_utilization | available, used | bytes |
|
|
||||||
| windows.memory_swap_operations | read, write | operations/s |
|
|
||||||
| windows.memory_swap_pages | read, written | pages/s |
|
|
||||||
| windows.memory_cached | cached | KiB |
|
|
||||||
| windows.memory_cache_faults | cache_faults | events/s |
|
|
||||||
| windows.memory_system_pool | paged, non-paged | bytes |
|
|
||||||
| windows.tcp_conns_established | ipv4, ipv6 | connections |
|
|
||||||
| windows.tcp_conns_active | ipv4, ipv6 | connections/s |
|
|
||||||
| windows.tcp_conns_passive | ipv4, ipv6 | connections/s |
|
|
||||||
| windows.tcp_conns_failures | ipv4, ipv6 | failures/s |
|
|
||||||
| windows.tcp_conns_resets | ipv4, ipv6 | resets/s |
|
|
||||||
| windows.tcp_segments_received | ipv4, ipv6 | segments/s |
|
|
||||||
| windows.tcp_segments_sent | ipv4, ipv6 | segments/s |
|
|
||||||
| windows.tcp_segments_retransmitted | ipv4, ipv6 | segments/s |
|
|
||||||
| windows.os_processes | processes | number |
|
|
||||||
| windows.os_users | users | users |
|
|
||||||
| windows.os_visible_memory_usage | free, used | bytes |
|
|
||||||
| windows.os_paging_files_usage | free, used | bytes |
|
|
||||||
| windows.system_threads | threads | number |
|
|
||||||
| windows.system_uptime | time | seconds |
|
|
||||||
| windows.logon_type_sessions | system, interactive, network, batch, service, proxy, unlock, network_clear_text, new_credentials, remote_interactive, cached_interactive, cached_remote_interactive, cached_unlock | seconds |
|
|
||||||
| windows.processes_cpu_utilization | a dimension per process | percentage |
|
|
||||||
| windows.processes_handles | a dimension per process | handles |
|
|
||||||
| windows.processes_io_bytes | a dimension per process | bytes/s |
|
|
||||||
| windows.processes_io_operations | a dimension per process | operations/s |
|
|
||||||
| windows.processes_page_faults | a dimension per process | pgfaults/s |
|
|
||||||
| windows.processes_page_file_bytes | a dimension per process | bytes |
|
|
||||||
| windows.processes_pool_bytes | a dimension per process | bytes |
|
|
||||||
| windows.processes_threads | a dimension per process | threads |
|
|
||||||
| ad.database_operations | add, delete, modify, recycle | operations/s |
|
|
||||||
| ad.directory_operations | read, write, search | operations/s |
|
|
||||||
| ad.name_cache_lookups | lookups | lookups/s |
|
|
||||||
| ad.name_cache_hits | hits | hits/s |
|
|
||||||
| ad.atq_average_request_latency | time | seconds |
|
|
||||||
| ad.atq_outstanding_requests | outstanding | requests |
|
|
||||||
| ad.dra_replication_intersite_compressed_traffic | inbound, outbound | bytes/s |
|
|
||||||
| ad.dra_replication_intrasite_compressed_traffic | inbound, outbound | bytes/s |
|
|
||||||
| ad.dra_replication_sync_objects_remaining | inbound, outbound | objects |
|
|
||||||
| ad.dra_replication_objects_filtered | inbound, outbound | objects/s |
|
|
||||||
| ad.dra_replication_properties_updated | inbound, outbound | properties/s |
|
|
||||||
| ad.dra_replication_properties_filtered | inbound, outbound | properties/s |
|
|
||||||
| ad.dra_replication_pending_syncs | pending | syncs |
|
|
||||||
| ad.dra_replication_sync_requests | requests | requests/s |
|
|
||||||
| ad.ds_threads | in_use | threads |
|
|
||||||
| ad.ldap_last_bind_time | last_bind | seconds |
|
|
||||||
| ad.binds | binds | binds/s |
|
|
||||||
| ad.ldap_searches | searches | searches/s |
|
|
||||||
| adfs.ad_login_connection_failures | connection | failures/s |
|
|
||||||
| adfs.certificate_authentications | authentications | authentications/s |
|
|
||||||
| adfs.db_artifact_failures | connection | failures/s |
|
|
||||||
| adfs.db_artifact_query_time_seconds | query_time | seconds/s |
|
|
||||||
| adfs.db_config_failures | connection | failures/s |
|
|
||||||
| adfs.db_config_query_time_seconds | query_time | seconds/s |
|
|
||||||
| adfs.device_authentications | authentications | authentications/s |
|
|
||||||
| adfs.external_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.federated_authentications | authentications | authentications/s |
|
|
||||||
| adfs.federation_metadata_requests | requests | requests/s |
|
|
||||||
| adfs.oauth_authorization_requests | requests | requests/s |
|
|
||||||
| adfs.oauth_client_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.oauth_client_credentials_requests | success, failure | requests/s |
|
|
||||||
| adfs.oauth_client_privkey_jwt_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.oauth_client_secret_basic_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.oauth_client_secret_post_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.oauth_client_windows_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.oauth_logon_certificate_requests | success, failure | requests/s |
|
|
||||||
| adfs.oauth_password_grant_requests | success, failure | requests/s |
|
|
||||||
| adfs.oauth_token_requests_success | success | requests/s |
|
|
||||||
| adfs.passive_requests | passive | requests/s |
|
|
||||||
| adfs.passport_authentications | passport | authentications/s |
|
|
||||||
| adfs.password_change_requests | success, failure | requests/s |
|
|
||||||
| adfs.samlp_token_requests_success | success | requests/s |
|
|
||||||
| adfs.sso_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.token_requests | requests | requests/s |
|
|
||||||
| adfs.userpassword_authentications | success, failure | authentications/s |
|
|
||||||
| adfs.windows_integrated_authentications | authentications | authentications/s |
|
|
||||||
| adfs.wsfed_token_requests_success | success | requests/s |
|
|
||||||
| adfs.wstrust_token_requests_success | success | requests/s |
|
|
||||||
| exchange.activesync_ping_cmds_pending | pending | commands |
|
|
||||||
| exchange.activesync_requests | received | requests/s |
|
|
||||||
| exchange.activesync_sync_cmds | processed | commands/s |
|
|
||||||
| exchange.autodiscover_requests | processed | requests/s |
|
|
||||||
| exchange.avail_service_requests | serviced | requests/s |
|
|
||||||
| exchange.owa_current_unique_users | logged-in | users |
|
|
||||||
| exchange.owa_requests_total | handled | requests/s |
|
|
||||||
| exchange.rpc_active_user_count | active | users |
|
|
||||||
| exchange.rpc_avg_latency | latency | seconds |
|
|
||||||
| exchange.rpc_connection_count | connections | connections |
|
|
||||||
| exchange.rpc_operations | operations | operations/s |
|
|
||||||
| exchange.rpc_requests | processed | requests |
|
|
||||||
| exchange.rpc_user_count | users | users |
|
|
||||||
| exchange.transport_queues_active_mail_box_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_external_active_remote_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_external_largest_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_internal_active_remote_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_internal_largest_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_retry_mailbox_delivery | low, high, none, normal | messages/s |
|
|
||||||
| exchange.transport_queues_poison | low, high, none, normal | messages/s |
|
|
||||||
| hyperv.vms_health | ok, critical | vms |
|
|
||||||
| hyperv.root_partition_device_space_pages | 4K, 2M, 1G | pages |
|
|
||||||
| hyperv.root_partition_gpa_space_pages | 4K, 2M, 1G | pages |
|
|
||||||
| hyperv.root_partition_gpa_space_modifications | gpa | modifications/s |
|
|
||||||
| hyperv.root_partition_attached_devices | attached | devices |
|
|
||||||
| hyperv.root_partition_deposited_pages | deposited | pages |
|
|
||||||
| hyperv.root_partition_skipped_interrupts | skipped | interrupts |
|
|
||||||
| hyperv.root_partition_device_dma_errors | illegal_dma | requests |
|
|
||||||
| hyperv.root_partition_device_interrupt_errors | illegal_interrupt | requests |
|
|
||||||
| hyperv.root_partition_device_interrupt_throttle_events | throttling | events |
|
|
||||||
| hyperv.root_partition_io_tlb_flush | flushes | flushes/s |
|
|
||||||
| hyperv.root_partition_address_space | address_spaces | address spaces |
|
|
||||||
| hyperv.root_partition_virtual_tlb_flush_entries | flushes | flushes/s |
|
|
||||||
| hyperv.root_partition_virtual_tlb_pages | used | pages |
|
|
||||||
|
|
||||||
### Per cpu core
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| core | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.cpu_core_utilization | dpc, user, privileged, interrupt | percentage |
|
|
||||||
| windows.cpu_core_interrupts | interrupts | interrupts/s |
|
|
||||||
| windows.cpu_core_dpcs | dpcs | dpcs/s |
|
|
||||||
| windows.cpu_core_cstate | c1, c2, c3 | percentage |
|
|
||||||
|
|
||||||
### Per logical disk
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| disk | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.logical_disk_utilization | free, used | bytes |
|
|
||||||
| windows.logical_disk_bandwidth | read, write | bytes/s |
|
|
||||||
| windows.logical_disk_operations | reads, writes | operations/s |
|
|
||||||
| windows.logical_disk_latency | read, write | seconds |
|
|
||||||
|
|
||||||
### Per network device
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| nic | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.net_nic_bandwidth | received, sent | kilobits/s |
|
|
||||||
| windows.net_nic_packets | received, sent | packets/s |
|
|
||||||
| windows.net_nic_errors | inbound, outbound | errors/s |
|
|
||||||
| windows.net_nic_discarded | inbound, outbound | discards/s |
|
|
||||||
|
|
||||||
### Per thermalzone
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| thermalzone | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.thermalzone_temperature | temperature | celsius |
|
|
||||||
|
|
||||||
### Per service
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| service | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| windows.service_state | running, stopped, start_pending, stop_pending, continue_pending, pause_pending, paused, unknown | state |
|
|
||||||
| windows.service_status | ok, error, unknown, degraded, pred_fail, starting, stopping, service, stressed, nonrecover, no_contact, lost_comm | status |
|
|
||||||
|
|
||||||
### Per website
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| website | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| iis.website_traffic | received, sent | bytes/s |
|
|
||||||
| iis.website_requests_rate | requests | requests/s |
|
|
||||||
| iis.website_active_connections_count | active | connections |
|
|
||||||
| iis.website_users_count | anonymous, non_anonymous | users |
|
|
||||||
| iis.website_connection_attempts_rate | connection | attempts/s |
|
|
||||||
| iis.website_isapi_extension_requests_count | isapi | requests |
|
|
||||||
| iis.website_isapi_extension_requests_rate | isapi | requests/s |
|
|
||||||
| iis.website_ftp_file_transfer_rate | received, sent | files/s |
|
|
||||||
| iis.website_logon_attempts_rate | logon | attempts/s |
|
|
||||||
| iis.website_errors_rate | document_locked, document_not_found | errors/s |
|
|
||||||
| iis.website_uptime | uptime | seconds |
|
|
||||||
|
|
||||||
### Per mssql instance
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| mssql_instance | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| mssql.instance_accessmethods_page_splits | page | splits/s |
|
|
||||||
| mssql.instance_cache_hit_ratio | hit_ratio | percentage |
|
|
||||||
| mssql.instance_bufman_checkpoint_pages | flushed | pages/s |
|
|
||||||
| mssql.instance_bufman_page_life_expectancy | life_expectancy | seconds |
|
|
||||||
| mssql.instance_bufman_iops | read, written | iops |
|
|
||||||
| mssql.instance_blocked_processes | blocked | processes |
|
|
||||||
| mssql.instance_user_connection | user | connections |
|
|
||||||
| mssql.instance_locks_lock_wait | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
|
|
||||||
| mssql.instance_locks_deadlocks | alloc_unit, application, database, extent, file, hobt, key, metadata, oib, object, page, rid, row_group, xact | locks/s |
|
|
||||||
| mssql.instance_memmgr_connection_memory_bytes | memory | bytes |
|
|
||||||
| mssql.instance_memmgr_external_benefit_of_memory | benefit | bytes |
|
|
||||||
| mssql.instance_memmgr_pending_memory_grants | pending | processes |
|
|
||||||
| mssql.instance_memmgr_server_memory | memory | bytes |
|
|
||||||
| mssql.instance_sql_errors | db_offline, info, kill_connection, user | errors |
|
|
||||||
| mssql.instance_sqlstats_auto_parameterization_attempts | failed | attempts/s |
|
|
||||||
| mssql.instance_sqlstats_batch_requests | batch | requests/s |
|
|
||||||
| mssql.instance_sqlstats_safe_auto_parameterization_attempts | safe | attempts/s |
|
|
||||||
| mssql.instance_sqlstats_sql_compilations | compilations | compilations/s |
|
|
||||||
| mssql.instance_sqlstats_sql_recompilations | recompiles | recompiles/s |
|
|
||||||
|
|
||||||
### Per database
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| mssql_instance | TBD |
|
|
||||||
| database | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| mssql.database_active_transactions | active | transactions |
|
|
||||||
| mssql.database_backup_restore_operations | backup | operations/s |
|
|
||||||
| mssql.database_data_files_size | size | bytes |
|
|
||||||
| mssql.database_log_flushed | flushed | bytes/s |
|
|
||||||
| mssql.database_log_flushes | log | flushes/s |
|
|
||||||
| mssql.database_transactions | transactions | transactions/s |
|
|
||||||
| mssql.database_write_transactions | write | transactions/s |
|
|
||||||
|
|
||||||
### Per certificate template
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| cert_template | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| adcs.cert_template_requests | requests | requests/s |
|
|
||||||
| adcs.cert_template_failed_requests | failed | requests/s |
|
|
||||||
| adcs.cert_template_issued_requests | issued | requests/s |
|
|
||||||
| adcs.cert_template_pending_requests | pending | requests/s |
|
|
||||||
| adcs.cert_template_request_processing_time | processing_time | seconds |
|
|
||||||
| adcs.cert_template_retrievals | retrievals | retrievals/s |
|
|
||||||
| adcs.cert_template_retrieval_processing_time | processing_time | seconds |
|
|
||||||
| adcs.cert_template_request_cryptographic_signing_time | singing_time | seconds |
|
|
||||||
| adcs.cert_template_request_policy_module_processing | processing_time | seconds |
|
|
||||||
| adcs.cert_template_challenge_responses | challenge | responses/s |
|
|
||||||
| adcs.cert_template_challenge_response_processing_time | processing_time | seconds |
|
|
||||||
| adcs.cert_template_signed_certificate_timestamp_lists | processed | lists/s |
|
|
||||||
| adcs.cert_template_signed_certificate_timestamp_list_processing_time | processing_time | seconds |
|
|
||||||
|
|
||||||
### Per process
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| process | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| netframework.clrexception_thrown | exceptions | exceptions/s |
|
|
||||||
| netframework.clrexception_filters | filters | filters/s |
|
|
||||||
| netframework.clrexception_finallys | finallys | finallys/s |
|
|
||||||
| netframework.clrexception_throw_to_catch_depth | traversed | stack_frames/s |
|
|
||||||
| netframework.clrinterop_com_callable_wrappers | com_callable_wrappers | ccw/s |
|
|
||||||
| netframework.clrinterop_interop_marshallings | marshallings | marshallings/s |
|
|
||||||
| netframework.clrinterop_interop_stubs_created | created | stubs/s |
|
|
||||||
| netframework.clrjit_methods | jit-compiled | methods/s |
|
|
||||||
| netframework.clrjit_time | time | percentage |
|
|
||||||
| netframework.clrjit_standard_failures | failures | failures/s |
|
|
||||||
| netframework.clrjit_il_bytes | compiled_msil | bytes/s |
|
|
||||||
| netframework.clrloading_loader_heap_size | committed | bytes |
|
|
||||||
| netframework.clrloading_appdomains_loaded | loaded | domain/s |
|
|
||||||
| netframework.clrloading_appdomains_unloaded | unloaded | domain/s |
|
|
||||||
| netframework.clrloading_assemblies_loaded | loaded | assemblies/s |
|
|
||||||
| netframework.clrloading_classes_loaded | loaded | classes/s |
|
|
||||||
| netframework.clrloading_class_load_failures | class_load | failures/s |
|
|
||||||
| netframework.clrlocksandthreads_queue_length | threads | threads/s |
|
|
||||||
| netframework.clrlocksandthreads_current_logical_threads | logical | threads |
|
|
||||||
| netframework.clrlocksandthreads_current_physical_threads | physical | threads |
|
|
||||||
| netframework.clrlocksandthreads_recognized_threads | threads | threads/s |
|
|
||||||
| netframework.clrlocksandthreads_contentions | contentions | contentions/s |
|
|
||||||
| netframework.clrmemory_allocated_bytes | allocated | bytes/s |
|
|
||||||
| netframework.clrmemory_finalization_survivors | survived | objects |
|
|
||||||
| netframework.clrmemory_heap_size | heap | bytes |
|
|
||||||
| netframework.clrmemory_promoted | promoted | bytes |
|
|
||||||
| netframework.clrmemory_number_gc_handles | used | handles |
|
|
||||||
| netframework.clrmemory_collections | gc | gc/s |
|
|
||||||
| netframework.clrmemory_induced_gc | gc | gc/s |
|
|
||||||
| netframework.clrmemory_number_pinned_objects | pinned | objects |
|
|
||||||
| netframework.clrmemory_number_sink_blocks_in_use | used | blocks |
|
|
||||||
| netframework.clrmemory_committed | committed | bytes |
|
|
||||||
| netframework.clrmemory_reserved | reserved | bytes |
|
|
||||||
| netframework.clrmemory_gc_time | time | percentage |
|
|
||||||
| netframework.clrremoting_channels | registered | channels/s |
|
|
||||||
| netframework.clrremoting_context_bound_classes_loaded | loaded | classes |
|
|
||||||
| netframework.clrremoting_context_bound_objects | allocated | objects/s |
|
|
||||||
| netframework.clrremoting_context_proxies | objects | objects/s |
|
|
||||||
| netframework.clrremoting_contexts | contexts | contexts |
|
|
||||||
| netframework.clrremoting_remote_calls | rpc | calls/s |
|
|
||||||
| netframework.clrsecurity_link_time_checks | linktime | checks/s |
|
|
||||||
| netframework.clrsecurity_checks_time | time | percentage |
|
|
||||||
| netframework.clrsecurity_stack_walk_depth | stack | depth |
|
|
||||||
| netframework.clrsecurity_runtime_checks | runtime | checks/s |
|
|
||||||
|
|
||||||
### Per exchange workload
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| workload | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| exchange.workload_active_tasks | active | tasks |
|
|
||||||
| exchange.workload_completed_tasks | completed | tasks/s |
|
|
||||||
| exchange.workload_queued_tasks | queued | tasks/s |
|
|
||||||
| exchange.workload_yielded_tasks | yielded | tasks/s |
|
|
||||||
| exchange.workload_activity_status | active, paused | status |
|
|
||||||
|
|
||||||
### Per ldap process
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| workload | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| exchange.ldap_long_running_ops_per_sec | long-running | operations/s |
|
|
||||||
| exchange.ldap_read_time | read | seconds |
|
|
||||||
| exchange.ldap_search_time | search | seconds |
|
|
||||||
| exchange.ldap_write_time | write | seconds |
|
|
||||||
| exchange.ldap_timeout_errors | timeout | errors/s |
|
|
||||||
|
|
||||||
### Per http proxy
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| workload | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| exchange.http_proxy_avg_auth_latency | latency | seconds |
|
|
||||||
| exchange.http_proxy_avg_cas_processing_latency_sec | latency | seconds |
|
|
||||||
| exchange.http_proxy_mailbox_proxy_failure_rate | failures | percentage |
|
|
||||||
| exchange.http_proxy_mailbox_server_locator_avg_latency_sec | latency | seconds |
|
|
||||||
| exchange.http_proxy_outstanding_proxy_requests | outstanding | requests |
|
|
||||||
| exchange.http_proxy_requests | processed | requests/s |
|
|
||||||
|
|
||||||
### Per vm
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| vm_name | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| hyperv.vm_cpu_usage | gues, hypervisor, remote | percentage |
|
|
||||||
| hyperv.vm_memory_physical | assigned_memory | MiB |
|
|
||||||
| hyperv.vm_memory_physical_guest_visible | visible_memory | MiB |
|
|
||||||
| hyperv.vm_memory_pressure_current | pressure | percentage |
|
|
||||||
| hyperv.vm_vid_physical_pages_allocated | allocated | pages |
|
|
||||||
| hyperv.vm_vid_remote_physical_pages | remote_physical | pages |
|
|
||||||
|
|
||||||
### Per vm device
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| vm_device | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| hyperv.vm_device_bytes | read, written | bytes/s |
|
|
||||||
| hyperv.vm_device_operations | read, write | operations/s |
|
|
||||||
| hyperv.vm_device_errors | errors | errors/s |
|
|
||||||
|
|
||||||
### Per vm interface
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| vm_interface | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| hyperv.vm_interface_bytes | received, sent | bytes/s |
|
|
||||||
| hyperv.vm_interface_packets | received, sent | packets/s |
|
|
||||||
| hyperv.vm_interface_packets_dropped | incoming, outgoing | drops/s |
|
|
||||||
|
|
||||||
### Per vswitch
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Labels:
|
|
||||||
|
|
||||||
| Label | Description |
|
|
||||||
|:-----------|:----------------|
|
|
||||||
| vswitch | TBD |
|
|
||||||
|
|
||||||
Metrics:
|
|
||||||
|
|
||||||
| Metric | Dimensions | Unit |
|
|
||||||
|:------|:----------|:----|
|
|
||||||
| hyperv.vswitch_bytes | received, sent | bytes/s |
|
|
||||||
| hyperv.vswitch_packets | received, sent | packets/s |
|
|
||||||
| hyperv.vswitch_directed_packets | received, sent | packets/s |
|
|
||||||
| hyperv.vswitch_broadcast_packets | received, sent | packets/s |
|
|
||||||
| hyperv.vswitch_multicast_packets | received, sent | packets/s |
|
|
||||||
| hyperv.vswitch_dropped_packets | incoming, outgoing | drops/s |
|
|
||||||
| hyperv.vswitch_extensions_dropped_packets | incoming, outgoing | drops/s |
|
|
||||||
| hyperv.vswitch_packets_flooded | flooded | packets/s |
|
|
||||||
| hyperv.vswitch_learned_mac_addresses | learned | mac addresses/s |
|
|
||||||
| hyperv.vswitch_purged_mac_addresses | purged | mac addresses/s |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Alerts
|
|
||||||
|
|
||||||
|
|
||||||
The following alerts are available:
|
|
||||||
|
|
||||||
| Alert name | On metric | Description |
|
|
||||||
|:------------|:----------|:------------|
|
|
||||||
| [ windows_10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.cpu_utilization_total | average CPU utilization over the last 10 minutes |
|
|
||||||
| [ windows_ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.memory_utilization | memory utilization |
|
|
||||||
| [ windows_inbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of inbound discarded packets for the network interface in the last 10 minutes |
|
|
||||||
| [ windows_outbound_packets_discarded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_discarded | number of outbound discarded packets for the network interface in the last 10 minutes |
|
|
||||||
| [ windows_inbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of inbound errors for the network interface in the last 10 minutes |
|
|
||||||
| [ windows_outbound_packets_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.net_nic_errors | number of outbound errors for the network interface in the last 10 minutes |
|
|
||||||
| [ windows_disk_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/windows.conf) | windows.logical_disk_space_usage | disk space utilization |
|
|
||||||
|
|
||||||
|
|
||||||
## Setup
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
#### Install Windows exporter
|
|
||||||
|
|
||||||
To install the Windows exporter, follow the [official installation guide](https://github.com/prometheus-community/windows_exporter#installation).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
#### File
|
|
||||||
|
|
||||||
The configuration file name for this integration is `go.d/windows.conf`.
|
|
||||||
|
|
||||||
|
|
||||||
You can edit the configuration file using the [`edit-config`](https://github.com/netdata/netdata/blob/master/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script from the
|
|
||||||
Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
|
|
||||||
sudo ./edit-config go.d/windows.conf
|
|
||||||
```
|
|
||||||
#### Options
|
|
||||||
|
|
||||||
The following options can be defined globally: update_every, autodetection_retry.
|
|
||||||
|
|
||||||
|
|
||||||
<details open><summary>Config options</summary>
|
|
||||||
|
|
||||||
| Name | Description | Default | Required |
|
|
||||||
|:----|:-----------|:-------|:--------:|
|
|
||||||
| update_every | Data collection frequency. | 1 | no |
|
|
||||||
| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
|
|
||||||
| url | Server URL. | | yes |
|
|
||||||
| timeout | HTTP request timeout. | 1 | no |
|
|
||||||
| username | Username for basic HTTP authentication. | | no |
|
|
||||||
| password | Password for basic HTTP authentication. | | no |
|
|
||||||
| proxy_url | Proxy URL. | | no |
|
|
||||||
| proxy_username | Username for proxy basic HTTP authentication. | | no |
|
|
||||||
| proxy_password | Password for proxy basic HTTP authentication. | | no |
|
|
||||||
| method | HTTP request method. | GET | no |
|
|
||||||
| body | HTTP request body. | | no |
|
|
||||||
| headers | HTTP request headers. | | no |
|
|
||||||
| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
|
|
||||||
| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
|
|
||||||
| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
|
|
||||||
| tls_cert | Client TLS certificate. | | no |
|
|
||||||
| tls_key | Client TLS key. | | no |
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
#### Examples
|
|
||||||
|
|
||||||
##### Basic
|
|
||||||
|
|
||||||
A basic example configuration.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
- name: win_server
|
|
||||||
url: http://192.0.2.1:9182/metrics
|
|
||||||
|
|
||||||
```
|
|
||||||
##### HTTP authentication
|
|
||||||
|
|
||||||
Basic HTTP authentication.
|
|
||||||
|
|
||||||
<details open><summary>Config</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
- name: win_server
|
|
||||||
url: http://192.0.2.1:9182/metrics
|
|
||||||
username: username
|
|
||||||
password: password
|
|
||||||
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
##### HTTPS with self-signed certificate
|
|
||||||
|
|
||||||
Do not validate server certificate chain and hostname.
|
|
||||||
|
|
||||||
<details open><summary>Config</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
- name: win_server
|
|
||||||
url: https://192.0.2.1:9182/metrics
|
|
||||||
tls_skip_verify: yes
|
|
||||||
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
##### Virtual Node
|
|
||||||
|
|
||||||
The Virtual Node functionality allows you to define nodes in configuration files and treat them as ordinary nodes in all interfaces, panels, tabs, filters, etc.
|
|
||||||
You can create a virtual node for all your Windows machines and control them as separate entities.
|
|
||||||
|
|
||||||
To make your Windows server a virtual node, you need to define virtual nodes in `/etc/netdata/vnodes/vnodes.conf`:
|
|
||||||
|
|
||||||
> **Note**: To create a valid guid, you can use the `uuidgen` command on Linux, or the `[guid]::NewGuid()` command in PowerShell on Windows.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
# /etc/netdata/vnodes/vnodes.conf
|
|
||||||
- hostname: win_server
|
|
||||||
guid: <value>
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
<details open><summary>Config</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
- name: win_server
|
|
||||||
vnode: win_server
|
|
||||||
url: http://192.0.2.1:9182/metrics
|
|
||||||
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
##### Multi-instance
|
|
||||||
|
|
||||||
> **Note**: When you define multiple jobs, their names must be unique.
|
|
||||||
|
|
||||||
Collecting metrics from multiple remote instances.
|
|
||||||
|
|
||||||
|
|
||||||
<details open><summary>Config</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
- name: win_server1
|
|
||||||
url: http://192.0.2.1:9182/metrics
|
|
||||||
|
|
||||||
- name: win_server2
|
|
||||||
url: http://192.0.2.2:9182/metrics
|
|
||||||
|
|
||||||
```
|
|
||||||
</details>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Troubleshooting
|
|
||||||
|
|
||||||
### Debug Mode
|
|
||||||
|
|
||||||
**Important**: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature.
|
|
||||||
|
|
||||||
To troubleshoot issues with the `windows` collector, run the `go.d.plugin` with the debug option enabled. The output
|
|
||||||
should give you clues as to why the collector isn't working.
|
|
||||||
|
|
||||||
- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
|
|
||||||
your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd /usr/libexec/netdata/plugins.d/
|
|
||||||
```
|
|
||||||
|
|
||||||
- Switch to the `netdata` user.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo -u netdata -s
|
|
||||||
```
|
|
||||||
|
|
||||||
- Run the `go.d.plugin` to debug the collector:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./go.d.plugin -d -m windows
|
|
||||||
```
|
|
||||||
|
|
||||||
### Getting Logs
|
|
||||||
|
|
||||||
If you're encountering problems with the `windows` collector, follow these steps to retrieve logs and identify potential issues:
|
|
||||||
|
|
||||||
- **Run the command** specific to your system (systemd, non-systemd, or Docker container).
|
|
||||||
- **Examine the output** for any warnings or error messages that might indicate issues. These messages should provide clues about the root cause of the problem.
|
|
||||||
|
|
||||||
#### System with systemd
|
|
||||||
|
|
||||||
Use the following command to view logs generated since the last Netdata service restart:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep windows
|
|
||||||
```
|
|
||||||
|
|
||||||
#### System without systemd
|
|
||||||
|
|
||||||
Locate the collector log file, typically at `/var/log/netdata/collector.log`, and use `grep` to filter for collector's name:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
grep windows /var/log/netdata/collector.log
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: This method shows logs from all restarts. Focus on the **latest entries** for troubleshooting current issues.
|
|
||||||
|
|
||||||
#### Docker Container
|
|
||||||
|
|
||||||
If your Netdata runs in a Docker container named "netdata" (replace if different), use this command:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker logs netdata 2>&1 | grep windows
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,156 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const precision = 1000
|
|
||||||
|
|
||||||
const (
|
|
||||||
collectorAD = "ad"
|
|
||||||
collectorADCS = "adcs"
|
|
||||||
collectorADFS = "adfs"
|
|
||||||
collectorCPU = "cpu"
|
|
||||||
collectorMemory = "memory"
|
|
||||||
collectorNet = "net"
|
|
||||||
collectorLogicalDisk = "logical_disk"
|
|
||||||
collectorOS = "os"
|
|
||||||
collectorSystem = "system"
|
|
||||||
collectorLogon = "logon"
|
|
||||||
collectorThermalZone = "thermalzone"
|
|
||||||
collectorTCP = "tcp"
|
|
||||||
collectorIIS = "iis"
|
|
||||||
collectorMSSQL = "mssql"
|
|
||||||
collectorProcess = "process"
|
|
||||||
collectorService = "service"
|
|
||||||
collectorNetFrameworkCLRExceptions = "netframework_clrexceptions"
|
|
||||||
collectorNetFrameworkCLRInterop = "netframework_clrinterop"
|
|
||||||
collectorNetFrameworkCLRJIT = "netframework_clrjit"
|
|
||||||
collectorNetFrameworkCLRLoading = "netframework_clrloading"
|
|
||||||
collectorNetFrameworkCLRLocksAndThreads = "netframework_clrlocksandthreads"
|
|
||||||
collectorNetFrameworkCLRMemory = "netframework_clrmemory"
|
|
||||||
collectorNetFrameworkCLRRemoting = "netframework_clrremoting"
|
|
||||||
collectorNetFrameworkCLRSecurity = "netframework_clrsecurity"
|
|
||||||
collectorExchange = "exchange"
|
|
||||||
collectorHyperv = "hyperv"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collect() (map[string]int64, error) {
|
|
||||||
pms, err := c.prom.ScrapeSeries()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
mx := make(map[string]int64)
|
|
||||||
c.collectMetrics(mx, pms)
|
|
||||||
|
|
||||||
if hasKey(mx, "os_visible_memory_bytes", "memory_available_bytes") {
|
|
||||||
mx["memory_used_bytes"] = 0 +
|
|
||||||
mx["os_visible_memory_bytes"] -
|
|
||||||
mx["memory_available_bytes"]
|
|
||||||
}
|
|
||||||
if hasKey(mx, "os_paging_limit_bytes", "os_paging_free_bytes") {
|
|
||||||
mx["os_paging_used_bytes"] = 0 +
|
|
||||||
mx["os_paging_limit_bytes"] -
|
|
||||||
mx["os_paging_free_bytes"]
|
|
||||||
}
|
|
||||||
if hasKey(mx, "os_visible_memory_bytes", "os_physical_memory_free_bytes") {
|
|
||||||
mx["os_visible_memory_used_bytes"] = 0 +
|
|
||||||
mx["os_visible_memory_bytes"] -
|
|
||||||
mx["os_physical_memory_free_bytes"]
|
|
||||||
}
|
|
||||||
if hasKey(mx, "memory_commit_limit", "memory_committed_bytes") {
|
|
||||||
mx["memory_not_committed_bytes"] = 0 +
|
|
||||||
mx["memory_commit_limit"] -
|
|
||||||
mx["memory_committed_bytes"]
|
|
||||||
}
|
|
||||||
if hasKey(mx, "memory_standby_cache_reserve_bytes", "memory_standby_cache_normal_priority_bytes", "memory_standby_cache_core_bytes") {
|
|
||||||
mx["memory_standby_cache_total"] = 0 +
|
|
||||||
mx["memory_standby_cache_reserve_bytes"] +
|
|
||||||
mx["memory_standby_cache_normal_priority_bytes"] +
|
|
||||||
mx["memory_standby_cache_core_bytes"]
|
|
||||||
}
|
|
||||||
if hasKey(mx, "memory_standby_cache_total", "memory_modified_page_list_bytes") {
|
|
||||||
mx["memory_cache_total"] = 0 +
|
|
||||||
mx["memory_standby_cache_total"] +
|
|
||||||
mx["memory_modified_page_list_bytes"]
|
|
||||||
}
|
|
||||||
|
|
||||||
return mx, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectMetrics(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
c.collectCollector(mx, pms)
|
|
||||||
for _, pm := range pms.FindByName(metricCollectorSuccess) {
|
|
||||||
if pm.Value == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
switch pm.Labels.Get("collector") {
|
|
||||||
case collectorCPU:
|
|
||||||
c.collectCPU(mx, pms)
|
|
||||||
case collectorMemory:
|
|
||||||
c.collectMemory(mx, pms)
|
|
||||||
case collectorNet:
|
|
||||||
c.collectNet(mx, pms)
|
|
||||||
case collectorLogicalDisk:
|
|
||||||
c.collectLogicalDisk(mx, pms)
|
|
||||||
case collectorOS:
|
|
||||||
c.collectOS(mx, pms)
|
|
||||||
case collectorSystem:
|
|
||||||
c.collectSystem(mx, pms)
|
|
||||||
case collectorLogon:
|
|
||||||
c.collectLogon(mx, pms)
|
|
||||||
case collectorThermalZone:
|
|
||||||
c.collectThermalzone(mx, pms)
|
|
||||||
case collectorTCP:
|
|
||||||
c.collectTCP(mx, pms)
|
|
||||||
case collectorProcess:
|
|
||||||
c.collectProcess(mx, pms)
|
|
||||||
case collectorService:
|
|
||||||
c.collectService(mx, pms)
|
|
||||||
case collectorIIS:
|
|
||||||
c.collectIIS(mx, pms)
|
|
||||||
case collectorMSSQL:
|
|
||||||
c.collectMSSQL(mx, pms)
|
|
||||||
case collectorAD:
|
|
||||||
c.collectAD(mx, pms)
|
|
||||||
case collectorADCS:
|
|
||||||
c.collectADCS(mx, pms)
|
|
||||||
case collectorADFS:
|
|
||||||
c.collectADFS(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRExceptions:
|
|
||||||
c.collectNetFrameworkCLRExceptions(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRInterop:
|
|
||||||
c.collectNetFrameworkCLRInterop(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRJIT:
|
|
||||||
c.collectNetFrameworkCLRJIT(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRLoading:
|
|
||||||
c.collectNetFrameworkCLRLoading(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRLocksAndThreads:
|
|
||||||
c.collectNetFrameworkCLRLocksAndThreads(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRMemory:
|
|
||||||
c.collectNetFrameworkCLRMemory(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRRemoting:
|
|
||||||
c.collectNetFrameworkCLRRemoting(mx, pms)
|
|
||||||
case collectorNetFrameworkCLRSecurity:
|
|
||||||
c.collectNetFrameworkCLRSecurity(mx, pms)
|
|
||||||
case collectorExchange:
|
|
||||||
c.collectExchange(mx, pms)
|
|
||||||
case collectorHyperv:
|
|
||||||
c.collectHyperv(mx, pms)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func hasKey(mx map[string]int64, key string, keys ...string) bool {
|
|
||||||
_, ok := mx[key]
|
|
||||||
switch len(keys) {
|
|
||||||
case 0:
|
|
||||||
return ok
|
|
||||||
default:
|
|
||||||
return ok && hasKey(mx, keys[0], keys[1:]...)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,100 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
|
|
||||||
// Windows exporter:
|
|
||||||
// https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md
|
|
||||||
// Microsoft:
|
|
||||||
// https://learn.microsoft.com/en-us/previous-versions/ms803980(v=msdn.10)
|
|
||||||
const (
|
|
||||||
metricADATQAverageRequestLatency = "windows_ad_atq_average_request_latency"
|
|
||||||
metricADATQOutstandingRequests = "windows_ad_atq_outstanding_requests"
|
|
||||||
metricADDatabaseOperationsTotal = "windows_ad_database_operations_total"
|
|
||||||
metricADDirectoryOperationsTotal = "windows_ad_directory_operations_total"
|
|
||||||
metricADReplicationInboundObjectsFilteringTotal = "windows_ad_replication_inbound_objects_filtered_total"
|
|
||||||
metricADReplicationInboundPropertiesFilteredTotal = "windows_ad_replication_inbound_properties_filtered_total"
|
|
||||||
metricADReplicationInboundPropertiesUpdatedTotal = "windows_ad_replication_inbound_properties_updated_total"
|
|
||||||
metricADReplicationInboundSyncObjectsRemaining = "windows_ad_replication_inbound_sync_objects_remaining"
|
|
||||||
metricADReplicationDataInterSiteBytesTotal = "windows_ad_replication_data_intersite_bytes_total"
|
|
||||||
metricADReplicationDataIntraSiteBytesTotal = "windows_ad_replication_data_intrasite_bytes_total"
|
|
||||||
metricADReplicationPendingSyncs = "windows_ad_replication_pending_synchronizations"
|
|
||||||
metricADReplicationSyncRequestsTotal = "windows_ad_replication_sync_requests_total"
|
|
||||||
metricADDirectoryServiceThreads = "windows_ad_directory_service_threads"
|
|
||||||
metricADLDAPLastBindTimeSecondsTotal = "windows_ad_ldap_last_bind_time_seconds"
|
|
||||||
metricADBindsTotal = "windows_ad_binds_total"
|
|
||||||
metricADLDAPSearchesTotal = "windows_ad_ldap_searches_total"
|
|
||||||
metricADNameCacheLookupsTotal = "windows_ad_name_cache_lookups_total"
|
|
||||||
metricADNameCacheHitsTotal = "windows_ad_name_cache_hits_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectAD(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorAD] {
|
|
||||||
c.cache.collection[collectorAD] = true
|
|
||||||
c.addADCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
if pm := pms.FindByName(metricADATQAverageRequestLatency); pm.Len() > 0 {
|
|
||||||
mx["ad_atq_average_request_latency"] = int64(pm.Max() * precision)
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADATQOutstandingRequests); pm.Len() > 0 {
|
|
||||||
mx["ad_atq_outstanding_requests"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricADDatabaseOperationsTotal) {
|
|
||||||
if op := pm.Labels.Get("operation"); op != "" {
|
|
||||||
mx["ad_database_operations_total_"+op] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricADDirectoryOperationsTotal) {
|
|
||||||
if op := pm.Labels.Get("operation"); op != "" {
|
|
||||||
mx["ad_directory_operations_total_"+op] += int64(pm.Value) // sum "origin"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationInboundObjectsFilteringTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_inbound_objects_filtered_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationInboundPropertiesFilteredTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_inbound_properties_filtered_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationInboundPropertiesUpdatedTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_inbound_properties_updated_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationInboundSyncObjectsRemaining); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_inbound_sync_objects_remaining"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricADReplicationDataInterSiteBytesTotal) {
|
|
||||||
if name := pm.Labels.Get("direction"); name != "" {
|
|
||||||
mx["ad_replication_data_intersite_bytes_total_"+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricADReplicationDataIntraSiteBytesTotal) {
|
|
||||||
if name := pm.Labels.Get("direction"); name != "" {
|
|
||||||
mx["ad_replication_data_intrasite_bytes_total_"+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationPendingSyncs); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_pending_synchronizations"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADReplicationSyncRequestsTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_replication_sync_requests_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADDirectoryServiceThreads); pm.Len() > 0 {
|
|
||||||
mx["ad_directory_service_threads"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADLDAPLastBindTimeSecondsTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_ldap_last_bind_time_seconds"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricADBindsTotal) {
|
|
||||||
mx["ad_binds_total"] += int64(pm.Value) // sum "bind_method"'s
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADLDAPSearchesTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_ldap_searches_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADNameCacheLookupsTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_name_cache_lookups_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricADNameCacheHitsTotal); pm.Len() > 0 {
|
|
||||||
mx["ad_name_cache_hits_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricADCSRequestsTotal = "windows_adcs_requests_total"
|
|
||||||
metricADCSFailedRequestsTotal = "windows_adcs_failed_requests_total"
|
|
||||||
metricADCSIssuedRequestsTotal = "windows_adcs_issued_requests_total"
|
|
||||||
metricADCSPendingRequestsTotal = "windows_adcs_pending_requests_total"
|
|
||||||
metricADCSRequestProcessingTime = "windows_adcs_request_processing_time_seconds"
|
|
||||||
metricADCSRetrievalsTotal = "windows_adcs_retrievals_total"
|
|
||||||
metricADCSRetrievalsProcessingTime = "windows_adcs_retrievals_processing_time_seconds"
|
|
||||||
metricADCSRequestCryptoSigningTime = "windows_adcs_request_cryptographic_signing_time_seconds"
|
|
||||||
metricADCSRequestPolicyModuleProcessingTime = "windows_adcs_request_policy_module_processing_time_seconds"
|
|
||||||
metricADCSChallengeResponseResponsesTotal = "windows_adcs_challenge_responses_total"
|
|
||||||
metricADCSChallengeResponseProcessingTime = "windows_adcs_challenge_response_processing_time_seconds"
|
|
||||||
metricADCSSignedCertTimestampListsTotal = "windows_adcs_signed_certificate_timestamp_lists_total"
|
|
||||||
metricADCSSignedCertTimestampListProcessingTime = "windows_adcs_signed_certificate_timestamp_list_processing_time_seconds"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectADCS(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
pms = pms.FindByNames(
|
|
||||||
metricADCSRequestsTotal,
|
|
||||||
metricADCSFailedRequestsTotal,
|
|
||||||
metricADCSIssuedRequestsTotal,
|
|
||||||
metricADCSPendingRequestsTotal,
|
|
||||||
metricADCSRequestProcessingTime,
|
|
||||||
metricADCSRetrievalsTotal,
|
|
||||||
metricADCSRetrievalsProcessingTime,
|
|
||||||
metricADCSRequestCryptoSigningTime,
|
|
||||||
metricADCSRequestPolicyModuleProcessingTime,
|
|
||||||
metricADCSChallengeResponseResponsesTotal,
|
|
||||||
metricADCSChallengeResponseProcessingTime,
|
|
||||||
metricADCSSignedCertTimestampListsTotal,
|
|
||||||
metricADCSSignedCertTimestampListProcessingTime,
|
|
||||||
)
|
|
||||||
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms {
|
|
||||||
if tmpl := pm.Labels.Get("cert_template"); tmpl != "" && tmpl != "_Total" {
|
|
||||||
seen[tmpl] = true
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_adcs_")
|
|
||||||
v := pm.Value
|
|
||||||
if strings.HasSuffix(pm.Name(), "_seconds") {
|
|
||||||
v *= precision
|
|
||||||
}
|
|
||||||
mx["adcs_cert_template_"+tmpl+"_"+name] += int64(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for template := range seen {
|
|
||||||
if !c.cache.adcs[template] {
|
|
||||||
c.cache.adcs[template] = true
|
|
||||||
c.addCertificateTemplateCharts(template)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for template := range c.cache.adcs {
|
|
||||||
if !seen[template] {
|
|
||||||
delete(c.cache.adcs, template)
|
|
||||||
c.removeCertificateTemplateCharts(template)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,119 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricADFSADLoginConnectionFailuresTotal = "windows_adfs_ad_login_connection_failures_total"
|
|
||||||
metricADFSCertificateAuthenticationsTotal = "windows_adfs_certificate_authentications_total"
|
|
||||||
metricADFSDBArtifactFailureTotal = "windows_adfs_db_artifact_failure_total"
|
|
||||||
metricADFSDBArtifactQueryTimeSeconds = "windows_adfs_db_artifact_query_time_seconds_total"
|
|
||||||
metricADFSDBConfigFailureTotal = "windows_adfs_db_config_failure_total"
|
|
||||||
metricADFSDBQueryTimeSecondsTotal = "windows_adfs_db_config_query_time_seconds_total"
|
|
||||||
metricADFSDeviceAuthenticationsTotal = "windows_adfs_device_authentications_total"
|
|
||||||
metricADFSExternalAuthenticationsFailureTotal = "windows_adfs_external_authentications_failure_total"
|
|
||||||
metricADFSExternalAuthenticationsSuccessTotal = "windows_adfs_external_authentications_success_total"
|
|
||||||
metricADFSExtranetAccountLockoutsTotal = "windows_adfs_extranet_account_lockouts_total"
|
|
||||||
metricADFSFederatedAuthenticationsTotal = "windows_adfs_federated_authentications_total"
|
|
||||||
metricADFSFederationMetadataRequestsTotal = "windows_adfs_federation_metadata_requests_total"
|
|
||||||
|
|
||||||
metricADFSOauthAuthorizationRequestsTotal = "windows_adfs_oauth_authorization_requests_total"
|
|
||||||
metricADFSOauthClientAuthenticationFailureTotal = "windows_adfs_oauth_client_authentication_failure_total"
|
|
||||||
metricADFSOauthClientAuthenticationSuccessTotal = "windows_adfs_oauth_client_authentication_success_total"
|
|
||||||
metricADFSOauthClientCredentialsFailureTotal = "windows_adfs_oauth_client_credentials_failure_total"
|
|
||||||
metricADFSOauthClientCredentialsSuccessTotal = "windows_adfs_oauth_client_credentials_success_total"
|
|
||||||
metricADFSOauthClientPrivKeyJTWAuthenticationFailureTotal = "windows_adfs_oauth_client_privkey_jtw_authentication_failure_total"
|
|
||||||
metricADFSOauthClientPrivKeyJWTAuthenticationSuccessTotal = "windows_adfs_oauth_client_privkey_jwt_authentications_success_total"
|
|
||||||
metricADFSOauthClientSecretBasicAuthenticationsFailureTotal = "windows_adfs_oauth_client_secret_basic_authentications_failure_total"
|
|
||||||
metricADFSADFSOauthClientSecretBasicAuthenticationsSuccessTotal = "windows_adfs_oauth_client_secret_basic_authentications_success_total"
|
|
||||||
metricADFSOauthClientSecretPostAuthenticationsFailureTotal = "windows_adfs_oauth_client_secret_post_authentications_failure_total"
|
|
||||||
metricADFSOauthClientSecretPostAuthenticationsSuccessTotal = "windows_adfs_oauth_client_secret_post_authentications_success_total"
|
|
||||||
metricADFSOauthClientWindowsAuthenticationsFailureTotal = "windows_adfs_oauth_client_windows_authentications_failure_total"
|
|
||||||
metricADFSOauthClientWindowsAuthenticationsSuccessTotal = "windows_adfs_oauth_client_windows_authentications_success_total"
|
|
||||||
metricADFSOauthLogonCertificateRequestsFailureTotal = "windows_adfs_oauth_logon_certificate_requests_failure_total"
|
|
||||||
metricADFSOauthLogonCertificateTokenRequestsSuccessTotal = "windows_adfs_oauth_logon_certificate_token_requests_success_total"
|
|
||||||
metricADFSOauthPasswordGrantRequestsFailureTotal = "windows_adfs_oauth_password_grant_requests_failure_total"
|
|
||||||
metricADFSOauthPasswordGrantRequestsSuccessTotal = "windows_adfs_oauth_password_grant_requests_success_total"
|
|
||||||
metricADFSOauthTokenRequestsSuccessTotal = "windows_adfs_oauth_token_requests_success_total"
|
|
||||||
|
|
||||||
metricADFSPassiveRequestsTotal = "windows_adfs_passive_requests_total"
|
|
||||||
metricADFSPasswortAuthenticationsTotal = "windows_adfs_passport_authentications_total"
|
|
||||||
metricADFSPasswordChangeFailedTotal = "windows_adfs_password_change_failed_total"
|
|
||||||
metricADFSWPasswordChangeSucceededTotal = "windows_adfs_password_change_succeeded_total"
|
|
||||||
metricADFSSamlpTokenRequestsSuccessTotal = "windows_adfs_samlp_token_requests_success_total"
|
|
||||||
metricADFSSSOAuthenticationsFailureTotal = "windows_adfs_sso_authentications_failure_total"
|
|
||||||
metricADFSSSOAuthenticationsSuccessTotal = "windows_adfs_sso_authentications_success_total"
|
|
||||||
metricADFSTokenRequestsTotal = "windows_adfs_token_requests_total"
|
|
||||||
metricADFSUserPasswordAuthenticationsFailureTotal = "windows_adfs_userpassword_authentications_failure_total"
|
|
||||||
metricADFSUserPasswordAuthenticationsSuccessTotal = "windows_adfs_userpassword_authentications_success_total"
|
|
||||||
metricADFSWindowsIntegratedAuthenticationsTotal = "windows_adfs_windows_integrated_authentications_total"
|
|
||||||
metricADFSWSFedTokenRequestsSuccessTotal = "windows_adfs_wsfed_token_requests_success_total"
|
|
||||||
metricADFSWSTrustTokenRequestsSuccessTotal = "windows_adfs_wstrust_token_requests_success_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
var adfsMetrics = []string{
|
|
||||||
metricADFSADLoginConnectionFailuresTotal,
|
|
||||||
metricADFSCertificateAuthenticationsTotal,
|
|
||||||
metricADFSDBArtifactFailureTotal,
|
|
||||||
metricADFSDBArtifactQueryTimeSeconds,
|
|
||||||
metricADFSDBConfigFailureTotal,
|
|
||||||
metricADFSDBQueryTimeSecondsTotal,
|
|
||||||
metricADFSDeviceAuthenticationsTotal,
|
|
||||||
metricADFSExternalAuthenticationsFailureTotal,
|
|
||||||
metricADFSExternalAuthenticationsSuccessTotal,
|
|
||||||
metricADFSExtranetAccountLockoutsTotal,
|
|
||||||
metricADFSFederatedAuthenticationsTotal,
|
|
||||||
metricADFSFederationMetadataRequestsTotal,
|
|
||||||
metricADFSOauthAuthorizationRequestsTotal,
|
|
||||||
metricADFSOauthClientAuthenticationFailureTotal,
|
|
||||||
metricADFSOauthClientAuthenticationSuccessTotal,
|
|
||||||
metricADFSOauthClientCredentialsFailureTotal,
|
|
||||||
metricADFSOauthClientCredentialsSuccessTotal,
|
|
||||||
metricADFSOauthClientPrivKeyJTWAuthenticationFailureTotal,
|
|
||||||
metricADFSOauthClientPrivKeyJWTAuthenticationSuccessTotal,
|
|
||||||
metricADFSOauthClientSecretBasicAuthenticationsFailureTotal,
|
|
||||||
metricADFSADFSOauthClientSecretBasicAuthenticationsSuccessTotal,
|
|
||||||
metricADFSOauthClientSecretPostAuthenticationsFailureTotal,
|
|
||||||
metricADFSOauthClientSecretPostAuthenticationsSuccessTotal,
|
|
||||||
metricADFSOauthClientWindowsAuthenticationsFailureTotal,
|
|
||||||
metricADFSOauthClientWindowsAuthenticationsSuccessTotal,
|
|
||||||
metricADFSOauthLogonCertificateRequestsFailureTotal,
|
|
||||||
metricADFSOauthLogonCertificateTokenRequestsSuccessTotal,
|
|
||||||
metricADFSOauthPasswordGrantRequestsFailureTotal,
|
|
||||||
metricADFSOauthPasswordGrantRequestsSuccessTotal,
|
|
||||||
metricADFSOauthTokenRequestsSuccessTotal,
|
|
||||||
metricADFSPassiveRequestsTotal,
|
|
||||||
metricADFSPasswortAuthenticationsTotal,
|
|
||||||
metricADFSPasswordChangeFailedTotal,
|
|
||||||
metricADFSWPasswordChangeSucceededTotal,
|
|
||||||
metricADFSSamlpTokenRequestsSuccessTotal,
|
|
||||||
metricADFSSSOAuthenticationsFailureTotal,
|
|
||||||
metricADFSSSOAuthenticationsSuccessTotal,
|
|
||||||
metricADFSTokenRequestsTotal,
|
|
||||||
metricADFSUserPasswordAuthenticationsFailureTotal,
|
|
||||||
metricADFSUserPasswordAuthenticationsSuccessTotal,
|
|
||||||
metricADFSWindowsIntegratedAuthenticationsTotal,
|
|
||||||
metricADFSWSFedTokenRequestsSuccessTotal,
|
|
||||||
metricADFSWSTrustTokenRequestsSuccessTotal,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectADFS(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorADFS] {
|
|
||||||
c.cache.collection[collectorADFS] = true
|
|
||||||
c.addADFSCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(adfsMetrics...) {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_")
|
|
||||||
v := pm.Value
|
|
||||||
if strings.HasSuffix(name, "_seconds_total") {
|
|
||||||
v *= precision
|
|
||||||
}
|
|
||||||
mx[name] = int64(v)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricCollectorDuration = "windows_exporter_collector_duration_seconds"
|
|
||||||
metricCollectorSuccess = "windows_exporter_collector_success"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectCollector(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "collector_"
|
|
||||||
for _, pm := range pms.FindByName(metricCollectorDuration) {
|
|
||||||
if name := pm.Labels.Get("collector"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_duration"] = int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricCollectorSuccess) {
|
|
||||||
if name := pm.Labels.Get("collector"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
if pm.Value == 1 {
|
|
||||||
mx[px+name+"_status_success"], mx[px+name+"_status_fail"] = 1, 0
|
|
||||||
} else {
|
|
||||||
mx[px+name+"_status_success"], mx[px+name+"_status_fail"] = 0, 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for name := range seen {
|
|
||||||
if !c.cache.collectors[name] {
|
|
||||||
c.cache.collectors[name] = true
|
|
||||||
c.addCollectorCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for name := range c.cache.collectors {
|
|
||||||
if !seen[name] {
|
|
||||||
delete(c.cache.collectors, name)
|
|
||||||
c.removeCollectorCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricCPUTimeTotal = "windows_cpu_time_total"
|
|
||||||
metricCPUInterruptsTotal = "windows_cpu_interrupts_total"
|
|
||||||
metricCPUDPCsTotal = "windows_cpu_dpcs_total"
|
|
||||||
metricCPUCStateTotal = "windows_cpu_cstate_seconds_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectCPU(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorCPU] {
|
|
||||||
c.cache.collection[collectorCPU] = true
|
|
||||||
c.addCPUCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
for _, pm := range pms.FindByName(metricCPUTimeTotal) {
|
|
||||||
core := pm.Labels.Get("core")
|
|
||||||
mode := pm.Labels.Get("mode")
|
|
||||||
if core == "" || mode == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[core] = true
|
|
||||||
mx["cpu_"+mode+"_time"] += int64(pm.Value * precision)
|
|
||||||
mx["cpu_core_"+core+"_"+mode+"_time"] += int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricCPUInterruptsTotal) {
|
|
||||||
core := pm.Labels.Get("core")
|
|
||||||
if core == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[core] = true
|
|
||||||
mx["cpu_core_"+core+"_interrupts"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricCPUDPCsTotal) {
|
|
||||||
core := pm.Labels.Get("core")
|
|
||||||
if core == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[core] = true
|
|
||||||
mx["cpu_core_"+core+"_dpcs"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricCPUCStateTotal) {
|
|
||||||
core := pm.Labels.Get("core")
|
|
||||||
state := pm.Labels.Get("state")
|
|
||||||
if core == "" || state == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[core] = true
|
|
||||||
mx["cpu_core_"+core+"_cstate_"+state] += int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
|
|
||||||
for core := range seen {
|
|
||||||
if !c.cache.cores[core] {
|
|
||||||
c.cache.cores[core] = true
|
|
||||||
c.addCPUCoreCharts(core)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for core := range c.cache.cores {
|
|
||||||
if !seen[core] {
|
|
||||||
delete(c.cache.cores, core)
|
|
||||||
c.removeCPUCoreCharts(core)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,245 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/metrix"
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricExchangeActiveSyncPingCmdsPending = "windows_exchange_activesync_ping_cmds_pending"
|
|
||||||
metricExchangeActiveSyncRequestsTotal = "windows_exchange_activesync_requests_total"
|
|
||||||
metricExchangeActiveSyncCMDsTotal = "windows_exchange_activesync_sync_cmds_total"
|
|
||||||
metricExchangeAutoDiscoverRequestsTotal = "windows_exchange_autodiscover_requests_total"
|
|
||||||
metricExchangeAvailServiceRequestsPerSec = "windows_exchange_avail_service_requests_per_sec"
|
|
||||||
metricExchangeOWACurrentUniqueUsers = "windows_exchange_owa_current_unique_users"
|
|
||||||
metricExchangeOWARequestsTotal = "windows_exchange_owa_requests_total"
|
|
||||||
metricExchangeRPCActiveUserCount = "windows_exchange_rpc_active_user_count"
|
|
||||||
metricExchangeRPCAvgLatencySec = "windows_exchange_rpc_avg_latency_sec"
|
|
||||||
metricExchangeRPCConnectionCount = "windows_exchange_rpc_connection_count"
|
|
||||||
metricExchangeRPCOperationsTotal = "windows_exchange_rpc_operations_total"
|
|
||||||
metricExchangeRPCRequests = "windows_exchange_rpc_requests"
|
|
||||||
metricExchangeRPCUserCount = "windows_exchange_rpc_user_count"
|
|
||||||
|
|
||||||
metricExchangeTransportQueuesActiveMailboxDelivery = "windows_exchange_transport_queues_active_mailbox_delivery"
|
|
||||||
metricExchangeTransportQueuesExternalActiveRemoteDelivery = "windows_exchange_transport_queues_external_active_remote_delivery"
|
|
||||||
metricExchangeTransportQueuesExternalLargestDelivery = "windows_exchange_transport_queues_external_largest_delivery"
|
|
||||||
metricExchangeTransportQueuesInternalActiveRemoteDelivery = "windows_exchange_transport_queues_internal_active_remote_delivery"
|
|
||||||
metricExchangeTransportQueuesInternalLargestDelivery = "windows_exchange_transport_queues_internal_largest_delivery"
|
|
||||||
metricExchangeTransportQueuesPoison = "windows_exchange_transport_queues_poison"
|
|
||||||
metricExchangeTransportQueuesRetryMailboxDelivery = "windows_exchange_transport_queues_retry_mailbox_delivery"
|
|
||||||
metricExchangeTransportQueuesUnreachable = "windows_exchange_transport_queues_unreachable"
|
|
||||||
|
|
||||||
metricExchangeWorkloadActiveTasks = "windows_exchange_workload_active_tasks"
|
|
||||||
metricExchangeWorkloadCompletedTasks = "windows_exchange_workload_completed_tasks"
|
|
||||||
metricExchangeWorkloadQueuedTasks = "windows_exchange_workload_queued_tasks"
|
|
||||||
metricExchangeWorkloadYieldedTasks = "windows_exchange_workload_yielded_tasks"
|
|
||||||
metricExchangeWorkloadIsActive = "windows_exchange_workload_is_active"
|
|
||||||
|
|
||||||
metricExchangeLDAPLongRunningOPSPerSec = "windows_exchange_ldap_long_running_ops_per_sec"
|
|
||||||
metricExchangeLDAPReadTimeSec = "windows_exchange_ldap_read_time_sec"
|
|
||||||
metricExchangeLDAPSearchTmeSec = "windows_exchange_ldap_search_time_sec"
|
|
||||||
metricExchangeLDAPWriteTimeSec = "windows_exchange_ldap_write_time_sec"
|
|
||||||
metricExchangeLDAPTimeoutErrorsTotal = "windows_exchange_ldap_timeout_errors_total"
|
|
||||||
|
|
||||||
metricExchangeHTTPProxyAvgAuthLatency = "windows_exchange_http_proxy_avg_auth_latency"
|
|
||||||
metricExchangeHTTPProxyAvgCASProcessingLatencySec = "windows_exchange_http_proxy_avg_cas_proccessing_latency_sec"
|
|
||||||
metricExchangeHTTPProxyMailboxProxyFailureRate = "windows_exchange_http_proxy_mailbox_proxy_failure_rate"
|
|
||||||
metricExchangeHTTPProxyMailboxServerLocatorAvgLatencySec = "windows_exchange_http_proxy_mailbox_server_locator_avg_latency_sec"
|
|
||||||
metricExchangeHTTPProxyOutstandingProxyRequests = "windows_exchange_http_proxy_outstanding_proxy_requests"
|
|
||||||
metricExchangeHTTPProxyRequestsTotal = "windows_exchange_http_proxy_requests_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectExchange(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorExchange] {
|
|
||||||
c.cache.collection[collectorExchange] = true
|
|
||||||
c.addExchangeCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
if pm := pms.FindByName(metricExchangeActiveSyncPingCmdsPending); pm.Len() > 0 {
|
|
||||||
mx["exchange_activesync_ping_cmds_pending"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeActiveSyncRequestsTotal); pm.Len() > 0 {
|
|
||||||
mx["exchange_activesync_requests_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeActiveSyncCMDsTotal); pm.Len() > 0 {
|
|
||||||
mx["exchange_activesync_sync_cmds_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeAutoDiscoverRequestsTotal); pm.Len() > 0 {
|
|
||||||
mx["exchange_autodiscover_requests_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeAvailServiceRequestsPerSec); pm.Len() > 0 {
|
|
||||||
mx["exchange_avail_service_requests_per_sec"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeOWACurrentUniqueUsers); pm.Len() > 0 {
|
|
||||||
mx["exchange_owa_current_unique_users"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeOWARequestsTotal); pm.Len() > 0 {
|
|
||||||
mx["exchange_owa_requests_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCActiveUserCount); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_active_user_count"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCAvgLatencySec); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_avg_latency_sec"] = int64(pm.Max() * precision)
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCConnectionCount); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_connection_count"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCOperationsTotal); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_operations_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCRequests); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_requests"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricExchangeRPCUserCount); pm.Len() > 0 {
|
|
||||||
mx["exchange_rpc_user_count"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
|
|
||||||
c.collectExchangeAddTransportQueueMetric(mx, pms)
|
|
||||||
c.collectExchangeAddWorkloadMetric(mx, pms)
|
|
||||||
c.collectExchangeAddLDAPMetric(mx, pms)
|
|
||||||
c.collectExchangeAddHTTPProxyMetric(mx, pms)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectExchangeAddTransportQueueMetric(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
pms = pms.FindByNames(
|
|
||||||
metricExchangeTransportQueuesActiveMailboxDelivery,
|
|
||||||
metricExchangeTransportQueuesExternalActiveRemoteDelivery,
|
|
||||||
metricExchangeTransportQueuesExternalLargestDelivery,
|
|
||||||
metricExchangeTransportQueuesInternalActiveRemoteDelivery,
|
|
||||||
metricExchangeTransportQueuesInternalLargestDelivery,
|
|
||||||
metricExchangeTransportQueuesPoison,
|
|
||||||
metricExchangeTransportQueuesRetryMailboxDelivery,
|
|
||||||
metricExchangeTransportQueuesUnreachable,
|
|
||||||
)
|
|
||||||
|
|
||||||
for _, pm := range pms {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" && name != "total_excluding_priority_none" {
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_")
|
|
||||||
mx[metric+"_"+name] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectExchangeAddWorkloadMetric(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(
|
|
||||||
metricExchangeWorkloadActiveTasks,
|
|
||||||
metricExchangeWorkloadCompletedTasks,
|
|
||||||
metricExchangeWorkloadQueuedTasks,
|
|
||||||
metricExchangeWorkloadYieldedTasks,
|
|
||||||
) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_exchange_workload_")
|
|
||||||
mx["exchange_workload_"+name+"_"+metric] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricExchangeWorkloadIsActive) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx["exchange_workload_"+name+"_is_active"] += metrix.Bool(pm.Value == 1)
|
|
||||||
mx["exchange_workload_"+name+"_is_paused"] += metrix.Bool(pm.Value == 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for name := range seen {
|
|
||||||
if !c.cache.exchangeWorkload[name] {
|
|
||||||
c.cache.exchangeWorkload[name] = true
|
|
||||||
c.addExchangeWorkloadCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for name := range c.cache.exchangeWorkload {
|
|
||||||
if !seen[name] {
|
|
||||||
delete(c.cache.exchangeWorkload, name)
|
|
||||||
c.removeExchangeWorkloadCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectExchangeAddLDAPMetric(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(
|
|
||||||
metricExchangeLDAPLongRunningOPSPerSec,
|
|
||||||
metricExchangeLDAPTimeoutErrorsTotal,
|
|
||||||
) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_exchange_ldap_")
|
|
||||||
mx["exchange_ldap_"+name+"_"+metric] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(
|
|
||||||
metricExchangeLDAPReadTimeSec,
|
|
||||||
metricExchangeLDAPSearchTmeSec,
|
|
||||||
metricExchangeLDAPWriteTimeSec,
|
|
||||||
) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_exchange_ldap_")
|
|
||||||
mx["exchange_ldap_"+name+"_"+metric] += int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for name := range seen {
|
|
||||||
if !c.cache.exchangeLDAP[name] {
|
|
||||||
c.cache.exchangeLDAP[name] = true
|
|
||||||
c.addExchangeLDAPCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for name := range c.cache.exchangeLDAP {
|
|
||||||
if !seen[name] {
|
|
||||||
delete(c.cache.exchangeLDAP, name)
|
|
||||||
c.removeExchangeLDAPCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectExchangeAddHTTPProxyMetric(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(
|
|
||||||
metricExchangeHTTPProxyAvgAuthLatency,
|
|
||||||
metricExchangeHTTPProxyOutstandingProxyRequests,
|
|
||||||
metricExchangeHTTPProxyRequestsTotal,
|
|
||||||
) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_exchange_http_proxy_")
|
|
||||||
mx["exchange_http_proxy_"+name+"_"+metric] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByNames(
|
|
||||||
metricExchangeHTTPProxyAvgCASProcessingLatencySec,
|
|
||||||
metricExchangeHTTPProxyMailboxProxyFailureRate,
|
|
||||||
metricExchangeHTTPProxyMailboxServerLocatorAvgLatencySec,
|
|
||||||
) {
|
|
||||||
if name := pm.Labels.Get("name"); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
metric := strings.TrimPrefix(pm.Name(), "windows_exchange_http_proxy_")
|
|
||||||
mx["exchange_http_proxy_"+name+"_"+metric] += int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for name := range seen {
|
|
||||||
if !c.cache.exchangeHTTPProxy[name] {
|
|
||||||
c.cache.exchangeHTTPProxy[name] = true
|
|
||||||
c.addExchangeHTTPProxyCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for name := range c.cache.exchangeHTTPProxy {
|
|
||||||
if !seen[name] {
|
|
||||||
delete(c.cache.exchangeHTTPProxy, name)
|
|
||||||
c.removeExchangeHTTPProxyCharts(name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,288 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricHypervHealthCritical = "windows_hyperv_health_critical"
|
|
||||||
metricHypervHealthOK = "windows_hyperv_health_ok"
|
|
||||||
|
|
||||||
metricHypervRootPartition4KGPAPages = "windows_hyperv_root_partition_4K_gpa_pages"
|
|
||||||
metricHypervRootPartition2MGPAPages = "windows_hyperv_root_partition_2M_gpa_pages"
|
|
||||||
metricHypervRootPartition1GGPAPages = "windows_hyperv_root_partition_1G_gpa_pages"
|
|
||||||
metricHypervRootPartition4KDevicePages = "windows_hyperv_root_partition_4K_device_pages"
|
|
||||||
metricHypervRootPartition2MDevicePages = "windows_hyperv_root_partition_2M_device_pages"
|
|
||||||
metricHypervRootPartition1GDevicePages = "windows_hyperv_root_partition_1G_device_pages"
|
|
||||||
metricHypervRootPartitionGPASpaceModifications = "windows_hyperv_root_partition_gpa_space_modifications"
|
|
||||||
metricHypervRootPartitionAttachedDevices = "windows_hyperv_root_partition_attached_devices"
|
|
||||||
metricHypervRootPartitionDepositedPages = "windows_hyperv_root_partition_deposited_pages"
|
|
||||||
metricHypervRootPartitionPhysicalPagesAllocated = "windows_hyperv_root_partition_physical_pages_allocated" // SkippedTimerTicks
|
|
||||||
metricHypervRootPartitionDeviceDMAErrors = "windows_hyperv_root_partition_device_dma_errors"
|
|
||||||
metricHypervRootPartitionDeviceInterruptErrors = "windows_hyperv_root_partition_device_interrupt_errors"
|
|
||||||
metricHypervRootPartitionDeviceInterruptThrottleEvents = "windows_hyperv_root_partition_device_interrupt_throttle_events"
|
|
||||||
metricHypervRootPartitionIOTLBFlush = "windows_hyperv_root_partition_io_tlb_flush"
|
|
||||||
metricHypervRootPartitionAddressSpace = "windows_hyperv_root_partition_address_spaces"
|
|
||||||
metricHypervRootPartitionVirtualTLBPages = "windows_hyperv_root_partition_virtual_tlb_pages"
|
|
||||||
metricHypervRootPartitionVirtualTLBFlushEntries = "windows_hyperv_root_partition_virtual_tlb_flush_entires"
|
|
||||||
|
|
||||||
metricsHypervVMCPUGuestRunTime = "windows_hyperv_vm_cpu_guest_run_time"
|
|
||||||
metricsHypervVMCPUHypervisorRunTime = "windows_hyperv_vm_cpu_hypervisor_run_time"
|
|
||||||
metricsHypervVMCPURemoteRunTime = "windows_hyperv_vm_cpu_remote_run_time"
|
|
||||||
metricsHypervVMCPUTotalRunTime = "windows_hyperv_vm_cpu_total_run_time"
|
|
||||||
|
|
||||||
metricHypervVMMemoryPhysical = "windows_hyperv_vm_memory_physical"
|
|
||||||
metricHypervVMMemoryPhysicalGuestVisible = "windows_hyperv_vm_memory_physical_guest_visible"
|
|
||||||
metricHypervVMMemoryPressureCurrent = "windows_hyperv_vm_memory_pressure_current"
|
|
||||||
metricHyperVVIDPhysicalPagesAllocated = "windows_hyperv_vid_physical_pages_allocated"
|
|
||||||
metricHyperVVIDRemotePhysicalPages = "windows_hyperv_vid_remote_physical_pages"
|
|
||||||
|
|
||||||
metricHypervVMDeviceBytesRead = "windows_hyperv_vm_device_bytes_read"
|
|
||||||
metricHypervVMDeviceBytesWritten = "windows_hyperv_vm_device_bytes_written"
|
|
||||||
metricHypervVMDeviceOperationsRead = "windows_hyperv_vm_device_operations_read"
|
|
||||||
metricHypervVMDeviceOperationsWritten = "windows_hyperv_vm_device_operations_written"
|
|
||||||
metricHypervVMDeviceErrorCount = "windows_hyperv_vm_device_error_count"
|
|
||||||
|
|
||||||
metricHypervVMInterfaceBytesReceived = "windows_hyperv_vm_interface_bytes_received"
|
|
||||||
metricHypervVMInterfaceBytesSent = "windows_hyperv_vm_interface_bytes_sent"
|
|
||||||
metricHypervVMInterfacePacketsIncomingDropped = "windows_hyperv_vm_interface_packets_incoming_dropped"
|
|
||||||
metricHypervVMInterfacePacketsOutgoingDropped = "windows_hyperv_vm_interface_packets_outgoing_dropped"
|
|
||||||
metricHypervVMInterfacePacketsReceived = "windows_hyperv_vm_interface_packets_received"
|
|
||||||
metricHypervVMInterfacePacketsSent = "windows_hyperv_vm_interface_packets_sent"
|
|
||||||
|
|
||||||
metricHypervVSwitchBroadcastPacketsReceivedTotal = "windows_hyperv_vswitch_broadcast_packets_received_total"
|
|
||||||
metricHypervVSwitchBroadcastPacketsSentTotal = "windows_hyperv_vswitch_broadcast_packets_sent_total"
|
|
||||||
metricHypervVSwitchBytesReceivedTotal = "windows_hyperv_vswitch_bytes_received_total"
|
|
||||||
metricHypervVSwitchBytesSentTotal = "windows_hyperv_vswitch_bytes_sent_total"
|
|
||||||
metricHypervVSwitchPacketsReceivedTotal = "windows_hyperv_vswitch_packets_received_total"
|
|
||||||
metricHypervVSwitchPacketsSentTotal = "windows_hyperv_vswitch_packets_sent_total"
|
|
||||||
metricHypervVSwitchDirectedPacketsReceivedTotal = "windows_hyperv_vswitch_directed_packets_received_total"
|
|
||||||
metricHypervVSwitchDirectedPacketsSendTotal = "windows_hyperv_vswitch_directed_packets_send_total"
|
|
||||||
metricHypervVSwitchDroppedPacketsIncomingTotal = "windows_hyperv_vswitch_dropped_packets_incoming_total"
|
|
||||||
metricHypervVSwitchDroppedPacketsOutcomingTotal = "windows_hyperv_vswitch_dropped_packets_outcoming_total"
|
|
||||||
metricHypervVSwitchExtensionDroppedAttacksIncomingTotal = "windows_hyperv_vswitch_extensions_dropped_packets_incoming_total"
|
|
||||||
metricHypervVSwitchExtensionDroppedPacketsOutcomingTotal = "windows_hyperv_vswitch_extensions_dropped_packets_outcoming_total"
|
|
||||||
metricHypervVSwitchLearnedMACAddressTotal = "windows_hyperv_vswitch_learned_mac_addresses_total"
|
|
||||||
metricHypervVSwitchMulticastPacketsReceivedTotal = "windows_hyperv_vswitch_multicast_packets_received_total"
|
|
||||||
metricHypervVSwitchMulticastPacketsSentTotal = "windows_hyperv_vswitch_multicast_packets_sent_total"
|
|
||||||
metricHypervVSwitchNumberOfSendChannelMovesTotal = "windows_hyperv_vswitch_number_of_send_channel_moves_total"
|
|
||||||
metricHypervVSwitchNumberOfVMQMovesTotal = "windows_hyperv_vswitch_number_of_vmq_moves_total"
|
|
||||||
metricHypervVSwitchPacketsFloodedTotal = "windows_hyperv_vswitch_packets_flooded_total"
|
|
||||||
metricHypervVSwitchPurgedMACAddresses = "windows_hyperv_vswitch_purged_mac_addresses_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectHyperv(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorHyperv] {
|
|
||||||
c.cache.collection[collectorHyperv] = true
|
|
||||||
c.addHypervCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHypervHealthOK,
|
|
||||||
metricHypervHealthCritical,
|
|
||||||
metricHypervRootPartition4KGPAPages,
|
|
||||||
metricHypervRootPartition2MGPAPages,
|
|
||||||
metricHypervRootPartition1GGPAPages,
|
|
||||||
metricHypervRootPartition4KDevicePages,
|
|
||||||
metricHypervRootPartition2MDevicePages,
|
|
||||||
metricHypervRootPartition1GDevicePages,
|
|
||||||
metricHypervRootPartitionGPASpaceModifications,
|
|
||||||
metricHypervRootPartitionAddressSpace,
|
|
||||||
metricHypervRootPartitionAttachedDevices,
|
|
||||||
metricHypervRootPartitionDepositedPages,
|
|
||||||
metricHypervRootPartitionPhysicalPagesAllocated,
|
|
||||||
metricHypervRootPartitionDeviceDMAErrors,
|
|
||||||
metricHypervRootPartitionDeviceInterruptErrors,
|
|
||||||
metricHypervRootPartitionDeviceInterruptThrottleEvents,
|
|
||||||
metricHypervRootPartitionIOTLBFlush,
|
|
||||||
metricHypervRootPartitionVirtualTLBPages,
|
|
||||||
metricHypervRootPartitionVirtualTLBFlushEntries,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_")
|
|
||||||
mx[name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
c.collectHypervVM(mx, pms)
|
|
||||||
c.collectHypervVMDevices(mx, pms)
|
|
||||||
c.collectHypervVMInterface(mx, pms)
|
|
||||||
c.collectHypervVSwitch(mx, pms)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectHypervVM(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "hyperv_vm_"
|
|
||||||
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHypervVMMemoryPhysical,
|
|
||||||
metricHypervVMMemoryPhysicalGuestVisible,
|
|
||||||
metricHypervVMMemoryPressureCurrent,
|
|
||||||
metricsHypervVMCPUGuestRunTime,
|
|
||||||
metricsHypervVMCPUHypervisorRunTime,
|
|
||||||
metricsHypervVMCPURemoteRunTime,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
if vm := pm.Labels.Get("vm"); vm != "" {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm")
|
|
||||||
seen[vm] = true
|
|
||||||
mx[px+hypervCleanName(vm)+name] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
px = "hyperv_vid_"
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHyperVVIDPhysicalPagesAllocated,
|
|
||||||
metricHyperVVIDRemotePhysicalPages,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
if vm := pm.Labels.Get("vm"); vm != "" {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vid")
|
|
||||||
seen[vm] = true
|
|
||||||
mx[px+hypervCleanName(vm)+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range seen {
|
|
||||||
if !c.cache.hypervVMMem[v] {
|
|
||||||
c.cache.hypervVMMem[v] = true
|
|
||||||
c.addHypervVMCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.hypervVMMem {
|
|
||||||
if !seen[v] {
|
|
||||||
delete(c.cache.hypervVMMem, v)
|
|
||||||
c.removeHypervVMCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectHypervVMDevices(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "hyperv_vm_device_"
|
|
||||||
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHypervVMDeviceBytesRead,
|
|
||||||
metricHypervVMDeviceBytesWritten,
|
|
||||||
metricHypervVMDeviceOperationsRead,
|
|
||||||
metricHypervVMDeviceOperationsWritten,
|
|
||||||
metricHypervVMDeviceErrorCount,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
if device := pm.Labels.Get("vm_device"); device != "" {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm_device")
|
|
||||||
seen[device] = true
|
|
||||||
mx[px+hypervCleanName(device)+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range seen {
|
|
||||||
if !c.cache.hypervVMDevices[v] {
|
|
||||||
c.cache.hypervVMDevices[v] = true
|
|
||||||
c.addHypervVMDeviceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.hypervVMDevices {
|
|
||||||
if !seen[v] {
|
|
||||||
delete(c.cache.hypervVMDevices, v)
|
|
||||||
c.removeHypervVMDeviceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectHypervVMInterface(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "hyperv_vm_interface_"
|
|
||||||
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHypervVMInterfaceBytesReceived,
|
|
||||||
metricHypervVMInterfaceBytesSent,
|
|
||||||
metricHypervVMInterfacePacketsIncomingDropped,
|
|
||||||
metricHypervVMInterfacePacketsOutgoingDropped,
|
|
||||||
metricHypervVMInterfacePacketsReceived,
|
|
||||||
metricHypervVMInterfacePacketsSent,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
if iface := pm.Labels.Get("vm_interface"); iface != "" {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vm_interface")
|
|
||||||
seen[iface] = true
|
|
||||||
mx[px+hypervCleanName(iface)+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range seen {
|
|
||||||
if !c.cache.hypervVMInterfaces[v] {
|
|
||||||
c.cache.hypervVMInterfaces[v] = true
|
|
||||||
c.addHypervVMInterfaceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.hypervVMInterfaces {
|
|
||||||
if !seen[v] {
|
|
||||||
delete(c.cache.hypervVMInterfaces, v)
|
|
||||||
c.removeHypervVMInterfaceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) collectHypervVSwitch(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "hyperv_vswitch_"
|
|
||||||
|
|
||||||
for _, v := range []string{
|
|
||||||
metricHypervVSwitchBytesReceivedTotal,
|
|
||||||
metricHypervVSwitchBytesSentTotal,
|
|
||||||
metricHypervVSwitchPacketsReceivedTotal,
|
|
||||||
metricHypervVSwitchPacketsSentTotal,
|
|
||||||
metricHypervVSwitchDirectedPacketsReceivedTotal,
|
|
||||||
metricHypervVSwitchDirectedPacketsSendTotal,
|
|
||||||
metricHypervVSwitchBroadcastPacketsReceivedTotal,
|
|
||||||
metricHypervVSwitchBroadcastPacketsSentTotal,
|
|
||||||
metricHypervVSwitchMulticastPacketsReceivedTotal,
|
|
||||||
metricHypervVSwitchMulticastPacketsSentTotal,
|
|
||||||
metricHypervVSwitchDroppedPacketsIncomingTotal,
|
|
||||||
metricHypervVSwitchDroppedPacketsOutcomingTotal,
|
|
||||||
metricHypervVSwitchExtensionDroppedAttacksIncomingTotal,
|
|
||||||
metricHypervVSwitchExtensionDroppedPacketsOutcomingTotal,
|
|
||||||
metricHypervVSwitchPacketsFloodedTotal,
|
|
||||||
metricHypervVSwitchLearnedMACAddressTotal,
|
|
||||||
metricHypervVSwitchPurgedMACAddresses,
|
|
||||||
metricHypervVSwitchNumberOfSendChannelMovesTotal,
|
|
||||||
metricHypervVSwitchNumberOfVMQMovesTotal,
|
|
||||||
} {
|
|
||||||
for _, pm := range pms.FindByName(v) {
|
|
||||||
if vswitch := pm.Labels.Get("vswitch"); vswitch != "" {
|
|
||||||
name := strings.TrimPrefix(pm.Name(), "windows_hyperv_vswitch")
|
|
||||||
seen[vswitch] = true
|
|
||||||
mx[px+hypervCleanName(vswitch)+name] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range seen {
|
|
||||||
if !c.cache.hypervVswitch[v] {
|
|
||||||
c.cache.hypervVswitch[v] = true
|
|
||||||
c.addHypervVSwitchCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.hypervVswitch {
|
|
||||||
if !seen[v] {
|
|
||||||
delete(c.cache.hypervVswitch, v)
|
|
||||||
c.removeHypervVSwitchCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var hypervNameReplacer = strings.NewReplacer(" ", "_", "?", "_", ":", "_", ".", "_")
|
|
||||||
|
|
||||||
func hypervCleanName(name string) string {
|
|
||||||
name = hypervNameReplacer.Replace(name)
|
|
||||||
return strings.ToLower(name)
|
|
||||||
}
|
|
|
@ -1,140 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricIISCurrentAnonymousUsers = "windows_iis_current_anonymous_users"
|
|
||||||
metricIISCurrentNonAnonymousUsers = "windows_iis_current_non_anonymous_users"
|
|
||||||
metricIISCurrentConnections = "windows_iis_current_connections"
|
|
||||||
metricIICurrentISAPIExtRequests = "windows_iis_current_isapi_extension_requests"
|
|
||||||
metricIISUptime = "windows_iis_service_uptime"
|
|
||||||
|
|
||||||
metricIISReceivedBytesTotal = "windows_iis_received_bytes_total"
|
|
||||||
metricIISSentBytesTotal = "windows_iis_sent_bytes_total"
|
|
||||||
metricIISRequestsTotal = "windows_iis_requests_total"
|
|
||||||
metricIISIPAPIExtRequestsTotal = "windows_iis_ipapi_extension_requests_total"
|
|
||||||
metricIISConnAttemptsAllInstancesTotal = "windows_iis_connection_attempts_all_instances_total"
|
|
||||||
metricIISFilesReceivedTotal = "windows_iis_files_received_total"
|
|
||||||
metricIISFilesSentTotal = "windows_iis_files_sent_total"
|
|
||||||
metricIISLogonAttemptsTotal = "windows_iis_logon_attempts_total"
|
|
||||||
metricIISLockedErrorsTotal = "windows_iis_locked_errors_total"
|
|
||||||
metricIISNotFoundErrorsTotal = "windows_iis_not_found_errors_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectIIS(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "iis_website_"
|
|
||||||
for _, pm := range pms.FindByName(metricIISCurrentAnonymousUsers) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_current_anonymous_users"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISCurrentNonAnonymousUsers) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_current_non_anonymous_users"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISCurrentConnections) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_current_connections"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIICurrentISAPIExtRequests) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_current_isapi_extension_requests"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISUptime) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_service_uptime"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISReceivedBytesTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_received_bytes_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISSentBytesTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_sent_bytes_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISRequestsTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_requests_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISConnAttemptsAllInstancesTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_connection_attempts_all_instances_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISFilesReceivedTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_files_received_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISFilesSentTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_files_sent_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISIPAPIExtRequestsTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_isapi_extension_requests_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISLogonAttemptsTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_logon_attempts_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISLockedErrorsTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_locked_errors_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricIISNotFoundErrorsTotal) {
|
|
||||||
if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_not_found_errors_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for site := range seen {
|
|
||||||
if !c.cache.iis[site] {
|
|
||||||
c.cache.iis[site] = true
|
|
||||||
c.addIISWebsiteCharts(site)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for site := range c.cache.iis {
|
|
||||||
if !seen[site] {
|
|
||||||
delete(c.cache.iis, site)
|
|
||||||
c.removeIIWebsiteSCharts(site)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanWebsiteName(name string) string {
|
|
||||||
return strings.ReplaceAll(name, " ", "_")
|
|
||||||
}
|
|
|
@ -1,95 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricLDReadBytesTotal = "windows_logical_disk_read_bytes_total"
|
|
||||||
metricLDWriteBytesTotal = "windows_logical_disk_write_bytes_total"
|
|
||||||
metricLDReadsTotal = "windows_logical_disk_reads_total"
|
|
||||||
metricLDWritesTotal = "windows_logical_disk_writes_total"
|
|
||||||
metricLDSizeBytes = "windows_logical_disk_size_bytes"
|
|
||||||
metricLDFreeBytes = "windows_logical_disk_free_bytes"
|
|
||||||
metricLDReadLatencyTotal = "windows_logical_disk_read_latency_seconds_total"
|
|
||||||
metricLDWriteLatencyTotal = "windows_logical_disk_write_latency_seconds_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectLogicalDisk(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "logical_disk_"
|
|
||||||
for _, pm := range pms.FindByName(metricLDReadBytesTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_read_bytes_total"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDWriteBytesTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_write_bytes_total"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDReadsTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_reads_total"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDWritesTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_writes_total"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDSizeBytes) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_total_space"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDFreeBytes) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_free_space"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDReadLatencyTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_read_latency"] = int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricLDWriteLatencyTotal) {
|
|
||||||
vol := pm.Labels.Get("volume")
|
|
||||||
if vol != "" && !strings.HasPrefix(vol, "HarddiskVolume") {
|
|
||||||
seen[vol] = true
|
|
||||||
mx[px+vol+"_write_latency"] = int64(pm.Value * precision)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for disk := range seen {
|
|
||||||
if !c.cache.volumes[disk] {
|
|
||||||
c.cache.volumes[disk] = true
|
|
||||||
c.addDiskCharts(disk)
|
|
||||||
}
|
|
||||||
mx[px+disk+"_used_space"] = mx[px+disk+"_total_space"] - mx[px+disk+"_free_space"]
|
|
||||||
}
|
|
||||||
for disk := range c.cache.volumes {
|
|
||||||
if !seen[disk] {
|
|
||||||
delete(c.cache.volumes, disk)
|
|
||||||
c.removeDiskCharts(disk)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricLogonType = "windows_logon_logon_type"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectLogon(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorLogon] {
|
|
||||||
c.cache.collection[collectorLogon] = true
|
|
||||||
c.addLogonCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricLogonType) {
|
|
||||||
if v := pm.Labels.Get("status"); v != "" {
|
|
||||||
mx["logon_type_"+v+"_sessions"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricMemAvailBytes = "windows_memory_available_bytes"
|
|
||||||
metricMemCacheFaultsTotal = "windows_memory_cache_faults_total"
|
|
||||||
metricMemCommitLimit = "windows_memory_commit_limit"
|
|
||||||
metricMemCommittedBytes = "windows_memory_committed_bytes"
|
|
||||||
metricMemModifiedPageListBytes = "windows_memory_modified_page_list_bytes"
|
|
||||||
metricMemPageFaultsTotal = "windows_memory_page_faults_total"
|
|
||||||
metricMemSwapPageReadsTotal = "windows_memory_swap_page_reads_total"
|
|
||||||
metricMemSwapPagesReadTotal = "windows_memory_swap_pages_read_total"
|
|
||||||
metricMemSwapPagesWrittenTotal = "windows_memory_swap_pages_written_total"
|
|
||||||
metricMemSwapPageWritesTotal = "windows_memory_swap_page_writes_total"
|
|
||||||
metricMemPoolNonPagedBytesTotal = "windows_memory_pool_nonpaged_bytes"
|
|
||||||
metricMemPoolPagedBytes = "windows_memory_pool_paged_bytes"
|
|
||||||
metricMemStandbyCacheCoreBytes = "windows_memory_standby_cache_core_bytes"
|
|
||||||
metricMemStandbyCacheNormalPriorityBytes = "windows_memory_standby_cache_normal_priority_bytes"
|
|
||||||
metricMemStandbyCacheReserveBytes = "windows_memory_standby_cache_reserve_bytes"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectMemory(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorMemory] {
|
|
||||||
c.cache.collection[collectorMemory] = true
|
|
||||||
c.addMemoryCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
if pm := pms.FindByName(metricMemAvailBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_available_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemCacheFaultsTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_cache_faults_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemCommitLimit); pm.Len() > 0 {
|
|
||||||
mx["memory_commit_limit"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemCommittedBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_committed_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemModifiedPageListBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_modified_page_list_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemPageFaultsTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_page_faults_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemSwapPageReadsTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_swap_page_reads_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemSwapPagesReadTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_swap_pages_read_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemSwapPagesWrittenTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_swap_pages_written_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemSwapPageWritesTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_swap_page_writes_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemPoolNonPagedBytesTotal); pm.Len() > 0 {
|
|
||||||
mx["memory_pool_nonpaged_bytes_total"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemPoolPagedBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_pool_paged_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemStandbyCacheCoreBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_standby_cache_core_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemStandbyCacheNormalPriorityBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_standby_cache_normal_priority_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricMemStandbyCacheReserveBytes); pm.Len() > 0 {
|
|
||||||
mx["memory_standby_cache_reserve_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,259 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricMSSQLAccessMethodPageSplits = "windows_mssql_accessmethods_page_splits"
|
|
||||||
metricMSSQLBufferCacheHits = "windows_mssql_bufman_buffer_cache_hits"
|
|
||||||
metricMSSQLBufferCacheLookups = "windows_mssql_bufman_buffer_cache_lookups"
|
|
||||||
metricMSSQLBufferCheckpointPages = "windows_mssql_bufman_checkpoint_pages"
|
|
||||||
metricMSSQLBufferPageLifeExpectancy = "windows_mssql_bufman_page_life_expectancy_seconds"
|
|
||||||
metricMSSQLBufferPageReads = "windows_mssql_bufman_page_reads"
|
|
||||||
metricMSSQLBufferPageWrites = "windows_mssql_bufman_page_writes"
|
|
||||||
metricMSSQLBlockedProcesses = "windows_mssql_genstats_blocked_processes"
|
|
||||||
metricMSSQLUserConnections = "windows_mssql_genstats_user_connections"
|
|
||||||
metricMSSQLLockWait = "windows_mssql_locks_lock_wait_seconds"
|
|
||||||
metricMSSQLDeadlocks = "windows_mssql_locks_deadlocks"
|
|
||||||
metricMSSQLConnectionMemoryBytes = "windows_mssql_memmgr_connection_memory_bytes"
|
|
||||||
metricMSSQLExternalBenefitOfMemory = "windows_mssql_memmgr_external_benefit_of_memory"
|
|
||||||
metricMSSQLPendingMemoryGrants = "windows_mssql_memmgr_pending_memory_grants"
|
|
||||||
metricMSSQLSQLErrorsTotal = "windows_mssql_sql_errors_total"
|
|
||||||
metricMSSQLTotalServerMemory = "windows_mssql_memmgr_total_server_memory_bytes"
|
|
||||||
metricMSSQLStatsAutoParameterization = "windows_mssql_sqlstats_auto_parameterization_attempts"
|
|
||||||
metricMSSQLStatsBatchRequests = "windows_mssql_sqlstats_batch_requests"
|
|
||||||
metricMSSQLStatSafeAutoParameterization = "windows_mssql_sqlstats_safe_auto_parameterization_attempts"
|
|
||||||
metricMSSQLCompilations = "windows_mssql_sqlstats_sql_compilations"
|
|
||||||
metricMSSQLRecompilations = "windows_mssql_sqlstats_sql_recompilations"
|
|
||||||
|
|
||||||
metricMSSQLDatabaseActiveTransactions = "windows_mssql_databases_active_transactions"
|
|
||||||
metricMSSQLDatabaseBackupRestoreOperations = "windows_mssql_databases_backup_restore_operations"
|
|
||||||
metricMSSQLDatabaseDataFileSize = "windows_mssql_databases_data_files_size_bytes"
|
|
||||||
metricMSSQLDatabaseLogFlushed = "windows_mssql_databases_log_flushed_bytes"
|
|
||||||
metricMSSQLDatabaseLogFlushes = "windows_mssql_databases_log_flushes"
|
|
||||||
metricMSSQLDatabaseTransactions = "windows_mssql_databases_transactions"
|
|
||||||
metricMSSQLDatabaseWriteTransactions = "windows_mssql_databases_write_transactions"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectMSSQL(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
instances := make(map[string]bool)
|
|
||||||
dbs := make(map[string]bool)
|
|
||||||
px := "mssql_instance_"
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLAccessMethodPageSplits) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_accessmethods_page_splits"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferCacheHits) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_bufman_buffer_cache_hits"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferCacheLookups) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" && pm.Value > 0 {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_cache_hit_ratio"] = int64(float64(mx[px+name+"_bufman_buffer_cache_hits"]) / pm.Value * 100)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferCheckpointPages) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_bufman_checkpoint_pages"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferPageLifeExpectancy) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_bufman_page_life_expectancy_seconds"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferPageReads) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_bufman_page_reads"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBufferPageWrites) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_bufman_page_writes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLBlockedProcesses) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_genstats_blocked_processes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLUserConnections) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_genstats_user_connections"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLLockWait) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
if res := pm.Labels.Get("resource"); res != "" {
|
|
||||||
mx[px+name+"_resource_"+res+"_locks_lock_wait_seconds"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDeadlocks) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
if res := pm.Labels.Get("resource"); res != "" {
|
|
||||||
mx[px+name+"_resource_"+res+"_locks_deadlocks"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLConnectionMemoryBytes) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_memmgr_connection_memory_bytes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLExternalBenefitOfMemory) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_memmgr_external_benefit_of_memory"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLPendingMemoryGrants) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_memmgr_pending_memory_grants"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLSQLErrorsTotal) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
if res := pm.Labels.Get("resource"); res != "" && res != "_Total" {
|
|
||||||
dim := mssqlParseResource(res)
|
|
||||||
mx[px+name+"_sql_errors_total_"+dim] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLTotalServerMemory) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_memmgr_total_server_memory_bytes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLStatsAutoParameterization) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_sqlstats_auto_parameterization_attempts"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLStatsBatchRequests) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_sqlstats_batch_requests"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLStatSafeAutoParameterization) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_sqlstats_safe_auto_parameterization_attempts"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLCompilations) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_sqlstats_sql_compilations"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLRecompilations) {
|
|
||||||
if name := pm.Labels.Get("mssql_instance"); name != "" {
|
|
||||||
instances[name] = true
|
|
||||||
mx[px+name+"_sqlstats_sql_recompilations"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
px = "mssql_db_"
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseActiveTransactions) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_active_transactions"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseBackupRestoreOperations) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_backup_restore_operations"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseDataFileSize) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_data_files_size_bytes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseLogFlushed) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_log_flushed_bytes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseLogFlushes) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_log_flushes"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseTransactions) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_transactions"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricMSSQLDatabaseWriteTransactions) {
|
|
||||||
if name, db := pm.Labels.Get("mssql_instance"), pm.Labels.Get("database"); name != "" && db != "" {
|
|
||||||
instances[name], dbs[name+":"+db] = true, true
|
|
||||||
mx[px+db+"_instance_"+name+"_write_transactions"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range instances {
|
|
||||||
if !c.cache.mssqlInstances[v] {
|
|
||||||
c.cache.mssqlInstances[v] = true
|
|
||||||
c.addMSSQLInstanceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.mssqlInstances {
|
|
||||||
if !instances[v] {
|
|
||||||
delete(c.cache.mssqlInstances, v)
|
|
||||||
c.removeMSSQLInstanceCharts(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for v := range dbs {
|
|
||||||
if !c.cache.mssqlDBs[v] {
|
|
||||||
c.cache.mssqlDBs[v] = true
|
|
||||||
if s := strings.Split(v, ":"); len(s) == 2 {
|
|
||||||
c.addMSSQLDBCharts(s[0], s[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for v := range c.cache.mssqlDBs {
|
|
||||||
if !dbs[v] {
|
|
||||||
delete(c.cache.mssqlDBs, v)
|
|
||||||
if s := strings.Split(v, ":"); len(s) == 2 {
|
|
||||||
c.removeMSSQLDBCharts(s[0], s[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func mssqlParseResource(name string) string {
|
|
||||||
name = strings.ReplaceAll(name, " ", "_")
|
|
||||||
return strings.ToLower(name)
|
|
||||||
}
|
|
|
@ -1,90 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetBytesReceivedTotal = "windows_net_bytes_received_total"
|
|
||||||
metricNetBytesSentTotal = "windows_net_bytes_sent_total"
|
|
||||||
metricNetPacketsReceivedTotal = "windows_net_packets_received_total"
|
|
||||||
metricNetPacketsSentTotal = "windows_net_packets_sent_total"
|
|
||||||
metricNetPacketsReceivedDiscardedTotal = "windows_net_packets_received_discarded_total"
|
|
||||||
metricNetPacketsOutboundDiscardedTotal = "windows_net_packets_outbound_discarded_total"
|
|
||||||
metricNetPacketsReceivedErrorsTotal = "windows_net_packets_received_errors_total"
|
|
||||||
metricNetPacketsOutboundErrorsTotal = "windows_net_packets_outbound_errors_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNet(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "net_nic_"
|
|
||||||
for _, pm := range pms.FindByName(metricNetBytesReceivedTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_bytes_received"] += int64(pm.Value * 8)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetBytesSentTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_bytes_sent"] += int64(pm.Value * 8)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsReceivedTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_received_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsSentTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_sent_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsReceivedDiscardedTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_received_discarded"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsOutboundDiscardedTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_outbound_discarded"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsReceivedErrorsTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_received_errors"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricNetPacketsOutboundErrorsTotal) {
|
|
||||||
if nic := cleanNICID(pm.Labels.Get("nic")); nic != "" {
|
|
||||||
seen[nic] = true
|
|
||||||
mx[px+nic+"_packets_outbound_errors"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for nic := range seen {
|
|
||||||
if !c.cache.nics[nic] {
|
|
||||||
c.cache.nics[nic] = true
|
|
||||||
c.addNICCharts(nic)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for nic := range c.cache.nics {
|
|
||||||
if !seen[nic] {
|
|
||||||
delete(c.cache.nics, nic)
|
|
||||||
c.removeNICCharts(nic)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanNICID(id string) string {
|
|
||||||
return strings.Replace(id, "__", "_", -1)
|
|
||||||
}
|
|
|
@ -1,531 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
netframeworkPrefix = "netframework_"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRExceptionsThrownTotal = "windows_netframework_clrexceptions_exceptions_thrown_total"
|
|
||||||
metricNetFrameworkCLRExceptionsFiltersTotal = "windows_netframework_clrexceptions_exceptions_filters_total"
|
|
||||||
metricNetFrameworkCLRExceptionsFinallysTotal = "windows_netframework_clrexceptions_exceptions_finallys_total"
|
|
||||||
metricNetFrameworkCLRExceptionsThrowCatchDepthTotal = "windows_netframework_clrexceptions_throw_to_catch_depth_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRExceptions(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsThrownTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrexception_thrown_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsFiltersTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrexception_filters_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsFinallysTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrexception_finallys_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRExceptionsThrowCatchDepthTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrexception_throw_to_catch_depth_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRExceptions[proc] {
|
|
||||||
c.cache.netFrameworkCLRExceptions[proc] = true
|
|
||||||
c.addProcessNetFrameworkExceptionsCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRExceptions {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRExceptions, proc)
|
|
||||||
c.removeProcessFromNetFrameworkExceptionsCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRInteropComCallableWrappersTotal = "windows_netframework_clrinterop_com_callable_wrappers_total"
|
|
||||||
metricNetFrameworkCLRInteropMarshallingTotal = "windows_netframework_clrinterop_interop_marshalling_total"
|
|
||||||
metricNetFrameworkCLRInteropStubsCreatedTotal = "windows_netframework_clrinterop_interop_stubs_created_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRInterop(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropComCallableWrappersTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrinterop_com_callable_wrappers_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropMarshallingTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrinterop_interop_marshalling_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRInteropStubsCreatedTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrinterop_interop_stubs_created_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRInterops[proc] {
|
|
||||||
c.cache.netFrameworkCLRInterops[proc] = true
|
|
||||||
c.addProcessNetFrameworkInteropCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRInterops {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRInterops, proc)
|
|
||||||
c.removeProcessNetFrameworkInteropCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRJITMethodsTotal = "windows_netframework_clrjit_jit_methods_total"
|
|
||||||
metricNetFrameworkCLRJITTimePercent = "windows_netframework_clrjit_jit_time_percent"
|
|
||||||
metricNetFrameworkCLRJITStandardFailuresTotal = "windows_netframework_clrjit_jit_standard_failures_total"
|
|
||||||
metricNetFrameworkCLRJITILBytesTotal = "windows_netframework_clrjit_jit_il_bytes_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRJIT(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRJITMethodsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrjit_methods_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRJITStandardFailuresTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrjit_standard_failures_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRJITTimePercent) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrjit_time_percent"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRJITILBytesTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrjit_il_bytes_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRJIT[proc] {
|
|
||||||
c.cache.netFrameworkCLRJIT[proc] = true
|
|
||||||
c.addProcessNetFrameworkJITCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRJIT {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRJIT, proc)
|
|
||||||
c.removeProcessNetFrameworkJITCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRLoadingLoaderHeapSizeBytes = "windows_netframework_clrloading_loader_heap_size_bytes"
|
|
||||||
metricNetFrameworkCLRLoadingAppDomainLoadedTotal = "windows_netframework_clrloading_appdomains_loaded_total"
|
|
||||||
metricNetFrameworkCLRLoadingAppDomainUnloadedTotal = "windows_netframework_clrloading_appdomains_unloaded_total"
|
|
||||||
metricNetFrameworkCLRLoadingAssembliesLoadedTotal = "windows_netframework_clrloading_assemblies_loaded_total"
|
|
||||||
metricNetFrameworkCLRLoadingClassesLoadedTotal = "windows_netframework_clrloading_classes_loaded_total"
|
|
||||||
metricNetFrameworkCLRLoadingClassLoadFailuresTotal = "windows_netframework_clrloading_class_load_failures_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRLoading(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingLoaderHeapSizeBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_loader_heap_size_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAppDomainLoadedTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_appdomains_loaded_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAppDomainUnloadedTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_appdomains_unloaded_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingAssembliesLoadedTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_assemblies_loaded_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingClassesLoadedTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_classes_loaded_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLoadingClassLoadFailuresTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrloading_class_load_failures_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRLoading[proc] {
|
|
||||||
c.cache.netFrameworkCLRLoading[proc] = true
|
|
||||||
c.addProcessNetFrameworkLoadingCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRLoading {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRLoading, proc)
|
|
||||||
c.removeProcessNetFrameworkLoadingCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRLocksAndThreadsQueueLengthTotal = "windows_netframework_clrlocksandthreads_queue_length_total"
|
|
||||||
metricNetFrameworkCLRLocksAndThreadsCurrentLogicalThreads = "windows_netframework_clrlocksandthreads_current_logical_threads"
|
|
||||||
metricNetFrameworkCLRLocksAndThreadsPhysicalThreadsCurrent = "windows_netframework_clrlocksandthreads_physical_threads_current"
|
|
||||||
metricNetFrameworkCLRLocksAndThreadsRecognizedThreadsTotal = "windows_netframework_clrlocksandthreads_recognized_threads_total"
|
|
||||||
metricNetFrameworkCLRLocksAndThreadsContentionsTotal = "windows_netframework_clrlocksandthreads_contentions_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRLocksAndThreads(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsQueueLengthTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrlocksandthreads_queue_length_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsCurrentLogicalThreads) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrlocksandthreads_current_logical_threads"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsPhysicalThreadsCurrent) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrlocksandthreads_physical_threads_current"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsRecognizedThreadsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrlocksandthreads_recognized_threads_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRLocksAndThreadsContentionsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrlocksandthreads_contentions_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRLocksThreads[proc] {
|
|
||||||
c.cache.netFrameworkCLRLocksThreads[proc] = true
|
|
||||||
c.addProcessNetFrameworkLocksAndThreadsCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRLocksThreads {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRLocksThreads, proc)
|
|
||||||
c.removeProcessNetFrameworkLocksAndThreadsCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRMemoryAllocatedBytesTotal = "windows_netframework_clrmemory_allocated_bytes_total"
|
|
||||||
metricNetFrameworkCLRMemoryFinalizationSurvivors = "windows_netframework_clrmemory_finalization_survivors"
|
|
||||||
metricNetFrameworkCLRMemoryHeapSizeBytes = "windows_netframework_clrmemory_heap_size_bytes"
|
|
||||||
metricNetFrameworkCLRMemoryPromotedBytes = "windows_netframework_clrmemory_promoted_bytes"
|
|
||||||
metricNetFrameworkCLRMemoryNumberGCHandles = "windows_netframework_clrmemory_number_gc_handles"
|
|
||||||
metricNetFrameworkCLRMemoryCollectionsTotal = "windows_netframework_clrmemory_collections_total"
|
|
||||||
metricNetFrameworkCLRMemoryInducedGCTotal = "windows_netframework_clrmemory_induced_gc_total"
|
|
||||||
metricNetFrameworkCLRMemoryNumberPinnedObjects = "windows_netframework_clrmemory_number_pinned_objects"
|
|
||||||
metricNetFrameworkCLRMemoryNumberSinkBlockInUse = "windows_netframework_clrmemory_number_sink_blocksinuse"
|
|
||||||
metricNetFrameworkCLRMemoryCommittedBytes = "windows_netframework_clrmemory_committed_bytes"
|
|
||||||
metricNetFrameworkCLRMemoryReservedBytes = "windows_netframework_clrmemory_reserved_bytes"
|
|
||||||
metricNetFrameworkCLRMemoryGCTimePercent = "windows_netframework_clrmemory_gc_time_percent"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRMemory(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryAllocatedBytesTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_allocated_bytes_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryFinalizationSurvivors) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_finalization_survivors"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryHeapSizeBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_heap_size_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryPromotedBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_promoted_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberGCHandles) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_number_gc_handles"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryCollectionsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_collections_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryInducedGCTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_induced_gc_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberPinnedObjects) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_number_pinned_objects"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryNumberSinkBlockInUse) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_number_sink_blocksinuse"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryCommittedBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_committed_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryReservedBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_reserved_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRMemoryGCTimePercent) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrmemory_gc_time_percent"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRMemory[proc] {
|
|
||||||
c.cache.netFrameworkCLRMemory[proc] = true
|
|
||||||
c.addProcessNetFrameworkMemoryCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRMemory {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRMemory, proc)
|
|
||||||
c.removeProcessNetFrameworkMemoryCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRRemotingChannelsTotal = "windows_netframework_clrremoting_channels_total"
|
|
||||||
metricNetFrameworkCLRRemotingContextBoundClassesLoaded = "windows_netframework_clrremoting_context_bound_classes_loaded"
|
|
||||||
metricNetFrameworkCLRRemotingContextBoundObjectsTotal = "windows_netframework_clrremoting_context_bound_objects_total"
|
|
||||||
metricNetFrameworkCLRRemotingContextProxiesTotal = "windows_netframework_clrremoting_context_proxies_total"
|
|
||||||
metricNetFrameworkCLRRemotingContexts = "windows_netframework_clrremoting_contexts"
|
|
||||||
metricNetFrameworkCLRRemotingRemoteCallsTotal = "windows_netframework_clrremoting_remote_calls_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRRemoting(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingChannelsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_channels_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextBoundClassesLoaded) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_context_bound_classes_loaded"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextBoundObjectsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_context_bound_objects_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContextProxiesTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_context_proxies_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingContexts) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_contexts"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRRemotingRemoteCallsTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrremoting_remote_calls_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRRemoting[proc] {
|
|
||||||
c.cache.netFrameworkCLRRemoting[proc] = true
|
|
||||||
c.addProcessNetFrameworkRemotingCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRRemoting {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRRemoting, proc)
|
|
||||||
c.removeProcessNetFrameworkRemotingCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricNetFrameworkCLRSecurityLinkTimeChecksTotal = "windows_netframework_clrsecurity_link_time_checks_total"
|
|
||||||
metricNetFrameworkCLRSecurityRTChecksTimePercent = "windows_netframework_clrsecurity_rt_checks_time_percent"
|
|
||||||
metricNetFrameworkCLRSecurityStackWalkDepth = "windows_netframework_clrsecurity_stack_walk_depth"
|
|
||||||
metricNetFrameworkCLRSecurityRuntimeChecksTotal = "windows_netframework_clrsecurity_runtime_checks_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectNetFrameworkCLRSecurity(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityLinkTimeChecksTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrsecurity_link_time_checks_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityRTChecksTimePercent) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrsecurity_checks_time_percent"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityStackWalkDepth) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrsecurity_stack_walk_depth"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, pm := range pms.FindByName(metricNetFrameworkCLRSecurityRuntimeChecksTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[netframeworkPrefix+name+"_clrsecurity_runtime_checks_total"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.netFrameworkCLRSecurity[proc] {
|
|
||||||
c.cache.netFrameworkCLRSecurity[proc] = true
|
|
||||||
c.addProcessNetFrameworkSecurityCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range c.cache.netFrameworkCLRSecurity {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.netFrameworkCLRSecurity, proc)
|
|
||||||
c.removeProcessNetFrameworkSecurityCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricOSPhysicalMemoryFreeBytes = "windows_os_physical_memory_free_bytes"
|
|
||||||
metricOSPagingFreeBytes = "windows_os_paging_free_bytes"
|
|
||||||
metricOSProcessesLimit = "windows_os_processes_limit"
|
|
||||||
metricOSProcesses = "windows_os_processes"
|
|
||||||
metricOSUsers = "windows_os_users"
|
|
||||||
metricOSPagingLimitBytes = "windows_os_paging_limit_bytes"
|
|
||||||
metricOSVisibleMemoryBytes = "windows_os_visible_memory_bytes"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectOS(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorOS] {
|
|
||||||
c.cache.collection[collectorOS] = true
|
|
||||||
c.addOSCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
px := "os_"
|
|
||||||
if pm := pms.FindByName(metricOSPhysicalMemoryFreeBytes); pm.Len() > 0 {
|
|
||||||
mx[px+"physical_memory_free_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSPagingFreeBytes); pm.Len() > 0 {
|
|
||||||
mx[px+"paging_free_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSProcessesLimit); pm.Len() > 0 {
|
|
||||||
mx[px+"processes_limit"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSProcesses); pm.Len() > 0 {
|
|
||||||
mx[px+"processes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSUsers); pm.Len() > 0 {
|
|
||||||
mx[px+"users"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSPagingLimitBytes); pm.Len() > 0 {
|
|
||||||
mx[px+"paging_limit_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricOSVisibleMemoryBytes); pm.Len() > 0 {
|
|
||||||
mx[px+"visible_memory_bytes"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,95 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricProcessCPUTimeTotal = "windows_process_cpu_time_total"
|
|
||||||
metricProcessWorkingSetBytes = "windows_process_working_set_private_bytes"
|
|
||||||
metricProcessIOBytes = "windows_process_io_bytes_total"
|
|
||||||
metricProcessIOOperations = "windows_process_io_operations_total"
|
|
||||||
metricProcessPageFaults = "windows_process_page_faults_total"
|
|
||||||
metricProcessPageFileBytes = "windows_process_page_file_bytes"
|
|
||||||
metricProcessThreads = "windows_process_threads"
|
|
||||||
metricProcessCPUHandles = "windows_process_handles"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectProcess(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorProcess] {
|
|
||||||
c.cache.collection[collectorProcess] = true
|
|
||||||
c.addProcessesCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "process_"
|
|
||||||
for _, pm := range pms.FindByName(metricProcessCPUTimeTotal) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_cpu_time"] += int64(pm.Value * 1000)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessWorkingSetBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_working_set_private_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessIOBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_io_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessIOOperations) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_io_operations"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessPageFaults) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_page_faults"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessPageFileBytes) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_page_file_bytes"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessThreads) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_threads"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricProcessCPUHandles) {
|
|
||||||
if name := cleanProcessName(pm.Labels.Get("process")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_handles"] += int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for proc := range seen {
|
|
||||||
if !c.cache.processes[proc] {
|
|
||||||
c.cache.processes[proc] = true
|
|
||||||
c.addProcessToCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for proc := range c.cache.processes {
|
|
||||||
if !seen[proc] {
|
|
||||||
delete(c.cache.processes, proc)
|
|
||||||
c.removeProcessFromCharts(proc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanProcessName(name string) string {
|
|
||||||
return strings.ReplaceAll(name, " ", "_")
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricServiceState = "windows_service_state"
|
|
||||||
metricServiceStatus = "windows_service_status"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectService(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
px := "service_"
|
|
||||||
for _, pm := range pms.FindByName(metricServiceState) {
|
|
||||||
name := cleanService(pm.Labels.Get("name"))
|
|
||||||
state := cleanService(pm.Labels.Get("state"))
|
|
||||||
if name == "" || state == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_state_"+state] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricServiceStatus) {
|
|
||||||
name := cleanService(pm.Labels.Get("name"))
|
|
||||||
status := cleanService(pm.Labels.Get("status"))
|
|
||||||
if name == "" || status == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
seen[name] = true
|
|
||||||
mx[px+name+"_status_"+status] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
|
|
||||||
for svc := range seen {
|
|
||||||
if !c.cache.services[svc] {
|
|
||||||
c.cache.services[svc] = true
|
|
||||||
c.addServiceCharts(svc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for svc := range c.cache.services {
|
|
||||||
if !seen[svc] {
|
|
||||||
delete(c.cache.services, svc)
|
|
||||||
c.removeServiceCharts(svc)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanService(name string) string {
|
|
||||||
return strings.ReplaceAll(name, " ", "_")
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricSysSystemUpTime = "windows_system_system_up_time"
|
|
||||||
metricSysThreads = "windows_system_threads"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectSystem(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorSystem] {
|
|
||||||
c.cache.collection[collectorSystem] = true
|
|
||||||
c.addSystemCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
px := "system_"
|
|
||||||
if pm := pms.FindByName(metricSysSystemUpTime); pm.Len() > 0 {
|
|
||||||
mx[px+"up_time"] = time.Now().Unix() - int64(pm.Max())
|
|
||||||
}
|
|
||||||
if pm := pms.FindByName(metricSysThreads); pm.Len() > 0 {
|
|
||||||
mx[px+"threads"] = int64(pm.Max())
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricTCPConnectionFailure = "windows_tcp_connection_failures_total"
|
|
||||||
metricTCPConnectionActive = "windows_tcp_connections_active_total"
|
|
||||||
metricTCPConnectionEstablished = "windows_tcp_connections_established"
|
|
||||||
metricTCPConnectionPassive = "windows_tcp_connections_passive_total"
|
|
||||||
metricTCPConnectionReset = "windows_tcp_connections_reset_total"
|
|
||||||
metricTCPConnectionSegmentsReceived = "windows_tcp_segments_received_total"
|
|
||||||
metricTCPConnectionSegmentsRetransmitted = "windows_tcp_segments_retransmitted_total"
|
|
||||||
metricTCPConnectionSegmentsSent = "windows_tcp_segments_sent_total"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectTCP(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
if !c.cache.collection[collectorTCP] {
|
|
||||||
c.cache.collection[collectorTCP] = true
|
|
||||||
c.addTCPCharts()
|
|
||||||
}
|
|
||||||
|
|
||||||
px := "tcp_"
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionFailure) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_conns_failures"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionActive) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_conns_active"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionEstablished) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_conns_established"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionPassive) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_conns_passive"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionReset) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_conns_resets"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionSegmentsReceived) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_segments_received"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionSegmentsRetransmitted) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_segments_retransmitted"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, pm := range pms.FindByName(metricTCPConnectionSegmentsSent) {
|
|
||||||
if af := pm.Labels.Get("af"); af != "" {
|
|
||||||
mx[px+af+"_segments_sent"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
metricThermalzoneTemperatureCelsius = "windows_thermalzone_temperature_celsius"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) collectThermalzone(mx map[string]int64, pms prometheus.Series) {
|
|
||||||
seen := make(map[string]bool)
|
|
||||||
for _, pm := range pms.FindByName(metricThermalzoneTemperatureCelsius) {
|
|
||||||
if name := cleanZoneName(pm.Labels.Get("name")); name != "" {
|
|
||||||
seen[name] = true
|
|
||||||
mx["thermalzone_"+name+"_temperature"] = int64(pm.Value)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for zone := range seen {
|
|
||||||
if !c.cache.thermalZones[zone] {
|
|
||||||
c.cache.thermalZones[zone] = true
|
|
||||||
c.addThermalZoneCharts(zone)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for zone := range c.cache.thermalZones {
|
|
||||||
if !seen[zone] {
|
|
||||||
delete(c.cache.thermalZones, zone)
|
|
||||||
c.removeThermalZoneCharts(zone)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func cleanZoneName(name string) string {
|
|
||||||
// "\\_TZ.TZ10", "\\_TZ.X570" => TZ10, X570
|
|
||||||
i := strings.Index(name, ".")
|
|
||||||
if i == -1 || len(name) == i+1 {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return name[i+1:]
|
|
||||||
}
|
|
|
@ -1,171 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
_ "embed"
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module"
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/confopt"
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:embed "config_schema.json"
|
|
||||||
var configSchema string
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
module.Register("windows", module.Creator{
|
|
||||||
JobConfigSchema: configSchema,
|
|
||||||
Defaults: module.Defaults{
|
|
||||||
UpdateEvery: 5,
|
|
||||||
},
|
|
||||||
Create: func() module.Module { return New() },
|
|
||||||
Config: func() any { return &Config{} },
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func New() *Collector {
|
|
||||||
return &Collector{
|
|
||||||
Config: Config{
|
|
||||||
HTTPConfig: web.HTTPConfig{
|
|
||||||
ClientConfig: web.ClientConfig{
|
|
||||||
Timeout: confopt.Duration(time.Second * 5),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
cache: cache{
|
|
||||||
collection: make(map[string]bool),
|
|
||||||
collectors: make(map[string]bool),
|
|
||||||
cores: make(map[string]bool),
|
|
||||||
nics: make(map[string]bool),
|
|
||||||
volumes: make(map[string]bool),
|
|
||||||
thermalZones: make(map[string]bool),
|
|
||||||
processes: make(map[string]bool),
|
|
||||||
iis: make(map[string]bool),
|
|
||||||
adcs: make(map[string]bool),
|
|
||||||
services: make(map[string]bool),
|
|
||||||
netFrameworkCLRExceptions: make(map[string]bool),
|
|
||||||
netFrameworkCLRInterops: make(map[string]bool),
|
|
||||||
netFrameworkCLRJIT: make(map[string]bool),
|
|
||||||
netFrameworkCLRLoading: make(map[string]bool),
|
|
||||||
netFrameworkCLRLocksThreads: make(map[string]bool),
|
|
||||||
netFrameworkCLRMemory: make(map[string]bool),
|
|
||||||
netFrameworkCLRRemoting: make(map[string]bool),
|
|
||||||
netFrameworkCLRSecurity: make(map[string]bool),
|
|
||||||
mssqlInstances: make(map[string]bool),
|
|
||||||
mssqlDBs: make(map[string]bool),
|
|
||||||
exchangeWorkload: make(map[string]bool),
|
|
||||||
exchangeLDAP: make(map[string]bool),
|
|
||||||
exchangeHTTPProxy: make(map[string]bool),
|
|
||||||
hypervVMMem: make(map[string]bool),
|
|
||||||
hypervVMDevices: make(map[string]bool),
|
|
||||||
hypervVMInterfaces: make(map[string]bool),
|
|
||||||
hypervVswitch: make(map[string]bool),
|
|
||||||
},
|
|
||||||
charts: &module.Charts{},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"`
|
|
||||||
web.HTTPConfig `yaml:",inline" json:""`
|
|
||||||
Vnode string `yaml:"vnode,omitempty" json:"vnode"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type (
|
|
||||||
Collector struct {
|
|
||||||
module.Base
|
|
||||||
Config `yaml:",inline" json:""`
|
|
||||||
|
|
||||||
charts *module.Charts
|
|
||||||
|
|
||||||
prom prometheus.Prometheus
|
|
||||||
|
|
||||||
cache cache
|
|
||||||
}
|
|
||||||
cache struct {
|
|
||||||
cores map[string]bool
|
|
||||||
volumes map[string]bool
|
|
||||||
nics map[string]bool
|
|
||||||
thermalZones map[string]bool
|
|
||||||
processes map[string]bool
|
|
||||||
iis map[string]bool
|
|
||||||
adcs map[string]bool
|
|
||||||
mssqlInstances map[string]bool
|
|
||||||
mssqlDBs map[string]bool
|
|
||||||
services map[string]bool
|
|
||||||
netFrameworkCLRExceptions map[string]bool
|
|
||||||
netFrameworkCLRInterops map[string]bool
|
|
||||||
netFrameworkCLRJIT map[string]bool
|
|
||||||
netFrameworkCLRLoading map[string]bool
|
|
||||||
netFrameworkCLRLocksThreads map[string]bool
|
|
||||||
netFrameworkCLRMemory map[string]bool
|
|
||||||
netFrameworkCLRRemoting map[string]bool
|
|
||||||
netFrameworkCLRSecurity map[string]bool
|
|
||||||
collectors map[string]bool
|
|
||||||
collection map[string]bool
|
|
||||||
exchangeWorkload map[string]bool
|
|
||||||
exchangeLDAP map[string]bool
|
|
||||||
exchangeHTTPProxy map[string]bool
|
|
||||||
hypervVMMem map[string]bool
|
|
||||||
hypervVMDevices map[string]bool
|
|
||||||
hypervVMInterfaces map[string]bool
|
|
||||||
hypervVswitch map[string]bool
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) Configuration() any {
|
|
||||||
return c.Config
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Init(context.Context) error {
|
|
||||||
if err := c.validateConfig(); err != nil {
|
|
||||||
return fmt.Errorf("config validation: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
prom, err := c.initPrometheusClient()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("init prometheus clients: %v", err)
|
|
||||||
}
|
|
||||||
c.prom = prom
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Check(context.Context) error {
|
|
||||||
mx, err := c.collect()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if len(mx) == 0 {
|
|
||||||
return errors.New("no metrics collected")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Charts() *module.Charts {
|
|
||||||
return c.charts
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Collect(context.Context) map[string]int64 {
|
|
||||||
ms, err := c.collect()
|
|
||||||
if err != nil {
|
|
||||||
c.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(ms) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return ms
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) Cleanup(context.Context) {
|
|
||||||
if c.prom != nil && c.prom.HTTPClient() != nil {
|
|
||||||
c.prom.HTTPClient().CloseIdleConnections()
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,192 +0,0 @@
|
||||||
{
|
|
||||||
"jsonSchema": {
|
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
||||||
"title": "Windows collector configuration.",
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"update_every": {
|
|
||||||
"title": "Update every",
|
|
||||||
"description": "Data collection interval, measured in seconds.",
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 1,
|
|
||||||
"default": 5
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"title": "URL",
|
|
||||||
"description": "The URL of the Windows exporter metrics endpoint.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"timeout": {
|
|
||||||
"title": "Timeout",
|
|
||||||
"description": "The timeout in seconds for the HTTP request.",
|
|
||||||
"type": "number",
|
|
||||||
"minimum": 0.5,
|
|
||||||
"default": 5
|
|
||||||
},
|
|
||||||
"not_follow_redirects": {
|
|
||||||
"title": "Not follow redirects",
|
|
||||||
"description": "If set, the client will not follow HTTP redirects automatically.",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"vnode": {
|
|
||||||
"title": "Vnode",
|
|
||||||
"description": "Associates this data collection job with a [Virtual Node](https://learn.netdata.cloud/docs/netdata-agent/configuration/organize-systems-metrics-and-alerts#virtual-nodes).",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"username": {
|
|
||||||
"title": "Username",
|
|
||||||
"description": "The username for basic authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"sensitive": true
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"title": "Password",
|
|
||||||
"description": "The password for basic authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"sensitive": true
|
|
||||||
},
|
|
||||||
"proxy_url": {
|
|
||||||
"title": "Proxy URL",
|
|
||||||
"description": "The URL of the proxy server.",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"proxy_username": {
|
|
||||||
"title": "Proxy username",
|
|
||||||
"description": "The username for proxy authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"sensitive": true
|
|
||||||
},
|
|
||||||
"proxy_password": {
|
|
||||||
"title": "Proxy password",
|
|
||||||
"description": "The password for proxy authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"sensitive": true
|
|
||||||
},
|
|
||||||
"headers": {
|
|
||||||
"title": "Headers",
|
|
||||||
"description": "Additional HTTP headers to include in the request.",
|
|
||||||
"type": [
|
|
||||||
"object",
|
|
||||||
"null"
|
|
||||||
],
|
|
||||||
"additionalProperties": {
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tls_skip_verify": {
|
|
||||||
"title": "Skip TLS verification",
|
|
||||||
"description": "If set, TLS certificate verification will be skipped.",
|
|
||||||
"type": "boolean"
|
|
||||||
},
|
|
||||||
"tls_ca": {
|
|
||||||
"title": "TLS CA",
|
|
||||||
"description": "The path to the CA certificate file for TLS verification.",
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^$|^/"
|
|
||||||
},
|
|
||||||
"tls_cert": {
|
|
||||||
"title": "TLS certificate",
|
|
||||||
"description": "The path to the client certificate file for TLS authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^$|^/"
|
|
||||||
},
|
|
||||||
"tls_key": {
|
|
||||||
"title": "TLS key",
|
|
||||||
"description": "The path to the client key file for TLS authentication.",
|
|
||||||
"type": "string",
|
|
||||||
"pattern": "^$|^/"
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"title": "Body",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
"method": {
|
|
||||||
"title": "Method",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"url"
|
|
||||||
],
|
|
||||||
"patternProperties": {
|
|
||||||
"^name$": {}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"uiSchema": {
|
|
||||||
"ui:flavour": "tabs",
|
|
||||||
"ui:options": {
|
|
||||||
"tabs": [
|
|
||||||
{
|
|
||||||
"title": "Base",
|
|
||||||
"fields": [
|
|
||||||
"update_every",
|
|
||||||
"url",
|
|
||||||
"timeout",
|
|
||||||
"not_follow_redirects",
|
|
||||||
"vnode"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Auth",
|
|
||||||
"fields": [
|
|
||||||
"username",
|
|
||||||
"password"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "TLS",
|
|
||||||
"fields": [
|
|
||||||
"tls_skip_verify",
|
|
||||||
"tls_ca",
|
|
||||||
"tls_cert",
|
|
||||||
"tls_key"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Proxy",
|
|
||||||
"fields": [
|
|
||||||
"proxy_url",
|
|
||||||
"proxy_username",
|
|
||||||
"proxy_password"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Headers",
|
|
||||||
"fields": [
|
|
||||||
"headers"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"uiOptions": {
|
|
||||||
"fullPage": true
|
|
||||||
},
|
|
||||||
"body": {
|
|
||||||
"ui:widget": "hidden"
|
|
||||||
},
|
|
||||||
"method": {
|
|
||||||
"ui:widget": "hidden"
|
|
||||||
},
|
|
||||||
"vnode": {
|
|
||||||
"ui:placeholder": "To use this option, first create a Virtual Node and then reference its name here."
|
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"ui:placeholder": "http://203.0.113.0:9182/metrics"
|
|
||||||
},
|
|
||||||
"timeout": {
|
|
||||||
"ui:help": "Accepts decimals for precise control (e.g., type 1.5 for 1.5 seconds)."
|
|
||||||
},
|
|
||||||
"username": {
|
|
||||||
"ui:widget": "password"
|
|
||||||
},
|
|
||||||
"proxy_username": {
|
|
||||||
"ui:widget": "password"
|
|
||||||
},
|
|
||||||
"password": {
|
|
||||||
"ui:widget": "password"
|
|
||||||
},
|
|
||||||
"proxy_password": {
|
|
||||||
"ui:widget": "password"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
package windows
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/prometheus"
|
|
||||||
"github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/web"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *Collector) validateConfig() error {
|
|
||||||
if c.URL == "" {
|
|
||||||
return errors.New("'url' is not set")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Collector) initPrometheusClient() (prometheus.Prometheus, error) {
|
|
||||||
client, err := web.NewHTTPClient(c.ClientConfig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return prometheus.New(client, c.RequestConfig), nil
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"update_every": 123,
|
|
||||||
"vnode": "ok",
|
|
||||||
"url": "ok",
|
|
||||||
"body": "ok",
|
|
||||||
"method": "ok",
|
|
||||||
"headers": {
|
|
||||||
"ok": "ok"
|
|
||||||
},
|
|
||||||
"username": "ok",
|
|
||||||
"password": "ok",
|
|
||||||
"proxy_url": "ok",
|
|
||||||
"proxy_username": "ok",
|
|
||||||
"proxy_password": "ok",
|
|
||||||
"timeout": 123.123,
|
|
||||||
"not_follow_redirects": true,
|
|
||||||
"tls_ca": "ok",
|
|
||||||
"tls_cert": "ok",
|
|
||||||
"tls_key": "ok",
|
|
||||||
"tls_skip_verify": true,
|
|
||||||
"force_http2": true
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
update_every: 123
|
|
||||||
vnode: "ok"
|
|
||||||
url: "ok"
|
|
||||||
body: "ok"
|
|
||||||
method: "ok"
|
|
||||||
headers:
|
|
||||||
ok: "ok"
|
|
||||||
username: "ok"
|
|
||||||
password: "ok"
|
|
||||||
proxy_url: "ok"
|
|
||||||
proxy_username: "ok"
|
|
||||||
proxy_password: "ok"
|
|
||||||
timeout: 123.123
|
|
||||||
not_follow_redirects: yes
|
|
||||||
tls_ca: "ok"
|
|
||||||
tls_cert: "ok"
|
|
||||||
tls_key: "ok"
|
|
||||||
tls_skip_verify: yes
|
|
||||||
force_http2: yes
|
|
File diff suppressed because it is too large
Load diff
|
@ -128,7 +128,6 @@ modules:
|
||||||
# web_log: yes
|
# web_log: yes
|
||||||
# wireguard: yes
|
# wireguard: yes
|
||||||
# whoisquery: yes
|
# whoisquery: yes
|
||||||
# windows: yes
|
|
||||||
# x509check: yes
|
# x509check: yes
|
||||||
# zfspool: yes
|
# zfspool: yes
|
||||||
# zookeeper: yes
|
# zookeeper: yes
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
## All available configuration options, their descriptions and default values:
|
|
||||||
## https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/collector/windows#readme
|
|
||||||
|
|
||||||
#jobs:
|
|
||||||
# - name: win_server1
|
|
||||||
# url: http://10.0.0.1:9182/metrics
|
|
||||||
# - name: win_server2
|
|
||||||
# url: http://10.0.0.2:9182/metrics
|
|
|
@ -1,108 +0,0 @@
|
||||||
## CPU
|
|
||||||
|
|
||||||
template: windows_10min_cpu_usage
|
|
||||||
on: windows.cpu_utilization_total
|
|
||||||
class: Utilization
|
|
||||||
type: Windows
|
|
||||||
component: CPU
|
|
||||||
lookup: average -10m unaligned match-names of dpc,user,privileged,interrupt
|
|
||||||
units: %
|
|
||||||
every: 1m
|
|
||||||
warn: $this > (($status >= $WARNING) ? (75) : (85))
|
|
||||||
crit: $this > (($status == $CRITICAL) ? (85) : (95))
|
|
||||||
delay: down 15m multiplier 1.5 max 1h
|
|
||||||
summary: CPU utilization
|
|
||||||
info: Average CPU utilization over the last 10 minutes
|
|
||||||
to: silent
|
|
||||||
|
|
||||||
## Memory
|
|
||||||
|
|
||||||
template: windows_ram_in_use
|
|
||||||
on: windows.memory_utilization
|
|
||||||
class: Utilization
|
|
||||||
type: Windows
|
|
||||||
component: Memory
|
|
||||||
calc: ($used) * 100 / ($used + $available)
|
|
||||||
units: %
|
|
||||||
every: 10s
|
|
||||||
warn: $this > (($status >= $WARNING) ? (80) : (90))
|
|
||||||
crit: $this > (($status == $CRITICAL) ? (90) : (98))
|
|
||||||
delay: down 15m multiplier 1.5 max 1h
|
|
||||||
summary: Ram utilization
|
|
||||||
info: Memory utilization
|
|
||||||
to: sysadmin
|
|
||||||
|
|
||||||
## Network
|
|
||||||
|
|
||||||
template: windows_inbound_packets_discarded
|
|
||||||
on: windows.net_nic_discarded
|
|
||||||
class: Errors
|
|
||||||
type: Windows
|
|
||||||
component: Network
|
|
||||||
lookup: sum -10m unaligned absolute match-names of inbound
|
|
||||||
units: packets
|
|
||||||
every: 1m
|
|
||||||
warn: $this >= 5
|
|
||||||
delay: down 1h multiplier 1.5 max 2h
|
|
||||||
summary: Inbound network packets discarded
|
|
||||||
info: Number of inbound discarded packets for the network interface in the last 10 minutes
|
|
||||||
to: silent
|
|
||||||
|
|
||||||
template: windows_outbound_packets_discarded
|
|
||||||
on: windows.net_nic_discarded
|
|
||||||
class: Errors
|
|
||||||
type: Windows
|
|
||||||
component: Network
|
|
||||||
lookup: sum -10m unaligned absolute match-names of outbound
|
|
||||||
units: packets
|
|
||||||
every: 1m
|
|
||||||
warn: $this >= 5
|
|
||||||
delay: down 1h multiplier 1.5 max 2h
|
|
||||||
summary: Outbound network packets discarded
|
|
||||||
info: Number of outbound discarded packets for the network interface in the last 10 minutes
|
|
||||||
to: silent
|
|
||||||
|
|
||||||
template: windows_inbound_packets_errors
|
|
||||||
on: windows.net_nic_errors
|
|
||||||
class: Errors
|
|
||||||
type: Windows
|
|
||||||
component: Network
|
|
||||||
lookup: sum -10m unaligned absolute match-names of inbound
|
|
||||||
units: packets
|
|
||||||
every: 1m
|
|
||||||
warn: $this >= 5
|
|
||||||
delay: down 1h multiplier 1.5 max 2h
|
|
||||||
summary: Inbound network errors
|
|
||||||
info: Number of inbound errors for the network interface in the last 10 minutes
|
|
||||||
to: silent
|
|
||||||
|
|
||||||
template: windows_outbound_packets_errors
|
|
||||||
on: windows.net_nic_errors
|
|
||||||
class: Errors
|
|
||||||
type: Windows
|
|
||||||
component: Network
|
|
||||||
lookup: sum -10m unaligned absolute match-names of outbound
|
|
||||||
units: packets
|
|
||||||
every: 1m
|
|
||||||
warn: $this >= 5
|
|
||||||
delay: down 1h multiplier 1.5 max 2h
|
|
||||||
summary: Outbound network errors
|
|
||||||
info: Number of outbound errors for the network interface in the last 10 minutes
|
|
||||||
to: silent
|
|
||||||
|
|
||||||
## Disk
|
|
||||||
|
|
||||||
template: windows_disk_in_use
|
|
||||||
on: windows.logical_disk_space_usage
|
|
||||||
class: Utilization
|
|
||||||
type: Windows
|
|
||||||
component: Disk
|
|
||||||
calc: ($used) * 100 / ($used + $free)
|
|
||||||
units: %
|
|
||||||
every: 10s
|
|
||||||
warn: $this > (($status >= $WARNING) ? (80) : (90))
|
|
||||||
crit: $this > (($status == $CRITICAL) ? (90) : (98))
|
|
||||||
delay: down 15m multiplier 1.5 max 1h
|
|
||||||
summary: Disk space usage
|
|
||||||
info: Disk space utilization
|
|
||||||
to: sysadmin
|
|
Loading…
Add table
Reference in a new issue