mirror of
https://github.com/netdata/netdata.git
synced 2025-04-23 21:10:22 +00:00
Hyper collector fixes (#18934)
* Fix get instance, dimension rename, remove label * Add vm_net_interface_packets Add vm_net_interface_traffic Switch traffic charts to type area Chart/dimension definition fixes * Remove label from "root" charts * Change vswitch_bytes to vswitch_traffic * Added charts IPsecoffloadBytes, DirectedPackets,BroadcastPackets, MulticastPackets * Fix wrong dimensions * Internal rrdset rename * Switch algorithm on Hypervisor processor chart * Grouping per VM not Hv VPs * Update src/collectors/windows.plugin/perflib-hyperv.c Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud> * Update src/collectors/windows.plugin/perflib-hyperv.c Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud> * Adjust chart priorities Add processor total chart * priority update * Remove duplicate semicolon --------- Co-authored-by: Ilya Mashchenko <ilya@netdata.cloud>
This commit is contained in:
parent
df4277f111
commit
cf4f1d2ccf
2 changed files with 400 additions and 95 deletions
src/collectors
|
@ -56,7 +56,53 @@
|
|||
#define NETDATA_CHART_PRIO_SYSTEM_PACKETS 7001 // freebsd only
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_THREADS 8001 // Windows only
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_THERMAL_ZONES 8002 // Windows only
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV 9000 // Windows only
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Hyper-V
|
||||
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE 20000
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT 20010
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL 20020
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE 20030
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT 20040
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED 20050
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES 20060
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC 20070
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC 20080
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS 20090
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_BROADCAST_PACKETS 20100
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS 20110
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS 20120
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED 20130
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES 20140
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS 20150
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS 20160
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH 20170
|
||||
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC 20400
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS 20410
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS 20420
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS 20430
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS 20440
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED 20450
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS 20460
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS 20470
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES 20470
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES 20480
|
||||
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH 20600
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES 20610
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES 20620
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE 20630
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES 20640
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS 20650
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS 20660
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS 20670
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES 20680
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES 20690
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES 20700
|
||||
#define NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS 20710
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// CPU per core
|
||||
|
||||
|
|
|
@ -9,8 +9,6 @@
|
|||
|
||||
#define HYPERV "hyperv"
|
||||
|
||||
static long chart_priority = NETDATA_CHART_PRIO_WINDOWS_HYPERV;
|
||||
|
||||
static void get_and_sanitize_instance_value(
|
||||
PERF_DATA_BLOCK *pDataBlock,
|
||||
PERF_OBJECT_TYPE *pObjectType,
|
||||
|
@ -19,7 +17,7 @@ static void get_and_sanitize_instance_value(
|
|||
size_t buffer_size)
|
||||
{
|
||||
// char wstr[8192];
|
||||
if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, sizeof(buffer_size))) {
|
||||
if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, buffer_size)) {
|
||||
strncpyz(buffer, "[unknown]", buffer_size - 1);
|
||||
// return;
|
||||
}
|
||||
|
@ -153,7 +151,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
"bytes",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -167,7 +165,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
"bytes",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -181,14 +179,14 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
"percentage",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
|
||||
p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
|
||||
rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
@ -250,7 +248,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -264,7 +262,7 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -329,14 +327,12 @@ static bool do_hyperv_health_summary(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"vms",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH,
|
||||
update_every,
|
||||
RRDSET_TYPE_STACKED);
|
||||
|
||||
p->rd_HealthCritical = rrddim_add(p->st_health, "critical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_HealthOk = rrddim_add(p->st_health, "ok", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
|
||||
rrdlabels_add(p->st_health->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
}
|
||||
|
||||
SETP_DIM_VALUE(st_health, HealthCritical);
|
||||
|
@ -490,14 +486,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DeviceSpacePages4K = rrddim_add(p->st_device_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_DeviceSpacePages2M = rrddim_add(p->st_device_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_DeviceSpacePages1G = rrddim_add(p->st_device_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_device_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_gpa_space_pages = rrdset_create_localhost(
|
||||
"root_partition_gpa_space_pages",
|
||||
|
@ -509,14 +504,13 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_GPASpacePages4K = rrddim_add(p->st_gpa_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GPASpacePages2M = rrddim_add(p->st_gpa_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
p->rd_GPASpacePages1G = rrddim_add(p->st_gpa_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_gpa_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_gpa_space_modifications = rrdset_create_localhost(
|
||||
"root_partition_gpa_space_modifications",
|
||||
|
@ -528,13 +522,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"modifications/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_GPASpaceModifications =
|
||||
rrddim_add(p->st_gpa_space_modifications, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_gpa_space_modifications->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_attached_devices = rrdset_create_localhost(
|
||||
"root_partition_attached_devices",
|
||||
|
@ -546,12 +539,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"devices",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_AttachedDevices = rrddim_add(p->st_attached_devices, "attached", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_attached_devices->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_deposited_pages = rrdset_create_localhost(
|
||||
"root_partition_deposited_pages",
|
||||
|
@ -563,12 +555,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DepositedPages = rrddim_add(p->st_deposited_pages, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_deposited_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_DeviceDMAErrors = rrdset_create_localhost(
|
||||
"root_partition_device_dma_errors",
|
||||
|
@ -580,13 +571,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"requests",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DeviceDMAErrors =
|
||||
rrddim_add(p->st_DeviceDMAErrors, "illegal_dma", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_DeviceDMAErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_DeviceInterruptErrors = rrdset_create_localhost(
|
||||
"root_partition_device_interrupt_errors",
|
||||
|
@ -598,13 +588,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"requests",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DeviceInterruptErrors =
|
||||
rrddim_add(p->st_DeviceInterruptErrors, "illegal_interrupt", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_DeviceInterruptErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_DeviceInterruptThrottleEvents = rrdset_create_localhost(
|
||||
"root_partition_device_interrupt_throttle_events",
|
||||
|
@ -616,14 +605,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"events",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DeviceInterruptThrottleEvents =
|
||||
rrddim_add(p->st_DeviceInterruptThrottleEvents, "throttling", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(
|
||||
p->st_DeviceInterruptThrottleEvents->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_IOΤLBFlushesSec = rrdset_create_localhost(
|
||||
"root_partition_io_tlb_flush",
|
||||
|
@ -635,12 +622,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"flushes/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_IOΤLBFlushesSec = rrddim_add(p->st_IOΤLBFlushesSec, "gpa", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(p->st_IOΤLBFlushesSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_AddressSpaces = rrdset_create_localhost(
|
||||
"root_partition_address_space",
|
||||
|
@ -652,12 +638,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"address spaces",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_AddressSpaces = rrddim_add(p->st_AddressSpaces, "address_spaces", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_AddressSpaces->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_VirtualTLBPages = rrdset_create_localhost(
|
||||
"root_partition_virtual_tlb_pages",
|
||||
|
@ -669,12 +654,11 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"pages",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_VirtualTLBPages = rrddim_add(p->st_VirtualTLBPages, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
|
||||
rrdlabels_add(p->st_VirtualTLBPages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_VirtualTLBFlushEntiresSec = rrdset_create_localhost(
|
||||
"root_partition_virtual_tlb_flush_entries",
|
||||
|
@ -686,13 +670,12 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
"flushes/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_VirtualTLBFlushEntiresSec =
|
||||
rrddim_add(p->st_VirtualTLBFlushEntiresSec, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(p->st_VirtualTLBFlushEntiresSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
}
|
||||
|
||||
// Set the data for each dimension
|
||||
|
@ -822,10 +805,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
HYPERV,
|
||||
HYPERV".vm_storage_device_operations",
|
||||
"VM storage device IOPS",
|
||||
"operations/sec",
|
||||
"operations/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -843,10 +826,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
HYPERV,
|
||||
HYPERV".vm_storage_device_bytes",
|
||||
"VM storage device IO",
|
||||
"bytes/sec",
|
||||
"bytes/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES,
|
||||
update_every,
|
||||
RRDSET_TYPE_AREA);
|
||||
|
||||
|
@ -864,10 +847,10 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
|
|||
HYPERV,
|
||||
HYPERV".vm_storage_device_errors",
|
||||
"VM storage device errors",
|
||||
"errors/sec",
|
||||
"errors/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1050,21 +1033,21 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
p->charts_created = true;
|
||||
|
||||
p->st_bytes = rrdset_create_localhost(
|
||||
"vswitch_bytes",
|
||||
"vswitch_traffic",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vswitch_bytes",
|
||||
HYPERV ".vswitch_traffic",
|
||||
"Virtual switch traffic",
|
||||
"bytes/sec",
|
||||
"kilobits/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
RRDSET_TYPE_AREA);
|
||||
|
||||
p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(p->st_bytes->rrdlabels, "vswitch", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_packets = rrdset_create_localhost(
|
||||
|
@ -1074,10 +1057,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_packets",
|
||||
"Virtual switch packets",
|
||||
"packets/sec",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1092,10 +1075,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_directed_packets",
|
||||
"Virtual switch directed packets",
|
||||
"packets/sec",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1112,10 +1095,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_broadcast_packets",
|
||||
"Virtual switch broadcast packets",
|
||||
"packets/sec",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1132,10 +1115,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_multicast_packets",
|
||||
"Virtual switch multicast packets",
|
||||
"packets/sec",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1152,10 +1135,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_dropped_packets",
|
||||
"Virtual switch dropped packets",
|
||||
"drops/sec",
|
||||
"drops/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1172,10 +1155,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_extensions_dropped_packets",
|
||||
"Virtual switch extensions dropped packets",
|
||||
"drops/sec",
|
||||
"drops/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1192,10 +1175,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_packets_flooded",
|
||||
"Virtual switch flooded packets",
|
||||
"packets/sec",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1209,10 +1192,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_learned_mac_addresses",
|
||||
"Virtual switch learned MAC addresses",
|
||||
"mac addresses/sec",
|
||||
"mac addresses/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1226,10 +1209,10 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
HYPERV,
|
||||
HYPERV ".vswitch_purged_mac_addresses",
|
||||
"Virtual switch purged MAC addresses",
|
||||
"mac addresses/sec",
|
||||
"mac addresses/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
|
@ -1279,17 +1262,58 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
struct hypervisor_network_adapter {
|
||||
bool collected_metadata;
|
||||
bool charts_created;
|
||||
|
||||
RRDSET *st_packets;
|
||||
RRDSET *st_dropped_packets;
|
||||
DEFINE_RD(DroppedPacketsOutgoingSec);
|
||||
DEFINE_RD(DroppedPacketsIncomingSec);
|
||||
|
||||
RRDSET *st_send_receive_packets;
|
||||
DEFINE_RD(PacketsSentSec);
|
||||
DEFINE_RD(PacketsReceivedSec);
|
||||
|
||||
RRDSET *st_send_receive_bytes;
|
||||
DEFINE_RD(BytesSentSec);
|
||||
DEFINE_RD(BytesReceivedSec);
|
||||
|
||||
RRDSET *st_IPsecoffloadBytes;
|
||||
DEFINE_RD(IPsecoffloadBytesReceivedSec);
|
||||
DEFINE_RD(IPsecoffloadBytesSentSec);
|
||||
|
||||
RRDSET *st_DirectedPackets;
|
||||
DEFINE_RD(DirectedPacketsSentSec);
|
||||
DEFINE_RD(DirectedPacketsReceivedSec);
|
||||
|
||||
RRDSET *st_BroadcastPackets;
|
||||
DEFINE_RD(BroadcastPacketsSentSec);
|
||||
DEFINE_RD(BroadcastPacketsReceivedSec);
|
||||
|
||||
RRDSET *st_MulticastPackets;
|
||||
DEFINE_RD(MulticastPacketsSentSec);
|
||||
DEFINE_RD(MulticastPacketsReceivedSec);
|
||||
|
||||
COUNTER_DATA DroppedPacketsOutgoingSec;
|
||||
COUNTER_DATA DroppedPacketsIncomingSec;
|
||||
|
||||
COUNTER_DATA PacketsSentSec;
|
||||
COUNTER_DATA PacketsReceivedSec;
|
||||
|
||||
COUNTER_DATA BytesSentSec;
|
||||
COUNTER_DATA BytesReceivedSec;
|
||||
|
||||
COUNTER_DATA IPsecoffloadBytesReceivedSec;
|
||||
COUNTER_DATA IPsecoffloadBytesSentSec;
|
||||
|
||||
COUNTER_DATA DirectedPacketsSentSec;
|
||||
COUNTER_DATA DirectedPacketsReceivedSec;
|
||||
|
||||
COUNTER_DATA BroadcastPacketsSentSec;
|
||||
COUNTER_DATA BroadcastPacketsReceivedSec;
|
||||
|
||||
COUNTER_DATA MulticastPacketsSentSec;
|
||||
COUNTER_DATA MulticastPacketsReceivedSec;
|
||||
};
|
||||
|
||||
// Initialize the keys for the root partition metrics
|
||||
|
@ -1297,6 +1321,21 @@ void initialize_hyperv_network_adapter_keys(struct hypervisor_network_adapter *p
|
|||
{
|
||||
p->DroppedPacketsOutgoingSec.key = "Dropped Packets Outgoing/sec";
|
||||
p->DroppedPacketsIncomingSec.key = "Dropped Packets Incoming/sec";
|
||||
|
||||
p->PacketsSentSec.key = "Packets Sent/sec";
|
||||
p->PacketsReceivedSec.key = "Packets Received/sec";
|
||||
|
||||
p->BytesSentSec.key = "Bytes Sent/sec";
|
||||
p->BytesReceivedSec.key = "Bytes Received/sec";
|
||||
|
||||
p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
|
||||
p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
|
||||
p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
|
||||
p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
|
||||
p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
|
||||
p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
|
||||
p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
|
||||
p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
|
||||
}
|
||||
|
||||
void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
|
||||
|
@ -1333,32 +1372,197 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
|
|||
GET_INSTANCE_COUNTER(DroppedPacketsIncomingSec);
|
||||
GET_INSTANCE_COUNTER(DroppedPacketsOutgoingSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(PacketsReceivedSec);
|
||||
GET_INSTANCE_COUNTER(PacketsSentSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(BytesReceivedSec);
|
||||
GET_INSTANCE_COUNTER(BytesSentSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(IPsecoffloadBytesReceivedSec);
|
||||
GET_INSTANCE_COUNTER(IPsecoffloadBytesSentSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(DirectedPacketsSentSec);
|
||||
GET_INSTANCE_COUNTER(DirectedPacketsReceivedSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(BroadcastPacketsSentSec);
|
||||
GET_INSTANCE_COUNTER(BroadcastPacketsReceivedSec);
|
||||
|
||||
GET_INSTANCE_COUNTER(MulticastPacketsSentSec);
|
||||
GET_INSTANCE_COUNTER(MulticastPacketsReceivedSec);
|
||||
|
||||
if (!p->charts_created) {
|
||||
p->charts_created = true;
|
||||
p->st_packets = rrdset_create_localhost(
|
||||
p->st_dropped_packets = rrdset_create_localhost(
|
||||
"vm_net_interface_packets_dropped",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV".vm_net_interface_packets_dropped",
|
||||
"VM interface packets dropped",
|
||||
"drops/sec",
|
||||
"drops/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
|
||||
rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_send_receive_packets = rrdset_create_localhost(
|
||||
"vm_net_interface_packets",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_packets",
|
||||
"VM interface packets",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
|
||||
rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_send_receive_bytes = rrdset_create_localhost(
|
||||
"vm_net_interface_traffic",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_traffic",
|
||||
"VM interface traffic",
|
||||
"kilobits/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
|
||||
update_every,
|
||||
RRDSET_TYPE_AREA);
|
||||
|
||||
p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_IPsecoffloadBytes = rrdset_create_localhost(
|
||||
"vm_net_interface_ipsec_traffic",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_ipsec_traffic",
|
||||
"VM interface traffic",
|
||||
"kilobits/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC,
|
||||
update_every,
|
||||
RRDSET_TYPE_AREA);
|
||||
|
||||
p->rd_IPsecoffloadBytesReceivedSec =
|
||||
rrddim_add(p->st_IPsecoffloadBytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_IPsecoffloadBytesSentSec =
|
||||
rrddim_add(p->st_IPsecoffloadBytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(
|
||||
p->st_IPsecoffloadBytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_DirectedPackets = rrdset_create_localhost(
|
||||
"vm_net_interface_directed_packets",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_directed_packets",
|
||||
"VM interface traffic",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_DirectedPacketsReceivedSec =
|
||||
rrddim_add(p->st_DirectedPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_DirectedPacketsSentSec =
|
||||
rrddim_add(p->st_DirectedPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(
|
||||
p->st_DirectedPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_BroadcastPackets = rrdset_create_localhost(
|
||||
"vm_net_interface_broadcast_packets",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_broadcast_packets",
|
||||
"VM interface broadcast",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_BroadcastPacketsReceivedSec =
|
||||
rrddim_add(p->st_BroadcastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_BroadcastPacketsSentSec =
|
||||
rrddim_add(p->st_BroadcastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(
|
||||
p->st_BroadcastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_MulticastPackets = rrdset_create_localhost(
|
||||
"vm_net_interface_multicast_packets",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_net_interface_multicast_packets",
|
||||
"VM interface multicast",
|
||||
"packets/s",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS,
|
||||
update_every,
|
||||
RRDSET_TYPE_LINE);
|
||||
|
||||
p->rd_MulticastPacketsReceivedSec =
|
||||
rrddim_add(p->st_MulticastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_MulticastPacketsSentSec =
|
||||
rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(
|
||||
p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
|
||||
rrdlabels_add(p->st_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
}
|
||||
|
||||
SETP_DIM_VALUE(st_packets, DroppedPacketsIncomingSec);
|
||||
SETP_DIM_VALUE(st_packets, DroppedPacketsOutgoingSec);
|
||||
SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
|
||||
SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsOutgoingSec);
|
||||
|
||||
rrdset_done(p->st_packets);
|
||||
SETP_DIM_VALUE(st_send_receive_packets, PacketsReceivedSec);
|
||||
SETP_DIM_VALUE(st_send_receive_packets, PacketsSentSec);
|
||||
|
||||
SETP_DIM_VALUE(st_send_receive_bytes, BytesReceivedSec);
|
||||
SETP_DIM_VALUE(st_send_receive_bytes, BytesSentSec);
|
||||
|
||||
SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesReceivedSec);
|
||||
SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesSentSec);
|
||||
|
||||
SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsSentSec);
|
||||
SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsReceivedSec);
|
||||
|
||||
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
|
||||
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
|
||||
|
||||
SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
|
||||
SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
|
||||
|
||||
rrdset_done(p->st_IPsecoffloadBytes);
|
||||
rrdset_done(p->st_DirectedPackets);
|
||||
rrdset_done(p->st_BroadcastPackets);
|
||||
rrdset_done(p->st_MulticastPackets);
|
||||
rrdset_done(p->st_send_receive_bytes);
|
||||
rrdset_done(p->st_send_receive_packets);
|
||||
rrdset_done(p->st_dropped_packets);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1375,9 +1579,17 @@ struct hypervisor_processor {
|
|||
DEFINE_RD(HypervisorRunTime);
|
||||
DEFINE_RD(RemoteRunTime);
|
||||
|
||||
RRDSET *st_HypervisorProcessorTotal;
|
||||
DEFINE_RD(TotalRunTime);
|
||||
|
||||
COUNTER_DATA GuestRunTime;
|
||||
COUNTER_DATA HypervisorRunTime;
|
||||
COUNTER_DATA RemoteRunTime;
|
||||
COUNTER_DATA TotalRunTime;
|
||||
collected_number GuestRunTime_total;
|
||||
collected_number HypervisorRunTime_total;
|
||||
collected_number RemoteRunTime_total;
|
||||
collected_number TotalRunTime_total;
|
||||
};
|
||||
|
||||
|
||||
|
@ -1386,6 +1598,11 @@ void initialize_hyperv_processor_keys(struct hypervisor_processor *p)
|
|||
p->GuestRunTime.key = "% Guest Run Time";
|
||||
p->HypervisorRunTime.key = "% Hypervisor Run Time";
|
||||
p->RemoteRunTime.key = "% Remote Run Time";
|
||||
p->TotalRunTime.key = "% Total Run Time";
|
||||
p->GuestRunTime_total = 0;
|
||||
p->HypervisorRunTime_total = 0;
|
||||
p->RemoteRunTime_total = 0;
|
||||
p->TotalRunTime_total = 0;
|
||||
}
|
||||
|
||||
void dict_hyperv_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
|
||||
|
@ -1410,9 +1627,13 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
|
|||
|
||||
get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
|
||||
|
||||
if(strcasecmp(windows_shared_buffer, "_Total") == 0)
|
||||
if (strcasecmp(windows_shared_buffer, "_Total") == 0)
|
||||
continue;
|
||||
|
||||
char *vm = strchr(windows_shared_buffer, ':');
|
||||
if (vm)
|
||||
*vm = '\0';
|
||||
|
||||
struct hypervisor_processor *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
|
||||
|
||||
if (!p->collected_metadata) {
|
||||
|
@ -1422,39 +1643,77 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
|
|||
GET_INSTANCE_COUNTER(GuestRunTime);
|
||||
GET_INSTANCE_COUNTER(HypervisorRunTime);
|
||||
GET_INSTANCE_COUNTER(RemoteRunTime);
|
||||
GET_INSTANCE_COUNTER(TotalRunTime);
|
||||
|
||||
if (!p->charts_created) {
|
||||
p->charts_created = true;
|
||||
p->st_HypervisorProcessor = rrdset_create_localhost(
|
||||
p->st_HypervisorProcessorTotal = rrdset_create_localhost(
|
||||
"vm_cpu_usage",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_cpu_usage",
|
||||
"VM CPU usage (100% = 1 core)",
|
||||
"VM CPU usage",
|
||||
"percentage",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
chart_priority++,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE,
|
||||
update_every,
|
||||
RRDSET_TYPE_STACKED);
|
||||
|
||||
p->rd_TotalRunTime =
|
||||
rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
|
||||
rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
|
||||
p->st_HypervisorProcessor = rrdset_create_localhost(
|
||||
"vm_cpu_usage_by_run_context",
|
||||
windows_shared_buffer,
|
||||
NULL,
|
||||
HYPERV,
|
||||
HYPERV ".vm_cpu_usage_by_run_context",
|
||||
"VM CPU usage by run context",
|
||||
"percentage",
|
||||
_COMMON_PLUGIN_NAME,
|
||||
_COMMON_PLUGIN_MODULE_NAME,
|
||||
NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
|
||||
update_every,
|
||||
RRDSET_TYPE_STACKED);
|
||||
|
||||
p->rd_GuestRunTime =
|
||||
rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
|
||||
rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_HypervisorRunTime =
|
||||
rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
|
||||
rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
|
||||
p->rd_RemoteRunTime =
|
||||
rrddim_add(p->st_HypervisorProcessor, "remote", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
|
||||
rrddim_add(p->st_HypervisorProcessor, "remote", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
|
||||
|
||||
rrdlabels_add(p->st_HypervisorProcessor->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
|
||||
}
|
||||
|
||||
SETP_DIM_VALUE(st_HypervisorProcessor, GuestRunTime);
|
||||
SETP_DIM_VALUE(st_HypervisorProcessor, HypervisorRunTime);
|
||||
SETP_DIM_VALUE(st_HypervisorProcessor, RemoteRunTime);
|
||||
|
||||
rrdset_done(p->st_HypervisorProcessor);
|
||||
p->GuestRunTime_total += (collected_number)p->GuestRunTime.current.Data;
|
||||
p->HypervisorRunTime_total += (collected_number)p->HypervisorRunTime.current.Data;
|
||||
p->RemoteRunTime_total += (collected_number)p->RemoteRunTime.current.Data;
|
||||
p->TotalRunTime_total += (collected_number)p->TotalRunTime.current.Data;
|
||||
}
|
||||
|
||||
{
|
||||
struct hypervisor_processor *p;
|
||||
dfe_start_read(item->instance, p) {
|
||||
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
|
||||
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
|
||||
rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
|
||||
rrdset_done(p->st_HypervisorProcessor);
|
||||
|
||||
rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
|
||||
rrdset_done(p->st_HypervisorProcessorTotal);
|
||||
|
||||
p->GuestRunTime_total = 0;
|
||||
p->HypervisorRunTime_total = 0;
|
||||
p->RemoteRunTime_total = 0;
|
||||
p->TotalRunTime_total = 0;
|
||||
}
|
||||
dfe_done(p);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue