summaryrefslogtreecommitdiffstats
path: root/src/collectors/proc.plugin
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/collectors/proc.plugin/README.md639
-rw-r--r--src/collectors/proc.plugin/integrations/amd_gpu.md (renamed from collectors/proc.plugin/integrations/amd_gpu.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/btrfs.md137
-rw-r--r--src/collectors/proc.plugin/integrations/conntrack.md (renamed from collectors/proc.plugin/integrations/conntrack.md)8
-rw-r--r--src/collectors/proc.plugin/integrations/disk_statistics.md (renamed from collectors/proc.plugin/integrations/disk_statistics.md)14
-rw-r--r--src/collectors/proc.plugin/integrations/entropy.md (renamed from collectors/proc.plugin/integrations/entropy.md)8
-rw-r--r--src/collectors/proc.plugin/integrations/infiniband.md (renamed from collectors/proc.plugin/integrations/infiniband.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/inter_process_communication.md (renamed from collectors/proc.plugin/integrations/inter_process_communication.md)10
-rw-r--r--src/collectors/proc.plugin/integrations/interrupts.md (renamed from collectors/proc.plugin/integrations/interrupts.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/ip_virtual_server.md (renamed from collectors/proc.plugin/integrations/ip_virtual_server.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/ipv6_socket_statistics.md (renamed from collectors/proc.plugin/integrations/ipv6_socket_statistics.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/kernel_same-page_merging.md (renamed from collectors/proc.plugin/integrations/kernel_same-page_merging.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/md_raid.md (renamed from collectors/proc.plugin/integrations/md_raid.md)14
-rw-r--r--src/collectors/proc.plugin/integrations/memory_modules_dimms.md (renamed from collectors/proc.plugin/integrations/memory_modules_dimms.md)18
-rw-r--r--src/collectors/proc.plugin/integrations/memory_statistics.md (renamed from collectors/proc.plugin/integrations/memory_statistics.md)10
-rw-r--r--src/collectors/proc.plugin/integrations/memory_usage.md (renamed from collectors/proc.plugin/integrations/memory_usage.md)14
-rw-r--r--src/collectors/proc.plugin/integrations/network_interfaces.md137
-rw-r--r--src/collectors/proc.plugin/integrations/network_statistics.md (renamed from collectors/proc.plugin/integrations/network_statistics.md)28
-rw-r--r--src/collectors/proc.plugin/integrations/nfs_client.md (renamed from collectors/proc.plugin/integrations/nfs_client.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/nfs_server.md (renamed from collectors/proc.plugin/integrations/nfs_server.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/non-uniform_memory_access.md (renamed from collectors/proc.plugin/integrations/non-uniform_memory_access.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/page_types.md (renamed from collectors/proc.plugin/integrations/page_types.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/power_supply.md (renamed from collectors/proc.plugin/integrations/power_supply.md)8
-rw-r--r--src/collectors/proc.plugin/integrations/pressure_stall_information.md (renamed from collectors/proc.plugin/integrations/pressure_stall_information.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/sctp_statistics.md (renamed from collectors/proc.plugin/integrations/sctp_statistics.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/socket_statistics.md (renamed from collectors/proc.plugin/integrations/socket_statistics.md)10
-rw-r--r--src/collectors/proc.plugin/integrations/softirq_statistics.md (renamed from collectors/proc.plugin/integrations/softirq_statistics.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/softnet_statistics.md (renamed from collectors/proc.plugin/integrations/softnet_statistics.md)10
-rw-r--r--src/collectors/proc.plugin/integrations/synproxy.md (renamed from collectors/proc.plugin/integrations/synproxy.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/system_load_average.md (renamed from collectors/proc.plugin/integrations/system_load_average.md)16
-rw-r--r--src/collectors/proc.plugin/integrations/system_statistics.md (renamed from collectors/proc.plugin/integrations/system_statistics.md)14
-rw-r--r--src/collectors/proc.plugin/integrations/system_uptime.md (renamed from collectors/proc.plugin/integrations/system_uptime.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/wireless_network_interfaces.md (renamed from collectors/proc.plugin/integrations/wireless_network_interfaces.md)6
-rw-r--r--src/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md (renamed from collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md)8
-rw-r--r--src/collectors/proc.plugin/integrations/zfs_pools.md (renamed from collectors/proc.plugin/integrations/zfs_pools.md)10
-rw-r--r--src/collectors/proc.plugin/integrations/zram.md (renamed from collectors/proc.plugin/integrations/zram.md)6
-rw-r--r--src/collectors/proc.plugin/ipc.c (renamed from collectors/proc.plugin/ipc.c)10
-rw-r--r--src/collectors/proc.plugin/metadata.yaml5299
-rw-r--r--src/collectors/proc.plugin/plugin_proc.c (renamed from collectors/proc.plugin/plugin_proc.c)86
-rw-r--r--src/collectors/proc.plugin/plugin_proc.h (renamed from collectors/proc.plugin/plugin_proc.h)4
-rw-r--r--src/collectors/proc.plugin/proc_diskstats.c (renamed from collectors/proc.plugin/proc_diskstats.c)41
-rw-r--r--src/collectors/proc.plugin/proc_interrupts.c (renamed from collectors/proc.plugin/proc_interrupts.c)2
-rw-r--r--src/collectors/proc.plugin/proc_loadavg.c (renamed from collectors/proc.plugin/proc_loadavg.c)6
-rw-r--r--src/collectors/proc.plugin/proc_mdstat.c (renamed from collectors/proc.plugin/proc_mdstat.c)0
-rw-r--r--src/collectors/proc.plugin/proc_meminfo.c (renamed from collectors/proc.plugin/proc_meminfo.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_dev.c (renamed from collectors/proc.plugin/proc_net_dev.c)386
-rw-r--r--src/collectors/proc.plugin/proc_net_dev_renames.c53
-rw-r--r--src/collectors/proc.plugin/proc_net_dev_renames.h26
-rw-r--r--src/collectors/proc.plugin/proc_net_ip_vs_stats.c (renamed from collectors/proc.plugin/proc_net_ip_vs_stats.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_netstat.c (renamed from collectors/proc.plugin/proc_net_netstat.c)4
-rw-r--r--src/collectors/proc.plugin/proc_net_rpc_nfs.c (renamed from collectors/proc.plugin/proc_net_rpc_nfs.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_rpc_nfsd.c (renamed from collectors/proc.plugin/proc_net_rpc_nfsd.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_sctp_snmp.c (renamed from collectors/proc.plugin/proc_net_sctp_snmp.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_sockstat.c (renamed from collectors/proc.plugin/proc_net_sockstat.c)18
-rw-r--r--src/collectors/proc.plugin/proc_net_sockstat6.c (renamed from collectors/proc.plugin/proc_net_sockstat6.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_softnet_stat.c (renamed from collectors/proc.plugin/proc_net_softnet_stat.c)5
-rw-r--r--src/collectors/proc.plugin/proc_net_stat_conntrack.c (renamed from collectors/proc.plugin/proc_net_stat_conntrack.c)4
-rw-r--r--src/collectors/proc.plugin/proc_net_stat_synproxy.c (renamed from collectors/proc.plugin/proc_net_stat_synproxy.c)0
-rw-r--r--src/collectors/proc.plugin/proc_net_wireless.c (renamed from collectors/proc.plugin/proc_net_wireless.c)0
-rw-r--r--src/collectors/proc.plugin/proc_pagetypeinfo.c (renamed from collectors/proc.plugin/proc_pagetypeinfo.c)0
-rw-r--r--src/collectors/proc.plugin/proc_pressure.c (renamed from collectors/proc.plugin/proc_pressure.c)0
-rw-r--r--src/collectors/proc.plugin/proc_pressure.h (renamed from collectors/proc.plugin/proc_pressure.h)0
-rw-r--r--src/collectors/proc.plugin/proc_self_mountinfo.c (renamed from collectors/proc.plugin/proc_self_mountinfo.c)0
-rw-r--r--src/collectors/proc.plugin/proc_self_mountinfo.h (renamed from collectors/proc.plugin/proc_self_mountinfo.h)0
-rw-r--r--src/collectors/proc.plugin/proc_softirqs.c (renamed from collectors/proc.plugin/proc_softirqs.c)2
-rw-r--r--src/collectors/proc.plugin/proc_spl_kstat_zfs.c (renamed from collectors/proc.plugin/proc_spl_kstat_zfs.c)8
-rw-r--r--src/collectors/proc.plugin/proc_stat.c (renamed from collectors/proc.plugin/proc_stat.c)131
-rw-r--r--src/collectors/proc.plugin/proc_sys_fs_file_nr.c (renamed from collectors/proc.plugin/proc_sys_fs_file_nr.c)0
-rw-r--r--src/collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c (renamed from collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c)0
-rw-r--r--src/collectors/proc.plugin/proc_uptime.c (renamed from collectors/proc.plugin/proc_uptime.c)0
-rw-r--r--src/collectors/proc.plugin/proc_vmstat.c (renamed from collectors/proc.plugin/proc_vmstat.c)0
-rw-r--r--src/collectors/proc.plugin/sys_block_zram.c (renamed from collectors/proc.plugin/sys_block_zram.c)0
-rw-r--r--src/collectors/proc.plugin/sys_class_drm.c (renamed from collectors/proc.plugin/sys_class_drm.c)6
-rw-r--r--src/collectors/proc.plugin/sys_class_infiniband.c (renamed from collectors/proc.plugin/sys_class_infiniband.c)8
-rw-r--r--src/collectors/proc.plugin/sys_class_power_supply.c (renamed from collectors/proc.plugin/sys_class_power_supply.c)4
-rw-r--r--src/collectors/proc.plugin/sys_devices_pci_aer.c (renamed from collectors/proc.plugin/sys_devices_pci_aer.c)0
-rw-r--r--src/collectors/proc.plugin/sys_devices_system_edac_mc.c (renamed from collectors/proc.plugin/sys_devices_system_edac_mc.c)24
-rw-r--r--src/collectors/proc.plugin/sys_devices_system_node.c (renamed from collectors/proc.plugin/sys_devices_system_node.c)0
-rw-r--r--src/collectors/proc.plugin/sys_fs_btrfs.c (renamed from collectors/proc.plugin/sys_fs_btrfs.c)6
-rw-r--r--src/collectors/proc.plugin/sys_kernel_mm_ksm.c (renamed from collectors/proc.plugin/sys_kernel_mm_ksm.c)2
-rw-r--r--src/collectors/proc.plugin/zfs_common.c (renamed from collectors/proc.plugin/zfs_common.c)0
-rw-r--r--src/collectors/proc.plugin/zfs_common.h (renamed from collectors/proc.plugin/zfs_common.h)0
82 files changed, 6735 insertions, 615 deletions
diff --git a/src/collectors/proc.plugin/README.md b/src/collectors/proc.plugin/README.md
new file mode 100644
index 000000000..28c204f5c
--- /dev/null
+++ b/src/collectors/proc.plugin/README.md
@@ -0,0 +1,639 @@
+# OS provided metrics (proc.plugin)
+
+`proc.plugin` gathers metrics from the /proc and /sys folders in Linux systems, along with a few other endpoints, and is responsible for the bulk of the system metrics collected and visualized by Netdata.
+
+This plugin is not an external plugin, but one of Netdata's threads.
+
+In detail, it collects metrics from:
+
+- `/proc/net/dev` (all network interfaces for all their values)
+- `/proc/diskstats` (all disks for all their values)
+- `/proc/mdstat` (status of RAID arrays)
+- `/proc/net/snmp` (total IPv4, TCP and UDP usage)
+- `/proc/net/snmp6` (total IPv6 usage)
+- `/proc/net/netstat` (more IPv4 usage)
+- `/proc/net/wireless` (wireless extension)
+- `/proc/net/stat/nf_conntrack` (connection tracking performance)
+- `/proc/net/stat/synproxy` (synproxy performance)
+- `/proc/net/ip_vs/stats` (IPVS connection statistics)
+- `/proc/stat` (CPU utilization and attributes)
+- `/proc/meminfo` (memory information)
+- `/proc/vmstat` (system performance)
+- `/proc/net/rpc/nfsd` (NFS server statistics for both v3 and v4 NFS servers)
+- `/sys/fs/cgroup` (Control Groups - Linux Containers)
+- `/proc/self/mountinfo` (mount points)
+- `/proc/interrupts` (total and per core hardware interrupts)
+- `/proc/softirqs` (total and per core software interrupts)
+- `/proc/loadavg` (system load and total processes running)
+- `/proc/pressure/{cpu,memory,io}` (pressure stall information)
+- `/proc/sys/kernel/random/entropy_avail` (random numbers pool availability - used in cryptography)
+- `/proc/spl/kstat/zfs/arcstats` (status of ZFS adaptive replacement cache)
+- `/proc/spl/kstat/zfs/pool/state` (state of ZFS pools)
+- `/sys/class/power_supply` (power supply properties)
+- `/sys/class/infiniband` (infiniband interconnect)
+- `/sys/class/drm` (AMD GPUs)
+- `ipc` (IPC semaphores and message queues)
+- `ksm` Kernel Same-Page Merging performance (several files under `/sys/kernel/mm/ksm`).
+- `netdata` (internal Netdata resources utilization)
+
+- - -
+
+## Monitoring Disks
+
+> Live demo of disk monitoring at: **[http://london.netdata.rocks](https://registry.my-netdata.io/#menu_disk)**
+
+Performance monitoring for Linux disks is quite complicated. The main reason is the plethora of disk technologies available. There are many different hardware disk technologies, but there are even more **virtual disk** technologies that can provide additional storage features.
+
+Hopefully, the Linux kernel provides many metrics that can provide deep insights of what our disks our doing. The kernel measures all these metrics on all layers of storage: **virtual disks**, **physical disks** and **partitions of disks**.
+
+### Monitored disk metrics
+
+- **I/O bandwidth/s (kb/s)**
+ The amount of data transferred from and to the disk.
+- **Amount of discarded data (kb/s)**
+- **I/O operations/s**
+ The number of I/O operations completed.
+- **Extended I/O operations/s**
+ The number of extended I/O operations completed.
+- **Queued I/O operations**
+ The number of currently queued I/O operations. For traditional disks that execute commands one after another, one of them is being run by the disk and the rest are just waiting in a queue.
+- **Backlog size (time in ms)**
+ The expected duration of the currently queued I/O operations.
+- **Utilization (time percentage)**
+ The percentage of time the disk was busy with something. This is a very interesting metric, since for most disks, that execute commands sequentially, **this is the key indication of congestion**. A sequential disk that is 100% of the available time busy, has no time to do anything more, so even if the bandwidth or the number of operations executed by the disk is low, its capacity has been reached.
+ Of course, for newer disk technologies (like fusion cards) that are capable to execute multiple commands in parallel, this metric is just meaningless.
+- **Average I/O operation time (ms)**
+ The average time for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
+- **Average I/O operation time for extended operations (ms)**
+ The average time for extended I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
+- **Average I/O operation size (kb)**
+ The average amount of data of the completed I/O operations.
+- **Average amount of discarded data (kb)**
+ The average amount of data of the completed discard operations.
+- **Average Service Time (ms)**
+ The average service time for completed I/O operations. This metric is calculated using the total busy time of the disk and the number of completed operations. If the disk is able to execute multiple parallel operations the reporting average service time will be misleading.
+- **Average Service Time for extended I/O operations (ms)**
+ The average service time for completed extended I/O operations.
+- **Merged I/O operations/s**
+ The Linux kernel is capable of merging I/O operations. So, if two requests to read data from the disk are adjacent, the Linux kernel may merge them to one before giving them to disk. This metric measures the number of operations that have been merged by the Linux kernel.
+- **Merged discard operations/s**
+- **Total I/O time**
+ The sum of the duration of all completed I/O operations. This number can exceed the interval if the disk is able to execute multiple I/O operations in parallel.
+- **Space usage**
+ For mounted disks, Netdata will provide a chart for their space, with 3 dimensions:
+ 1. free
+ 2. used
+ 3. reserved for root
+- **inode usage**
+ For mounted disks, Netdata will provide a chart for their inodes (number of file and directories), with 3 dimensions:
+ 1. free
+ 2. used
+ 3. reserved for root
+
+### disk names
+
+Netdata will automatically set the name of disks on the dashboard, from the mount point they are mounted, of course only when they are mounted. Changes in mount points are not currently detected (you will have to restart Netdata to change the name of the disk). To use disk IDs provided by `/dev/disk/by-id`, the `name disks by id` option should be enabled. The `preferred disk ids` simple pattern allows choosing disk IDs to be used in the first place.
+
+### performance metrics
+
+By default, Netdata will enable monitoring metrics only when they are not zero. If they are constantly zero they are ignored. Metrics that will start having values, after Netdata is started, will be detected and charts will be automatically added to the dashboard (a refresh of the dashboard is needed for them to appear though). Set `yes` for a chart instead of `auto` to enable it permanently. You can also set the `enable zero metrics` option to `yes` in the `[global]` section which enables charts with zero metrics for all internal Netdata plugins.
+
+Netdata categorizes all block devices in 3 categories:
+
+1. physical disks (i.e. block devices that do not have child devices and are not partitions)
+2. virtual disks (i.e. block devices that have child devices - like RAID devices)
+3. disk partitions (i.e. block devices that are part of a physical disk)
+
+Performance metrics are enabled by default for all disk devices, except partitions and not-mounted virtual disks. Of course, you can enable/disable monitoring any block device by editing the Netdata configuration file.
+
+### Netdata configuration
+
+You can get the running Netdata configuration using this:
+
+```sh
+cd /etc/netdata
+curl "http://localhost:19999/netdata.conf" >netdata.conf.new
+mv netdata.conf.new netdata.conf
+```
+
+Then edit `netdata.conf` and find the following section. This is the basic plugin configuration.
+
+```
+[plugin:proc:/proc/diskstats]
+ # enable new disks detected at runtime = yes
+ # performance metrics for physical disks = auto
+ # performance metrics for virtual disks = auto
+ # performance metrics for partitions = no
+ # bandwidth for all disks = auto
+ # operations for all disks = auto
+ # merged operations for all disks = auto
+ # i/o time for all disks = auto
+ # queued operations for all disks = auto
+ # utilization percentage for all disks = auto
+ # extended operations for all disks = auto
+ # backlog for all disks = auto
+ # bcache for all disks = auto
+ # bcache priority stats update every = 0
+ # remove charts of removed disks = yes
+ # path to get block device = /sys/block/%s
+ # path to get block device bcache = /sys/block/%s/bcache
+ # path to get virtual block device = /sys/devices/virtual/block/%s
+ # path to get block device infos = /sys/dev/block/%lu:%lu/%s
+ # path to device mapper = /dev/mapper
+ # path to /dev/disk/by-label = /dev/disk/by-label
+ # path to /dev/disk/by-id = /dev/disk/by-id
+ # path to /dev/vx/dsk = /dev/vx/dsk
+ # name disks by id = no
+ # preferred disk ids = *
+ # exclude disks = loop* ram*
+ # filename to monitor = /proc/diskstats
+ # performance metrics for disks with major 8 = yes
+```
+
+For each virtual disk, physical disk and partition you will have a section like this:
+
+```
+[plugin:proc:/proc/diskstats:sda]
+ # enable = yes
+ # enable performance metrics = auto
+ # bandwidth = auto
+ # operations = auto
+ # merged operations = auto
+ # i/o time = auto
+ # queued operations = auto
+ # utilization percentage = auto
+ # extended operations = auto
+ # backlog = auto
+```
+
+For all configuration options:
+
+- `auto` = enable monitoring if the collected values are not zero
+- `yes` = enable monitoring
+- `no` = disable monitoring
+
+Of course, to set options, you will have to uncomment them. The comments show the internal defaults.
+
+After saving `/etc/netdata/netdata.conf`, restart your Netdata to apply them.
+
+#### Disabling performance metrics for individual device and to multiple devices by device type
+
+You can pretty easy disable performance metrics for individual device, for ex.:
+
+```
+[plugin:proc:/proc/diskstats:sda]
+ enable performance metrics = no
+```
+
+But sometimes you need disable performance metrics for all devices with the same type, to do it you need to figure out device type from `/proc/diskstats` for ex.:
+
+```
+ 7 0 loop0 1651 0 3452 168 0 0 0 0 0 8 168
+ 7 1 loop1 4955 0 11924 880 0 0 0 0 0 64 880
+ 7 2 loop2 36 0 216 4 0 0 0 0 0 4 4
+ 7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
+ 7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
+ 251 2 zram2 27487 0 219896 188 79953 0 639624 1640 0 1828 1828
+ 251 3 zram3 27348 0 218784 152 79952 0 639616 1960 0 2060 2104
+```
+
+All zram devices starts with `251` number and all loop devices starts with `7`.
+So, to disable performance metrics for all loop devices you could add `performance metrics for disks with major 7 = no` to `[plugin:proc:/proc/diskstats]` section.
+
+```
+[plugin:proc:/proc/diskstats]
+ performance metrics for disks with major 7 = no
+```
+
+## Monitoring RAID arrays
+
+### Monitored RAID array metrics
+
+1. **Health** Number of failed disks in every array (aggregate chart).
+
+2. **Disks stats**
+
+- total (number of devices array ideally would have)
+- inuse (number of devices currently are in use)
+
+3. **Mismatch count**
+
+- unsynchronized blocks
+
+4. **Current status**
+
+- resync in percent
+- recovery in percent
+- reshape in percent
+- check in percent
+
+5. **Operation status** (if resync/recovery/reshape/check is active)
+
+- finish in minutes
+- speed in megabytes/s
+
+6. **Nonredundant array availability**
+
+#### configuration
+
+```
+[plugin:proc:/proc/mdstat]
+ # faulty devices = yes
+ # nonredundant arrays availability = yes
+ # mismatch count = auto
+ # disk stats = yes
+ # operation status = yes
+ # make charts obsolete = yes
+ # filename to monitor = /proc/mdstat
+ # mismatch_cnt filename to monitor = /sys/block/%s/md/mismatch_cnt
+```
+
+## Monitoring CPUs
+
+The `/proc/stat` module monitors CPU utilization, interrupts, context switches, processes started/running, thermal
+throttling, frequency, and idle states. It gathers this information from multiple files.
+
+If your system has more than 50 processors (`physical processors * cores per processor * threads per core`), the Agent
+automatically disables CPU thermal throttling, frequency, and idle state charts. To override this default, see the next
+section on configuration.
+
+### Configuration
+
+The settings for monitoring CPUs is in the `[plugin:proc:/proc/stat]` of your `netdata.conf` file.
+
+The `keep per core files open` option lets you reduce the number of file operations on multiple files.
+
+If your system has more than 50 processors and you would like to see the CPU thermal throttling, frequency, and idle
+state charts that are automatically disabled, you can set the following boolean options in the
+`[plugin:proc:/proc/stat]` section.
+
+```conf
+ keep per core files open = yes
+ keep cpuidle files open = yes
+ core_throttle_count = yes
+ package_throttle_count = yes
+ cpu frequency = yes
+ cpu idle states = yes
+```
+
+### CPU frequency
+
+The module shows the current CPU frequency as set by the `cpufreq` kernel
+module.
+
+**Requirement:**
+You need to have `CONFIG_CPU_FREQ` and (optionally) `CONFIG_CPU_FREQ_STAT`
+enabled in your kernel.
+
+`cpufreq` interface provides two different ways of getting the information through `/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq` and `/sys/devices/system/cpu/cpu*/cpufreq/stats/time_in_state` files. The latter is more accurate so it is preferred in the module. `scaling_cur_freq` represents only the current CPU frequency, and doesn't account for any state changes which happen between updates. The module switches back and forth between these two methods if governor is changed.
+
+It produces one chart with multiple lines (one line per core).
+
+#### configuration
+
+`scaling_cur_freq filename to monitor` and `time_in_state filename to monitor` in the `[plugin:proc:/proc/stat]` configuration section
+
+### CPU idle states
+
+The module monitors the usage of CPU idle states.
+
+**Requirement:**
+Your kernel needs to have `CONFIG_CPU_IDLE` enabled.
+
+It produces one stacked chart per CPU, showing the percentage of time spent in
+each state.
+
+#### configuration
+
+`schedstat filename to monitor`, `cpuidle name filename to monitor`, and `cpuidle time filename to monitor` in the `[plugin:proc:/proc/stat]` configuration section
+
+## Monitoring memory
+
+### Monitored memory metrics
+
+- Amount of memory swapped in/out
+- Amount of memory paged from/to disk
+- Number of memory page faults
+- Number of out of memory kills
+- Number of NUMA events
+
+### Configuration
+
+```conf
+[plugin:proc:/proc/vmstat]
+ filename to monitor = /proc/vmstat
+ swap i/o = auto
+ disk i/o = yes
+ memory page faults = yes
+ out of memory kills = yes
+ system-wide numa metric summary = auto
+```
+
+## Monitoring Network Interfaces
+
+### Monitored network interface metrics
+
+- **Physical Network Interfaces Aggregated Bandwidth (kilobits/s)**
+ The amount of data received and sent through all physical interfaces in the system. This is the source of data for the Net Inbound and Net Outbound dials in the System Overview section.
+
+- **Bandwidth (kilobits/s)**
+ The amount of data received and sent through the interface.
+
+- **Packets (packets/s)**
+ The number of packets received, packets sent, and multicast packets transmitted through the interface.
+
+- **Interface Errors (errors/s)**
+ The number of errors for the inbound and outbound traffic on the interface.
+
+- **Interface Drops (drops/s)**
+ The number of packets dropped for the inbound and outbound traffic on the interface.
+
+- **Interface FIFO Buffer Errors (errors/s)**
+ The number of FIFO buffer errors encountered while receiving and transmitting data through the interface.
+
+- **Compressed Packets (packets/s)**
+ The number of compressed packets transmitted or received by the device driver.
+
+- **Network Interface Events (events/s)**
+ The number of packet framing errors, collisions detected on the interface, and carrier losses detected by the device driver.
+
+By default Netdata will enable monitoring metrics only when they are not zero. If they are constantly zero they are ignored. Metrics that will start having values, after Netdata is started, will be detected and charts will be automatically added to the dashboard (a refresh of the dashboard is needed for them to appear though).
+
+### Monitoring wireless network interfaces
+
+The settings for monitoring wireless is in the `[plugin:proc:/proc/net/wireless]` section of your `netdata.conf` file.
+
+```conf
+ status for all interfaces = yes
+ quality for all interfaces = yes
+ discarded packets for all interfaces = yes
+ missed beacon for all interface = yes
+```
+
+You can set the following values for each configuration option:
+
+- `auto` = enable monitoring if the collected values are not zero
+- `yes` = enable monitoring
+- `no` = disable monitoring
+
+#### Monitored wireless interface metrics
+
+- **Status**
+ The current state of the interface. This is a device-dependent option.
+
+- **Link**
+ Overall quality of the link.
+
+- **Level**
+ Received signal strength (RSSI), which indicates how strong the received signal is.
+
+- **Noise**
+ Background noise level.
+
+- **Discarded packets**
+ Discarded packets for: Number of packets received with a different NWID or ESSID (`nwid`), unable to decrypt (`crypt`), hardware was not able to properly re-assemble the link layer fragments (`frag`), packets failed to deliver (`retry`), and packets lost in relation with specific wireless operations (`misc`).
+
+- **Missed beacon**
+ Number of periodic beacons from the cell or the access point the interface has missed.
+
+#### Wireless configuration
+
+#### alerts
+
+There are several alerts defined in `health.d/net.conf`.
+
+The tricky ones are `inbound packets dropped` and `inbound packets dropped ratio`. They have quite a strict policy so that they warn users about possible issues. These alerts can be annoying for some network configurations. It is especially true for some bonding configurations if an interface is a child or a bonding interface itself. If it is expected to have a certain number of drops on an interface for a certain network configuration, a separate alert with different triggering thresholds can be created or the existing one can be disabled for this specific interface. It can be done with the help of the [families](https://github.com/netdata/netdata/blob/master/src/health/REFERENCE.md#alert-line-families) line in the alert configuration. For example, if you want to disable the `inbound packets dropped` alert for `eth0`, set `families: !eth0 *` in the alert definition for `template: inbound_packets_dropped`.
+
+#### configuration
+
+Module configuration:
+
+```
+[plugin:proc:/proc/net/dev]
+ # filename to monitor = /proc/net/dev
+ # path to get virtual interfaces = /sys/devices/virtual/net/%s
+ # path to get net device speed = /sys/class/net/%s/speed
+ # enable new interfaces detected at runtime = auto
+ # bandwidth for all interfaces = auto
+ # packets for all interfaces = auto
+ # errors for all interfaces = auto
+ # drops for all interfaces = auto
+ # fifo for all interfaces = auto
+ # compressed packets for all interfaces = auto
+ # frames, collisions, carrier counters for all interfaces = auto
+ # disable by default interfaces matching = lo fireqos* *-ifb
+ # refresh interface speed every seconds = 10
+```
+
+Per interface configuration:
+
+```
+[plugin:proc:/proc/net/dev:enp0s3]
+ # enabled = yes
+ # virtual = no
+ # bandwidth = auto
+ # packets = auto
+ # errors = auto
+ # drops = auto
+ # fifo = auto
+ # compressed = auto
+ # events = auto
+```
+
+## Linux Anti-DDoS
+
+![image6](https://cloud.githubusercontent.com/assets/2662304/14253733/53550b16-fa95-11e5-8d9d-4ed171df4735.gif)
+
+---
+
+SYNPROXY is a TCP SYN packets proxy. It can be used to protect any TCP server (like a web server) from SYN floods and similar DDos attacks.
+
+SYNPROXY is a netfilter module, in the Linux kernel (since version 3.12). It is optimized to handle millions of packets per second utilizing all CPUs available without any concurrency locking between the connections.
+
+The net effect of this, is that the real servers will not notice any change during the attack. The valid TCP connections will pass through and served, while the attack will be stopped at the firewall.
+
+Netdata does not enable SYNPROXY. It just uses the SYNPROXY metrics exposed by your kernel, so you will first need to configure it. The hard way is to run iptables SYNPROXY commands directly on the console. An easier way is to use [FireHOL](https://firehol.org/), which, is a firewall manager for iptables. FireHOL can configure SYNPROXY using the following setup guides:
+
+- **[Working with SYNPROXY](https://github.com/firehol/firehol/wiki/Working-with-SYNPROXY)**
+- **[Working with SYNPROXY and traps](https://github.com/firehol/firehol/wiki/Working-with-SYNPROXY-and-traps)**
+
+### Real-time monitoring of Linux Anti-DDoS
+
+Netdata is able to monitor in real-time (per second updates) the operation of the Linux Anti-DDoS protection.
+
+It visualizes 4 charts:
+
+1. TCP SYN Packets received on ports operated by SYNPROXY
+2. TCP Cookies (valid, invalid, retransmits)
+3. Connections Reopened
+4. Entries used
+
+Example image:
+
+![ddos](https://cloud.githubusercontent.com/assets/2662304/14398891/6016e3fc-fdf0-11e5-942b-55de6a52cb66.gif)
+
+See Linux Anti-DDoS in action at: **[Netdata demo site (with SYNPROXY enabled)](https://registry.my-netdata.io/#menu_netfilter_submenu_synproxy)**
+
+## Linux power supply
+
+This module monitors various metrics reported by power supply drivers
+on Linux. This allows tracking and alerting on things like remaining
+battery capacity.
+
+Depending on the underlying driver, it may provide the following charts
+and metrics:
+
+1. Capacity: The power supply capacity expressed as a percentage.
+
+ - capacity_now
+
+2. Charge: The charge for the power supply, expressed as amphours.
+
+ - charge_full_design
+ - charge_full
+ - charge_now
+ - charge_empty
+ - charge_empty_design
+
+3. Energy: The energy for the power supply, expressed as watthours.
+
+ - energy_full_design
+ - energy_full
+ - energy_now
+ - energy_empty
+ - energy_empty_design
+
+4. Voltage: The voltage for the power supply, expressed as volts.
+
+ - voltage_max_design
+ - voltage_max
+ - voltage_now
+ - voltage_min
+ - voltage_min_design
+
+#### configuration
+
+```
+[plugin:proc:/sys/class/power_supply]
+ # battery capacity = yes
+ # battery charge = no
+ # battery energy = no
+ # power supply voltage = no
+ # keep files open = auto
+ # directory to monitor = /sys/class/power_supply
+```
+
+#### notes
+
+- Most drivers provide at least the first chart. Battery powered ACPI
+ compliant systems (like most laptops) provide all but the third, but do
+ not provide all of the metrics for each chart.
+
+- Current, energy, and voltages are reported with a *very* high precision
+ by the power_supply framework. Usually, this is far higher than the
+ actual hardware supports reporting, so expect to see changes in these
+ charts jump instead of scaling smoothly.
+
+- If `max` or `full` attribute is defined by the driver, but not a
+ corresponding `min` or `empty` attribute, then Netdata will still provide
+ the corresponding `min` or `empty`, which will then always read as zero.
+ This way, alerts which match on these will still work.
+
+## Infiniband interconnect
+
+This module monitors every active Infiniband port. It provides generic counters statistics, and per-vendor hw-counters (if vendor is supported).
+
+### Monitored interface metrics
+
+Each port will have its counters metrics monitored, grouped in the following charts:
+
+- **Bandwidth usage**
+ Sent/Received data, in KB/s
+
+- **Packets Statistics**
+ Sent/Received packets, in 3 categories: total, unicast and multicast.
+
+- **Errors Statistics**
+ Many errors counters are provided, presenting statistics for:
+ - Packets: malformed, sent/received discarded by card/switch, missing resource
+ - Link: downed, recovered, integrity error, minor error
+ - Other events: Tick Wait to send, buffer overrun
+
+If your vendor is supported, you'll also get HW-Counters statistics. These being vendor specific, please refer to their documentation.
+
+- Mellanox: [see statistics documentation](https://community.mellanox.com/s/article/understanding-mlx5-linux-counters-and-status-parameters)
+
+### configuration
+
+Default configuration will monitor only enabled infiniband ports, and refresh newly activated or created ports every 30 seconds
+
+```
+[plugin:proc:/sys/class/infiniband]
+ # dirname to monitor = /sys/class/infiniband
+ # bandwidth counters = yes
+ # packets counters = yes
+ # errors counters = yes
+ # hardware packets counters = auto
+ # hardware errors counters = auto
+ # monitor only ports being active = auto
+ # disable by default interfaces matching =
+ # refresh ports state every seconds = 30
+```
+
+## AMD GPUs
+
+This module monitors every AMD GPU card discovered at agent startup.
+
+### Monitored GPU metrics
+
+The following charts will be provided:
+
+- **GPU utilization**
+- **GPU memory utilization**
+- **GPU clock frequency**
+- **GPU memory clock frequency**
+- **VRAM memory usage percentage**
+- **VRAM memory usage**
+- **visible VRAM memory usage percentage**
+- **visible VRAM memory usage**
+- **GTT memory usage percentage**
+- **GTT memory usage**
+
+### configuration
+
+The `drm` path can be configured if it differs from the default:
+
+```
+[plugin:proc:/sys/class/drm]
+ # directory to monitor = /sys/class/drm
+```
+
+> [!NOTE]
+> Temperature, fan speed, voltage and power metrics for AMD GPUs can be monitored using the [Sensors](https://github.com/netdata/netdata/blob/master/src/collectors/charts.d.plugin/sensors/README.md) plugin.
+
+## IPC
+
+### Monitored IPC metrics
+
+- **number of messages in message queues**
+- **amount of memory used by message queues**
+- **number of semaphores**
+- **number of semaphore arrays**
+- **number of shared memory segments**
+- **amount of memory used by shared memory segments**
+
+As far as the message queue charts are dynamic, sane limits are applied for the number of dimensions per chart (the limit is configurable).
+
+### configuration
+
+```
+[plugin:proc:ipc]
+ # message queues = yes
+ # semaphore totals = yes
+ # shared memory totals = yes
+ # msg filename to monitor = /proc/sysvipc/msg
+ # shm filename to monitor = /proc/sysvipc/shm
+ # max dimensions in memory allowed = 50
+```
+
+
diff --git a/collectors/proc.plugin/integrations/amd_gpu.md b/src/collectors/proc.plugin/integrations/amd_gpu.md
index e85cce221..24f480894 100644
--- a/collectors/proc.plugin/integrations/amd_gpu.md
+++ b/src/collectors/proc.plugin/integrations/amd_gpu.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/amd_gpu.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/amd_gpu.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "AMD GPU"
learn_status: "Published"
-learn_rel_path: "Data Collection/Hardware Devices and Sensors"
+learn_rel_path: "Collecting Metrics/Hardware Devices and Sensors"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/src/collectors/proc.plugin/integrations/btrfs.md b/src/collectors/proc.plugin/integrations/btrfs.md
new file mode 100644
index 000000000..b7fc85220
--- /dev/null
+++ b/src/collectors/proc.plugin/integrations/btrfs.md
@@ -0,0 +1,137 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/btrfs.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
+sidebar_label: "BTRFS"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Linux Systems/Filesystem/BTRFS"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# BTRFS
+
+
+<img src="https://netdata.cloud/img/filesystem.svg" width="150"/>
+
+
+Plugin: proc.plugin
+Module: /sys/fs/btrfs
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+This integration provides usage and error statistics from the BTRFS filesystem.
+
+
+
+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
+
+The default configuration for this integration is not expected to impose a significant performance impact on the system.
+
+
+## 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.
+
+
+
+### Per btrfs filesystem
+
+
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| filesystem_uuid | TBD |
+| filesystem_label | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| btrfs.disk | unallocated, data_free, data_used, meta_free, meta_used, sys_free, sys_used | MiB |
+| btrfs.data | free, used | MiB |
+| btrfs.metadata | free, used, reserved | MiB |
+| btrfs.system | free, used | MiB |
+| btrfs.commits | commits | commits |
+| btrfs.commits_perc_time | commits | percentage |
+| btrfs.commit_timings | last, max | ms |
+
+### Per btrfs device
+
+
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| device_id | TBD |
+| filesystem_uuid | TBD |
+| filesystem_label | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| btrfs.device_errors | write_errs, read_errs, flush_errs, corruption_errs, generation_errs | errors |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ btrfs_allocated ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.disk | percentage of allocated BTRFS physical disk space |
+| [ btrfs_data ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.data | utilization of BTRFS data space |
+| [ btrfs_metadata ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.metadata | utilization of BTRFS metadata space |
+| [ btrfs_system ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.system | utilization of BTRFS system space |
+| [ btrfs_device_read_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS read errors |
+| [ btrfs_device_write_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS write errors |
+| [ btrfs_device_flush_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS flush errors |
+| [ btrfs_device_corruption_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS corruption errors |
+| [ btrfs_device_generation_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf) | btrfs.device_errors | number of encountered BTRFS generation errors |
+
+
+## Setup
+
+### Prerequisites
+
+No action required.
+
+### Configuration
+
+#### File
+
+There is no configuration file.
+#### Options
+
+
+
+There are no configuration options.
+
+#### Examples
+There are no configuration examples.
+
+
diff --git a/collectors/proc.plugin/integrations/conntrack.md b/src/collectors/proc.plugin/integrations/conntrack.md
index b38f6b508..33f11db24 100644
--- a/collectors/proc.plugin/integrations/conntrack.md
+++ b/src/collectors/proc.plugin/integrations/conntrack.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/conntrack.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/conntrack.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Conntrack"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Firewall"
+learn_rel_path: "Collecting Metrics/Linux Systems/Firewall"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -79,7 +79,7 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ netfilter_conntrack_full ](https://github.com/netdata/netdata/blob/master/health/health.d/netfilter.conf) | netfilter.conntrack_sockets | netfilter connection tracker table size utilization |
+| [ netfilter_conntrack_full ](https://github.com/netdata/netdata/blob/master/src/health/health.d/netfilter.conf) | netfilter.conntrack_sockets | netfilter connection tracker table size utilization |
## Setup
diff --git a/collectors/proc.plugin/integrations/disk_statistics.md b/src/collectors/proc.plugin/integrations/disk_statistics.md
index 8f7448c39..9dcfa2ede 100644
--- a/collectors/proc.plugin/integrations/disk_statistics.md
+++ b/src/collectors/proc.plugin/integrations/disk_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/disk_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/disk_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Disk Statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Disk"
+learn_rel_path: "Collecting Metrics/Linux Systems/Disk"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -120,10 +120,10 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ 10min_disk_backlog ](https://github.com/netdata/netdata/blob/master/health/health.d/disks.conf) | disk.backlog | average backlog size of the ${label:device} disk over the last 10 minutes |
-| [ 10min_disk_utilization ](https://github.com/netdata/netdata/blob/master/health/health.d/disks.conf) | disk.util | average percentage of time ${label:device} disk was busy over the last 10 minutes |
-| [ bcache_cache_dirty ](https://github.com/netdata/netdata/blob/master/health/health.d/bcache.conf) | disk.bcache_cache_alloc | percentage of cache space used for dirty data and metadata (this usually means your SSD cache is too small) |
-| [ bcache_cache_errors ](https://github.com/netdata/netdata/blob/master/health/health.d/bcache.conf) | disk.bcache_cache_read_races | number of times data was read from the cache, the bucket was reused and invalidated in the last 10 minutes (when this occurs the data is reread from the backing device) |
+| [ 10min_disk_backlog ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.backlog | average backlog size of the ${label:device} disk over the last 10 minutes |
+| [ 10min_disk_utilization ](https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf) | disk.util | average percentage of time ${label:device} disk was busy over the last 10 minutes |
+| [ bcache_cache_dirty ](https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf) | disk.bcache_cache_alloc | percentage of cache space used for dirty data and metadata (this usually means your SSD cache is too small) |
+| [ bcache_cache_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf) | disk.bcache_cache_read_races | number of times data was read from the cache, the bucket was reused and invalidated in the last 10 minutes (when this occurs the data is reread from the backing device) |
## Setup
diff --git a/collectors/proc.plugin/integrations/entropy.md b/src/collectors/proc.plugin/integrations/entropy.md
index 8432a1f96..03b51ecc8 100644
--- a/collectors/proc.plugin/integrations/entropy.md
+++ b/src/collectors/proc.plugin/integrations/entropy.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/entropy.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/entropy.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Entropy"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/System"
+learn_rel_path: "Collecting Metrics/Linux Systems/System"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -107,7 +107,7 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ lowest_entropy ](https://github.com/netdata/netdata/blob/master/health/health.d/entropy.conf) | system.entropy | minimum number of bits of entropy available for the kernel’s random number generator |
+| [ lowest_entropy ](https://github.com/netdata/netdata/blob/master/src/health/health.d/entropy.conf) | system.entropy | minimum number of bits of entropy available for the kernel’s random number generator |
## Setup
diff --git a/collectors/proc.plugin/integrations/infiniband.md b/src/collectors/proc.plugin/integrations/infiniband.md
index 6cb5fdc53..5a4f5d702 100644
--- a/collectors/proc.plugin/integrations/infiniband.md
+++ b/src/collectors/proc.plugin/integrations/infiniband.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/infiniband.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/infiniband.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "InfiniBand"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/inter_process_communication.md b/src/collectors/proc.plugin/integrations/inter_process_communication.md
index 55708a4b0..363fbea41 100644
--- a/collectors/proc.plugin/integrations/inter_process_communication.md
+++ b/src/collectors/proc.plugin/integrations/inter_process_communication.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/inter_process_communication.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/inter_process_communication.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Inter Process Communication"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/IPC"
+learn_rel_path: "Collecting Metrics/Linux Systems/IPC"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -93,8 +93,8 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ semaphores_used ](https://github.com/netdata/netdata/blob/master/health/health.d/ipc.conf) | system.ipc_semaphores | IPC semaphore utilization |
-| [ semaphore_arrays_used ](https://github.com/netdata/netdata/blob/master/health/health.d/ipc.conf) | system.ipc_semaphore_arrays | IPC semaphore arrays utilization |
+| [ semaphores_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphores | IPC semaphore utilization |
+| [ semaphore_arrays_used ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf) | system.ipc_semaphore_arrays | IPC semaphore arrays utilization |
## Setup
diff --git a/collectors/proc.plugin/integrations/interrupts.md b/src/collectors/proc.plugin/integrations/interrupts.md
index 1b85fb767..b0d39dbbe 100644
--- a/collectors/proc.plugin/integrations/interrupts.md
+++ b/src/collectors/proc.plugin/integrations/interrupts.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/interrupts.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/interrupts.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Interrupts"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/CPU"
+learn_rel_path: "Collecting Metrics/Linux Systems/CPU"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/ip_virtual_server.md b/src/collectors/proc.plugin/integrations/ip_virtual_server.md
index 5c7afd2eb..974c2f60c 100644
--- a/collectors/proc.plugin/integrations/ip_virtual_server.md
+++ b/src/collectors/proc.plugin/integrations/ip_virtual_server.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/ip_virtual_server.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/ip_virtual_server.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "IP Virtual Server"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/ipv6_socket_statistics.md b/src/collectors/proc.plugin/integrations/ipv6_socket_statistics.md
index 2c1ee2721..0840d3f0f 100644
--- a/collectors/proc.plugin/integrations/ipv6_socket_statistics.md
+++ b/src/collectors/proc.plugin/integrations/ipv6_socket_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/ipv6_socket_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/ipv6_socket_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "IPv6 Socket Statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/kernel_same-page_merging.md b/src/collectors/proc.plugin/integrations/kernel_same-page_merging.md
index 336f0feaf..37b64d253 100644
--- a/collectors/proc.plugin/integrations/kernel_same-page_merging.md
+++ b/src/collectors/proc.plugin/integrations/kernel_same-page_merging.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/kernel_same-page_merging.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/kernel_same-page_merging.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Kernel Same-Page Merging"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/md_raid.md b/src/collectors/proc.plugin/integrations/md_raid.md
index 34a4840bb..f96f4c5b1 100644
--- a/collectors/proc.plugin/integrations/md_raid.md
+++ b/src/collectors/proc.plugin/integrations/md_raid.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/md_raid.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/md_raid.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "MD RAID"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Disk"
+learn_rel_path: "Collecting Metrics/Linux Systems/Disk"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -96,10 +96,10 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ mdstat_last_collected ](https://github.com/netdata/netdata/blob/master/health/health.d/mdstat.conf) | md.disks | number of seconds since the last successful data collection |
-| [ mdstat_disks ](https://github.com/netdata/netdata/blob/master/health/health.d/mdstat.conf) | md.disks | number of devices in the down state for the ${label:device} ${label:raid_level} array. Any number > 0 indicates that the array is degraded. |
-| [ mdstat_mismatch_cnt ](https://github.com/netdata/netdata/blob/master/health/health.d/mdstat.conf) | md.mismatch_cnt | number of unsynchronized blocks for the ${label:device} ${label:raid_level} array |
-| [ mdstat_nonredundant_last_collected ](https://github.com/netdata/netdata/blob/master/health/health.d/mdstat.conf) | md.nonredundant | number of seconds since the last successful data collection |
+| [ mdstat_last_collected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.disks | number of seconds since the last successful data collection |
+| [ mdstat_disks ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.disks | number of devices in the down state for the ${label:device} ${label:raid_level} array. Any number > 0 indicates that the array is degraded. |
+| [ mdstat_mismatch_cnt ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.mismatch_cnt | number of unsynchronized blocks for the ${label:device} ${label:raid_level} array |
+| [ mdstat_nonredundant_last_collected ](https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf) | md.nonredundant | number of seconds since the last successful data collection |
## Setup
diff --git a/collectors/proc.plugin/integrations/memory_modules_dimms.md b/src/collectors/proc.plugin/integrations/memory_modules_dimms.md
index 351c6fcd7..4f4d434fd 100644
--- a/collectors/proc.plugin/integrations/memory_modules_dimms.md
+++ b/src/collectors/proc.plugin/integrations/memory_modules_dimms.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/memory_modules_dimms.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/memory_modules_dimms.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Memory modules (DIMMs)"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -83,7 +83,7 @@ Metrics:
| Metric | Dimensions | Unit |
|:------|:----------|:----|
-| mem.edac_mc | correctable, uncorrectable, correctable_noinfo, uncorrectable_noinfo | errors/s |
+| mem.edac_mc_errors | correctable, uncorrectable, correctable_noinfo, uncorrectable_noinfo | errors |
### Per memory module
@@ -106,7 +106,7 @@ Metrics:
| Metric | Dimensions | Unit |
|:------|:----------|:----|
-| mem.edac_mc | correctable, uncorrectable | errors/s |
+| mem.edac_mc_errors | correctable, uncorrectable | errors |
@@ -117,10 +117,10 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ ecc_memory_mc_noinfo_correctable ](https://github.com/netdata/netdata/blob/master/health/health.d/memory.conf) | mem.edac_mc | memory controller ${label:controller} ECC correctable errors (unknown DIMM slot) in the last 10 minutes |
-| [ ecc_memory_mc_noinfo_uncorrectable ](https://github.com/netdata/netdata/blob/master/health/health.d/memory.conf) | mem.edac_mc | memory controller ${label:controller} ECC uncorrectable errors (unknown DIMM slot) in the last 10 minutes |
-| [ ecc_memory_dimm_correctable ](https://github.com/netdata/netdata/blob/master/health/health.d/memory.conf) | mem.edac_mc_dimm | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC correctable errors in the last 10 minutes |
-| [ ecc_memory_dimm_uncorrectable ](https://github.com/netdata/netdata/blob/master/health/health.d/memory.conf) | mem.edac_mc_dimm | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC uncorrectable errors in the last 10 minutes |
+| [ ecc_memory_mc_noinfo_correctable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_errors | memory controller ${label:controller} ECC correctable errors (unknown DIMM slot) |
+| [ ecc_memory_mc_noinfo_uncorrectable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_errors | memory controller ${label:controller} ECC uncorrectable errors (unknown DIMM slot) |
+| [ ecc_memory_dimm_correctable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_dimm_errors | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC correctable errors |
+| [ ecc_memory_dimm_uncorrectable ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.edac_mc_dimm_errors | DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC uncorrectable errors |
## Setup
diff --git a/collectors/proc.plugin/integrations/memory_statistics.md b/src/collectors/proc.plugin/integrations/memory_statistics.md
index 52f1bf530..a92df57a7 100644
--- a/collectors/proc.plugin/integrations/memory_statistics.md
+++ b/src/collectors/proc.plugin/integrations/memory_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/memory_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/memory_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Memory Statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -111,8 +111,8 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ 30min_ram_swapped_out ](https://github.com/netdata/netdata/blob/master/health/health.d/swap.conf) | mem.swapio | percentage of the system RAM swapped in the last 30 minutes |
-| [ oom_kill ](https://github.com/netdata/netdata/blob/master/health/health.d/ram.conf) | mem.oom_kill | number of out of memory kills in the last 30 minutes |
+| [ 30min_ram_swapped_out ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swapio | percentage of the system RAM swapped in the last 30 minutes |
+| [ oom_kill ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.oom_kill | number of out of memory kills in the last 30 minutes |
## Setup
diff --git a/collectors/proc.plugin/integrations/memory_usage.md b/src/collectors/proc.plugin/integrations/memory_usage.md
index 141bd29ad..6c5168967 100644
--- a/collectors/proc.plugin/integrations/memory_usage.md
+++ b/src/collectors/proc.plugin/integrations/memory_usage.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/memory_usage.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/memory_usage.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Memory Usage"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -106,10 +106,10 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ ram_in_use ](https://github.com/netdata/netdata/blob/master/health/health.d/ram.conf) | system.ram | system memory utilization |
-| [ ram_available ](https://github.com/netdata/netdata/blob/master/health/health.d/ram.conf) | mem.available | percentage of estimated amount of RAM available for userspace processes, without causing swapping |
-| [ used_swap ](https://github.com/netdata/netdata/blob/master/health/health.d/swap.conf) | mem.swap | swap memory utilization |
-| [ 1hour_memory_hw_corrupted ](https://github.com/netdata/netdata/blob/master/health/health.d/memory.conf) | mem.hwcorrupt | amount of memory corrupted due to a hardware failure |
+| [ ram_in_use ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | system.ram | system memory utilization |
+| [ ram_available ](https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf) | mem.available | percentage of estimated amount of RAM available for userspace processes, without causing swapping |
+| [ used_swap ](https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf) | mem.swap | swap memory utilization |
+| [ 1hour_memory_hw_corrupted ](https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf) | mem.hwcorrupt | amount of memory corrupted due to a hardware failure |
## Setup
diff --git a/src/collectors/proc.plugin/integrations/network_interfaces.md b/src/collectors/proc.plugin/integrations/network_interfaces.md
new file mode 100644
index 000000000..dcf746596
--- /dev/null
+++ b/src/collectors/proc.plugin/integrations/network_interfaces.md
@@ -0,0 +1,137 @@
+<!--startmeta
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/network_interfaces.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
+sidebar_label: "Network interfaces"
+learn_status: "Published"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
+most_popular: False
+message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
+endmeta-->
+
+# Network interfaces
+
+
+<img src="https://netdata.cloud/img/network-wired.svg" width="150"/>
+
+
+Plugin: proc.plugin
+Module: /proc/net/dev
+
+<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
+
+## Overview
+
+Monitor network interface metrics about bandwidth, state, errors and more.
+
+
+
+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
+
+The default configuration for this integration is not expected to impose a significant performance impact on the system.
+
+
+## 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.
+
+
+
+### Per Network interfaces instance
+
+
+
+This scope has no labels.
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| system.net | received, sent | kilobits/s |
+
+### Per network device
+
+
+
+Labels:
+
+| Label | Description |
+|:-----------|:----------------|
+| interface_type | TBD |
+| device | TBD |
+
+Metrics:
+
+| Metric | Dimensions | Unit |
+|:------|:----------|:----|
+| net.net | received, sent | kilobits/s |
+| net.speed | speed | kilobits/s |
+| net.duplex | full, half, unknown | state |
+| net.operstate | up, down, notpresent, lowerlayerdown, testing, dormant, unknown | state |
+| net.carrier | up, down | state |
+| net.mtu | mtu | octets |
+| net.packets | received, sent, multicast | packets/s |
+| net.errors | inbound, outbound | errors/s |
+| net.drops | inbound, outbound | drops/s |
+| net.fifo | receive, transmit | errors |
+| net.compressed | received, sent | packets/s |
+| net.events | frames, collisions, carrier | events/s |
+
+
+
+## Alerts
+
+
+The following alerts are available:
+
+| Alert name | On metric | Description |
+|:------------|:----------|:------------|
+| [ interface_speed ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | network interface ${label:device} current speed |
+| [ 1m_received_traffic_overflow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | average inbound utilization for the network interface ${label:device} over the last minute |
+| [ 1m_sent_traffic_overflow ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.net | average outbound utilization for the network interface ${label:device} over the last minute |
+| [ inbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes |
+| [ outbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes |
+| [ wifi_inbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes |
+| [ wifi_outbound_packets_dropped_ratio ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.drops | ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes |
+| [ 1m_received_packets_rate ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | average number of packets received by the network interface ${label:device} over the last minute |
+| [ 10s_received_packets_storm ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.packets | ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute |
+| [ 10min_fifo_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf) | net.fifo | number of FIFO errors for the network interface ${label:device} in the last 10 minutes |
+
+
+## Setup
+
+### Prerequisites
+
+No action required.
+
+### Configuration
+
+#### File
+
+There is no configuration file.
+#### Options
+
+
+
+There are no configuration options.
+
+#### Examples
+There are no configuration examples.
+
+
diff --git a/collectors/proc.plugin/integrations/network_statistics.md b/src/collectors/proc.plugin/integrations/network_statistics.md
index 726fd9d61..460a8a60e 100644
--- a/collectors/proc.plugin/integrations/network_statistics.md
+++ b/src/collectors/proc.plugin/integrations/network_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/network_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/network_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Network statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -125,17 +125,17 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ 1m_tcp_syn_queue_drops ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of SYN requests was dropped due to the full TCP SYN queue over the last minute (SYN cookies were not enabled) |
-| [ 1m_tcp_syn_queue_cookies ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of sent SYN cookies due to the full TCP SYN queue over the last minute |
-| [ 1m_tcp_accept_queue_overflows ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of overflows in the TCP accept queue over the last minute |
-| [ 1m_tcp_accept_queue_drops ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of dropped packets in the TCP accept queue over the last minute |
-| [ tcp_connections ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_conn.conf) | ip.tcpsock | TCP connections utilization |
-| [ 1m_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last minute |
-| [ 10s_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last 10 seconds. This can indicate a port scan, or that a service running on this host has crashed. Netdata will not send a clear notification for this alarm. |
-| [ 1m_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last minute |
-| [ 10s_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last 10 seconds. This can be an indication that a service this host needs has crashed. Netdata will not send a clear notification for this alarm. |
-| [ 1m_ipv4_udp_receive_buffer_errors ](https://github.com/netdata/netdata/blob/master/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP receive buffer errors over the last minute |
-| [ 1m_ipv4_udp_send_buffer_errors ](https://github.com/netdata/netdata/blob/master/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP send buffer errors over the last minute |
+| [ 1m_tcp_syn_queue_drops ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of SYN requests was dropped due to the full TCP SYN queue over the last minute (SYN cookies were not enabled) |
+| [ 1m_tcp_syn_queue_cookies ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_syn_queue | average number of sent SYN cookies due to the full TCP SYN queue over the last minute |
+| [ 1m_tcp_accept_queue_overflows ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of overflows in the TCP accept queue over the last minute |
+| [ 1m_tcp_accept_queue_drops ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf) | ip.tcp_accept_queue | average number of dropped packets in the TCP accept queue over the last minute |
+| [ tcp_connections ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_conn.conf) | ip.tcpsock | TCP connections utilization |
+| [ 1m_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last minute |
+| [ 10s_ip_tcp_resets_sent ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of sent TCP RESETS over the last 10 seconds. This can indicate a port scan, or that a service running on this host has crashed. Netdata will not send a clear notification for this alarm. |
+| [ 1m_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last minute |
+| [ 10s_ip_tcp_resets_received ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf) | ip.tcphandshake | average number of received TCP RESETS over the last 10 seconds. This can be an indication that a service this host needs has crashed. Netdata will not send a clear notification for this alarm. |
+| [ 1m_ipv4_udp_receive_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP receive buffer errors over the last minute |
+| [ 1m_ipv4_udp_send_buffer_errors ](https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf) | ipv4.udperrors | average number of UDP send buffer errors over the last minute |
## Setup
diff --git a/collectors/proc.plugin/integrations/nfs_client.md b/src/collectors/proc.plugin/integrations/nfs_client.md
index db5847714..3d3370b80 100644
--- a/collectors/proc.plugin/integrations/nfs_client.md
+++ b/src/collectors/proc.plugin/integrations/nfs_client.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/nfs_client.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/nfs_client.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "NFS Client"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Filesystem/NFS"
+learn_rel_path: "Collecting Metrics/Linux Systems/Filesystem/NFS"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/nfs_server.md b/src/collectors/proc.plugin/integrations/nfs_server.md
index 0c906b4d8..693e681c5 100644
--- a/collectors/proc.plugin/integrations/nfs_server.md
+++ b/src/collectors/proc.plugin/integrations/nfs_server.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/nfs_server.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/nfs_server.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "NFS Server"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Filesystem/NFS"
+learn_rel_path: "Collecting Metrics/Linux Systems/Filesystem/NFS"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/non-uniform_memory_access.md b/src/collectors/proc.plugin/integrations/non-uniform_memory_access.md
index 6f495fb79..3b55c65f1 100644
--- a/collectors/proc.plugin/integrations/non-uniform_memory_access.md
+++ b/src/collectors/proc.plugin/integrations/non-uniform_memory_access.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/non-uniform_memory_access.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/non-uniform_memory_access.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Non-Uniform Memory Access"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/page_types.md b/src/collectors/proc.plugin/integrations/page_types.md
index b228629b6..7dcb0f82d 100644
--- a/collectors/proc.plugin/integrations/page_types.md
+++ b/src/collectors/proc.plugin/integrations/page_types.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/page_types.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/page_types.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Page types"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/power_supply.md b/src/collectors/proc.plugin/integrations/power_supply.md
index 9a474e82a..53191dfff 100644
--- a/collectors/proc.plugin/integrations/power_supply.md
+++ b/src/collectors/proc.plugin/integrations/power_supply.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/power_supply.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/power_supply.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Power Supply"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Power Supply"
+learn_rel_path: "Collecting Metrics/Linux Systems/Power Supply"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -81,7 +81,7 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ linux_power_supply_capacity ](https://github.com/netdata/netdata/blob/master/health/health.d/linux_power_supply.conf) | powersupply.capacity | percentage of remaining power supply capacity |
+| [ linux_power_supply_capacity ](https://github.com/netdata/netdata/blob/master/src/health/health.d/linux_power_supply.conf) | powersupply.capacity | percentage of remaining power supply capacity |
## Setup
diff --git a/collectors/proc.plugin/integrations/pressure_stall_information.md b/src/collectors/proc.plugin/integrations/pressure_stall_information.md
index 53f4aa050..3af4da4a0 100644
--- a/collectors/proc.plugin/integrations/pressure_stall_information.md
+++ b/src/collectors/proc.plugin/integrations/pressure_stall_information.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/pressure_stall_information.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/pressure_stall_information.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Pressure Stall Information"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Pressure"
+learn_rel_path: "Collecting Metrics/Linux Systems/Pressure"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/sctp_statistics.md b/src/collectors/proc.plugin/integrations/sctp_statistics.md
index 15c0d424d..3c1cb7559 100644
--- a/collectors/proc.plugin/integrations/sctp_statistics.md
+++ b/src/collectors/proc.plugin/integrations/sctp_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/sctp_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/sctp_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "SCTP Statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/socket_statistics.md b/src/collectors/proc.plugin/integrations/socket_statistics.md
index d8ef26647..73fefc7c0 100644
--- a/collectors/proc.plugin/integrations/socket_statistics.md
+++ b/src/collectors/proc.plugin/integrations/socket_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/socket_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/socket_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Socket statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -82,8 +82,8 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ tcp_orphans ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_orphans.conf) | ipv4.sockstat_tcp_sockets | orphan IPv4 TCP sockets utilization |
-| [ tcp_memory ](https://github.com/netdata/netdata/blob/master/health/health.d/tcp_mem.conf) | ipv4.sockstat_tcp_mem | TCP memory utilization |
+| [ tcp_orphans ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_orphans.conf) | ipv4.sockstat_tcp_sockets | orphan IPv4 TCP sockets utilization |
+| [ tcp_memory ](https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_mem.conf) | ipv4.sockstat_tcp_mem | TCP memory utilization |
## Setup
diff --git a/collectors/proc.plugin/integrations/softirq_statistics.md b/src/collectors/proc.plugin/integrations/softirq_statistics.md
index f966cf971..2a130dcce 100644
--- a/collectors/proc.plugin/integrations/softirq_statistics.md
+++ b/src/collectors/proc.plugin/integrations/softirq_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/softirq_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/softirq_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "SoftIRQ statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/CPU"
+learn_rel_path: "Collecting Metrics/Linux Systems/CPU"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/softnet_statistics.md b/src/collectors/proc.plugin/integrations/softnet_statistics.md
index 58e6cf6e5..fbbe08036 100644
--- a/collectors/proc.plugin/integrations/softnet_statistics.md
+++ b/src/collectors/proc.plugin/integrations/softnet_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/softnet_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/softnet_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Softnet Statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -108,8 +108,8 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ 1min_netdev_backlog_exceeded ](https://github.com/netdata/netdata/blob/master/health/health.d/softnet.conf) | system.softnet_stat | average number of dropped packets in the last minute due to exceeded net.core.netdev_max_backlog |
-| [ 1min_netdev_budget_ran_outs ](https://github.com/netdata/netdata/blob/master/health/health.d/softnet.conf) | system.softnet_stat | average number of times ksoftirq ran out of sysctl net.core.netdev_budget or net.core.netdev_budget_usecs with work remaining over the last minute (this can be a cause for dropped packets) |
+| [ 1min_netdev_backlog_exceeded ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of dropped packets in the last minute due to exceeded net.core.netdev_max_backlog |
+| [ 1min_netdev_budget_ran_outs ](https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf) | system.softnet_stat | average number of times ksoftirq ran out of sysctl net.core.netdev_budget or net.core.netdev_budget_usecs with work remaining over the last minute (this can be a cause for dropped packets) |
## Setup
diff --git a/collectors/proc.plugin/integrations/synproxy.md b/src/collectors/proc.plugin/integrations/synproxy.md
index 2db17ef6f..a63e6cbc0 100644
--- a/collectors/proc.plugin/integrations/synproxy.md
+++ b/src/collectors/proc.plugin/integrations/synproxy.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/synproxy.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/synproxy.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Synproxy"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Firewall"
+learn_rel_path: "Collecting Metrics/Linux Systems/Firewall"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/system_load_average.md b/src/collectors/proc.plugin/integrations/system_load_average.md
index 6e986d90c..51f4f14ba 100644
--- a/collectors/proc.plugin/integrations/system_load_average.md
+++ b/src/collectors/proc.plugin/integrations/system_load_average.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/system_load_average.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/system_load_average.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "System Load Average"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/System"
+learn_rel_path: "Collecting Metrics/Linux Systems/System"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -98,11 +98,11 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ load_cpu_number ](https://github.com/netdata/netdata/blob/master/health/health.d/load.conf) | system.load | number of active CPU cores in the system |
-| [ load_average_15 ](https://github.com/netdata/netdata/blob/master/health/health.d/load.conf) | system.load | system fifteen-minute load average |
-| [ load_average_5 ](https://github.com/netdata/netdata/blob/master/health/health.d/load.conf) | system.load | system five-minute load average |
-| [ load_average_1 ](https://github.com/netdata/netdata/blob/master/health/health.d/load.conf) | system.load | system one-minute load average |
-| [ active_processes ](https://github.com/netdata/netdata/blob/master/health/health.d/processes.conf) | system.active_processes | system process IDs (PID) space utilization |
+| [ load_cpu_number ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | number of active CPU cores in the system |
+| [ load_average_15 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system fifteen-minute load average |
+| [ load_average_5 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system five-minute load average |
+| [ load_average_1 ](https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf) | system.load | system one-minute load average |
+| [ active_processes ](https://github.com/netdata/netdata/blob/master/src/health/health.d/processes.conf) | system.active_processes | system process IDs (PID) space utilization |
## Setup
diff --git a/collectors/proc.plugin/integrations/system_statistics.md b/src/collectors/proc.plugin/integrations/system_statistics.md
index f3df1a19a..264e40bd5 100644
--- a/collectors/proc.plugin/integrations/system_statistics.md
+++ b/src/collectors/proc.plugin/integrations/system_statistics.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/system_statistics.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/system_statistics.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "System statistics"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/System"
+learn_rel_path: "Collecting Metrics/Linux Systems/System"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -122,9 +122,9 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ 10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/health/health.d/cpu.conf) | system.cpu | average CPU utilization over the last 10 minutes (excluding iowait, nice and steal) |
-| [ 10min_cpu_iowait ](https://github.com/netdata/netdata/blob/master/health/health.d/cpu.conf) | system.cpu | average CPU iowait time over the last 10 minutes |
-| [ 20min_steal_cpu ](https://github.com/netdata/netdata/blob/master/health/health.d/cpu.conf) | system.cpu | average CPU steal time over the last 20 minutes |
+| [ 10min_cpu_usage ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU utilization over the last 10 minutes (excluding iowait, nice and steal) |
+| [ 10min_cpu_iowait ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU iowait time over the last 10 minutes |
+| [ 20min_steal_cpu ](https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf) | system.cpu | average CPU steal time over the last 20 minutes |
## Setup
@@ -151,7 +151,7 @@ The file format is a modified INI syntax. The general structure is:
option3 = some third value
```
You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
+Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/netdata-agent/configuration.md#the-netdata-config-directory).
```bash
cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
diff --git a/collectors/proc.plugin/integrations/system_uptime.md b/src/collectors/proc.plugin/integrations/system_uptime.md
index 0954c0642..4b7e21188 100644
--- a/collectors/proc.plugin/integrations/system_uptime.md
+++ b/src/collectors/proc.plugin/integrations/system_uptime.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/system_uptime.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/system_uptime.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "System Uptime"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/System"
+learn_rel_path: "Collecting Metrics/Linux Systems/System"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/wireless_network_interfaces.md b/src/collectors/proc.plugin/integrations/wireless_network_interfaces.md
index a8d2406ee..4288a1ebd 100644
--- a/collectors/proc.plugin/integrations/wireless_network_interfaces.md
+++ b/src/collectors/proc.plugin/integrations/wireless_network_interfaces.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/wireless_network_interfaces.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/wireless_network_interfaces.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "Wireless network interfaces"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
+learn_rel_path: "Collecting Metrics/Linux Systems/Network"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md b/src/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md
index c200ba673..d2d9378f4 100644
--- a/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md
+++ b/src/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/zfs_adaptive_replacement_cache.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "ZFS Adaptive Replacement Cache"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Filesystem/ZFS"
+learn_rel_path: "Collecting Metrics/Linux Systems/Filesystem/ZFS"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -99,7 +99,7 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ zfs_memory_throttle ](https://github.com/netdata/netdata/blob/master/health/health.d/zfs.conf) | zfs.memory_ops | number of times ZFS had to limit the ARC growth in the last 10 minutes |
+| [ zfs_memory_throttle ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfs.memory_ops | number of times ZFS had to limit the ARC growth in the last 10 minutes |
## Setup
diff --git a/collectors/proc.plugin/integrations/zfs_pools.md b/src/collectors/proc.plugin/integrations/zfs_pools.md
index 2985d39b0..f18c82baf 100644
--- a/collectors/proc.plugin/integrations/zfs_pools.md
+++ b/src/collectors/proc.plugin/integrations/zfs_pools.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/zfs_pools.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/zfs_pools.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "ZFS Pools"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Filesystem/ZFS"
+learn_rel_path: "Collecting Metrics/Linux Systems/Filesystem/ZFS"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
@@ -78,8 +78,8 @@ The following alerts are available:
| Alert name | On metric | Description |
|:------------|:----------|:------------|
-| [ zfs_pool_state_warn ](https://github.com/netdata/netdata/blob/master/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is degraded |
-| [ zfs_pool_state_crit ](https://github.com/netdata/netdata/blob/master/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is faulted or unavail |
+| [ zfs_pool_state_warn ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is degraded |
+| [ zfs_pool_state_crit ](https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf) | zfspool.state | ZFS pool ${label:pool} state is faulted or unavail |
## Setup
diff --git a/collectors/proc.plugin/integrations/zram.md b/src/collectors/proc.plugin/integrations/zram.md
index 111b17c62..b80a72ab1 100644
--- a/collectors/proc.plugin/integrations/zram.md
+++ b/src/collectors/proc.plugin/integrations/zram.md
@@ -1,9 +1,9 @@
<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/integrations/zram.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/proc.plugin/metadata.yaml"
+custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/integrations/zram.md"
+meta_yaml: "https://github.com/netdata/netdata/edit/master/src/collectors/proc.plugin/metadata.yaml"
sidebar_label: "ZRAM"
learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Memory"
+learn_rel_path: "Collecting Metrics/Linux Systems/Memory"
most_popular: False
message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
endmeta-->
diff --git a/collectors/proc.plugin/ipc.c b/src/collectors/proc.plugin/ipc.c
index 204977bdf..6d7d920f0 100644
--- a/collectors/proc.plugin/ipc.c
+++ b/src/collectors/proc.plugin/ipc.c
@@ -352,8 +352,8 @@ int do_ipc(int update_every, usec_t dt) {
}
// variables
- semaphores_max = rrdvar_custom_host_variable_add_and_acquire(localhost, "ipc_semaphores_max");
- arrays_max = rrdvar_custom_host_variable_add_and_acquire(localhost, "ipc_semaphores_arrays_max");
+ semaphores_max = rrdvar_host_variable_add_and_acquire(localhost, "ipc_semaphores_max");
+ arrays_max = rrdvar_host_variable_add_and_acquire(localhost, "ipc_semaphores_arrays_max");
}
struct stat stbuf;
@@ -373,8 +373,10 @@ int do_ipc(int update_every, usec_t dt) {
collector_error("Unable to fetch semaphore limits.");
}
else {
- if(semaphores_max) rrdvar_custom_host_variable_set(localhost, semaphores_max, limits.semmns);
- if(arrays_max) rrdvar_custom_host_variable_set(localhost, arrays_max, limits.semmni);
+ if(semaphores_max)
+ rrdvar_host_variable_set(localhost, semaphores_max, limits.semmns);
+ if(arrays_max)
+ rrdvar_host_variable_set(localhost, arrays_max, limits.semmni);
st_arrays->red = limits.semmni;
st_semaphores->red = limits.semmns;
diff --git a/src/collectors/proc.plugin/metadata.yaml b/src/collectors/proc.plugin/metadata.yaml
new file mode 100644
index 000000000..1ecec9b9e
--- /dev/null
+++ b/src/collectors/proc.plugin/metadata.yaml
@@ -0,0 +1,5299 @@
+plugin_name: proc.plugin
+modules:
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/stat
+ monitored_instance:
+ name: System statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.system-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - cpu utilization
+ - process counts
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ CPU utilization, states and frequencies and key Linux system performance metrics.
+
+ The `/proc/stat` file provides various types of system statistics:
+
+ - The overall system CPU usage statistics
+ - Per CPU core statistics
+ - The total context switching of the system
+ - The total number of processes running
+ - The total CPU interrupts
+ - The total CPU softirqs
+
+ The collector also reads:
+
+ - `/proc/schedstat` for statistics about the process scheduler in the Linux kernel.
+ - `/sys/devices/system/cpu/[X]/thermal_throttle/core_throttle_count` to get the count of thermal throttling events for a specific CPU core on Linux systems.
+ - `/sys/devices/system/cpu/[X]/thermal_throttle/package_throttle_count` to get the count of thermal throttling events for a specific CPU package on a Linux system.
+ - `/sys/devices/system/cpu/[X]/cpufreq/scaling_cur_freq` to get the current operating frequency of a specific CPU core.
+ - `/sys/devices/system/cpu/[X]/cpufreq/stats/time_in_state` to get the amount of time the CPU has spent in each of its available frequency states.
+ - `/sys/devices/system/cpu/[X]/cpuidle/state[X]/name` to get the names of the idle states for each CPU core in a Linux system.
+ - `/sys/devices/system/cpu/[X]/cpuidle/state[X]/time` to get the total time each specific CPU core has spent in each idle state since the system was started.
+ method_description: ""
+ supported_platforms:
+ include: ["linux"]
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: |
+ The collector auto-detects all metrics. No configuration is needed.
+ limits:
+ description: ""
+ performance_impact:
+ description: |
+ The collector disables cpu frequency and idle state monitoring when there are more than 128 CPU cores available.
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ section_name: "plugin:proc:/proc/stat"
+ name: "netdata.conf"
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: 10min_cpu_usage
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf
+ metric: system.cpu
+ info: average CPU utilization over the last 10 minutes (excluding iowait, nice and steal)
+ os: "linux"
+ - name: 10min_cpu_iowait
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf
+ metric: system.cpu
+ info: average CPU iowait time over the last 10 minutes
+ os: "linux"
+ - name: 20min_steal_cpu
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/cpu.conf
+ metric: system.cpu
+ info: average CPU steal time over the last 20 minutes
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.cpu
+ description: Total CPU utilization
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: guest_nice
+ - name: guest
+ - name: steal
+ - name: softirq
+ - name: irq
+ - name: user
+ - name: system
+ - name: nice
+ - name: iowait
+ - name: idle
+ - name: system.intr
+ description: CPU Interrupts
+ unit: "interrupts/s"
+ chart_type: line
+ dimensions:
+ - name: interrupts
+ - name: system.ctxt
+ description: CPU Context Switches
+ unit: "context switches/s"
+ chart_type: line
+ dimensions:
+ - name: switches
+ - name: system.forks
+ description: Started Processes
+ unit: "processes/s"
+ chart_type: line
+ dimensions:
+ - name: started
+ - name: system.processes
+ description: System Processes
+ unit: "processes"
+ chart_type: line
+ dimensions:
+ - name: running
+ - name: blocked
+ - name: cpu.core_throttling
+ description: Core Thermal Throttling Events
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: a dimension per cpu core
+ - name: cpu.package_throttling
+ description: Package Thermal Throttling Events
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: a dimension per package
+ - name: cpu.cpufreq
+ description: Current CPU Frequency
+ unit: "MHz"
+ chart_type: line
+ dimensions:
+ - name: a dimension per cpu core
+ - name: cpu core
+ description: ""
+ labels:
+ - name: cpu
+ description: TBD
+ metrics:
+ - name: cpu.cpu
+ description: Core utilization
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: guest_nice
+ - name: guest
+ - name: steal
+ - name: softirq
+ - name: irq
+ - name: user
+ - name: system
+ - name: nice
+ - name: iowait
+ - name: idle
+ - name: cpuidle.cpu_cstate_residency_time
+ description: C-state residency time
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per c-state
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/sys/kernel/random/entropy_avail
+ monitored_instance:
+ name: Entropy
+ link: ""
+ categories:
+ - data-collection.linux-systems.system-metrics
+ icon_filename: "syslog.png"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - entropy
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Entropy, a measure of the randomness or unpredictability of data.
+
+ In the context of cryptography, entropy is used to generate random numbers or keys that are essential for
+ secure communication and encryption. Without a good source of entropy, cryptographic protocols can become
+ vulnerable to attacks that exploit the predictability of the generated keys.
+
+ In most operating systems, entropy is generated by collecting random events from various sources, such as
+ hardware interrupts, mouse movements, keyboard presses, and disk activity. These events are fed into a pool
+ of entropy, which is then used to generate random numbers when needed.
+
+ The `/dev/random` device in Linux is one such source of entropy, and it provides an interface for programs
+ to access the pool of entropy. When a program requests random numbers, it reads from the `/dev/random` device,
+ which blocks until enough entropy is available to generate the requested numbers. This ensures that the
+ generated numbers are truly random and not predictable.
+
+ However, if the pool of entropy gets depleted, the `/dev/random` device may block indefinitely, causing
+ programs that rely on random numbers to slow down or even freeze. This is especially problematic for
+ cryptographic protocols that require a continuous stream of random numbers, such as SSL/TLS and SSH.
+
+ To avoid this issue, some systems use a hardware random number generator (RNG) to generate high-quality
+ entropy. A hardware RNG generates random numbers by measuring physical phenomena, such as thermal noise or
+ radioactive decay. These sources of randomness are considered to be more reliable and unpredictable than
+ software-based sources.
+
+ One such hardware RNG is the Trusted Platform Module (TPM), which is a dedicated hardware chip that is used
+ for cryptographic operations and secure boot. The TPM contains a built-in hardware RNG that generates
+ high-quality entropy, which can be used to seed the pool of entropy in the operating system.
+
+ Alternatively, software-based solutions such as `Haveged` can be used to generate additional entropy by
+ exploiting sources of randomness in the system, such as CPU utilization and network traffic. These solutions
+ can help to mitigate the risk of entropy depletion, but they may not be as reliable as hardware-based solutions.
+ method_description: ""
+ supported_platforms:
+ include: ["linux"]
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: lowest_entropy
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/entropy.conf
+ metric: system.entropy
+ info: minimum number of bits of entropy available for the kernel’s random number generator
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.entropy
+ description: Available Entropy
+ unit: "entropy"
+ chart_type: line
+ dimensions:
+ - name: entropy
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/uptime
+ monitored_instance:
+ name: System Uptime
+ link: ""
+ categories:
+ - data-collection.linux-systems.system-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - uptime
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ The amount of time the system has been up (running).
+
+ Uptime is a critical aspect of overall system performance:
+
+ - **Availability**: Uptime monitoring can show whether a server is consistently available or experiences frequent downtimes.
+ - **Performance Monitoring**: While server uptime alone doesn't provide detailed performance data, analyzing the duration and frequency of downtimes can help identify patterns or trends.
+ - **Proactive problem detection**: If server uptime monitoring reveals unexpected downtimes or a decreasing uptime trend, it can serve as an early warning sign of potential problems.
+ - **Root cause analysis**: When investigating server downtime, the uptime metric alone may not provide enough information to pinpoint the exact cause.
+ - **Load balancing**: Uptime data can indirectly indicate load balancing issues if certain servers have significantly lower uptimes than others.
+ - **Optimize maintenance efforts**: Servers with consistently low uptimes or frequent downtimes may require more attention.
+ - **Compliance requirements**: Server uptime data can be used to demonstrate compliance with regulatory requirements or SLAs that mandate a minimum level of server availability.
+ method_description: ""
+ supported_platforms:
+ include: ["linux"]
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.uptime
+ description: System Uptime
+ unit: "seconds"
+ chart_type: line
+ dimensions:
+ - name: uptime
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/vmstat
+ monitored_instance:
+ name: Memory Statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - swap
+ - page faults
+ - oom
+ - numa
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Linux Virtual memory subsystem.
+
+ Information about memory management, indicating how effectively the kernel allocates and frees
+ memory resources in response to system demands.
+
+ Monitors page faults, which occur when a process requests a portion of its memory that isn't
+ immediately available. Monitoring these events can help diagnose inefficiencies in memory management and
+ provide insights into application behavior.
+
+ Tracks swapping activity — a vital aspect of memory management where the kernel moves data from RAM to
+ swap space, and vice versa, based on memory demand and usage. It also monitors the utilization of zswap,
+ a compressed cache for swap pages, and provides insights into its usage and performance implications.
+
+ In the context of virtualized environments, it tracks the ballooning mechanism which is used to balance
+ memory resources between host and guest systems.
+
+ For systems using NUMA architecture, it provides insights into the local and remote memory accesses, which
+ can impact the performance based on the memory access times.
+
+ The collector also watches for 'Out of Memory' kills, a drastic measure taken by the system when it runs out
+ of memory resources.
+ method_description: ""
+ supported_platforms:
+ include: ["linux"]
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: 30min_ram_swapped_out
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf
+ metric: mem.swapio
+ info: percentage of the system RAM swapped in the last 30 minutes
+ os: "linux freebsd"
+ - name: oom_kill
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf
+ metric: mem.oom_kill
+ info: number of out of memory kills in the last 30 minutes
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: mem.swapio
+ description: Swap I/O
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: in
+ - name: out
+ - name: system.pgpgio
+ description: Memory Paged from/to disk
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: in
+ - name: out
+ - name: system.pgfaults
+ description: Memory Page Faults
+ unit: "faults/s"
+ chart_type: line
+ dimensions:
+ - name: minor
+ - name: major
+ - name: mem.balloon
+ description: Memory Ballooning Operations
+ unit: "KiB/s"
+ chart_type: line
+ dimensions:
+ - name: inflate
+ - name: deflate
+ - name: migrate
+ - name: mem.zswapio
+ description: ZSwap I/O
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: in
+ - name: out
+ - name: mem.ksm_cow
+ description: KSM Copy On Write Operations
+ unit: "KiB/s"
+ chart_type: line
+ dimensions:
+ - name: swapin
+ - name: write
+ - name: mem.thp_faults
+ description: Transparent Huge Page Fault Allocations
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: alloc
+ - name: fallback
+ - name: fallback_charge
+ - name: mem.thp_file
+ description: Transparent Huge Page File Allocations
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: alloc
+ - name: fallback
+ - name: mapped
+ - name: fallback_charge
+ - name: mem.thp_zero
+ description: Transparent Huge Zero Page Allocations
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: alloc
+ - name: failed
+ - name: mem.thp_collapse
+ description: Transparent Huge Pages Collapsed by khugepaged
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: alloc
+ - name: failed
+ - name: mem.thp_split
+ description: Transparent Huge Page Splits
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: split
+ - name: failed
+ - name: split_pmd
+ - name: split_deferred
+ - name: mem.thp_swapout
+ description: Transparent Huge Pages Swap Out
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: swapout
+ - name: fallback
+ - name: mem.thp_compact
+ description: Transparent Huge Pages Compaction
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: success
+ - name: fail
+ - name: stall
+ - name: mem.oom_kill
+ description: Out of Memory Kills
+ unit: "kills/s"
+ chart_type: line
+ dimensions:
+ - name: kills
+ - name: mem.numa
+ description: NUMA events
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: local
+ - name: foreign
+ - name: interleave
+ - name: other
+ - name: pte_updates
+ - name: huge_pte_updates
+ - name: hint_faults
+ - name: hint_faults_local
+ - name: pages_migrated
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/interrupts
+ monitored_instance:
+ name: Interrupts
+ link: ""
+ categories:
+ - data-collection.linux-systems.cpu-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - interrupts
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Monitors `/proc/interrupts`, a file organized by CPU and then by the type of interrupt.
+ The numbers reported are the counts of the interrupts that have occurred of each type.
+
+ An interrupt is a signal to the processor emitted by hardware or software indicating an event that needs
+ immediate attention. The processor then interrupts its current activities and executes the interrupt handler
+ to deal with the event. This is part of the way a computer multitasks and handles concurrent processing.
+
+ The types of interrupts include:
+
+ - **I/O interrupts**: These are caused by I/O devices like the keyboard, mouse, printer, etc. For example, when
+ you type something on the keyboard, an interrupt is triggered so the processor can handle the new input.
+
+ - **Timer interrupts**: These are generated at regular intervals by the system's timer circuit. It's primarily
+ used to switch the CPU among different tasks.
+
+ - **Software interrupts**: These are generated by a program requiring disk I/O operations, or other system resources.
+
+ - **Hardware interrupts**: These are caused by hardware conditions such as power failure, overheating, etc.
+
+ Monitoring `/proc/interrupts` can be used for:
+
+ - **Performance tuning**: If an interrupt is happening very frequently, it could be a sign that a device is not
+ configured correctly, or there is a software bug causing unnecessary interrupts. This could lead to system
+ performance degradation.
+
+ - **System troubleshooting**: If you're seeing a lot of unexpected interrupts, it could be a sign of a hardware problem.
+
+ - **Understanding system behavior**: More generally, keeping an eye on what interrupts are occurring can help you
+ understand what your system is doing. It can provide insights into the system's interaction with hardware,
+ drivers, and other parts of the kernel.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.interrupts
+ description: System interrupts
+ unit: "interrupts/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per device
+ - name: cpu core
+ description: ""
+ labels:
+ - name: cpu
+ description: TBD
+ metrics:
+ - name: cpu.interrupts
+ description: CPU interrupts
+ unit: "interrupts/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per device
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/loadavg
+ monitored_instance:
+ name: System Load Average
+ link: ""
+ categories:
+ - data-collection.linux-systems.system-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - load
+ - load average
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ The `/proc/loadavg` file provides information about the system load average.
+
+ The load average is a measure of the amount of computational work that a system performs. It is a
+ representation of the average system load over a period of time.
+
+ This file contains three numbers representing the system load averages for the last 1, 5, and 15 minutes,
+ respectively. It also includes the currently running processes and the total number of processes.
+
+ Monitoring the load average can be used for:
+
+ - **System performance**: If the load average is too high, it may indicate that your system is overloaded.
+ On a system with a single CPU, if the load average is 1, it means the single CPU is fully utilized. If the
+ load averages are consistently higher than the number of CPUs/cores, it may indicate that your system is
+ overloaded and tasks are waiting for CPU time.
+
+ - **Troubleshooting**: If the load average is unexpectedly high, it can be a sign of a problem. This could be
+ due to a runaway process, a software bug, or a hardware issue.
+
+ - **Capacity planning**: By monitoring the load average over time, you can understand the trends in your
+ system's workload. This can help with capacity planning and scaling decisions.
+
+ Remember that load average not only considers CPU usage, but also includes processes waiting for disk I/O.
+ Therefore, high load averages could be due to I/O contention as well as CPU contention.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: load_cpu_number
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf
+ metric: system.load
+ info: number of active CPU cores in the system
+ os: "linux"
+ - name: load_average_15
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf
+ metric: system.load
+ info: system fifteen-minute load average
+ os: "linux"
+ - name: load_average_5
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf
+ metric: system.load
+ info: system five-minute load average
+ os: "linux"
+ - name: load_average_1
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/load.conf
+ metric: system.load
+ info: system one-minute load average
+ os: "linux"
+ - name: active_processes
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/processes.conf
+ metric: system.active_processes
+ info: system process IDs (PID) space utilization
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.load
+ description: System Load Average
+ unit: "load"
+ chart_type: line
+ dimensions:
+ - name: load1
+ - name: load5
+ - name: load15
+ - name: system.active_processes
+ description: System Active Processes
+ unit: "processes"
+ chart_type: line
+ dimensions:
+ - name: active
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/pressure
+ monitored_instance:
+ name: Pressure Stall Information
+ link: ""
+ categories:
+ - data-collection.linux-systems.pressure-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - pressure
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Introduced in Linux kernel 4.20, `/proc/pressure` provides information about system pressure stall information
+ (PSI). PSI is a feature that allows the system to track the amount of time the system is stalled due to
+ resource contention, such as CPU, memory, or I/O.
+
+ The collectors monitored 3 separate files for CPU, memory, and I/O:
+
+ - **cpu**: Tracks the amount of time tasks are stalled due to CPU contention.
+ - **memory**: Tracks the amount of time tasks are stalled due to memory contention.
+ - **io**: Tracks the amount of time tasks are stalled due to I/O contention.
+ - **irq**: Tracks the amount of time tasks are stalled due to IRQ contention.
+
+ Each of them provides metrics for stall time over the last 10 seconds, 1 minute, 5 minutes, and 15 minutes.
+
+ Monitoring the /proc/pressure files can provide important insights into system performance and capacity planning:
+
+ - **Identifying resource contention**: If these metrics are consistently high, it indicates that tasks are
+ frequently being stalled due to lack of resources, which can significantly degrade system performance.
+
+ - **Troubleshooting performance issues**: If a system is experiencing performance issues, these metrics can
+ help identify whether resource contention is the cause.
+
+ - **Capacity planning**: By monitoring these metrics over time, you can understand trends in resource
+ utilization and make informed decisions about when to add more resources to your system.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.cpu_some_pressure
+ description: CPU some pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.cpu_some_pressure_stall_time
+ description: CPU some pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: system.cpu_full_pressure
+ description: CPU full pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.cpu_full_pressure_stall_time
+ description: CPU full pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: system.memory_some_pressure
+ description: Memory some pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.memory_some_pressure_stall_time
+ description: Memory some pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: system.memory_full_pressure
+ description: Memory full pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.memory_full_pressure_stall_time
+ description: Memory full pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: system.io_some_pressure
+ description: I/O some pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.io_some_pressure_stall_time
+ description: I/O some pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - name: system.io_full_pressure
+ description: I/O some pressure
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: some10
+ - name: some60
+ - name: some300
+ - name: system.io_full_pressure_stall_time
+ description: I/O some pressure stall time
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: time
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/softirqs
+ monitored_instance:
+ name: SoftIRQ statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.cpu-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - softirqs
+ - interrupts
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ In the Linux kernel, handling of hardware interrupts is split into two halves: the top half and the bottom half.
+ The top half is the routine that responds immediately to an interrupt, while the bottom half is deferred to be processed later.
+
+ Softirqs are a mechanism in the Linux kernel used to handle the bottom halves of interrupts, which can be
+ deferred and processed later in a context where it's safe to enable interrupts.
+
+ The actual work of handling the interrupt is offloaded to a softirq and executed later when the system
+ decides it's a good time to process them. This helps to keep the system responsive by not blocking the top
+ half for too long, which could lead to missed interrupts.
+
+ Monitoring `/proc/softirqs` is useful for:
+
+ - **Performance tuning**: A high rate of softirqs could indicate a performance issue. For instance, a high
+ rate of network softirqs (`NET_RX` and `NET_TX`) could indicate a network performance issue.
+
+ - **Troubleshooting**: If a system is behaving unexpectedly, checking the softirqs could provide clues about
+ what is going on. For example, a sudden increase in block device softirqs (BLOCK) might indicate a problem
+ with a disk.
+
+ - **Understanding system behavior**: Knowing what types of softirqs are happening can help you understand what
+ your system is doing, particularly in terms of how it's interacting with hardware and how it's handling
+ interrupts.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.softirqs
+ description: System softirqs
+ unit: "softirqs/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per softirq
+ - name: cpu core
+ description: ""
+ labels:
+ - name: cpu
+ description: TBD
+ metrics:
+ - name: cpu.softirqs
+ description: CPU softirqs
+ unit: "softirqs/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per softirq
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/softnet_stat
+ monitored_instance:
+ name: Softnet Statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - softnet
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ `/proc/net/softnet_stat` provides statistics that relate to the handling of network packets by softirq.
+
+ It provides information about:
+
+ - Total number of processed packets (`processed`).
+ - Times ksoftirq ran out of quota (`dropped`).
+ - Times net_rx_action was rescheduled.
+ - Number of times processed all lists before quota.
+ - Number of times did not process all lists due to quota.
+ - Number of times net_rx_action was rescheduled for GRO (Generic Receive Offload) cells.
+ - Number of times GRO cells were processed.
+
+ Monitoring the /proc/net/softnet_stat file can be useful for:
+
+ - **Network performance monitoring**: By tracking the total number of processed packets and how many packets
+ were dropped, you can gain insights into your system's network performance.
+
+ - **Troubleshooting**: If you're experiencing network-related issues, this collector can provide valuable clues.
+ For instance, a high number of dropped packets may indicate a network problem.
+
+ - **Capacity planning**: If your system is consistently processing near its maximum capacity of network
+ packets, it might be time to consider upgrading your network infrastructure.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: 1min_netdev_backlog_exceeded
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf
+ metric: system.softnet_stat
+ info: average number of dropped packets in the last minute due to exceeded net.core.netdev_max_backlog
+ os: "linux"
+ - name: 1min_netdev_budget_ran_outs
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/softnet.conf
+ metric: system.softnet_stat
+ info:
+ average number of times ksoftirq ran out of sysctl net.core.netdev_budget or net.core.netdev_budget_usecs with work remaining over the last
+ minute (this can be a cause for dropped packets)
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.softnet_stat
+ description: System softnet_stat
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: dropped
+ - name: squeezed
+ - name: received_rps
+ - name: flow_limit_count
+ - name: cpu core
+ description: ""
+ labels: []
+ metrics:
+ - name: cpu.softnet_stat
+ description: CPU softnet_stat
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: processed
+ - name: dropped
+ - name: squeezed
+ - name: received_rps
+ - name: flow_limit_count
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/meminfo
+ monitored_instance:
+ name: Memory Usage
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - memory
+ - ram
+ - available
+ - committed
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ `/proc/meminfo` provides detailed information about the system's current memory usage. It includes information
+ about different types of memory, RAM, Swap, ZSwap, HugePages, Transparent HugePages (THP), Kernel memory,
+ SLAB memory, memory mappings, and more.
+
+ Monitoring /proc/meminfo can be useful for:
+
+ - **Performance Tuning**: Understanding your system's memory usage can help you make decisions about system
+ tuning and optimization. For example, if your system is frequently low on free memory, it might benefit
+ from more RAM.
+
+ - **Troubleshooting**: If your system is experiencing problems, `/proc/meminfo` can provide clues about
+ whether memory usage is a factor. For example, if your system is slow and cached swap is high, it could
+ mean that your system is swapping out a lot of memory to disk, which can degrade performance.
+
+ - **Capacity Planning**: By monitoring memory usage over time, you can understand trends and make informed
+ decisions about future capacity needs.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: ram_in_use
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf
+ metric: system.ram
+ info: system memory utilization
+ os: "linux"
+ - name: ram_available
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ram.conf
+ metric: mem.available
+ info: percentage of estimated amount of RAM available for userspace processes, without causing swapping
+ os: "linux"
+ - name: used_swap
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/swap.conf
+ metric: mem.swap
+ info: swap memory utilization
+ os: "linux freebsd"
+ - name: 1hour_memory_hw_corrupted
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf
+ metric: mem.hwcorrupt
+ info: amount of memory corrupted due to a hardware failure
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.ram
+ description: System RAM
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: cached
+ - name: buffers
+ - name: mem.available
+ description: Available RAM for applications
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: avail
+ - name: mem.swap
+ description: System Swap
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: mem.swap_cached
+ description: Swap Memory Cached in RAM
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: cached
+ - name: mem.zswap
+ description: Zswap Usage
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: in-ram
+ - name: on-disk
+ - name: mem.hwcorrupt
+ description: Corrupted Memory detected by ECC
+ unit: "MiB"
+ chart_type: line
+ dimensions:
+ - name: HardwareCorrupted
+ - name: mem.commited
+ description: Committed (Allocated) Memory
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: Commited_AS
+ - name: mem.writeback
+ description: Writeback Memory
+ unit: "MiB"
+ chart_type: line
+ dimensions:
+ - name: Dirty
+ - name: Writeback
+ - name: FuseWriteback
+ - name: NfsWriteback
+ - name: Bounce
+ - name: mem.kernel
+ description: Memory Used by Kernel
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: Slab
+ - name: KernelStack
+ - name: PageTables
+ - name: VmallocUsed
+ - name: Percpu
+ - name: mem.slab
+ description: Reclaimable Kernel Memory
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: reclaimable
+ - name: unreclaimable
+ - name: mem.hugepages
+ description: Dedicated HugePages Memory
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: surplus
+ - name: reserved
+ - name: mem.thp
+ description: Transparent HugePages Memory
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: anonymous
+ - name: shmem
+ - name: mem.thp_details
+ description: Details of Transparent HugePages Usage
+ unit: "MiB"
+ chart_type: line
+ dimensions:
+ - name: ShmemPmdMapped
+ - name: FileHugePages
+ - name: FilePmdMapped
+ - name: mem.reclaiming
+ description: Memory Reclaiming
+ unit: "MiB"
+ chart_type: line
+ dimensions:
+ - name: Active
+ - name: Inactive
+ - name: Active(anon)
+ - name: Inactive(anon)
+ - name: Active(file)
+ - name: Inactive(file)
+ - name: Unevictable
+ - name: Mlocked
+ - name: mem.high_low
+ description: High and Low Used and Free Memory Areas
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: high_used
+ - name: low_used
+ - name: high_free
+ - name: low_free
+ - name: mem.cma
+ description: Contiguous Memory Allocator (CMA) Memory
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: used
+ - name: free
+ - name: mem.directmaps
+ description: Direct Memory Mappings
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: 4k
+ - name: 2m
+ - name: 4m
+ - name: 1g
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/pagetypeinfo
+ monitored_instance:
+ name: Page types
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "microchip.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - memory page types
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides metrics about the system's memory page types"
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: mem.pagetype_global
+ description: System orders available
+ unit: "B"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per pagesize
+ - name: node, zone, type
+ description: ""
+ labels:
+ - name: node_id
+ description: TBD
+ - name: node_zone
+ description: TBD
+ - name: node_type
+ description: TBD
+ metrics:
+ - name: mem.pagetype
+ description: pagetype_Node{node}_{zone}_{type}
+ unit: "B"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per pagesize
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/devices/system/edac/mc
+ monitored_instance:
+ name: Memory modules (DIMMs)
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "microchip.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - edac
+ - ecc
+ - dimm
+ - ram
+ - hardware
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ The Error Detection and Correction (EDAC) subsystem is detecting and reporting errors in the system's memory,
+ primarily ECC (Error-Correcting Code) memory errors.
+
+ The collector provides data for:
+
+ - Per memory controller (MC): correctable and uncorrectable errors. These can be of 2 kinds:
+ - errors related to a DIMM
+ - errors that cannot be associated with a DIMM
+
+ - Per memory DIMM: correctable and uncorrectable errors. There are 2 kinds:
+ - memory controllers that can identify the physical DIMMS and report errors directly for them,
+ - memory controllers that report errors for memory address ranges that can be linked to dimms.
+ In this case the DIMMS reported may be more than the physical DIMMS installed.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: ecc_memory_mc_noinfo_correctable
+ metric: mem.edac_mc_errors
+ info: memory controller ${label:controller} ECC correctable errors (unknown DIMM slot)
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf
+ - name: ecc_memory_mc_noinfo_uncorrectable
+ metric: mem.edac_mc_errors
+ info: memory controller ${label:controller} ECC uncorrectable errors (unknown DIMM slot)
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf
+ - name: ecc_memory_dimm_correctable
+ metric: mem.edac_mc_dimm_errors
+ info: DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC correctable errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf
+ - name: ecc_memory_dimm_uncorrectable
+ metric: mem.edac_mc_dimm_errors
+ info: DIMM ${label:dimm} controller ${label:controller} (location ${label:dimm_location}) ECC uncorrectable errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/memory.conf
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: memory controller
+ description: These metrics refer to the memory controller.
+ labels:
+ - name: controller
+ description: "[mcX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#mcx-directories) directory name of this memory controller."
+ - name: mc_name
+ description: Memory controller type.
+ - name: size_mb
+ description: The amount of memory in megabytes that this memory controller manages.
+ - name: max_location
+ description: Last available memory slot in this memory controller.
+ metrics:
+ - name: mem.edac_mc_errors
+ description: Memory Controller (MC) Error Detection And Correction (EDAC) Errors
+ unit: errors
+ chart_type: line
+ dimensions:
+ - name: correctable
+ - name: uncorrectable
+ - name: correctable_noinfo
+ - name: uncorrectable_noinfo
+ - name: memory module
+ description: These metrics refer to the memory module (or rank, [depends on the memory controller](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#f5)).
+ labels:
+ - name: controller
+ description: "[mcX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#mcx-directories) directory name of this memory controller."
+ - name: dimm
+ description: "[dimmX or rankX](https://www.kernel.org/doc/html/v5.0/admin-guide/ras.html#dimmx-or-rankx-directories) directory name of this memory module."
+ - name: dimm_dev_type
+ description: Type of DRAM device used in this memory module. For example, x1, x2, x4, x8.
+ - name: dimm_edac_mode
+ description: Used type of error detection and correction. For example, S4ECD4ED would mean a Chipkill with x4 DRAM.
+ - name: dimm_label
+ description: Label assigned to this memory module.
+ - name: dimm_location
+ description: Location of the memory module.
+ - name: dimm_mem_type
+ description: Type of the memory module.
+ - name: size
+ description: The amount of memory in megabytes that this memory module manages.
+ metrics:
+ - name: mem.edac_mc_errors
+ description: DIMM Error Detection And Correction (EDAC) Errors
+ unit: errors
+ chart_type: line
+ dimensions:
+ - name: correctable
+ - name: uncorrectable
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/devices/system/node
+ monitored_instance:
+ name: Non-Uniform Memory Access
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "linuxserver.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - numa
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Information about NUMA (Non-Uniform Memory Access) nodes on the system.
+
+ NUMA is a method of configuring a cluster of microprocessor in a multiprocessing system so that they can
+ share memory locally, improving performance and the ability of the system to be expanded. NUMA is used in a
+ symmetric multiprocessing (SMP) system.
+
+ In a NUMA system, processors, memory, and I/O devices are grouped together into cells, also known as nodes.
+ Each node has its own memory and set of I/O devices, and one or more processors. While a processor can access
+ memory in any of the nodes, it does so faster when accessing memory within its own node.
+
+ The collector provides statistics on memory allocations for processes running on the NUMA nodes, revealing the
+ efficiency of memory allocations in multi-node systems.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: numa node
+ description: ""
+ labels:
+ - name: numa_node
+ description: TBD
+ metrics:
+ - name: mem.numa_nodes
+ description: NUMA events
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: hit
+ - name: miss
+ - name: local
+ - name: foreign
+ - name: interleave
+ - name: other
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/kernel/mm/ksm
+ monitored_instance:
+ name: Kernel Same-Page Merging
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "microchip.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - ksm
+ - samepage
+ - merging
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Kernel Samepage Merging (KSM) is a memory-saving feature in Linux that enables the kernel to examine the
+ memory of different processes and identify identical pages. It then merges these identical pages into a
+ single page that the processes share. This is particularly useful for virtualization, where multiple virtual
+ machines might be running the same operating system or applications and have many identical pages.
+
+ The collector provides information about the operation and effectiveness of KSM on your system.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: mem.ksm
+ description: Kernel Same Page Merging
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: shared
+ - name: unshared
+ - name: sharing
+ - name: volatile
+ - name: mem.ksm_savings
+ description: Kernel Same Page Merging Savings
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: savings
+ - name: offered
+ - name: mem.ksm_ratios
+ description: Kernel Same Page Merging Effectiveness
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: savings
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/block/zram
+ monitored_instance:
+ name: ZRAM
+ link: ""
+ categories:
+ - data-collection.linux-systems.memory-metrics
+ icon_filename: "microchip.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - zram
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ zRAM, or compressed RAM, is a block device that uses a portion of your system's RAM as a block device.
+ The data written to this block device is compressed and stored in memory.
+
+ The collectors provides information about the operation and the effectiveness of zRAM on your system.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: zram device
+ description: ""
+ labels:
+ - name: device
+ description: TBD
+ metrics:
+ - name: mem.zram_usage
+ description: ZRAM Memory Usage
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: compressed
+ - name: metadata
+ - name: mem.zram_savings
+ description: ZRAM Memory Savings
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: savings
+ - name: original
+ - name: mem.zram_ratio
+ description: ZRAM Compression Ratio (original to compressed)
+ unit: "ratio"
+ chart_type: line
+ dimensions:
+ - name: ratio
+ - name: mem.zram_efficiency
+ description: ZRAM Efficiency
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: percent
+ - meta:
+ plugin_name: proc.plugin
+ module_name: ipc
+ monitored_instance:
+ name: Inter Process Communication
+ link: ""
+ categories:
+ - data-collection.linux-systems.ipc-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - ipc
+ - semaphores
+ - shared memory
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ IPC stands for Inter-Process Communication. It is a mechanism which allows processes to communicate with each
+ other and synchronize their actions.
+
+ This collector exposes information about:
+
+ - Message Queues: This allows messages to be exchanged between processes. It's a more flexible method that
+ allows messages to be placed onto a queue and read at a later time.
+
+ - Shared Memory: This method allows for the fastest form of IPC because processes can exchange data by
+ reading/writing into shared memory segments.
+
+ - Semaphores: They are used to synchronize the operations performed by independent processes. So, if multiple
+ processes are trying to access a single shared resource, semaphores can ensure that only one process
+ accesses the resource at a given time.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: false
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: semaphores_used
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf
+ metric: system.ipc_semaphores
+ info: IPC semaphore utilization
+ os: "linux"
+ - name: semaphore_arrays_used
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/ipc.conf
+ metric: system.ipc_semaphore_arrays
+ info: IPC semaphore arrays utilization
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.ipc_semaphores
+ description: IPC Semaphores
+ unit: "semaphores"
+ chart_type: area
+ dimensions:
+ - name: semaphores
+ - name: system.ipc_semaphore_arrays
+ description: IPC Semaphore Arrays
+ unit: "arrays"
+ chart_type: area
+ dimensions:
+ - name: arrays
+ - name: system.message_queue_message
+ description: IPC Message Queue Number of Messages
+ unit: "messages"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per queue
+ - name: system.message_queue_bytes
+ description: IPC Message Queue Used Bytes
+ unit: "bytes"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per queue
+ - name: system.shared_memory_segments
+ description: IPC Shared Memory Number of Segments
+ unit: "segments"
+ chart_type: stacked
+ dimensions:
+ - name: segments
+ - name: system.shared_memory_bytes
+ description: IPC Shared Memory Used Bytes
+ unit: "bytes"
+ chart_type: stacked
+ dimensions:
+ - name: bytes
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/diskstats
+ monitored_instance:
+ name: Disk Statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.disk-metrics
+ icon_filename: "hard-drive.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - disk
+ - disks
+ - io
+ - bcache
+ - block devices
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: |
+ Detailed statistics for each of your system's disk devices and partitions.
+ The data is reported by the kernel and can be used to monitor disk activity on a Linux system.
+
+ Get valuable insight into how your disks are performing and where potential bottlenecks might be.
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: 10min_disk_backlog
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf
+ metric: disk.backlog
+ info: average backlog size of the ${label:device} disk over the last 10 minutes
+ os: "linux"
+ - name: 10min_disk_utilization
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/disks.conf
+ metric: disk.util
+ info: average percentage of time ${label:device} disk was busy over the last 10 minutes
+ os: "linux freebsd"
+ - name: bcache_cache_dirty
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf
+ metric: disk.bcache_cache_alloc
+ info: percentage of cache space used for dirty data and metadata (this usually means your SSD cache is too small)
+ - name: bcache_cache_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/bcache.conf
+ metric: disk.bcache_cache_read_races
+ info:
+ number of times data was read from the cache, the bucket was reused and invalidated in the last 10 minutes (when this occurs the data is
+ reread from the backing device)
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.io
+ description: Disk I/O
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: in
+ - name: out
+ - name: disk
+ description: ""
+ labels:
+ - name: device
+ description: TBD
+ - name: mount_point
+ description: TBD
+ - name: device_type
+ description: TBD
+ metrics:
+ - name: disk.io
+ description: Disk I/O Bandwidth
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.io
+ description: Amount of Discarded Data
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: discards
+ - name: disk.ops
+ description: Disk Completed I/O Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.ops
+ description: Disk Completed Extended I/O Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: discards
+ - name: flushes
+ - name: disk.qops
+ description: Disk Current I/O Operations
+ unit: "operations"
+ chart_type: line
+ dimensions:
+ - name: operations
+ - name: disk.backlog
+ description: Disk Backlog
+ unit: "milliseconds"
+ chart_type: area
+ dimensions:
+ - name: backlog
+ - name: disk.busy
+ description: Disk Busy Time
+ unit: "milliseconds"
+ chart_type: area
+ dimensions:
+ - name: busy
+ - name: disk.util
+ description: Disk Utilization Time
+ unit: "% of time working"
+ chart_type: area
+ dimensions:
+ - name: utilization
+ - name: disk.mops
+ description: Disk Merged Operations
+ unit: "merged operations/s"
+ chart_type: line
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.mops
+ description: Disk Merged Discard Operations
+ unit: "merged operations/s"
+ chart_type: line
+ dimensions:
+ - name: discards
+ - name: disk.iotime
+ description: Disk Total I/O Time
+ unit: "milliseconds/s"
+ chart_type: line
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.iotime
+ description: Disk Total I/O Time for Extended Operations
+ unit: "milliseconds/s"
+ chart_type: line
+ dimensions:
+ - name: discards
+ - name: flushes
+ - name: disk.await
+ description: Average Completed I/O Operation Time
+ unit: "milliseconds/operation"
+ chart_type: line
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.await
+ description: Average Completed Extended I/O Operation Time
+ unit: "milliseconds/operation"
+ chart_type: line
+ dimensions:
+ - name: discards
+ - name: flushes
+ - name: disk.avgsz
+ description: Average Completed I/O Operation Bandwidth
+ unit: "KiB/operation"
+ chart_type: area
+ dimensions:
+ - name: reads
+ - name: writes
+ - name: disk_ext.avgsz
+ description: Average Amount of Discarded Data
+ unit: "KiB/operation"
+ chart_type: area
+ dimensions:
+ - name: discards
+ - name: disk.svctm
+ description: Average Service Time
+ unit: "milliseconds/operation"
+ chart_type: line
+ dimensions:
+ - name: svctm
+ - name: disk.bcache_cache_alloc
+ description: BCache Cache Allocations
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: ununsed
+ - name: dirty
+ - name: clean
+ - name: metadata
+ - name: undefined
+ - name: disk.bcache_hit_ratio
+ description: BCache Cache Hit Ratio
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: 5min
+ - name: 1hour
+ - name: 1day
+ - name: ever
+ - name: disk.bcache_rates
+ description: BCache Rates
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: congested
+ - name: writeback
+ - name: disk.bcache_size
+ description: BCache Cache Sizes
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: dirty
+ - name: disk.bcache_usage
+ description: BCache Cache Usage
+ unit: "percentage"
+ chart_type: area
+ dimensions:
+ - name: avail
+ - name: disk.bcache_cache_read_races
+ description: BCache Cache Read Races
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: races
+ - name: errors
+ - name: disk.bcache
+ description: BCache Cache I/O Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: collisions
+ - name: readaheads
+ - name: disk.bcache_bypass
+ description: BCache Cache Bypass I/O Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: hits
+ - name: misses
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/mdstat
+ monitored_instance:
+ name: MD RAID
+ link: ""
+ categories:
+ - data-collection.linux-systems.disk-metrics
+ icon_filename: "hard-drive.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - raid
+ - mdadm
+ - mdstat
+ - raid
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors the status of MD RAID devices."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: mdstat_last_collected
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf
+ metric: md.disks
+ info: number of seconds since the last successful data collection
+ - name: mdstat_disks
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf
+ metric: md.disks
+ info:
+ number of devices in the down state for the ${label:device} ${label:raid_level} array. Any number > 0 indicates that the array is degraded.
+ - name: mdstat_mismatch_cnt
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf
+ metric: md.mismatch_cnt
+ info: number of unsynchronized blocks for the ${label:device} ${label:raid_level} array
+ - name: mdstat_nonredundant_last_collected
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/mdstat.conf
+ metric: md.nonredundant
+ info: number of seconds since the last successful data collection
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: md.health
+ description: Faulty Devices In MD
+ unit: "failed disks"
+ chart_type: line
+ dimensions:
+ - name: a dimension per md array
+ - name: md array
+ description: ""
+ labels:
+ - name: device
+ description: TBD
+ - name: raid_level
+ description: TBD
+ metrics:
+ - name: md.disks
+ description: Disks Stats
+ unit: "disks"
+ chart_type: stacked
+ dimensions:
+ - name: inuse
+ - name: down
+ - name: md.mismatch_cnt
+ description: Mismatch Count
+ unit: "unsynchronized blocks"
+ chart_type: line
+ dimensions:
+ - name: count
+ - name: md.status
+ description: Current Status
+ unit: "percent"
+ chart_type: line
+ dimensions:
+ - name: check
+ - name: resync
+ - name: recovery
+ - name: reshape
+ - name: md.expected_time_until_operation_finish
+ description: Approximate Time Until Finish
+ unit: "seconds"
+ chart_type: line
+ dimensions:
+ - name: finish_in
+ - name: md.operation_speed
+ description: Operation Speed
+ unit: "KiB/s"
+ chart_type: line
+ dimensions:
+ - name: speed
+ - name: md.nonredundant
+ description: Nonredundant Array Availability
+ unit: "boolean"
+ chart_type: line
+ dimensions:
+ - name: available
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/dev
+ monitored_instance:
+ name: Network interfaces
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - network interfaces
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "Monitor network interface metrics about bandwidth, state, errors and more."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: interface_speed
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.net
+ info: network interface ${label:device} current speed
+ os: "*"
+ - name: 1m_received_traffic_overflow
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.net
+ info: average inbound utilization for the network interface ${label:device} over the last minute
+ os: "linux"
+ - name: 1m_sent_traffic_overflow
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.net
+ info: average outbound utilization for the network interface ${label:device} over the last minute
+ os: "linux"
+ - name: inbound_packets_dropped_ratio
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.drops
+ info: ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes
+ os: "linux"
+ - name: outbound_packets_dropped_ratio
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.drops
+ info: ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes
+ os: "linux"
+ - name: wifi_inbound_packets_dropped_ratio
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.drops
+ info: ratio of inbound dropped packets for the network interface ${label:device} over the last 10 minutes
+ os: "linux"
+ - name: wifi_outbound_packets_dropped_ratio
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.drops
+ info: ratio of outbound dropped packets for the network interface ${label:device} over the last 10 minutes
+ os: "linux"
+ - name: 1m_received_packets_rate
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.packets
+ info: average number of packets received by the network interface ${label:device} over the last minute
+ os: "linux freebsd"
+ - name: 10s_received_packets_storm
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.packets
+ info: ratio of average number of received packets for the network interface ${label:device} over the last 10 seconds, compared to the rate over the last minute
+ os: "linux freebsd"
+ - name: 10min_fifo_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/net.conf
+ metric: net.fifo
+ info: number of FIFO errors for the network interface ${label:device} in the last 10 minutes
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.net
+ description: Physical Network Interfaces Aggregated Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: network device
+ description: ""
+ labels:
+ - name: interface_type
+ description: TBD
+ - name: device
+ description: TBD
+ metrics:
+ - name: net.net
+ description: Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: net.speed
+ description: Interface Speed
+ unit: "kilobits/s"
+ chart_type: line
+ dimensions:
+ - name: speed
+ - name: net.duplex
+ description: Interface Duplex State
+ unit: "state"
+ chart_type: line
+ dimensions:
+ - name: full
+ - name: half
+ - name: unknown
+ - name: net.operstate
+ description: Interface Operational State
+ unit: "state"
+ chart_type: line
+ dimensions:
+ - name: up
+ - name: down
+ - name: notpresent
+ - name: lowerlayerdown
+ - name: testing
+ - name: dormant
+ - name: unknown
+ - name: net.carrier
+ description: Interface Physical Link State
+ unit: "state"
+ chart_type: line
+ dimensions:
+ - name: up
+ - name: down
+ - name: net.mtu
+ description: Interface MTU
+ unit: "octets"
+ chart_type: line
+ dimensions:
+ - name: mtu
+ - name: net.packets
+ description: Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: multicast
+ - name: net.errors
+ description: Interface Errors
+ unit: "errors/s"
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: net.drops
+ description: Interface Drops
+ unit: "drops/s"
+ chart_type: line
+ dimensions:
+ - name: inbound
+ - name: outbound
+ - name: net.fifo
+ description: Interface FIFO Buffer Errors
+ unit: "errors"
+ chart_type: line
+ dimensions:
+ - name: receive
+ - name: transmit
+ - name: net.compressed
+ description: Compressed Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: net.events
+ description: Network Interface Events
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: frames
+ - name: collisions
+ - name: carrier
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/wireless
+ monitored_instance:
+ name: Wireless network interfaces
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - wireless devices
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "Monitor wireless devices with metrics about status, link quality, signal level, noise level and more."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: wireless device
+ description: ""
+ labels: []
+ metrics:
+ - name: wireless.status
+ description: Internal status reported by interface.
+ unit: "status"
+ chart_type: line
+ dimensions:
+ - name: status
+ - name: wireless.link_quality
+ description: Overall quality of the link. This is an aggregate value, and depends on the driver and hardware.
+ unit: "value"
+ chart_type: line
+ dimensions:
+ - name: link_quality
+ - name: wireless.signal_level
+ description:
+ The signal level is the wireless signal power level received by the wireless client. The closer the value is to 0, the stronger the
+ signal.
+ unit: "dBm"
+ chart_type: line
+ dimensions:
+ - name: signal_level
+ - name: wireless.noise_level
+ description:
+ The noise level indicates the amount of background noise in your environment. The closer the value to 0, the greater the noise level.
+ unit: "dBm"
+ chart_type: line
+ dimensions:
+ - name: noise_level
+ - name: wireless.discarded_packets
+ description: Packet discarded in the wireless adapter due to wireless specific problems.
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: nwid
+ - name: crypt
+ - name: frag
+ - name: retry
+ - name: misc
+ - name: wireless.missed_beacons
+ description: Number of missed beacons.
+ unit: "frames/s"
+ chart_type: line
+ dimensions:
+ - name: missed_beacons
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/class/infiniband
+ monitored_instance:
+ name: InfiniBand
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - infiniband
+ - rdma
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors InfiniBand network inteface statistics."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: infiniband port
+ description: ""
+ labels: []
+ metrics:
+ - name: ib.bytes
+ description: Bandwidth usage
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: Received
+ - name: Sent
+ - name: ib.packets
+ description: Packets Statistics
+ unit: "packets/s"
+ chart_type: area
+ dimensions:
+ - name: Received
+ - name: Sent
+ - name: Mcast_rcvd
+ - name: Mcast_sent
+ - name: Ucast_rcvd
+ - name: Ucast_sent
+ - name: ib.errors
+ description: Error Counters
+ unit: "errors/s"
+ chart_type: line
+ dimensions:
+ - name: Pkts_malformated
+ - name: Pkts_rcvd_discarded
+ - name: Pkts_sent_discarded
+ - name: Tick_Wait_to_send
+ - name: Pkts_missed_resource
+ - name: Buffer_overrun
+ - name: Link_Downed
+ - name: Link_recovered
+ - name: Link_integrity_err
+ - name: Link_minor_errors
+ - name: Pkts_rcvd_with_EBP
+ - name: Pkts_rcvd_discarded_by_switch
+ - name: Pkts_sent_discarded_by_switch
+ - name: ib.hwerrors
+ description: Hardware Errors
+ unit: "errors/s"
+ chart_type: line
+ dimensions:
+ - name: Duplicated_packets
+ - name: Pkt_Seq_Num_gap
+ - name: Ack_timer_expired
+ - name: Drop_missing_buffer
+ - name: Drop_out_of_sequence
+ - name: NAK_sequence_rcvd
+ - name: CQE_err_Req
+ - name: CQE_err_Resp
+ - name: CQE_Flushed_err_Req
+ - name: CQE_Flushed_err_Resp
+ - name: Remote_access_err_Req
+ - name: Remote_access_err_Resp
+ - name: Remote_invalid_req
+ - name: Local_length_err_Resp
+ - name: RNR_NAK_Packets
+ - name: CNP_Pkts_ignored
+ - name: RoCE_ICRC_Errors
+ - name: ib.hwpackets
+ description: Hardware Packets Statistics
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: RoCEv2_Congestion_sent
+ - name: RoCEv2_Congestion_rcvd
+ - name: IB_Congestion_handled
+ - name: ATOMIC_req_rcvd
+ - name: Connection_req_rcvd
+ - name: Read_req_rcvd
+ - name: Write_req_rcvd
+ - name: RoCE_retrans_adaptive
+ - name: RoCE_retrans_timeout
+ - name: RoCE_slow_restart
+ - name: RoCE_slow_restart_congestion
+ - name: RoCE_slow_restart_count
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/netstat
+ monitored_instance:
+ name: Network statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - ip
+ - udp
+ - udplite
+ - icmp
+ - netstat
+ - snmp
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides metrics from the `netstat`, `snmp` and `snmp6` modules."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: 1m_tcp_syn_queue_drops
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf
+ metric: ip.tcp_syn_queue
+ info: average number of SYN requests was dropped due to the full TCP SYN queue over the last minute (SYN cookies were not enabled)
+ os: "linux"
+ - name: 1m_tcp_syn_queue_cookies
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf
+ metric: ip.tcp_syn_queue
+ info: average number of sent SYN cookies due to the full TCP SYN queue over the last minute
+ os: "linux"
+ - name: 1m_tcp_accept_queue_overflows
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf
+ metric: ip.tcp_accept_queue
+ info: average number of overflows in the TCP accept queue over the last minute
+ os: "linux"
+ - name: 1m_tcp_accept_queue_drops
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_listen.conf
+ metric: ip.tcp_accept_queue
+ info: average number of dropped packets in the TCP accept queue over the last minute
+ os: "linux"
+ - name: tcp_connections
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_conn.conf
+ metric: ip.tcpsock
+ info: TCP connections utilization
+ os: "linux"
+ - name: 1m_ip_tcp_resets_sent
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf
+ metric: ip.tcphandshake
+ info: average number of sent TCP RESETS over the last minute
+ os: "linux"
+ - name: 10s_ip_tcp_resets_sent
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf
+ metric: ip.tcphandshake
+ info:
+ average number of sent TCP RESETS over the last 10 seconds. This can indicate a port scan, or that a service running on this host has
+ crashed. Netdata will not send a clear notification for this alarm.
+ os: "linux"
+ - name: 1m_ip_tcp_resets_received
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf
+ metric: ip.tcphandshake
+ info: average number of received TCP RESETS over the last minute
+ os: "linux freebsd"
+ - name: 10s_ip_tcp_resets_received
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_resets.conf
+ metric: ip.tcphandshake
+ info:
+ average number of received TCP RESETS over the last 10 seconds. This can be an indication that a service this host needs has crashed.
+ Netdata will not send a clear notification for this alarm.
+ os: "linux freebsd"
+ - name: 1m_ipv4_udp_receive_buffer_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf
+ metric: ipv4.udperrors
+ info: average number of UDP receive buffer errors over the last minute
+ os: "linux freebsd"
+ - name: 1m_ipv4_udp_send_buffer_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/udp_errors.conf
+ metric: ipv4.udperrors
+ info: average number of UDP send buffer errors over the last minute
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: system.ip
+ description: IPv4 Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ip.tcpmemorypressures
+ description: TCP Memory Pressures
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: pressures
+ - name: ip.tcpconnaborts
+ description: TCP Connection Aborts
+ unit: "connections/s"
+ chart_type: line
+ dimensions:
+ - name: baddata
+ - name: userclosed
+ - name: nomemory
+ - name: timeout
+ - name: linger
+ - name: failed
+ - name: ip.tcpreorders
+ description: TCP Reordered Packets by Detection Method
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: timestamp
+ - name: sack
+ - name: fack
+ - name: reno
+ - name: ip.tcpofo
+ description: TCP Out-Of-Order Queue
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: inqueue
+ - name: dropped
+ - name: merged
+ - name: pruned
+ - name: ip.tcpsyncookies
+ description: TCP SYN Cookies
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: failed
+ - name: ip.tcp_syn_queue
+ description: TCP SYN Queue Issues
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: drops
+ - name: cookies
+ - name: ip.tcp_accept_queue
+ description: TCP Accept Queue Issues
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: overflows
+ - name: drops
+ - name: ip.tcpsock
+ description: IPv4 TCP Connections
+ unit: "active connections"
+ chart_type: line
+ dimensions:
+ - name: connections
+ - name: ip.tcppackets
+ description: IPv4 TCP Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ip.tcperrors
+ description: IPv4 TCP Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InErrs
+ - name: InCsumErrors
+ - name: RetransSegs
+ - name: ip.tcpopens
+ description: IPv4 TCP Opens
+ unit: "connections/s"
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: passive
+ - name: ip.tcphandshake
+ description: IPv4 TCP Handshake Issues
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: EstabResets
+ - name: OutRsts
+ - name: AttemptFails
+ - name: SynRetrans
+ - name: ipv4.packets
+ description: IPv4 Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: forwarded
+ - name: delivered
+ - name: ipv4.errors
+ description: IPv4 Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InDiscards
+ - name: OutDiscards
+ - name: InNoRoutes
+ - name: OutNoRoutes
+ - name: InHdrErrors
+ - name: InAddrErrors
+ - name: InTruncatedPkts
+ - name: InCsumErrors
+ - name: ipc4.bcast
+ description: IP Broadcast Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.bcastpkts
+ description: IP Broadcast Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.mcast
+ description: IPv4 Multicast Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.mcastpkts
+ description: IP Multicast Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.icmp
+ description: IPv4 ICMP Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.icmpmsg
+ description: IPv4 ICMP Messages
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InEchoReps
+ - name: OutEchoReps
+ - name: InDestUnreachs
+ - name: OutDestUnreachs
+ - name: InRedirects
+ - name: OutRedirects
+ - name: InEchos
+ - name: OutEchos
+ - name: InRouterAdvert
+ - name: OutRouterAdvert
+ - name: InRouterSelect
+ - name: OutRouterSelect
+ - name: InTimeExcds
+ - name: OutTimeExcds
+ - name: InParmProbs
+ - name: OutParmProbs
+ - name: InTimestamps
+ - name: OutTimestamps
+ - name: InTimestampReps
+ - name: OutTimestampReps
+ - name: ipv4.icmp_errors
+ description: IPv4 ICMP Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InErrors
+ - name: OutErrors
+ - name: InCsumErrors
+ - name: ipv4.udppackets
+ description: IPv4 UDP Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.udperrors
+ description: IPv4 UDP Errors
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: RcvbufErrors
+ - name: SndbufErrors
+ - name: InErrors
+ - name: NoPorts
+ - name: InCsumErrors
+ - name: IgnoredMulti
+ - name: ipv4.udplite
+ description: IPv4 UDPLite Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv4.udplite_errors
+ description: IPv4 UDPLite Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: RcvbufErrors
+ - name: SndbufErrors
+ - name: InErrors
+ - name: NoPorts
+ - name: InCsumErrors
+ - name: IgnoredMulti
+ - name: ipv4.ecnpkts
+ description: IP ECN Statistics
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: CEP
+ - name: NoECTP
+ - name: ECTP0
+ - name: ECTP1
+ - name: ipv4.fragsin
+ description: IPv4 Fragments Reassembly
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: ok
+ - name: failed
+ - name: all
+ - name: ipv4.fragsout
+ description: IPv4 Fragments Sent
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: ok
+ - name: failed
+ - name: created
+ - name: system.ipv6
+ description: IPv6 Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.packets
+ description: IPv6 Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: forwarded
+ - name: delivers
+ - name: ipv6.errors
+ description: IPv6 Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InDiscards
+ - name: OutDiscards
+ - name: InHdrErrors
+ - name: InAddrErrors
+ - name: InUnknownProtos
+ - name: InTooBigErrors
+ - name: InTruncatedPkts
+ - name: InNoRoutes
+ - name: OutNoRoutes
+ - name: ipv6.bcast
+ description: IPv6 Broadcast Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.mcast
+ description: IPv6 Multicast Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.mcastpkts
+ description: IPv6 Multicast Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.udppackets
+ description: IPv6 UDP Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.udperrors
+ description: IPv6 UDP Errors
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: RcvbufErrors
+ - name: SndbufErrors
+ - name: InErrors
+ - name: NoPorts
+ - name: InCsumErrors
+ - name: IgnoredMulti
+ - name: ipv6.udplitepackets
+ description: IPv6 UDPlite Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.udpliteerrors
+ description: IPv6 UDP Lite Errors
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: RcvbufErrors
+ - name: SndbufErrors
+ - name: InErrors
+ - name: NoPorts
+ - name: InCsumErrors
+ - name: ipv6.icmp
+ description: IPv6 ICMP Messages
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.icmpredir
+ description: IPv6 ICMP Redirects
+ unit: "redirects/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.icmperrors
+ description: IPv6 ICMP Errors
+ unit: "errors/s"
+ chart_type: line
+ dimensions:
+ - name: InErrors
+ - name: OutErrors
+ - name: InCsumErrors
+ - name: InDestUnreachs
+ - name: InPktTooBigs
+ - name: InTimeExcds
+ - name: InParmProblems
+ - name: OutDestUnreachs
+ - name: OutPktTooBigs
+ - name: OutTimeExcds
+ - name: OutParmProblems
+ - name: ipv6.icmpechos
+ description: IPv6 ICMP Echo
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: InEchos
+ - name: OutEchos
+ - name: InEchoReplies
+ - name: OutEchoReplies
+ - name: ipv6.groupmemb
+ description: IPv6 ICMP Group Membership
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: InQueries
+ - name: OutQueries
+ - name: InResponses
+ - name: OutResponses
+ - name: InReductions
+ - name: OutReductions
+ - name: ipv6.icmprouter
+ description: IPv6 Router Messages
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: InSolicits
+ - name: OutSolicits
+ - name: InAdvertisements
+ - name: OutAdvertisements
+ - name: ipv6.icmpneighbor
+ description: IPv6 Neighbor Messages
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: InSolicits
+ - name: OutSolicits
+ - name: InAdvertisements
+ - name: OutAdvertisements
+ - name: ipv6.icmpmldv2
+ description: IPv6 ICMP MLDv2 Reports
+ unit: "reports/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipv6.icmptypes
+ description: IPv6 ICMP Types
+ unit: "messages/s"
+ chart_type: line
+ dimensions:
+ - name: InType1
+ - name: InType128
+ - name: InType129
+ - name: InType136
+ - name: OutType1
+ - name: OutType128
+ - name: OutType129
+ - name: OutType133
+ - name: OutType135
+ - name: OutType143
+ - name: ipv6.ect
+ description: IPv6 ECT Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InNoECTPkts
+ - name: InECT1Pkts
+ - name: InECT0Pkts
+ - name: InCEPkts
+ - name: ipv6.ect
+ description: IPv6 ECT Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: InNoECTPkts
+ - name: InECT1Pkts
+ - name: InECT0Pkts
+ - name: InCEPkts
+ - name: ipv6.fragsin
+ description: IPv6 Fragments Reassembly
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: ok
+ - name: failed
+ - name: timeout
+ - name: all
+ - name: ipv6.fragsout
+ description: IPv6 Fragments Sent
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: ok
+ - name: failed
+ - name: all
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/sockstat
+ monitored_instance:
+ name: Socket statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - sockets
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides socket statistics."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: tcp_orphans
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_orphans.conf
+ metric: ipv4.sockstat_tcp_sockets
+ info: orphan IPv4 TCP sockets utilization
+ os: "linux"
+ - name: tcp_memory
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/tcp_mem.conf
+ metric: ipv4.sockstat_tcp_mem
+ info: TCP memory utilization
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: ip.sockstat_sockets
+ description: Sockets used for all address families
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: used
+ - name: ipv4.sockstat_tcp_sockets
+ description: IPv4 TCP Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: alloc
+ - name: orphan
+ - name: inuse
+ - name: timewait
+ - name: ipv4.sockstat_tcp_mem
+ description: IPv4 TCP Sockets Memory
+ unit: "KiB"
+ chart_type: area
+ dimensions:
+ - name: mem
+ - name: ipv4.sockstat_udp_sockets
+ description: IPv4 UDP Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv4.sockstat_udp_mem
+ description: IPv4 UDP Sockets Memory
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: mem
+ - name: ipv4.sockstat_udplite_sockets
+ description: IPv4 UDPLITE Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv4.sockstat_raw_sockets
+ description: IPv4 RAW Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv4.sockstat_frag_sockets
+ description: IPv4 FRAG Sockets
+ unit: "fragments"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv4.sockstat_frag_mem
+ description: IPv4 FRAG Sockets Memory
+ unit: "KiB"
+ chart_type: area
+ dimensions:
+ - name: mem
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/sockstat6
+ monitored_instance:
+ name: IPv6 Socket Statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - ipv6 sockets
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides IPv6 socket statistics."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: ipv6.sockstat6_tcp_sockets
+ description: IPv6 TCP Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv6.sockstat6_udp_sockets
+ description: IPv6 UDP Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv6.sockstat6_udplite_sockets
+ description: IPv6 UDPLITE Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv6.sockstat6_raw_sockets
+ description: IPv6 RAW Sockets
+ unit: "sockets"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - name: ipv6.sockstat6_frag_sockets
+ description: IPv6 FRAG Sockets
+ unit: "fragments"
+ chart_type: line
+ dimensions:
+ - name: inuse
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/ip_vs_stats
+ monitored_instance:
+ name: IP Virtual Server
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - ip virtual server
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors IP Virtual Server statistics"
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: ipvs.sockets
+ description: IPVS New Connections
+ unit: "connections/s"
+ chart_type: line
+ dimensions:
+ - name: connections
+ - name: ipvs.packets
+ description: IPVS Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: ipvs.net
+ description: IPVS Bandwidth
+ unit: "kilobits/s"
+ chart_type: area
+ dimensions:
+ - name: received
+ - name: sent
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/rpc/nfs
+ monitored_instance:
+ name: NFS Client
+ link: ""
+ categories:
+ - data-collection.linux-systems.filesystem-metrics.nfs
+ icon_filename: "nfs.png"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - nfs client
+ - filesystem
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides statistics from the Linux kernel's NFS Client."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: nfs.net
+ description: NFS Client Network
+ unit: "operations/s"
+ chart_type: stacked
+ dimensions:
+ - name: udp
+ - name: tcp
+ - name: nfs.rpc
+ description: NFS Client Remote Procedure Calls Statistics
+ unit: "calls/s"
+ chart_type: line
+ dimensions:
+ - name: calls
+ - name: retransmits
+ - name: auth_refresh
+ - name: nfs.proc2
+ description: NFS v2 Client Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc2 call
+ - name: nfs.proc3
+ description: NFS v3 Client Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc3 call
+ - name: nfs.proc4
+ description: NFS v4 Client Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc4 call
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/rpc/nfsd
+ monitored_instance:
+ name: NFS Server
+ link: ""
+ categories:
+ - data-collection.linux-systems.filesystem-metrics.nfs
+ icon_filename: "nfs.png"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - nfs server
+ - filesystem
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides statistics from the Linux kernel's NFS Server."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: nfsd.readcache
+ description: NFS Server Read Cache
+ unit: "reads/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: nocache
+ - name: nfsd.filehandles
+ description: NFS Server File Handles
+ unit: "handles/s"
+ chart_type: line
+ dimensions:
+ - name: stale
+ - name: nfsd.io
+ description: NFS Server I/O
+ unit: "kilobytes/s"
+ chart_type: area
+ dimensions:
+ - name: read
+ - name: write
+ - name: nfsd.threads
+ description: NFS Server Threads
+ unit: "threads"
+ chart_type: line
+ dimensions:
+ - name: threads
+ - name: nfsd.net
+ description: NFS Server Network Statistics
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: udp
+ - name: tcp
+ - name: nfsd.rpc
+ description: NFS Server Remote Procedure Calls Statistics
+ unit: "calls/s"
+ chart_type: line
+ dimensions:
+ - name: calls
+ - name: bad_format
+ - name: bad_auth
+ - name: nfsd.proc2
+ description: NFS v2 Server Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc2 call
+ - name: nfsd.proc3
+ description: NFS v3 Server Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc3 call
+ - name: nfsd.proc4
+ description: NFS v4 Server Remote Procedure Calls
+ unit: "calls/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc4 call
+ - name: nfsd.proc4ops
+ description: NFS v4 Server Operations
+ unit: "operations/s"
+ chart_type: stacked
+ dimensions:
+ - name: a dimension per proc4 operation
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/sctp/snmp
+ monitored_instance:
+ name: SCTP Statistics
+ link: ""
+ categories:
+ - data-collection.linux-systems.network-metrics
+ icon_filename: "network-wired.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - sctp
+ - stream control transmission protocol
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides statistics about the Stream Control Transmission Protocol (SCTP)."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: sctp.established
+ description: SCTP current total number of established associations
+ unit: "associations"
+ chart_type: line
+ dimensions:
+ - name: established
+ - name: sctp.transitions
+ description: SCTP Association Transitions
+ unit: "transitions/s"
+ chart_type: line
+ dimensions:
+ - name: active
+ - name: passive
+ - name: aborted
+ - name: shutdown
+ - name: sctp.packets
+ description: SCTP Packets
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: sent
+ - name: sctp.packet_errors
+ description: SCTP Packet Errors
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: invalid
+ - name: checksum
+ - name: sctp.fragmentation
+ description: SCTP Fragmentation
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: reassembled
+ - name: fragmented
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/stat/nf_conntrack
+ monitored_instance:
+ name: Conntrack
+ link: ""
+ categories:
+ - data-collection.linux-systems.firewall-metrics
+ icon_filename: "firewall.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - connection tracking mechanism
+ - netfilter
+ - conntrack
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors the connection tracking mechanism of Netfilter in the Linux Kernel."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: netfilter_conntrack_full
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/netfilter.conf
+ metric: netfilter.conntrack_sockets
+ info: netfilter connection tracker table size utilization
+ os: "linux"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: netfilter.conntrack_sockets
+ description: Connection Tracker Connections
+ unit: "active connections"
+ chart_type: line
+ dimensions:
+ - name: connections
+ - name: netfilter.conntrack_new
+ description: Connection Tracker New Connections
+ unit: "connections/s"
+ chart_type: line
+ dimensions:
+ - name: new
+ - name: ignore
+ - name: invalid
+ - name: netfilter.conntrack_changes
+ description: Connection Tracker Changes
+ unit: "changes/s"
+ chart_type: line
+ dimensions:
+ - name: inserted
+ - name: deleted
+ - name: delete_list
+ - name: netfilter.conntrack_expect
+ description: Connection Tracker Expectations
+ unit: "expectations/s"
+ chart_type: line
+ dimensions:
+ - name: created
+ - name: deleted
+ - name: new
+ - name: netfilter.conntrack_search
+ description: Connection Tracker Searches
+ unit: "searches/s"
+ chart_type: line
+ dimensions:
+ - name: searched
+ - name: restarted
+ - name: found
+ - name: netfilter.conntrack_errors
+ description: Connection Tracker Errors
+ unit: "events/s"
+ chart_type: line
+ dimensions:
+ - name: icmp_error
+ - name: error_failed
+ - name: drop
+ - name: early_drop
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/net/stat/synproxy
+ monitored_instance:
+ name: Synproxy
+ link: ""
+ categories:
+ - data-collection.linux-systems.firewall-metrics
+ icon_filename: "firewall.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - synproxy
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides statistics about the Synproxy netfilter module."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: netfilter.synproxy_syn_received
+ description: SYNPROXY SYN Packets received
+ unit: "packets/s"
+ chart_type: line
+ dimensions:
+ - name: received
+ - name: netfilter.synproxy_conn_reopened
+ description: SYNPROXY Connections Reopened
+ unit: "connections/s"
+ chart_type: line
+ dimensions:
+ - name: reopened
+ - name: netfilter.synproxy_cookies
+ description: SYNPROXY TCP Cookies
+ unit: "cookies/s"
+ chart_type: line
+ dimensions:
+ - name: valid
+ - name: invalid
+ - name: retransmits
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/spl/kstat/zfs
+ monitored_instance:
+ name: ZFS Pools
+ link: ""
+ categories:
+ - data-collection.linux-systems.filesystem-metrics.zfs
+ icon_filename: "filesystem.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - zfs pools
+ - pools
+ - zfs
+ - filesystem
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides metrics about the state of ZFS pools."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: zfs_pool_state_warn
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf
+ metric: zfspool.state
+ info: ZFS pool ${label:pool} state is degraded
+ - name: zfs_pool_state_crit
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf
+ metric: zfspool.state
+ info: ZFS pool ${label:pool} state is faulted or unavail
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: zfs pool
+ description: ""
+ labels:
+ - name: pool
+ description: TBD
+ metrics:
+ - name: zfspool.state
+ description: ZFS pool state
+ unit: "boolean"
+ chart_type: line
+ dimensions:
+ - name: online
+ - name: degraded
+ - name: faulted
+ - name: offline
+ - name: removed
+ - name: unavail
+ - name: suspended
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /proc/spl/kstat/zfs/arcstats
+ monitored_instance:
+ name: ZFS Adaptive Replacement Cache
+ link: ""
+ categories:
+ - data-collection.linux-systems.filesystem-metrics.zfs
+ icon_filename: "filesystem.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - zfs arc
+ - arc
+ - zfs
+ - filesystem
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors ZFS Adadptive Replacement Cache (ARC) statistics."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: zfs_memory_throttle
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/zfs.conf
+ metric: zfs.memory_ops
+ info: number of times ZFS had to limit the ARC growth in the last 10 minutes
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: global
+ description: ""
+ labels: []
+ metrics:
+ - name: zfs.arc_size
+ description: ZFS ARC Size
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: arcsz
+ - name: target
+ - name: min
+ - name: max
+ - name: zfs.l2_size
+ description: ZFS L2 ARC Size
+ unit: "MiB"
+ chart_type: area
+ dimensions:
+ - name: actual
+ - name: size
+ - name: zfs.reads
+ description: ZFS Reads
+ unit: "reads/s"
+ chart_type: area
+ dimensions:
+ - name: arc
+ - name: demand
+ - name: prefetch
+ - name: metadata
+ - name: l2
+ - name: zfs.bytes
+ description: ZFS ARC L2 Read/Write Rate
+ unit: "KiB/s"
+ chart_type: area
+ dimensions:
+ - name: read
+ - name: write
+ - name: zfs.hits
+ description: ZFS ARC Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.hits_rate
+ description: ZFS ARC Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.dhits
+ description: ZFS Demand Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.dhits_rate
+ description: ZFS Demand Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.phits
+ description: ZFS Prefetch Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.phits_rate
+ description: ZFS Prefetch Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.mhits
+ description: ZFS Metadata Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.mhits_rate
+ description: ZFS Metadata Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.l2hits
+ description: ZFS L2 Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.l2hits_rate
+ description: ZFS L2 Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.list_hits
+ description: ZFS List Hits
+ unit: "hits/s"
+ chart_type: area
+ dimensions:
+ - name: mfu
+ - name: mfu_ghost
+ - name: mru
+ - name: mru_ghost
+ - name: zfs.arc_size_breakdown
+ description: ZFS ARC Size Breakdown
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: recent
+ - name: frequent
+ - name: zfs.memory_ops
+ description: ZFS Memory Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: direct
+ - name: throttled
+ - name: indirect
+ - name: zfs.important_ops
+ description: ZFS Important Operations
+ unit: "operations/s"
+ chart_type: line
+ dimensions:
+ - name: evict_skip
+ - name: deleted
+ - name: mutex_miss
+ - name: hash_collisions
+ - name: zfs.actual_hits
+ description: ZFS Actual Cache Hits
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.actual_hits_rate
+ description: ZFS Actual Cache Hits Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.demand_data_hits
+ description: ZFS Data Demand Efficiency
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.demand_data_hits_rate
+ description: ZFS Data Demand Efficiency Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.prefetch_data_hits
+ description: ZFS Data Prefetch Efficiency
+ unit: "percentage"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.prefetch_data_hits_rate
+ description: ZFS Data Prefetch Efficiency Rate
+ unit: "events/s"
+ chart_type: stacked
+ dimensions:
+ - name: hits
+ - name: misses
+ - name: zfs.hash_elements
+ description: ZFS ARC Hash Elements
+ unit: "elements"
+ chart_type: line
+ dimensions:
+ - name: current
+ - name: max
+ - name: zfs.hash_chains
+ description: ZFS ARC Hash Chains
+ unit: "chains"
+ chart_type: line
+ dimensions:
+ - name: current
+ - name: max
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/fs/btrfs
+ monitored_instance:
+ name: BTRFS
+ link: ""
+ categories:
+ - data-collection.linux-systems.filesystem-metrics.btrfs
+ icon_filename: "filesystem.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - btrfs
+ - filesystem
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration provides usage and error statistics from the BTRFS filesystem."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: btrfs_allocated
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.disk
+ info: percentage of allocated BTRFS physical disk space
+ os: "*"
+ - name: btrfs_data
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.data
+ info: utilization of BTRFS data space
+ os: "*"
+ - name: btrfs_metadata
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.metadata
+ info: utilization of BTRFS metadata space
+ os: "*"
+ - name: btrfs_system
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.system
+ info: utilization of BTRFS system space
+ os: "*"
+ - name: btrfs_device_read_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.device_errors
+ info: number of encountered BTRFS read errors
+ os: "*"
+ - name: btrfs_device_write_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.device_errors
+ info: number of encountered BTRFS write errors
+ os: "*"
+ - name: btrfs_device_flush_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.device_errors
+ info: number of encountered BTRFS flush errors
+ os: "*"
+ - name: btrfs_device_corruption_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.device_errors
+ info: number of encountered BTRFS corruption errors
+ os: "*"
+ - name: btrfs_device_generation_errors
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/btrfs.conf
+ metric: btrfs.device_errors
+ info: number of encountered BTRFS generation errors
+ os: "*"
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: btrfs filesystem
+ description: ""
+ labels:
+ - name: filesystem_uuid
+ description: TBD
+ - name: filesystem_label
+ description: TBD
+ metrics:
+ - name: btrfs.disk
+ description: BTRFS Physical Disk Allocation
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: unallocated
+ - name: data_free
+ - name: data_used
+ - name: meta_free
+ - name: meta_used
+ - name: sys_free
+ - name: sys_used
+ - name: btrfs.data
+ description: BTRFS Data Allocation
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: btrfs.metadata
+ description: BTRFS Metadata Allocation
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: reserved
+ - name: btrfs.system
+ description: BTRFS System Allocation
+ unit: "MiB"
+ chart_type: stacked
+ dimensions:
+ - name: free
+ - name: used
+ - name: btrfs.commits
+ description: BTRFS Commits
+ unit: "commits"
+ chart_type: line
+ dimensions:
+ - name: commits
+ - name: btrfs.commits_perc_time
+ description: BTRFS Commits Time Share
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: commits
+ - name: btrfs.commit_timings
+ description: BTRFS Commit Timings
+ unit: "ms"
+ chart_type: line
+ dimensions:
+ - name: last
+ - name: max
+ - name: btrfs device
+ description: ""
+ labels:
+ - name: device_id
+ description: TBD
+ - name: filesystem_uuid
+ description: TBD
+ - name: filesystem_label
+ description: TBD
+ metrics:
+ - name: btrfs.device_errors
+ description: BTRFS Device Errors
+ unit: "errors"
+ chart_type: line
+ dimensions:
+ - name: write_errs
+ - name: read_errs
+ - name: flush_errs
+ - name: corruption_errs
+ - name: generation_errs
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/class/power_supply
+ monitored_instance:
+ name: Power Supply
+ link: ""
+ categories:
+ - data-collection.linux-systems.power-supply-metrics
+ icon_filename: "powersupply.svg"
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - psu
+ - power supply
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors Power supply metrics, such as battery status, AC power status and more."
+ method_description: ""
+ supported_platforms:
+ include: []
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts:
+ - name: linux_power_supply_capacity
+ link: https://github.com/netdata/netdata/blob/master/src/health/health.d/linux_power_supply.conf
+ metric: powersupply.capacity
+ info: percentage of remaining power supply capacity
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: power device
+ description: ""
+ labels:
+ - name: device
+ description: TBD
+ metrics:
+ - name: powersupply.capacity
+ description: Battery capacity
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: capacity
+ - name: powersupply.charge
+ description: Battery charge
+ unit: "Ah"
+ chart_type: line
+ dimensions:
+ - name: empty_design
+ - name: empty
+ - name: now
+ - name: full
+ - name: full_design
+ - name: powersupply.energy
+ description: Battery energy
+ unit: "Wh"
+ chart_type: line
+ dimensions:
+ - name: empty_design
+ - name: empty
+ - name: now
+ - name: full
+ - name: full_design
+ - name: powersupply.voltage
+ description: Power supply voltage
+ unit: "V"
+ chart_type: line
+ dimensions:
+ - name: min_design
+ - name: min
+ - name: now
+ - name: max
+ - name: max_design
+ - meta:
+ plugin_name: proc.plugin
+ module_name: /sys/class/drm
+ monitored_instance:
+ name: AMD GPU
+ link: "https://www.amd.com"
+ categories:
+ - data-collection.hardware-devices-and-sensors
+ icon_filename: amd.svg
+ related_resources:
+ integrations:
+ list: []
+ info_provided_to_referring_integrations:
+ description: ""
+ keywords:
+ - amd
+ - gpu
+ - hardware
+ most_popular: false
+ overview:
+ data_collection:
+ metrics_description: "This integration monitors AMD GPU metrics, such as utilization, clock frequency and memory usage."
+ method_description: "It reads `/sys/class/drm` to collect metrics for every AMD GPU card instance it encounters."
+ supported_platforms:
+ include:
+ - Linux
+ exclude: []
+ multi_instance: true
+ additional_permissions:
+ description: ""
+ default_behavior:
+ auto_detection:
+ description: ""
+ limits:
+ description: ""
+ performance_impact:
+ description: ""
+ setup:
+ prerequisites:
+ list: []
+ configuration:
+ file:
+ name: ""
+ description: ""
+ options:
+ description: ""
+ folding:
+ title: ""
+ enabled: true
+ list: []
+ examples:
+ folding:
+ enabled: true
+ title: ""
+ list: []
+ troubleshooting:
+ problems:
+ list: []
+ alerts: []
+ metrics:
+ folding:
+ title: Metrics
+ enabled: false
+ description: ""
+ availability: []
+ scopes:
+ - name: gpu
+ description: "These metrics refer to the GPU."
+ labels:
+ - name: product_name
+ description: GPU product name (e.g. AMD RX 6600)
+ metrics:
+ - name: amdgpu.gpu_utilization
+ description: GPU utilization
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: utilization
+ - name: amdgpu.gpu_mem_utilization
+ description: GPU memory utilization
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: utilization
+ - name: amdgpu.gpu_clk_frequency
+ description: GPU clock frequency
+ unit: "MHz"
+ chart_type: line
+ dimensions:
+ - name: frequency
+ - name: amdgpu.gpu_mem_clk_frequency
+ description: GPU memory clock frequency
+ unit: "MHz"
+ chart_type: line
+ dimensions:
+ - name: frequency
+ - name: amdgpu.gpu_mem_vram_usage_perc
+ description: VRAM memory usage percentage
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: usage
+ - name: amdgpu.gpu_mem_vram_usage
+ description: VRAM memory usage
+ unit: "bytes"
+ chart_type: area
+ dimensions:
+ - name: free
+ - name: used
+ - name: amdgpu.gpu_mem_vis_vram_usage_perc
+ description: visible VRAM memory usage percentage
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: usage
+ - name: amdgpu.gpu_mem_vis_vram_usage
+ description: visible VRAM memory usage
+ unit: "bytes"
+ chart_type: area
+ dimensions:
+ - name: free
+ - name: used
+ - name: amdgpu.gpu_mem_gtt_usage_perc
+ description: GTT memory usage percentage
+ unit: "percentage"
+ chart_type: line
+ dimensions:
+ - name: usage
+ - name: amdgpu.gpu_mem_gtt_usage
+ description: GTT memory usage
+ unit: "bytes"
+ chart_type: area
+ dimensions:
+ - name: free
+ - name: used
diff --git a/collectors/proc.plugin/plugin_proc.c b/src/collectors/proc.plugin/plugin_proc.c
index 3f11aaf6c..7742b344f 100644
--- a/collectors/proc.plugin/plugin_proc.c
+++ b/src/collectors/proc.plugin/plugin_proc.c
@@ -157,59 +157,57 @@ void *proc_main(void *ptr)
netdev_thread, THREAD_NETDEV_NAME, NETDATA_THREAD_OPTION_JOINABLE, netdev_main, netdev_thread);
}
- netdata_thread_cleanup_push(proc_main_cleanup, ptr);
+ netdata_thread_cleanup_push(proc_main_cleanup, ptr)
+ {
+ config_get_boolean("plugin:proc", "/proc/pagetypeinfo", CONFIG_BOOLEAN_NO);
- {
- config_get_boolean("plugin:proc", "/proc/pagetypeinfo", CONFIG_BOOLEAN_NO);
+ // check the enabled status for each module
+ int i;
+ for(i = 0; proc_modules[i].name; i++) {
+ struct proc_module *pm = &proc_modules[i];
- // check the enabled status for each module
- int i;
- for(i = 0; proc_modules[i].name; i++) {
- struct proc_module *pm = &proc_modules[i];
+ pm->enabled = config_get_boolean("plugin:proc", pm->name, CONFIG_BOOLEAN_YES);
+ pm->rd = NULL;
- pm->enabled = config_get_boolean("plugin:proc", pm->name, CONFIG_BOOLEAN_YES);
- pm->rd = NULL;
-
- worker_register_job_name(i, proc_modules[i].dim);
- }
+ worker_register_job_name(i, proc_modules[i].dim);
+ }
- usec_t step = localhost->rrd_update_every * USEC_PER_SEC;
- heartbeat_t hb;
- heartbeat_init(&hb);
+ usec_t step = localhost->rrd_update_every * USEC_PER_SEC;
+ heartbeat_t hb;
+ heartbeat_init(&hb);
- inside_lxc_container = is_lxcfs_proc_mounted();
+ inside_lxc_container = is_lxcfs_proc_mounted();
#define LGS_MODULE_ID 0
- ND_LOG_STACK lgs[] = {
- [LGS_MODULE_ID] = ND_LOG_FIELD_TXT(NDF_MODULE, "proc.plugin"),
- ND_LOG_FIELD_END(),
- };
- ND_LOG_STACK_PUSH(lgs);
-
- while(service_running(SERVICE_COLLECTORS)) {
- worker_is_idle();
- usec_t hb_dt = heartbeat_next(&hb, step);
-
- if(unlikely(!service_running(SERVICE_COLLECTORS)))
- break;
-
- for(i = 0; proc_modules[i].name; i++) {
- if(unlikely(!service_running(SERVICE_COLLECTORS)))
- break;
-
- struct proc_module *pm = &proc_modules[i];
- if(unlikely(!pm->enabled))
- continue;
-
- worker_is_busy(i);
- lgs[LGS_MODULE_ID] = ND_LOG_FIELD_CB(NDF_MODULE, log_proc_module, pm);
- pm->enabled = !pm->func(localhost->rrd_update_every, hb_dt);
- lgs[LGS_MODULE_ID] = ND_LOG_FIELD_TXT(NDF_MODULE, "proc.plugin");
- }
- }
- }
+ ND_LOG_STACK lgs[] = {
+ [LGS_MODULE_ID] = ND_LOG_FIELD_TXT(NDF_MODULE, "proc.plugin"),
+ ND_LOG_FIELD_END(),
+ };
+ ND_LOG_STACK_PUSH(lgs);
+
+ while(service_running(SERVICE_COLLECTORS)) {
+ worker_is_idle();
+ usec_t hb_dt = heartbeat_next(&hb, step);
+
+ if(unlikely(!service_running(SERVICE_COLLECTORS)))
+ break;
+ for(i = 0; proc_modules[i].name; i++) {
+ if(unlikely(!service_running(SERVICE_COLLECTORS)))
+ break;
+
+ struct proc_module *pm = &proc_modules[i];
+ if(unlikely(!pm->enabled))
+ continue;
+
+ worker_is_busy(i);
+ lgs[LGS_MODULE_ID] = ND_LOG_FIELD_CB(NDF_MODULE, log_proc_module, pm);
+ pm->enabled = !pm->func(localhost->rrd_update_every, hb_dt);
+ lgs[LGS_MODULE_ID] = ND_LOG_FIELD_TXT(NDF_MODULE, "proc.plugin");
+ }
+ }
+ }
netdata_thread_cleanup_pop(1);
return NULL;
}
diff --git a/collectors/proc.plugin/plugin_proc.h b/src/collectors/proc.plugin/plugin_proc.h
index e4fc105ba..187e76a97 100644
--- a/collectors/proc.plugin/plugin_proc.h
+++ b/src/collectors/proc.plugin/plugin_proc.h
@@ -54,7 +54,7 @@ extern unsigned long long zfs_arcstats_shrinkable_cache_size_bytes;
extern bool inside_lxc_container;
// netdev renames
-void netdev_rename_device_add(
+void cgroup_rename_task_add(
const char *host_device,
const char *container_device,
const char *container_name,
@@ -62,7 +62,7 @@ void netdev_rename_device_add(
const char *ctx_prefix,
const DICTIONARY_ITEM *cgroup_netdev_link);
-void netdev_rename_device_del(const char *host_device);
+void cgroup_rename_task_device_del(const char *host_device);
#include "proc_self_mountinfo.h"
#include "proc_pressure.h"
diff --git a/collectors/proc.plugin/proc_diskstats.c b/src/collectors/proc.plugin/proc_diskstats.c
index 475d90835..4ff617ff9 100644
--- a/collectors/proc.plugin/proc_diskstats.c
+++ b/src/collectors/proc.plugin/proc_diskstats.c
@@ -213,7 +213,7 @@ static SIMPLE_PATTERN *excluded_disks = NULL;
static unsigned long long int bcache_read_number_with_units(const char *filename) {
char buffer[50 + 1];
- if(read_file(filename, buffer, 50) == 0) {
+ if(read_txt_file(filename, buffer, sizeof(buffer)) == 0) {
static int unknown_units_error = 10;
char *end = NULL;
@@ -547,9 +547,9 @@ static inline char *get_disk_model(char *device) {
char buffer[256 + 1];
snprintfz(path, sizeof(path) - 1, "%s/%s/device/model", path_to_sys_block, device);
- if(read_file(path, buffer, 256) != 0) {
+ if(read_txt_file(path, buffer, sizeof(buffer)) != 0) {
snprintfz(path, sizeof(path) - 1, "%s/%s/device/name", path_to_sys_block, device);
- if(read_file(path, buffer, 256) != 0)
+ if(read_txt_file(path, buffer, sizeof(buffer)) != 0)
return NULL;
}
@@ -565,7 +565,7 @@ static inline char *get_disk_serial(char *device) {
char buffer[256 + 1];
snprintfz(path, sizeof(path) - 1, "%s/%s/device/serial", path_to_sys_block, device);
- if(read_file(path, buffer, 256) != 0)
+ if(read_txt_file(path, buffer, sizeof(buffer)) != 0)
return NULL;
return strdupz(buffer);
@@ -778,7 +778,7 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
strncat(uuid_filename, "/dm/uuid", FILENAME_MAX - size);
char device_uuid[RRD_ID_LENGTH_MAX + 1];
- if (!read_file(uuid_filename, device_uuid, RRD_ID_LENGTH_MAX) && !strncmp(device_uuid, "LVM-", 4)) {
+ if (!read_txt_file(uuid_filename, device_uuid, sizeof(device_uuid)) && !strncmp(device_uuid, "LVM-", 4)) {
trim(device_uuid);
char chart_id[RRD_ID_LENGTH_MAX + 1];
@@ -1033,13 +1033,7 @@ static void add_labels_to_disk(struct disk *d, RRDSET *st) {
rrdlabels_add(st->rrdlabels, "device_type", get_disk_type_string(d->type), RRDLABEL_SRC_AUTO);
}
-static int diskstats_function_block_devices(BUFFER *wb, int timeout __maybe_unused, const char *function __maybe_unused,
- void *collector_data __maybe_unused,
- rrd_function_result_callback_t result_cb, void *result_cb_data,
- rrd_function_is_cancelled_cb_t is_cancelled_cb, void *is_cancelled_cb_data,
- rrd_function_register_canceller_cb_t register_canceller_cb __maybe_unused,
- void *register_canceller_cb_data __maybe_unused) {
-
+static int diskstats_function_block_devices(BUFFER *wb, const char *function __maybe_unused) {
buffer_flush(wb);
wb->content_type = CT_APPLICATION_JSON;
buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT);
@@ -1048,6 +1042,7 @@ static int diskstats_function_block_devices(BUFFER *wb, int timeout __maybe_unus
buffer_json_member_add_uint64(wb, "status", HTTP_RESP_OK);
buffer_json_member_add_string(wb, "type", "table");
buffer_json_member_add_time_t(wb, "update_every", 1);
+ buffer_json_member_add_boolean(wb, "has_history", false);
buffer_json_member_add_string(wb, "help", RRDFUNCTIONS_DISKSTATS_HELP);
buffer_json_member_add_array(wb, "data");
@@ -1318,16 +1313,7 @@ static int diskstats_function_block_devices(BUFFER *wb, int timeout __maybe_unus
buffer_json_member_add_time_t(wb, "expires", now_realtime_sec() + 1);
buffer_json_finalize(wb);
- int response = HTTP_RESP_OK;
- if(is_cancelled_cb && is_cancelled_cb(is_cancelled_cb_data)) {
- buffer_flush(wb);
- response = HTTP_RESP_CLIENT_CLOSED_REQUEST;
- }
-
- if(result_cb)
- result_cb(wb, response, result_cb_data);
-
- return response;
+ return HTTP_RESP_OK;
}
static void diskstats_cleanup_disks() {
@@ -1474,6 +1460,11 @@ int do_proc_diskstats(int update_every, usec_t dt) {
excluded_disks = simple_pattern_create(
config_get(CONFIG_SECTION_PLUGIN_PROC_DISKSTATS, "exclude disks", DEFAULT_EXCLUDED_DISKS), NULL,
SIMPLE_PATTERN_EXACT, true);
+
+ rrd_function_add_inline(localhost, NULL, "block-devices", 10,
+ RRDFUNCTIONS_PRIORITY_DEFAULT, RRDFUNCTIONS_DISKSTATS_HELP,
+ "top", HTTP_ACCESS_ANONYMOUS_DATA,
+ diskstats_function_block_devices);
}
// --------------------------------------------------------------------------
@@ -1488,12 +1479,6 @@ int do_proc_diskstats(int update_every, usec_t dt) {
ff = procfile_readall(ff);
if(unlikely(!ff)) return 0; // we return 0, so that we will retry to open it next time
- static bool add_func = true;
- if (add_func) {
- rrd_function_add(localhost, NULL, "block-devices", 10, RRDFUNCTIONS_DISKSTATS_HELP, true, diskstats_function_block_devices, NULL);
- add_func = false;
- }
-
size_t lines = procfile_lines(ff), l;
collected_number system_read_kb = 0, system_write_kb = 0;
diff --git a/collectors/proc.plugin/proc_interrupts.c b/src/collectors/proc.plugin/proc_interrupts.c
index 37071b22f..aa9bd0eb5 100644
--- a/collectors/proc.plugin/proc_interrupts.c
+++ b/src/collectors/proc.plugin/proc_interrupts.c
@@ -60,7 +60,7 @@ int do_proc_interrupts(int update_every, usec_t dt) {
struct interrupt *irrs = NULL;
if(unlikely(do_per_core == CONFIG_BOOLEAN_INVALID))
- do_per_core = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_INTERRUPTS, "interrupts per core", CONFIG_BOOLEAN_AUTO);
+ do_per_core = config_get_boolean_ondemand(CONFIG_SECTION_PLUGIN_PROC_INTERRUPTS, "interrupts per core", CONFIG_BOOLEAN_NO);
if(unlikely(!ff)) {
char filename[FILENAME_MAX + 1];
diff --git a/collectors/proc.plugin/proc_loadavg.c b/src/collectors/proc.plugin/proc_loadavg.c
index 106cf9087..c9339525e 100644
--- a/collectors/proc.plugin/proc_loadavg.c
+++ b/src/collectors/proc.plugin/proc_loadavg.c
@@ -95,7 +95,7 @@ int do_proc_loadavg(int update_every, usec_t dt) {
if(likely(do_all_processes)) {
static RRDSET *processes_chart = NULL;
static RRDDIM *rd_active = NULL;
- static const RRDSETVAR_ACQUIRED *rd_pidmax;
+ static const RRDVAR_ACQUIRED *rd_pidmax;
if(unlikely(!processes_chart)) {
processes_chart = rrdset_create_localhost(
@@ -114,11 +114,11 @@ int do_proc_loadavg(int update_every, usec_t dt) {
);
rd_active = rrddim_add(processes_chart, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
- rd_pidmax = rrdsetvar_custom_chart_variable_add_and_acquire(processes_chart, "pidmax");
+ rd_pidmax = rrdvar_chart_variable_add_and_acquire(processes_chart, "pidmax");
}
rrddim_set_by_pointer(processes_chart, rd_active, active_processes);
- rrdsetvar_custom_chart_variable_set(processes_chart, rd_pidmax, max_processes);
+ rrdvar_chart_variable_set(processes_chart, rd_pidmax, max_processes);
rrdset_done(processes_chart);
}
diff --git a/collectors/proc.plugin/proc_mdstat.c b/src/collectors/proc.plugin/proc_mdstat.c
index 3857d9ec4..3857d9ec4 100644
--- a/collectors/proc.plugin/proc_mdstat.c
+++ b/src/collectors/proc.plugin/proc_mdstat.c
diff --git a/collectors/proc.plugin/proc_meminfo.c b/src/collectors/proc.plugin/proc_meminfo.c
index a357cc782..a357cc782 100644
--- a/collectors/proc.plugin/proc_meminfo.c
+++ b/src/collectors/proc.plugin/proc_meminfo.c
diff --git a/collectors/proc.plugin/proc_net_dev.c b/src/collectors/proc.plugin/proc_net_dev.c
index b39f39683..d29bb7a72 100644
--- a/collectors/proc.plugin/proc_net_dev.c
+++ b/src/collectors/proc.plugin/proc_net_dev.c
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "plugin_proc.h"
+#include "proc_net_dev_renames.h"
#define PLUGIN_PROC_MODULE_NETDEV_NAME "/proc/net/dev"
#define CONFIG_SECTION_PLUGIN_PROC_NETDEV "plugin:" PLUGIN_PROC_CONFIG_NAME ":" PLUGIN_PROC_MODULE_NETDEV_NAME
@@ -11,10 +12,7 @@
#define READ_RETRY_PERIOD 60 // seconds
-void cgroup_netdev_reset_all(void);
-void cgroup_netdev_release(const DICTIONARY_ITEM *link);
-const void *cgroup_netdev_dup(const DICTIONARY_ITEM *link);
-void cgroup_netdev_add_bandwidth(const DICTIONARY_ITEM *link, NETDATA_DOUBLE received, NETDATA_DOUBLE sent);
+time_t double_linked_device_collect_delay_secs = 120;
enum {
NETDEV_DUPLEX_UNKNOWN,
@@ -22,8 +20,7 @@ enum {
NETDEV_DUPLEX_FULL
};
-static const char *get_duplex_string(int duplex)
-{
+static const char *get_duplex_string(int duplex) {
switch (duplex) {
case NETDEV_DUPLEX_FULL:
return "full";
@@ -44,8 +41,7 @@ enum {
NETDEV_OPERSTATE_UP
};
-static inline int get_operstate(char *operstate)
-{
+static inline int get_operstate(char *operstate) {
// As defined in https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-net
if (!strcmp(operstate, "up"))
return NETDEV_OPERSTATE_UP;
@@ -63,8 +59,7 @@ static inline int get_operstate(char *operstate)
return NETDEV_OPERSTATE_UNKNOWN;
}
-static const char *get_operstate_string(int operstate)
-{
+static const char *get_operstate_string(int operstate) {
switch (operstate) {
case NETDEV_OPERSTATE_UP:
return "up";
@@ -92,12 +87,12 @@ static struct netdev {
size_t len;
// flags
- int virtual;
- int configured;
+ bool virtual;
+ bool configured;
int enabled;
- int updated;
-
+ bool updated;
bool function_ready;
+ bool double_linked; // iflink != ifindex
time_t discover_time;
@@ -242,7 +237,7 @@ static struct netdev {
RRDDIM *rd_mtu;
char *filename_speed;
- const RRDSETVAR_ACQUIRED *chart_var_speed;
+ const RRDVAR_ACQUIRED *chart_var_speed;
char *filename_duplex;
char *filename_operstate;
@@ -251,10 +246,8 @@ static struct netdev {
const DICTIONARY_ITEM *cgroup_netdev_link;
- struct netdev *next;
-} *netdev_root = NULL, *netdev_last_used = NULL;
-
-static size_t netdev_added = 0, netdev_found = 0;
+ struct netdev *prev, *next;
+} *netdev_root = NULL;
// ----------------------------------------------------------------------------
@@ -378,133 +371,21 @@ static void netdev_free(struct netdev *d) {
freez((void *)d->filename_carrier);
freez((void *)d->filename_mtu);
freez((void *)d);
- netdev_added--;
}
-// ----------------------------------------------------------------------------
-// netdev renames
-
-static struct netdev_rename {
- const char *host_device;
- uint32_t hash;
-
- const char *container_device;
- const char *container_name;
- const char *ctx_prefix;
-
- RRDLABELS *chart_labels;
-
- int processed;
-
- const DICTIONARY_ITEM *cgroup_netdev_link;
-
- struct netdev_rename *next;
-} *netdev_rename_root = NULL;
-
-static int netdev_pending_renames = 0;
-static netdata_mutex_t netdev_rename_mutex = NETDATA_MUTEX_INITIALIZER;
-static netdata_mutex_t netdev_dev_mutex = NETDATA_MUTEX_INITIALIZER;
-
-static struct netdev_rename *netdev_rename_find(const char *host_device, uint32_t hash) {
- struct netdev_rename *r;
+static netdata_mutex_t netdev_mutex = NETDATA_MUTEX_INITIALIZER;
- for(r = netdev_rename_root; r ; r = r->next)
- if(r->hash == hash && !strcmp(host_device, r->host_device))
- return r;
-
- return NULL;
-}
-
-// other threads can call this function to register a rename to a netdev
-void netdev_rename_device_add(
- const char *host_device,
- const char *container_device,
- const char *container_name,
- RRDLABELS *labels,
- const char *ctx_prefix,
- const DICTIONARY_ITEM *cgroup_netdev_link)
-{
- netdata_mutex_lock(&netdev_rename_mutex);
-
- uint32_t hash = simple_hash(host_device);
- struct netdev_rename *r = netdev_rename_find(host_device, hash);
- if(!r) {
- r = callocz(1, sizeof(struct netdev_rename));
- r->host_device = strdupz(host_device);
- r->container_device = strdupz(container_device);
- r->container_name = strdupz(container_name);
- r->ctx_prefix = strdupz(ctx_prefix);
- r->chart_labels = rrdlabels_create();
- rrdlabels_migrate_to_these(r->chart_labels, labels);
- r->hash = hash;
- r->next = netdev_rename_root;
- r->processed = 0;
- r->cgroup_netdev_link = cgroup_netdev_link;
-
- netdev_rename_root = r;
- netdev_pending_renames++;
- collector_info("CGROUP: registered network interface rename for '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
- }
- else {
- if(strcmp(r->container_device, container_device) != 0 || strcmp(r->container_name, container_name) != 0) {
- freez((void *) r->container_device);
- freez((void *) r->container_name);
-
- r->container_device = strdupz(container_device);
- r->container_name = strdupz(container_name);
-
- rrdlabels_migrate_to_these(r->chart_labels, labels);
-
- r->processed = 0;
- r->cgroup_netdev_link = cgroup_netdev_link;
-
- netdev_pending_renames++;
- collector_info("CGROUP: altered network interface rename for '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
- }
- }
-
- netdata_mutex_unlock(&netdev_rename_mutex);
-}
-
-// other threads can call this function to delete a rename to a netdev
-void netdev_rename_device_del(const char *host_device) {
- netdata_mutex_lock(&netdev_rename_mutex);
-
- struct netdev_rename *r, *last = NULL;
-
- uint32_t hash = simple_hash(host_device);
- for(r = netdev_rename_root; r ; last = r, r = r->next) {
- if (r->hash == hash && !strcmp(host_device, r->host_device)) {
- if (netdev_rename_root == r)
- netdev_rename_root = r->next;
- else if (last)
- last->next = r->next;
-
- if(!r->processed)
- netdev_pending_renames--;
-
- collector_info("CGROUP: unregistered network interface rename for '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
-
- freez((void *) r->host_device);
- freez((void *) r->container_name);
- freez((void *) r->container_device);
- freez((void *) r->ctx_prefix);
- rrdlabels_destroy(r->chart_labels);
- cgroup_netdev_release(r->cgroup_netdev_link);
- freez((void *) r);
- break;
- }
- }
-
- netdata_mutex_unlock(&netdev_rename_mutex);
-}
+// ----------------------------------------------------------------------------
-static inline void netdev_rename_cgroup(struct netdev *d, struct netdev_rename *r) {
- collector_info("CGROUP: renaming network interface '%s' as '%s' under '%s'", r->host_device, r->container_device, r->container_name);
+static inline void netdev_rename(struct netdev *d, struct rename_task *r) {
+ collector_info("CGROUP: renaming network interface '%s' as '%s' under '%s'", d->name, r->container_device, r->container_name);
netdev_charts_release(d);
netdev_free_chart_strings(d);
+
+ cgroup_netdev_release(d->cgroup_netdev_link);
d->cgroup_netdev_link = cgroup_netdev_dup(r->cgroup_netdev_link);
+ d->discover_time = 0;
char buffer[RRD_ID_LENGTH_MAX + 1];
@@ -581,42 +462,18 @@ static inline void netdev_rename_cgroup(struct netdev *d, struct netdev_rename *
d->flipped = 1;
}
-static inline void netdev_rename(struct netdev *d) {
- struct netdev_rename *r = netdev_rename_find(d->name, d->hash);
- if(unlikely(r && !r->processed)) {
- netdev_rename_cgroup(d, r);
- r->processed = 1;
- d->discover_time = 0;
- netdev_pending_renames--;
+static void netdev_rename_this_device(struct netdev *d) {
+ const DICTIONARY_ITEM *item = dictionary_get_and_acquire_item(netdev_renames, d->name);
+ if(item) {
+ struct rename_task *r = dictionary_acquired_item_value(item);
+ netdev_rename(d, r);
+ dictionary_acquired_item_release(netdev_renames, item);
}
}
-static inline void netdev_rename_lock(struct netdev *d) {
- netdata_mutex_lock(&netdev_rename_mutex);
- netdev_rename(d);
- netdata_mutex_unlock(&netdev_rename_mutex);
-}
-
-static inline void netdev_rename_all_lock(void) {
- netdata_mutex_lock(&netdev_rename_mutex);
-
- struct netdev *d;
- for(d = netdev_root; d ; d = d->next)
- netdev_rename(d);
-
- netdev_pending_renames = 0;
- netdata_mutex_unlock(&netdev_rename_mutex);
-}
-
// ----------------------------------------------------------------------------
-int netdev_function_net_interfaces(BUFFER *wb, int timeout __maybe_unused, const char *function __maybe_unused,
- void *collector_data __maybe_unused,
- rrd_function_result_callback_t result_cb, void *result_cb_data,
- rrd_function_is_cancelled_cb_t is_cancelled_cb, void *is_cancelled_cb_data,
- rrd_function_register_canceller_cb_t register_canceller_cb __maybe_unused,
- void *register_canceller_cb_data __maybe_unused) {
-
+int netdev_function_net_interfaces(BUFFER *wb, const char *function __maybe_unused) {
buffer_flush(wb);
wb->content_type = CT_APPLICATION_JSON;
buffer_json_initialize(wb, "\"", "\"", 0, true, BUFFER_JSON_OPTIONS_DEFAULT);
@@ -625,6 +482,7 @@ int netdev_function_net_interfaces(BUFFER *wb, int timeout __maybe_unused, const
buffer_json_member_add_uint64(wb, "status", HTTP_RESP_OK);
buffer_json_member_add_string(wb, "type", "table");
buffer_json_member_add_time_t(wb, "update_every", 1);
+ buffer_json_member_add_boolean(wb, "has_history", false);
buffer_json_member_add_string(wb, "help", RRDFUNCTIONS_NETDEV_HELP);
buffer_json_member_add_array(wb, "data");
@@ -637,11 +495,11 @@ int netdev_function_net_interfaces(BUFFER *wb, int timeout __maybe_unused, const
double max_drops_rx = 0.0;
double max_drops_tx = 0.0;
- netdata_mutex_lock(&netdev_dev_mutex);
+ netdata_mutex_lock(&netdev_mutex);
RRDDIM *rd = NULL;
- for (struct netdev *d = netdev_root; d != netdev_last_used; d = d->next) {
+ for (struct netdev *d = netdev_root; d ; d = d->next) {
if (unlikely(!d->function_ready))
continue;
@@ -701,7 +559,7 @@ int netdev_function_net_interfaces(BUFFER *wb, int timeout __maybe_unused, const
buffer_json_array_close(wb);
}
- netdata_mutex_unlock(&netdev_dev_mutex);
+ netdata_mutex_unlock(&netdev_mutex);
buffer_json_array_close(wb); // data
buffer_json_member_add_object(wb, "columns");
@@ -910,49 +768,26 @@ int netdev_function_net_interfaces(BUFFER *wb, int timeout __maybe_unused, const
buffer_json_member_add_time_t(wb, "expires", now_realtime_sec() + 1);
buffer_json_finalize(wb);
- int response = HTTP_RESP_OK;
- if(is_cancelled_cb && is_cancelled_cb(is_cancelled_cb_data)) {
- buffer_flush(wb);
- response = HTTP_RESP_CLIENT_CLOSED_REQUEST;
- }
-
- if(result_cb)
- result_cb(wb, response, result_cb_data);
-
- return response;
+ return HTTP_RESP_OK;
}
// netdev data collection
static void netdev_cleanup() {
- if(likely(netdev_found == netdev_added)) return;
-
- netdev_added = 0;
- struct netdev *d = netdev_root, *last = NULL;
+ struct netdev *d = netdev_root;
while(d) {
if(unlikely(!d->updated)) {
- // collector_info("Removing network device '%s', linked after '%s'", d->name, last?last->name:"ROOT");
-
- if(netdev_last_used == d)
- netdev_last_used = last;
-
- struct netdev *t = d;
+ struct netdev *next = d->next; // keep the next, to continue;
- if(d == netdev_root || !last)
- netdev_root = d = d->next;
-
- else
- last->next = d = d->next;
+ DOUBLE_LINKED_LIST_REMOVE_ITEM_UNSAFE(netdev_root, d, prev, next);
- t->next = NULL;
- netdev_free(t);
- }
- else {
- netdev_added++;
- last = d;
- d->updated = 0;
- d = d->next;
+ netdev_free(d);
+ d = next;
+ continue;
}
+
+ d->updated = false;
+ d = d->next;
}
}
@@ -962,19 +797,9 @@ static struct netdev *get_netdev(const char *name) {
uint32_t hash = simple_hash(name);
// search it, from the last position to the end
- for(d = netdev_last_used ; d ; d = d->next) {
- if(unlikely(hash == d->hash && !strcmp(name, d->name))) {
- netdev_last_used = d->next;
- return d;
- }
- }
-
- // search it from the beginning to the last position we used
- for(d = netdev_root ; d != netdev_last_used ; d = d->next) {
- if(unlikely(hash == d->hash && !strcmp(name, d->name))) {
- netdev_last_used = d->next;
+ for(d = netdev_root ; d ; d = d->next) {
+ if(unlikely(hash == d->hash && !strcmp(name, d->name)))
return d;
- }
}
// create a new one
@@ -984,6 +809,7 @@ static struct netdev *get_netdev(const char *name) {
d->len = strlen(d->name);
d->chart_labels = rrdlabels_create();
d->function_ready = false;
+ d->double_linked = false;
d->chart_type_net_bytes = strdupz("net");
d->chart_type_net_compressed = strdupz("net_compressed");
@@ -1027,23 +853,26 @@ static struct netdev *get_netdev(const char *name) {
d->chart_family = strdupz(d->name);
d->priority = NETDATA_CHART_PRIO_FIRST_NET_IFACE;
- netdev_rename_lock(d);
-
- netdev_added++;
-
- // link it to the end
- if(netdev_root) {
- struct netdev *e;
- for(e = netdev_root; e->next ; e = e->next) ;
- e->next = d;
- }
- else
- netdev_root = d;
+ DOUBLE_LINKED_LIST_APPEND_ITEM_UNSAFE(netdev_root, d, prev, next);
return d;
}
-#define NETDEV_VIRTUAL_COLLECT_DELAY 15 // 1 full run of the cgroups discovery thread (10 secs by default)
+static bool is_iface_double_linked(struct netdev *d) {
+ char filename[FILENAME_MAX + 1];
+ unsigned long long iflink = 0;
+ unsigned long long ifindex = 0;
+
+ snprintfz(filename, FILENAME_MAX, "%s/sys/class/net/%s/iflink", netdata_configured_host_prefix, d->name);
+ if (read_single_number_file(filename, &iflink))
+ return false;
+
+ snprintfz(filename, FILENAME_MAX, "%s/sys/class/net/%s/ifindex", netdata_configured_host_prefix, d->name);
+ if (read_single_number_file(filename, &ifindex))
+ return false;
+
+ return iflink != ifindex;
+}
int do_proc_net_dev(int update_every, usec_t dt) {
(void)dt;
@@ -1102,6 +931,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
disabled_list = simple_pattern_create(
config_get(CONFIG_SECTION_PLUGIN_PROC_NETDEV, "disable by default interfaces matching",
"lo fireqos* *-ifb fwpr* fwbr* fwln*"), NULL, SIMPLE_PATTERN_EXACT, true);
+
+ netdev_renames_init();
}
if(unlikely(!ff)) {
@@ -1112,12 +943,6 @@ int do_proc_net_dev(int update_every, usec_t dt) {
ff = procfile_readall(ff);
if(unlikely(!ff)) return 0; // we return 0, so that we will retry to open it next time
- // rename all the devices, if we have pending renames
- if(unlikely(netdev_pending_renames))
- netdev_rename_all_lock();
-
- netdev_found = 0;
-
kernel_uint_t system_rbytes = 0;
kernel_uint_t system_tbytes = 0;
@@ -1133,14 +958,13 @@ int do_proc_net_dev(int update_every, usec_t dt) {
if(name[len - 1] == ':') name[len - 1] = '\0';
struct netdev *d = get_netdev(name);
- d->updated = 1;
- netdev_found++;
+ d->updated = true;
if(unlikely(!d->configured)) {
- // this is the first time we see this interface
+ // the first time we see this interface
// remember we configured it
- d->configured = 1;
+ d->configured = true;
d->discover_time = now;
d->enabled = enable_new_interfaces;
@@ -1151,12 +975,12 @@ int do_proc_net_dev(int update_every, usec_t dt) {
char buf[FILENAME_MAX + 1];
snprintfz(buf, FILENAME_MAX, path_to_sys_devices_virtual_net, d->name);
- d->virtual = likely(access(buf, R_OK) == 0) ? 1 : 0;
+ d->virtual = likely(access(buf, R_OK) == 0) ? true : false;
// At least on Proxmox inside LXC: eth0 is virtual.
// Virtual interfaces are not taken into account in system.net calculations
if (inside_lxc_container && d->virtual && strncmp(d->name, "eth", 3) == 0)
- d->virtual = 0;
+ d->virtual = false;
if (d->virtual)
rrdlabels_add(d->chart_labels, "interface_type", "virtual", RRDLABEL_SRC_AUTO);
@@ -1193,6 +1017,8 @@ int do_proc_net_dev(int update_every, usec_t dt) {
if(d->enabled == CONFIG_BOOLEAN_NO)
continue;
+ d->double_linked = is_iface_double_linked(d);
+
d->do_bandwidth = do_bandwidth;
d->do_packets = do_packets;
d->do_errors = do_errors;
@@ -1235,13 +1061,15 @@ int do_proc_net_dev(int update_every, usec_t dt) {
if(unlikely(!d->enabled))
continue;
+ if(!d->cgroup_netdev_link)
+ netdev_rename_this_device(d);
+
// See https://github.com/netdata/netdata/issues/15206
// This is necessary to prevent the creation of charts for virtual interfaces that will later be
// recreated as container interfaces (create container) or
// rediscovered and recreated only to be deleted almost immediately (stop/remove container)
- if (d->virtual && (now - d->discover_time < NETDEV_VIRTUAL_COLLECT_DELAY)) {
+ if (d->double_linked && d->virtual && (now - d->discover_time < double_linked_device_collect_delay_secs))
continue;
- }
if(likely(d->do_bandwidth != CONFIG_BOOLEAN_NO || !d->virtual)) {
d->rbytes = str2kernel_uint_t(procfile_lineword(ff, l, 1));
@@ -1313,7 +1141,7 @@ int do_proc_net_dev(int update_every, usec_t dt) {
now_monotonic_sec() - d->duplex_file_lost_time > READ_RETRY_PERIOD)) {
char buffer[STATE_LENGTH_MAX + 1];
- if (read_file(d->filename_duplex, buffer, STATE_LENGTH_MAX)) {
+ if (read_txt_file(d->filename_duplex, buffer, sizeof(buffer))) {
if (d->duplex_file_exists)
collector_error("Cannot refresh interface %s duplex state by reading '%s'.", d->name, d->filename_duplex);
d->duplex_file_exists = 0;
@@ -1337,7 +1165,7 @@ int do_proc_net_dev(int update_every, usec_t dt) {
if(d->do_operstate != CONFIG_BOOLEAN_NO && d->filename_operstate) {
char buffer[STATE_LENGTH_MAX + 1], *trimmed_buffer;
- if (read_file(d->filename_operstate, buffer, STATE_LENGTH_MAX)) {
+ if (read_txt_file(d->filename_operstate, buffer, sizeof(buffer))) {
collector_error(
"Cannot refresh %s operstate by reading '%s'. Will not update its status anymore.",
d->name, d->filename_operstate);
@@ -1414,20 +1242,20 @@ int do_proc_net_dev(int update_every, usec_t dt) {
d->flipped ? d->rd_tbytes->collector.last_stored_value : -d->rd_rbytes->collector.last_stored_value,
d->flipped ? -d->rd_rbytes->collector.last_stored_value : d->rd_tbytes->collector.last_stored_value);
- // update the interface speed
- if(d->filename_speed) {
- if(unlikely(!d->chart_var_speed)) {
- d->chart_var_speed =
- rrdsetvar_custom_chart_variable_add_and_acquire(d->st_bandwidth, "nic_speed_max");
- if(!d->chart_var_speed) {
- collector_error(
- "Cannot create interface %s chart variable 'nic_speed_max'. Will not update its speed anymore.",
- d->name);
- freez(d->filename_speed);
- d->filename_speed = NULL;
- }
+ if(unlikely(!d->chart_var_speed)) {
+ d->chart_var_speed = rrdvar_chart_variable_add_and_acquire(d->st_bandwidth, "nic_speed_max");
+ if(!d->chart_var_speed) {
+ collector_error(
+ "Cannot create interface %s chart variable 'nic_speed_max'. Will not update its speed anymore.",
+ d->name);
+ }
+ else {
+ rrdvar_chart_variable_set(d->st_bandwidth, d->chart_var_speed, NAN);
}
+ }
+ // update the interface speed
+ if(d->filename_speed) {
if (d->filename_speed && d->chart_var_speed) {
int ret = 0;
@@ -1473,7 +1301,7 @@ int do_proc_net_dev(int update_every, usec_t dt) {
rrdset_done(d->st_speed);
}
- rrdsetvar_custom_chart_variable_set(
+ rrdvar_chart_variable_set(
d->st_bandwidth, d->chart_var_speed, (NETDATA_DOUBLE)d->speed * KILOBITS_IN_A_MEGABIT);
if (d->speed) {
@@ -1924,32 +1752,36 @@ void *netdev_main(void *ptr)
worker_register("NETDEV");
worker_register_job_name(0, "netdev");
- netdata_thread_cleanup_push(netdev_main_cleanup, ptr);
+ if (getenv("KUBERNETES_SERVICE_HOST") != NULL && getenv("KUBERNETES_SERVICE_PORT") != NULL)
+ double_linked_device_collect_delay_secs = 300;
- rrd_collector_started();
- rrd_function_add(localhost, NULL, "network-interfaces", 10, RRDFUNCTIONS_NETDEV_HELP, true, netdev_function_net_interfaces, NULL);
+ rrd_function_add_inline(localhost, NULL, "network-interfaces", 10,
+ RRDFUNCTIONS_PRIORITY_DEFAULT, RRDFUNCTIONS_NETDEV_HELP,
+ "top", HTTP_ACCESS_ANONYMOUS_DATA,
+ netdev_function_net_interfaces);
- usec_t step = localhost->rrd_update_every * USEC_PER_SEC;
- heartbeat_t hb;
- heartbeat_init(&hb);
+ netdata_thread_cleanup_push(netdev_main_cleanup, ptr) {
+ usec_t step = localhost->rrd_update_every * USEC_PER_SEC;
+ heartbeat_t hb;
+ heartbeat_init(&hb);
- while (service_running(SERVICE_COLLECTORS)) {
- worker_is_idle();
- usec_t hb_dt = heartbeat_next(&hb, step);
+ while (service_running(SERVICE_COLLECTORS)) {
+ worker_is_idle();
+ usec_t hb_dt = heartbeat_next(&hb, step);
- if (unlikely(!service_running(SERVICE_COLLECTORS)))
- break;
+ if (unlikely(!service_running(SERVICE_COLLECTORS)))
+ break;
- cgroup_netdev_reset_all();
+ cgroup_netdev_reset_all();
- worker_is_busy(0);
+ worker_is_busy(0);
- netdata_mutex_lock(&netdev_dev_mutex);
- if(do_proc_net_dev(localhost->rrd_update_every, hb_dt))
- break;
- netdata_mutex_unlock(&netdev_dev_mutex);
+ netdata_mutex_lock(&netdev_mutex);
+ if (do_proc_net_dev(localhost->rrd_update_every, hb_dt))
+ break;
+ netdata_mutex_unlock(&netdev_mutex);
+ }
}
-
netdata_thread_cleanup_pop(1);
return NULL;
diff --git a/src/collectors/proc.plugin/proc_net_dev_renames.c b/src/collectors/proc.plugin/proc_net_dev_renames.c
new file mode 100644
index 000000000..fb50ce66c
--- /dev/null
+++ b/src/collectors/proc.plugin/proc_net_dev_renames.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "proc_net_dev_renames.h"
+
+DICTIONARY *netdev_renames = NULL;
+
+static void dictionary_netdev_rename_delete_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
+ struct rename_task *r = value;
+
+ cgroup_netdev_release(r->cgroup_netdev_link);
+ rrdlabels_destroy(r->chart_labels);
+ freez((void *) r->container_name);
+ freez((void *) r->container_device);
+ freez((void *) r->ctx_prefix);
+}
+
+void netdev_renames_init(void) {
+ static SPINLOCK spinlock = NETDATA_SPINLOCK_INITIALIZER;
+
+ spinlock_lock(&spinlock);
+ if(!netdev_renames) {
+ netdev_renames = dictionary_create_advanced(DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct rename_task));
+ dictionary_register_delete_callback(netdev_renames, dictionary_netdev_rename_delete_cb, NULL);
+ }
+ spinlock_unlock(&spinlock);
+}
+
+void cgroup_rename_task_add(
+ const char *host_device,
+ const char *container_device,
+ const char *container_name,
+ RRDLABELS *labels,
+ const char *ctx_prefix,
+ const DICTIONARY_ITEM *cgroup_netdev_link)
+{
+ netdev_renames_init();
+
+ struct rename_task tmp = {
+ .container_device = strdupz(container_device),
+ .container_name = strdupz(container_name),
+ .ctx_prefix = strdupz(ctx_prefix),
+ .chart_labels = rrdlabels_create(),
+ .cgroup_netdev_link = cgroup_netdev_link,
+ };
+ rrdlabels_migrate_to_these(tmp.chart_labels, labels);
+
+ dictionary_set(netdev_renames, host_device, &tmp, sizeof(tmp));
+}
+
+// other threads can call this function to delete a rename to a netdev
+void cgroup_rename_task_device_del(const char *host_device) {
+ dictionary_del(netdev_renames, host_device);
+}
diff --git a/src/collectors/proc.plugin/proc_net_dev_renames.h b/src/collectors/proc.plugin/proc_net_dev_renames.h
new file mode 100644
index 000000000..51f3cfd94
--- /dev/null
+++ b/src/collectors/proc.plugin/proc_net_dev_renames.h
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_PROC_NET_DEV_RENAMES_H
+#define NETDATA_PROC_NET_DEV_RENAMES_H
+
+#include "plugin_proc.h"
+
+extern DICTIONARY *netdev_renames;
+
+struct rename_task {
+ const char *container_device;
+ const char *container_name;
+ const char *ctx_prefix;
+ RRDLABELS *chart_labels;
+ const DICTIONARY_ITEM *cgroup_netdev_link;
+};
+
+void netdev_renames_init(void);
+
+void cgroup_netdev_reset_all(void);
+void cgroup_netdev_release(const DICTIONARY_ITEM *link);
+const void *cgroup_netdev_dup(const DICTIONARY_ITEM *link);
+void cgroup_netdev_add_bandwidth(const DICTIONARY_ITEM *link, NETDATA_DOUBLE received, NETDATA_DOUBLE sent);
+
+
+#endif //NETDATA_PROC_NET_DEV_RENAMES_H
diff --git a/collectors/proc.plugin/proc_net_ip_vs_stats.c b/src/collectors/proc.plugin/proc_net_ip_vs_stats.c
index 2b9c9332e..2b9c9332e 100644
--- a/collectors/proc.plugin/proc_net_ip_vs_stats.c
+++ b/src/collectors/proc.plugin/proc_net_ip_vs_stats.c
diff --git a/collectors/proc.plugin/proc_net_netstat.c b/src/collectors/proc.plugin/proc_net_netstat.c
index 170daad5d..4a999803f 100644
--- a/collectors/proc.plugin/proc_net_netstat.c
+++ b/src/collectors/proc.plugin/proc_net_netstat.c
@@ -1647,7 +1647,7 @@ int do_proc_net_netstat(int update_every, usec_t dt) {
arl_expect(arl_udplite, "InCsumErrors", &snmp_root.udplite_InCsumErrors);
arl_expect(arl_udplite, "IgnoredMulti", &snmp_root.udplite_IgnoredMulti);
- tcp_max_connections_var = rrdvar_custom_host_variable_add_and_acquire(localhost, "tcp_max_connections");
+ tcp_max_connections_var = rrdvar_host_variable_add_and_acquire(localhost, "tcp_max_connections");
}
size_t lines, l, words;
@@ -2713,7 +2713,7 @@ int do_proc_net_netstat(int update_every, usec_t dt) {
// snmp Tcp charts
// this is smart enough to update it, only when it is changed
- rrdvar_custom_host_variable_set(localhost, tcp_max_connections_var, snmp_root.tcp_MaxConn);
+ rrdvar_host_variable_set(localhost, tcp_max_connections_var, snmp_root.tcp_MaxConn);
// see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
if(do_tcp_sockets == CONFIG_BOOLEAN_YES || (do_tcp_sockets == CONFIG_BOOLEAN_AUTO &&
diff --git a/collectors/proc.plugin/proc_net_rpc_nfs.c b/src/collectors/proc.plugin/proc_net_rpc_nfs.c
index d6547636e..d6547636e 100644
--- a/collectors/proc.plugin/proc_net_rpc_nfs.c
+++ b/src/collectors/proc.plugin/proc_net_rpc_nfs.c
diff --git a/collectors/proc.plugin/proc_net_rpc_nfsd.c b/src/collectors/proc.plugin/proc_net_rpc_nfsd.c
index 1d9127a03..1d9127a03 100644
--- a/collectors/proc.plugin/proc_net_rpc_nfsd.c
+++ b/src/collectors/proc.plugin/proc_net_rpc_nfsd.c
diff --git a/collectors/proc.plugin/proc_net_sctp_snmp.c b/src/collectors/proc.plugin/proc_net_sctp_snmp.c
index e67143e69..e67143e69 100644
--- a/collectors/proc.plugin/proc_net_sctp_snmp.c
+++ b/src/collectors/proc.plugin/proc_net_sctp_snmp.c
diff --git a/collectors/proc.plugin/proc_net_sockstat.c b/src/collectors/proc.plugin/proc_net_sockstat.c
index b0feab5fa..4be67d61e 100644
--- a/collectors/proc.plugin/proc_net_sockstat.c
+++ b/src/collectors/proc.plugin/proc_net_sockstat.c
@@ -32,9 +32,9 @@ static int read_tcp_mem(void) {
*tcp_mem_high_threshold = NULL;
if(unlikely(!tcp_mem_low_threshold)) {
- tcp_mem_low_threshold = rrdvar_custom_host_variable_add_and_acquire(localhost, "tcp_mem_low");
- tcp_mem_pressure_threshold = rrdvar_custom_host_variable_add_and_acquire(localhost, "tcp_mem_pressure");
- tcp_mem_high_threshold = rrdvar_custom_host_variable_add_and_acquire(localhost, "tcp_mem_high");
+ tcp_mem_low_threshold = rrdvar_host_variable_add_and_acquire(localhost, "tcp_mem_low");
+ tcp_mem_pressure_threshold = rrdvar_host_variable_add_and_acquire(localhost, "tcp_mem_pressure");
+ tcp_mem_high_threshold = rrdvar_host_variable_add_and_acquire(localhost, "tcp_mem_high");
}
if(unlikely(!filename)) {
@@ -44,7 +44,7 @@ static int read_tcp_mem(void) {
}
char buffer[200 + 1], *start, *end;
- if(read_file(filename, buffer, 200) != 0) return 1;
+ if(read_txt_file(filename, buffer, sizeof(buffer)) != 0) return 1;
buffer[200] = '\0';
unsigned long long low = 0, pressure = 0, high = 0;
@@ -60,9 +60,9 @@ static int read_tcp_mem(void) {
// fprintf(stderr, "TCP MEM low = %llu, pressure = %llu, high = %llu\n", low, pressure, high);
- rrdvar_custom_host_variable_set(localhost, tcp_mem_low_threshold, low * sysconf(_SC_PAGESIZE) / 1024.0);
- rrdvar_custom_host_variable_set(localhost, tcp_mem_pressure_threshold, pressure * sysconf(_SC_PAGESIZE) / 1024.0);
- rrdvar_custom_host_variable_set(localhost, tcp_mem_high_threshold, high * sysconf(_SC_PAGESIZE) / 1024.0);
+ rrdvar_host_variable_set(localhost, tcp_mem_low_threshold, low * sysconf(_SC_PAGESIZE) / 1024.0);
+ rrdvar_host_variable_set(localhost, tcp_mem_pressure_threshold, pressure * sysconf(_SC_PAGESIZE) / 1024.0);
+ rrdvar_host_variable_set(localhost, tcp_mem_high_threshold, high * sysconf(_SC_PAGESIZE) / 1024.0);
return 0;
}
@@ -81,9 +81,9 @@ static kernel_uint_t read_tcp_max_orphans(void) {
if(read_single_number_file(filename, &tcp_max_orphans) == 0) {
if(unlikely(!tcp_max_orphans_var))
- tcp_max_orphans_var = rrdvar_custom_host_variable_add_and_acquire(localhost, "tcp_max_orphans");
+ tcp_max_orphans_var = rrdvar_host_variable_add_and_acquire(localhost, "tcp_max_orphans");
- rrdvar_custom_host_variable_set(localhost, tcp_max_orphans_var, tcp_max_orphans);
+ rrdvar_host_variable_set(localhost, tcp_max_orphans_var, tcp_max_orphans);
return tcp_max_orphans;
}
diff --git a/collectors/proc.plugin/proc_net_sockstat6.c b/src/collectors/proc.plugin/proc_net_sockstat6.c
index 16e0248af..16e0248af 100644
--- a/collectors/proc.plugin/proc_net_sockstat6.c
+++ b/src/collectors/proc.plugin/proc_net_sockstat6.c
diff --git a/collectors/proc.plugin/proc_net_softnet_stat.c b/src/collectors/proc.plugin/proc_net_softnet_stat.c
index 2f01b8859..a225a9f0d 100644
--- a/collectors/proc.plugin/proc_net_softnet_stat.c
+++ b/src/collectors/proc.plugin/proc_net_softnet_stat.c
@@ -24,7 +24,10 @@ int do_proc_net_softnet_stat(int update_every, usec_t dt) {
static size_t allocated_lines = 0, allocated_columns = 0;
static uint32_t *data = NULL;
- if(unlikely(do_per_core == -1)) do_per_core = config_get_boolean("plugin:proc:/proc/net/softnet_stat", "softnet_stat per core", 1);
+ if (unlikely(do_per_core == -1)) {
+ do_per_core =
+ config_get_boolean("plugin:proc:/proc/net/softnet_stat", "softnet_stat per core", CONFIG_BOOLEAN_NO);
+ }
if(unlikely(!ff)) {
char filename[FILENAME_MAX + 1];
diff --git a/collectors/proc.plugin/proc_net_stat_conntrack.c b/src/collectors/proc.plugin/proc_net_stat_conntrack.c
index e8fbdbb66..6951cba79 100644
--- a/collectors/proc.plugin/proc_net_stat_conntrack.c
+++ b/src/collectors/proc.plugin/proc_net_stat_conntrack.c
@@ -50,7 +50,7 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
if(!do_sockets && !read_full)
return 1;
- rrdvar_max = rrdvar_custom_host_variable_add_and_acquire(localhost, "netfilter_conntrack_max");
+ rrdvar_max = rrdvar_host_variable_add_and_acquire(localhost, "netfilter_conntrack_max");
}
if(likely(read_full)) {
@@ -125,7 +125,7 @@ int do_proc_net_stat_conntrack(int update_every, usec_t dt) {
unsigned long long max;
if(likely(!read_single_number_file(nf_conntrack_max_filename, &max)))
- rrdvar_custom_host_variable_set(localhost, rrdvar_max, max);
+ rrdvar_host_variable_set(localhost, rrdvar_max, max);
}
// --------------------------------------------------------------------
diff --git a/collectors/proc.plugin/proc_net_stat_synproxy.c b/src/collectors/proc.plugin/proc_net_stat_synproxy.c
index e23a0ab7b..e23a0ab7b 100644
--- a/collectors/proc.plugin/proc_net_stat_synproxy.c
+++ b/src/collectors/proc.plugin/proc_net_stat_synproxy.c
diff --git a/collectors/proc.plugin/proc_net_wireless.c b/src/collectors/proc.plugin/proc_net_wireless.c
index c7efa3335..c7efa3335 100644
--- a/collectors/proc.plugin/proc_net_wireless.c
+++ b/src/collectors/proc.plugin/proc_net_wireless.c
diff --git a/collectors/proc.plugin/proc_pagetypeinfo.c b/src/collectors/proc.plugin/proc_pagetypeinfo.c
index fc5496c63..fc5496c63 100644
--- a/collectors/proc.plugin/proc_pagetypeinfo.c
+++ b/src/collectors/proc.plugin/proc_pagetypeinfo.c
diff --git a/collectors/proc.plugin/proc_pressure.c b/src/collectors/proc.plugin/proc_pressure.c
index 4037e60ac..4037e60ac 100644
--- a/collectors/proc.plugin/proc_pressure.c
+++ b/src/collectors/proc.plugin/proc_pressure.c
diff --git a/collectors/proc.plugin/proc_pressure.h b/src/collectors/proc.plugin/proc_pressure.h
index 2e5cab2cc..2e5cab2cc 100644
--- a/collectors/proc.plugin/proc_pressure.h
+++ b/src/collectors/proc.plugin/proc_pressure.h
diff --git a/collectors/proc.plugin/proc_self_mountinfo.c b/src/collectors/proc.plugin/proc_self_mountinfo.c
index 194791603..194791603 100644
--- a/collectors/proc.plugin/proc_self_mountinfo.c
+++ b/src/collectors/proc.plugin/proc_self_mountinfo.c
diff --git a/collectors/proc.plugin/proc_self_mountinfo.h b/src/collectors/proc.plugin/proc_self_mountinfo.h
index 4bd24d2d2..4bd24d2d2 100644
--- a/collectors/proc.plugin/proc_self_mountinfo.h
+++ b/src/collectors/proc.plugin/proc_self_mountinfo.h
diff --git a/collectors/proc.plugin/proc_softirqs.c b/src/collectors/proc.plugin/proc_softirqs.c
index 5f0502f66..7968a2287 100644
--- a/collectors/proc.plugin/proc_softirqs.c
+++ b/src/collectors/proc.plugin/proc_softirqs.c
@@ -59,7 +59,7 @@ int do_proc_softirqs(int update_every, usec_t dt) {
struct interrupt *irrs = NULL;
if(unlikely(do_per_core == CONFIG_BOOLEAN_INVALID))
- do_per_core = config_get_boolean_ondemand("plugin:proc:/proc/softirqs", "interrupts per core", CONFIG_BOOLEAN_AUTO);
+ do_per_core = config_get_boolean_ondemand("plugin:proc:/proc/softirqs", "interrupts per core", CONFIG_BOOLEAN_NO);
if(unlikely(!ff)) {
char filename[FILENAME_MAX + 1];
diff --git a/collectors/proc.plugin/proc_spl_kstat_zfs.c b/src/collectors/proc.plugin/proc_spl_kstat_zfs.c
index 27178b60f..e6b12c31f 100644
--- a/collectors/proc.plugin/proc_spl_kstat_zfs.c
+++ b/src/collectors/proc.plugin/proc_spl_kstat_zfs.c
@@ -6,7 +6,7 @@
#define ZFS_PROC_ARCSTATS "/proc/spl/kstat/zfs/arcstats"
#define ZFS_PROC_POOLS "/proc/spl/kstat/zfs"
-#define STATE_SIZE 9
+#define STATE_SIZE 20
#define MAX_CHART_ID 256
extern struct arcstats arcstats;
@@ -272,7 +272,7 @@ int update_zfs_pool_state_chart(const DICTIONARY_ITEM *item, void *pool_p, void
"zfspool",
chart_id,
NULL,
- name,
+ "state",
"zfspool.state",
"ZFS pool state",
"boolean",
@@ -357,7 +357,7 @@ int do_proc_spl_kstat_zfs_pool_state(int update_every, usec_t dt)
if (unlikely(!pool)) {
struct zfs_pool new_zfs_pool = {};
pool = dictionary_set(zfs_pools, de->d_name, &new_zfs_pool, sizeof(struct zfs_pool));
- };
+ }
pool->updated = 1;
@@ -378,7 +378,7 @@ int do_proc_spl_kstat_zfs_pool_state(int update_every, usec_t dt)
snprintfz(filename, FILENAME_MAX, "%s/%s/state", dirname, de->d_name);
char state[STATE_SIZE + 1];
- int ret = read_file(filename, state, STATE_SIZE);
+ int ret = read_txt_file(filename, state, sizeof(state));
if (!ret) {
state_file_found = 1;
diff --git a/collectors/proc.plugin/proc_stat.c b/src/collectors/proc.plugin/proc_stat.c
index 84160f22f..481cb906a 100644
--- a/collectors/proc.plugin/proc_stat.c
+++ b/src/collectors/proc.plugin/proc_stat.c
@@ -46,6 +46,7 @@ struct cpu_chart {
RRDDIM *rd_guest;
RRDDIM *rd_guest_nice;
+ bool per_core_files_found;
struct per_core_single_number_file files[PER_CORE_FILES];
struct per_core_time_in_state_file time_in_state_files;
@@ -67,7 +68,7 @@ static int read_per_core_files(struct cpu_chart *all_cpu_charts, size_t len, siz
continue;
if(unlikely(f->fd == -1)) {
- f->fd = open(f->filename, O_RDONLY);
+ f->fd = open(f->filename, O_RDONLY | O_CLOEXEC);
if (unlikely(f->fd == -1)) {
collector_error("Cannot open file '%s'", f->filename);
continue;
@@ -411,7 +412,7 @@ static int read_cpuidle_states(char *cpuidle_name_filename , char *cpuidle_time_
char name_buf[50 + 1];
snprintfz(filename, FILENAME_MAX, cpuidle_name_filename, core, state);
- int fd = open(filename, O_RDONLY, 0666);
+ int fd = open(filename, O_RDONLY | O_CLOEXEC, 0666);
if(unlikely(fd == -1)) {
collector_error("Cannot open file '%s'", filename);
cc->rescan_cpu_states = 1;
@@ -443,7 +444,7 @@ static int read_cpuidle_states(char *cpuidle_name_filename , char *cpuidle_time_
struct cpuidle_state *cs = &cc->cpuidle_state[state];
if(unlikely(cs->time_fd == -1)) {
- cs->time_fd = open(cs->time_filename, O_RDONLY);
+ cs->time_fd = open(cs->time_filename, O_RDONLY | O_CLOEXEC);
if (unlikely(cs->time_fd == -1)) {
collector_error("Cannot open file '%s'", cs->time_filename);
cc->rescan_cpu_states = 1;
@@ -487,7 +488,7 @@ int do_proc_stat(int update_every, usec_t dt) {
if(unlikely(do_cpu == -1)) {
do_cpu = config_get_boolean("plugin:proc:/proc/stat", "cpu utilization", CONFIG_BOOLEAN_YES);
- do_cpu_cores = config_get_boolean("plugin:proc:/proc/stat", "per cpu core utilization", CONFIG_BOOLEAN_YES);
+ do_cpu_cores = config_get_boolean("plugin:proc:/proc/stat", "per cpu core utilization", CONFIG_BOOLEAN_NO);
do_interrupts = config_get_boolean("plugin:proc:/proc/stat", "cpu interrupts", CONFIG_BOOLEAN_YES);
do_context = config_get_boolean("plugin:proc:/proc/stat", "context switches", CONFIG_BOOLEAN_YES);
do_forks = config_get_boolean("plugin:proc:/proc/stat", "processes started", CONFIG_BOOLEAN_YES);
@@ -508,7 +509,7 @@ int do_proc_stat(int update_every, usec_t dt) {
do_core_throttle_count = CONFIG_BOOLEAN_AUTO;
do_package_throttle_count = CONFIG_BOOLEAN_NO;
do_cpu_freq = CONFIG_BOOLEAN_YES;
- do_cpuidle = CONFIG_BOOLEAN_YES;
+ do_cpuidle = CONFIG_BOOLEAN_NO;
}
if(unlikely(get_system_cpus() > 24)) {
// the system has too many processors
@@ -589,14 +590,71 @@ int do_proc_stat(int update_every, usec_t dt) {
continue;
}
- size_t core = (row_key[3] == '\0') ? 0 : str2ul(&row_key[3]) + 1;
- if(likely(core > 0)) cores_found = core;
+ size_t core = (row_key[3] == '\0') ? 0 : str2ul(&row_key[3]) + 1;
+ if (likely(core > 0))
+ cores_found = core;
+
+ bool do_any_core_metric = do_cpu_cores || do_core_throttle_count || do_cpu_freq || do_cpuidle;
+
+ if (likely((core == 0 && do_cpu) || (core > 0 && do_any_core_metric))) {
+ if (unlikely(core >= all_cpu_charts_size)) {
+ size_t old_cpu_charts_size = all_cpu_charts_size;
+ all_cpu_charts_size = core + 1;
+ all_cpu_charts = reallocz(all_cpu_charts, sizeof(struct cpu_chart) * all_cpu_charts_size);
+ memset(&all_cpu_charts[old_cpu_charts_size], 0, sizeof(struct cpu_chart) * (all_cpu_charts_size - old_cpu_charts_size));
+ }
+
+ struct cpu_chart *cpu_chart = &all_cpu_charts[core];
+
+ if (unlikely(!cpu_chart->id))
+ cpu_chart->id = strdupz(row_key);
+
+ if (core > 0 && !cpu_chart->per_core_files_found) {
+ cpu_chart->per_core_files_found = true;
+
+ char filename[FILENAME_MAX + 1];
+ struct stat stbuf;
+
+ if (do_core_throttle_count != CONFIG_BOOLEAN_NO) {
+ snprintfz(filename, FILENAME_MAX, core_throttle_count_filename, cpu_chart->id);
+ if (stat(filename, &stbuf) == 0) {
+ cpu_chart->files[CORE_THROTTLE_COUNT_INDEX].filename = strdupz(filename);
+ cpu_chart->files[CORE_THROTTLE_COUNT_INDEX].fd = -1;
+ do_core_throttle_count = CONFIG_BOOLEAN_YES;
+ }
+ }
+
+ if (do_package_throttle_count != CONFIG_BOOLEAN_NO) {
+ snprintfz(filename, FILENAME_MAX, package_throttle_count_filename, cpu_chart->id);
+ if (stat(filename, &stbuf) == 0) {
+ cpu_chart->files[PACKAGE_THROTTLE_COUNT_INDEX].filename = strdupz(filename);
+ cpu_chart->files[PACKAGE_THROTTLE_COUNT_INDEX].fd = -1;
+ do_package_throttle_count = CONFIG_BOOLEAN_YES;
+ }
+ }
+
+ if (do_cpu_freq != CONFIG_BOOLEAN_NO) {
+ snprintfz(filename, FILENAME_MAX, scaling_cur_freq_filename, cpu_chart->id);
+ if (stat(filename, &stbuf) == 0) {
+ cpu_chart->files[CPU_FREQ_INDEX].filename = strdupz(filename);
+ cpu_chart->files[CPU_FREQ_INDEX].fd = -1;
+ do_cpu_freq = CONFIG_BOOLEAN_YES;
+ }
+
+ snprintfz(filename, FILENAME_MAX, time_in_state_filename, cpu_chart->id);
+ if (stat(filename, &stbuf) == 0) {
+ cpu_chart->time_in_state_files.filename = strdupz(filename);
+ cpu_chart->time_in_state_files.ff = NULL;
+ do_cpu_freq = CONFIG_BOOLEAN_YES;
+ accurate_freq_avail = 1;
+ }
+ }
+ }
+ }
if(likely((core == 0 && do_cpu) || (core > 0 && do_cpu_cores))) {
- char *id;
unsigned long long user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0, softirq = 0, steal = 0, guest = 0, guest_nice = 0;
- id = row_key;
user = str2ull(procfile_lineword(ff, l, 1), NULL);
nice = str2ull(procfile_lineword(ff, l, 2), NULL);
system = str2ull(procfile_lineword(ff, l, 3), NULL);
@@ -615,17 +673,11 @@ int do_proc_stat(int update_every, usec_t dt) {
char *title, *type, *context, *family;
long priority;
- if(unlikely(core >= all_cpu_charts_size)) {
- size_t old_cpu_charts_size = all_cpu_charts_size;
- all_cpu_charts_size = core + 1;
- all_cpu_charts = reallocz(all_cpu_charts, sizeof(struct cpu_chart) * all_cpu_charts_size);
- memset(&all_cpu_charts[old_cpu_charts_size], 0, sizeof(struct cpu_chart) * (all_cpu_charts_size - old_cpu_charts_size));
- }
struct cpu_chart *cpu_chart = &all_cpu_charts[core];
- if(unlikely(!cpu_chart->st)) {
- cpu_chart->id = strdupz(id);
+ char *id = row_key;
+ if(unlikely(!cpu_chart->st)) {
if(unlikely(core == 0)) {
title = "Total CPU utilization";
type = "system";
@@ -639,47 +691,6 @@ int do_proc_stat(int update_every, usec_t dt) {
context = "cpu.cpu";
family = "utilization";
priority = NETDATA_CHART_PRIO_CPU_PER_CORE;
-
- char filename[FILENAME_MAX + 1];
- struct stat stbuf;
-
- if(do_core_throttle_count != CONFIG_BOOLEAN_NO) {
- snprintfz(filename, FILENAME_MAX, core_throttle_count_filename, id);
- if (stat(filename, &stbuf) == 0) {
- cpu_chart->files[CORE_THROTTLE_COUNT_INDEX].filename = strdupz(filename);
- cpu_chart->files[CORE_THROTTLE_COUNT_INDEX].fd = -1;
- do_core_throttle_count = CONFIG_BOOLEAN_YES;
- }
- }
-
- if(do_package_throttle_count != CONFIG_BOOLEAN_NO) {
- snprintfz(filename, FILENAME_MAX, package_throttle_count_filename, id);
- if (stat(filename, &stbuf) == 0) {
- cpu_chart->files[PACKAGE_THROTTLE_COUNT_INDEX].filename = strdupz(filename);
- cpu_chart->files[PACKAGE_THROTTLE_COUNT_INDEX].fd = -1;
- do_package_throttle_count = CONFIG_BOOLEAN_YES;
- }
- }
-
- if(do_cpu_freq != CONFIG_BOOLEAN_NO) {
-
- snprintfz(filename, FILENAME_MAX, scaling_cur_freq_filename, id);
-
- if (stat(filename, &stbuf) == 0) {
- cpu_chart->files[CPU_FREQ_INDEX].filename = strdupz(filename);
- cpu_chart->files[CPU_FREQ_INDEX].fd = -1;
- do_cpu_freq = CONFIG_BOOLEAN_YES;
- }
-
- snprintfz(filename, FILENAME_MAX, time_in_state_filename, id);
-
- if (stat(filename, &stbuf) == 0) {
- cpu_chart->time_in_state_files.filename = strdupz(filename);
- cpu_chart->time_in_state_files.ff = NULL;
- do_cpu_freq = CONFIG_BOOLEAN_YES;
- accurate_freq_avail = 1;
- }
- }
}
cpu_chart->st = rrdset_create_localhost(
@@ -719,7 +730,7 @@ int do_proc_stat(int update_every, usec_t dt) {
}
if(unlikely(core == 0 && cpus_var == NULL))
- cpus_var = rrdvar_custom_host_variable_add_and_acquire(localhost, "active_processors");
+ cpus_var = rrdvar_host_variable_add_and_acquire(localhost, "active_processors");
}
rrddim_set_by_pointer(cpu_chart->st, cpu_chart->rd_user, user);
@@ -1064,7 +1075,7 @@ int do_proc_stat(int update_every, usec_t dt) {
}
if(cpus_var)
- rrdvar_custom_host_variable_set(localhost, cpus_var, cores_found);
+ rrdvar_host_variable_set(localhost, cpus_var, cores_found);
return 0;
}
diff --git a/collectors/proc.plugin/proc_sys_fs_file_nr.c b/src/collectors/proc.plugin/proc_sys_fs_file_nr.c
index 570945d01..570945d01 100644
--- a/collectors/proc.plugin/proc_sys_fs_file_nr.c
+++ b/src/collectors/proc.plugin/proc_sys_fs_file_nr.c
diff --git a/collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c b/src/collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c
index b32597bc4..b32597bc4 100644
--- a/collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c
+++ b/src/collectors/proc.plugin/proc_sys_kernel_random_entropy_avail.c
diff --git a/collectors/proc.plugin/proc_uptime.c b/src/collectors/proc.plugin/proc_uptime.c
index ddab7269b..ddab7269b 100644
--- a/collectors/proc.plugin/proc_uptime.c
+++ b/src/collectors/proc.plugin/proc_uptime.c
diff --git a/collectors/proc.plugin/proc_vmstat.c b/src/collectors/proc.plugin/proc_vmstat.c
index b44733b6a..b44733b6a 100644
--- a/collectors/proc.plugin/proc_vmstat.c
+++ b/src/collectors/proc.plugin/proc_vmstat.c
diff --git a/collectors/proc.plugin/sys_block_zram.c b/src/collectors/proc.plugin/sys_block_zram.c
index dac7cac0f..dac7cac0f 100644
--- a/collectors/proc.plugin/sys_block_zram.c
+++ b/src/collectors/proc.plugin/sys_block_zram.c
diff --git a/collectors/proc.plugin/sys_class_drm.c b/src/collectors/proc.plugin/sys_class_drm.c
index 3ed1fb875..ab4d98a72 100644
--- a/collectors/proc.plugin/sys_class_drm.c
+++ b/src/collectors/proc.plugin/sys_class_drm.c
@@ -849,8 +849,6 @@ int do_sys_class_drm(int update_every, usec_t dt) {
(de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0'))) continue;
if(de->d_type == DT_LNK && !strncmp(de->d_name, "card", 4) && !strchr(de->d_name, '-')) {
- char filename[FILENAME_MAX + 1];
-
snprintfz(filename, FILENAME_MAX, "%s/%s/%s", drm_dir_name, de->d_name, "device/uevent");
if(check_card_is_amdgpu(filename)) continue;
@@ -885,14 +883,14 @@ int do_sys_class_drm(int update_every, usec_t dt) {
collected_number tmp_val;
- #define set_prop_pathname(prop_filename, prop_pathname, p_ff){ \
+ #define set_prop_pathname(prop_filename, prop_pathname, p_ff) do { \
snprintfz(filename, FILENAME_MAX, "%s/%s", c->pathname, prop_filename); \
if((p_ff && !read_clk_freq_file(p_ff, filename, &tmp_val)) || \
!read_single_number_file(filename, (unsigned long long *) &tmp_val)) \
prop_pathname = strdupz(filename); \
else \
collector_info("Cannot read file '%s'", filename); \
- }
+ } while(0)
/* Initialize GPU and VRAM utilization metrics */
diff --git a/collectors/proc.plugin/sys_class_infiniband.c b/src/collectors/proc.plugin/sys_class_infiniband.c
index d12a34513..ff1652ddf 100644
--- a/collectors/proc.plugin/sys_class_infiniband.c
+++ b/src/collectors/proc.plugin/sys_class_infiniband.c
@@ -184,7 +184,7 @@ static struct ibport {
RRDSET *st_hwpackets;
RRDSET *st_hwerrors;
- const RRDSETVAR_ACQUIRED *stv_speed;
+ const RRDVAR_ACQUIRED *stv_speed;
usec_t speed_last_collected_usec;
@@ -470,7 +470,7 @@ int do_sys_class_infiniband(int update_every, usec_t dt)
snprintfz(buffer, FILENAME_MAX, "%s/%s/%s", ports_dirname, port_dent->d_name, "rate");
char buffer_rate[65];
p->width = 4;
- if (read_file(buffer, buffer_rate, 64)) {
+ if (read_txt_file(buffer, buffer_rate, sizeof(buffer_rate))) {
collector_error("Unable to read '%s'", buffer);
} else {
char *buffer_width = strstr(buffer_rate, "(");
@@ -545,14 +545,14 @@ int do_sys_class_infiniband(int update_every, usec_t dt)
// x4 lanes multiplier as per Documentation/ABI/stable/sysfs-class-infiniband
FOREACH_COUNTER_BYTES(GEN_RRD_DIM_ADD_CUSTOM, port, port->width * 8, 1000, RRD_ALGORITHM_INCREMENTAL)
- port->stv_speed = rrdsetvar_custom_chart_variable_add_and_acquire(port->st_bytes, "link_speed");
+ port->stv_speed = rrdvar_chart_variable_add_and_acquire(port->st_bytes, "link_speed");
}
// Link read values to dimensions
FOREACH_COUNTER_BYTES(GEN_RRD_DIM_SETP, port)
// For link speed set only variable
- rrdsetvar_custom_chart_variable_set(port->st_bytes, port->stv_speed, port->speed);
+ rrdvar_chart_variable_set(port->st_bytes, port->stv_speed, port->speed);
rrdset_done(port->st_bytes);
}
diff --git a/collectors/proc.plugin/sys_class_power_supply.c b/src/collectors/proc.plugin/sys_class_power_supply.c
index 3f793b9c6..494a293bc 100644
--- a/collectors/proc.plugin/sys_class_power_supply.c
+++ b/src/collectors/proc.plugin/sys_class_power_supply.c
@@ -245,7 +245,7 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
char buffer[30 + 1];
if(unlikely(ps->capacity->fd == -1)) {
- ps->capacity->fd = open(ps->capacity->filename, O_RDONLY, 0666);
+ ps->capacity->fd = open(ps->capacity->filename, O_RDONLY | O_CLOEXEC, 0666);
if(unlikely(ps->capacity->fd == -1)) {
collector_error("Cannot open file '%s'", ps->capacity->filename);
power_supply_free(ps);
@@ -290,7 +290,7 @@ int do_sys_class_power_supply(int update_every, usec_t dt) {
char buffer[30 + 1];
if(unlikely(pd->fd == -1)) {
- pd->fd = open(pd->filename, O_RDONLY, 0666);
+ pd->fd = open(pd->filename, O_RDONLY | O_CLOEXEC, 0666);
if(unlikely(pd->fd == -1)) {
collector_error("Cannot open file '%s'", pd->filename);
read_error = 1;
diff --git a/collectors/proc.plugin/sys_devices_pci_aer.c b/src/collectors/proc.plugin/sys_devices_pci_aer.c
index 563ebf051..563ebf051 100644
--- a/collectors/proc.plugin/sys_devices_pci_aer.c
+++ b/src/collectors/proc.plugin/sys_devices_pci_aer.c
diff --git a/collectors/proc.plugin/sys_devices_system_edac_mc.c b/src/collectors/proc.plugin/sys_devices_system_edac_mc.c
index fdaa22cb7..d3db8c044 100644
--- a/collectors/proc.plugin/sys_devices_system_edac_mc.c
+++ b/src/collectors/proc.plugin/sys_devices_system_edac_mc.c
@@ -150,7 +150,7 @@ static kernel_uint_t read_edac_count(struct edac_count *t) {
static bool read_edac_mc_file(const char *mc, const char *filename, char *out, size_t out_size) {
char f[FILENAME_MAX + 1];
snprintfz(f, FILENAME_MAX, "%s/%s/%s", mc_dirname, mc, filename);
- if(read_file(f, out, out_size) != 0) {
+ if(read_txt_file(f, out, out_size) != 0) {
collector_error("EDAC: cannot read file '%s'", f);
return false;
}
@@ -160,7 +160,7 @@ static bool read_edac_mc_file(const char *mc, const char *filename, char *out, s
static bool read_edac_mc_rank_file(const char *mc, const char *rank, const char *filename, char *out, size_t out_size) {
char f[FILENAME_MAX + 1];
snprintfz(f, FILENAME_MAX, "%s/%s/%s/%s", mc_dirname, mc, rank, filename);
- if(read_file(f, out, out_size) != 0) {
+ if(read_txt_file(f, out, out_size) != 0) {
collector_error("EDAC: cannot read file '%s'", f);
return false;
}
@@ -202,9 +202,9 @@ int do_proc_sys_devices_system_edac_mc(int update_every, usec_t dt __maybe_unuse
, id
, NULL
, "edac"
- , "mem.edac_mc"
+ , "mem.edac_mc_errors"
, "Memory Controller (MC) Error Detection And Correction (EDAC) Errors"
- , "errors/s"
+ , "errors"
, PLUGIN_PROC_NAME
, "/sys/devices/system/edac/mc"
, NETDATA_CHART_PRIO_MEM_HW_ECC_CE
@@ -225,10 +225,10 @@ int do_proc_sys_devices_system_edac_mc(int update_every, usec_t dt __maybe_unuse
if(read_edac_mc_file(m->name, "max_location", buffer, 1024))
rrdlabels_add(m->st->rrdlabels, "max_location", buffer, RRDLABEL_SRC_AUTO);
- m->ce.rd = rrddim_add(m->st, "correctable", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- m->ue.rd = rrddim_add(m->st, "uncorrectable", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- m->ce_noinfo.rd = rrddim_add(m->st, "correctable_noinfo", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- m->ue_noinfo.rd = rrddim_add(m->st, "uncorrectable_noinfo", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
+ m->ce.rd = rrddim_add(m->st, "correctable", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+ m->ue.rd = rrddim_add(m->st, "uncorrectable", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+ m->ce_noinfo.rd = rrddim_add(m->st, "correctable_noinfo", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+ m->ue_noinfo.rd = rrddim_add(m->st, "uncorrectable_noinfo", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
}
rrddim_set_by_pointer(m->st, m->ce.rd, (collected_number)m->ce.count);
@@ -250,9 +250,9 @@ int do_proc_sys_devices_system_edac_mc(int update_every, usec_t dt __maybe_unuse
, id
, NULL
, "edac"
- , "mem.edac_mc_dimm"
+ , "mem.edac_mc_dimm_errors"
, "DIMM Error Detection And Correction (EDAC) Errors"
- , "errors/s"
+ , "errors"
, PLUGIN_PROC_NAME
, "/sys/devices/system/edac/mc"
, NETDATA_CHART_PRIO_MEM_HW_ECC_CE + 1
@@ -283,8 +283,8 @@ int do_proc_sys_devices_system_edac_mc(int update_every, usec_t dt __maybe_unuse
if (read_edac_mc_rank_file(m->name, d->name, "size", buffer, 1024))
rrdlabels_add(d->st->rrdlabels, "size", buffer, RRDLABEL_SRC_AUTO);
- d->ce.rd = rrddim_add(d->st, "correctable", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
- d->ue.rd = rrddim_add(d->st, "uncorrectable", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
+ d->ce.rd = rrddim_add(d->st, "correctable", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+ d->ue.rd = rrddim_add(d->st, "uncorrectable", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
}
rrddim_set_by_pointer(d->st, d->ce.rd, (collected_number)d->ce.count);
diff --git a/collectors/proc.plugin/sys_devices_system_node.c b/src/collectors/proc.plugin/sys_devices_system_node.c
index d6db94a27..d6db94a27 100644
--- a/collectors/proc.plugin/sys_devices_system_node.c
+++ b/src/collectors/proc.plugin/sys_devices_system_node.c
diff --git a/collectors/proc.plugin/sys_fs_btrfs.c b/src/collectors/proc.plugin/sys_fs_btrfs.c
index f1d6fe720..7023484ca 100644
--- a/collectors/proc.plugin/sys_fs_btrfs.c
+++ b/src/collectors/proc.plugin/sys_fs_btrfs.c
@@ -122,7 +122,7 @@ static BTRFS_NODE *nodes = NULL;
static inline int collect_btrfs_error_stats(BTRFS_DEVICE *device){
char buffer[120 + 1];
- int ret = read_file(device->error_stats_filename, buffer, 120);
+ int ret = read_txt_file(device->error_stats_filename, buffer, sizeof(buffer));
if(unlikely(ret)) {
collector_error("BTRFS: failed to read '%s'", device->error_stats_filename);
device->write_errs = 0;
@@ -151,7 +151,7 @@ static inline int collect_btrfs_error_stats(BTRFS_DEVICE *device){
static inline int collect_btrfs_commits_stats(BTRFS_NODE *node, int update_every){
char buffer[120 + 1];
- int ret = read_file(node->commit_stats_filename, buffer, 120);
+ int ret = read_txt_file(node->commit_stats_filename, buffer, sizeof(buffer));
if(unlikely(ret)) {
collector_error("BTRFS: failed to read '%s'", node->commit_stats_filename);
node->commits_total = 0;
@@ -530,7 +530,7 @@ static inline int find_all_btrfs_pools(const char *path, int update_every) {
char label[FILENAME_MAX + 1] = "";
snprintfz(filename, FILENAME_MAX, "%s/%s/label", path, de->d_name);
- if(read_file(filename, label, FILENAME_MAX) != 0) {
+ if(read_txt_file(filename, label, sizeof(label)) != 0) {
collector_error("BTRFS: failed to read '%s'", filename);
btrfs_free_node(node);
continue;
diff --git a/collectors/proc.plugin/sys_kernel_mm_ksm.c b/src/collectors/proc.plugin/sys_kernel_mm_ksm.c
index 45f1ac330..8f43acc93 100644
--- a/collectors/proc.plugin/sys_kernel_mm_ksm.c
+++ b/src/collectors/proc.plugin/sys_kernel_mm_ksm.c
@@ -13,7 +13,7 @@ typedef struct ksm_name_value {
#define PAGES_SHARING 1
#define PAGES_UNSHARED 2
#define PAGES_VOLATILE 3
-#define PAGES_TO_SCAN 4
+// #define PAGES_TO_SCAN 4
KSM_NAME_VALUE values[] = {
[PAGES_SHARED] = { "/sys/kernel/mm/ksm/pages_shared", 0ULL },
diff --git a/collectors/proc.plugin/zfs_common.c b/src/collectors/proc.plugin/zfs_common.c
index cca0ae0e6..cca0ae0e6 100644
--- a/collectors/proc.plugin/zfs_common.c
+++ b/src/collectors/proc.plugin/zfs_common.c
diff --git a/collectors/proc.plugin/zfs_common.h b/src/collectors/proc.plugin/zfs_common.h
index 9d61de2f3..9d61de2f3 100644
--- a/collectors/proc.plugin/zfs_common.h
+++ b/src/collectors/proc.plugin/zfs_common.h