9
10
#define HYPERV "hyperv"
11
12
-static long chart_priority = NETDATA_CHART_PRIO_WINDOWS_HYPERV;
13
-
12
static void get_and_sanitize_instance_value(
13
PERF_DATA_BLOCK *pDataBlock,
14
PERF_OBJECT_TYPE *pObjectType,
17
size_t buffer_size)
18
{
19
// char wstr[8192];
22
- if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, sizeof(buffer_size))) {
20
+ if (!getInstanceName(pDataBlock, pObjectType, pi, buffer, buffer_size)) {
21
strncpyz(buffer, "[unknown]", buffer_size - 1);
22
// return;
23
}
151
"bytes",
152
_COMMON_PLUGIN_NAME,
153
_COMMON_PLUGIN_MODULE_NAME,
156
- chart_priority++,
154
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL,
155
update_every,
156
RRDSET_TYPE_LINE);
157
165
"bytes",
166
_COMMON_PLUGIN_NAME,
167
_COMMON_PLUGIN_MODULE_NAME,
170
- chart_priority++,
168
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PHYSICAL_GUEST_VISIBLE,
169
update_every,
170
RRDSET_TYPE_LINE);
171
179
"percentage",
180
_COMMON_PLUGIN_NAME,
181
_COMMON_PLUGIN_MODULE_NAME,
184
- chart_priority++,
182
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_MEMORY_PRESSURE_CURRENT,
183
update_every,
184
RRDSET_TYPE_LINE);
185
188
- p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
189
- p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
190
- p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
191
- p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available_memory", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
186
+ p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
187
+ p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
188
+ p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189
+ p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
190
191
rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
192
rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
248
"pages",
249
_COMMON_PLUGIN_NAME,
250
_COMMON_PLUGIN_MODULE_NAME,
253
- chart_priority++,
251
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_PHYSICAL_PAGES_ALLOCATED,
252
update_every,
253
RRDSET_TYPE_LINE);
254
262
"pages",
263
_COMMON_PLUGIN_NAME,
264
_COMMON_PLUGIN_MODULE_NAME,
267
- chart_priority++,
265
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_VID_REMOTE_PHYSICAL_PAGES,
266
update_every,
267
RRDSET_TYPE_LINE);
268
327
"vms",
328
_COMMON_PLUGIN_NAME,
329
_COMMON_PLUGIN_MODULE_NAME,
332
- chart_priority++,
330
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VMS_HEALTH,
331
update_every,
332
RRDSET_TYPE_STACKED);
333
334
p->rd_HealthCritical = rrddim_add(p->st_health, "critical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
335
p->rd_HealthOk = rrddim_add(p->st_health, "ok", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
338
-
339
- rrdlabels_add(p->st_health->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
336
}
337
338
SETP_DIM_VALUE(st_health, HealthCritical);
486
"pages",
487
_COMMON_PLUGIN_NAME,
488
_COMMON_PLUGIN_MODULE_NAME,
493
- chart_priority++,
489
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_SPACE_PAGES,
490
update_every,
491
RRDSET_TYPE_LINE);
492
493
p->rd_DeviceSpacePages4K = rrddim_add(p->st_device_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
494
p->rd_DeviceSpacePages2M = rrddim_add(p->st_device_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
495
p->rd_DeviceSpacePages1G = rrddim_add(p->st_device_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
500
- rrdlabels_add(p->st_device_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
496
497
p->st_gpa_space_pages = rrdset_create_localhost(
498
"root_partition_gpa_space_pages",
504
"pages",
505
_COMMON_PLUGIN_NAME,
506
_COMMON_PLUGIN_MODULE_NAME,
512
- chart_priority++,
507
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_PAGES,
508
update_every,
509
RRDSET_TYPE_LINE);
510
511
p->rd_GPASpacePages4K = rrddim_add(p->st_gpa_space_pages, "4K", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
512
p->rd_GPASpacePages2M = rrddim_add(p->st_gpa_space_pages, "2M", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
513
p->rd_GPASpacePages1G = rrddim_add(p->st_gpa_space_pages, "1G", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
519
- rrdlabels_add(p->st_gpa_space_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
514
515
p->st_gpa_space_modifications = rrdset_create_localhost(
516
"root_partition_gpa_space_modifications",
522
"modifications/s",
523
_COMMON_PLUGIN_NAME,
524
_COMMON_PLUGIN_MODULE_NAME,
531
- chart_priority++,
525
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_GPA_SPACE_MODIFICATIONS,
526
update_every,
527
RRDSET_TYPE_LINE);
528
529
p->rd_GPASpaceModifications =
530
rrddim_add(p->st_gpa_space_modifications, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
537
- rrdlabels_add(p->st_gpa_space_modifications->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
531
532
p->st_attached_devices = rrdset_create_localhost(
533
"root_partition_attached_devices",
539
"devices",
540
_COMMON_PLUGIN_NAME,
541
_COMMON_PLUGIN_MODULE_NAME,
549
- chart_priority++,
542
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ATTACHED_DEVICES,
543
update_every,
544
RRDSET_TYPE_LINE);
545
546
p->rd_AttachedDevices = rrddim_add(p->st_attached_devices, "attached", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
554
- rrdlabels_add(p->st_attached_devices->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
547
548
p->st_deposited_pages = rrdset_create_localhost(
549
"root_partition_deposited_pages",
555
"pages",
556
_COMMON_PLUGIN_NAME,
557
_COMMON_PLUGIN_MODULE_NAME,
566
- chart_priority++,
558
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEPOSITED_PAGES,
559
update_every,
560
RRDSET_TYPE_LINE);
561
562
p->rd_DepositedPages = rrddim_add(p->st_deposited_pages, "gpa", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
571
- rrdlabels_add(p->st_deposited_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
563
564
p->st_DeviceDMAErrors = rrdset_create_localhost(
565
"root_partition_device_dma_errors",
571
"requests",
572
_COMMON_PLUGIN_NAME,
573
_COMMON_PLUGIN_MODULE_NAME,
583
- chart_priority++,
574
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_DMA_ERRORS,
575
update_every,
576
RRDSET_TYPE_LINE);
577
578
p->rd_DeviceDMAErrors =
579
rrddim_add(p->st_DeviceDMAErrors, "illegal_dma", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
589
- rrdlabels_add(p->st_DeviceDMAErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
580
581
p->st_DeviceInterruptErrors = rrdset_create_localhost(
582
"root_partition_device_interrupt_errors",
588
"requests",
589
_COMMON_PLUGIN_NAME,
590
_COMMON_PLUGIN_MODULE_NAME,
601
- chart_priority++,
591
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_ERRORS,
592
update_every,
593
RRDSET_TYPE_LINE);
594
595
p->rd_DeviceInterruptErrors =
596
rrddim_add(p->st_DeviceInterruptErrors, "illegal_interrupt", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
607
- rrdlabels_add(p->st_DeviceInterruptErrors->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
597
598
p->st_DeviceInterruptThrottleEvents = rrdset_create_localhost(
599
"root_partition_device_interrupt_throttle_events",
605
"events",
606
_COMMON_PLUGIN_NAME,
607
_COMMON_PLUGIN_MODULE_NAME,
619
- chart_priority++,
608
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_DEVICE_INTERRUPT_THROTTLE_EVENTS,
609
update_every,
610
RRDSET_TYPE_LINE);
611
612
p->rd_DeviceInterruptThrottleEvents =
613
rrddim_add(p->st_DeviceInterruptThrottleEvents, "throttling", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
625
- rrdlabels_add(
626
- p->st_DeviceInterruptThrottleEvents->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
614
615
p->st_IOΤLBFlushesSec = rrdset_create_localhost(
616
"root_partition_io_tlb_flush",
622
"flushes/s",
623
_COMMON_PLUGIN_NAME,
624
_COMMON_PLUGIN_MODULE_NAME,
638
- chart_priority++,
625
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_IO_TLB_FLUSH,
626
update_every,
627
RRDSET_TYPE_LINE);
628
629
p->rd_IOΤLBFlushesSec = rrddim_add(p->st_IOΤLBFlushesSec, "gpa", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
643
- rrdlabels_add(p->st_IOΤLBFlushesSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
630
631
p->st_AddressSpaces = rrdset_create_localhost(
632
"root_partition_address_space",
638
"address spaces",
639
_COMMON_PLUGIN_NAME,
640
_COMMON_PLUGIN_MODULE_NAME,
655
- chart_priority++,
641
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_ADDRESS_SPACE,
642
update_every,
643
RRDSET_TYPE_LINE);
644
645
p->rd_AddressSpaces = rrddim_add(p->st_AddressSpaces, "address_spaces", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
660
- rrdlabels_add(p->st_AddressSpaces->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
646
647
p->st_VirtualTLBPages = rrdset_create_localhost(
648
"root_partition_virtual_tlb_pages",
654
"pages",
655
_COMMON_PLUGIN_NAME,
656
_COMMON_PLUGIN_MODULE_NAME,
672
- chart_priority++,
657
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_PAGES,
658
update_every,
659
RRDSET_TYPE_LINE);
660
661
p->rd_VirtualTLBPages = rrddim_add(p->st_VirtualTLBPages, "used", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
677
- rrdlabels_add(p->st_VirtualTLBPages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
662
663
p->st_VirtualTLBFlushEntiresSec = rrdset_create_localhost(
664
"root_partition_virtual_tlb_flush_entries",
670
"flushes/s",
671
_COMMON_PLUGIN_NAME,
672
_COMMON_PLUGIN_MODULE_NAME,
689
- chart_priority++,
673
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_ROOT_PARTITION_VIRTUAL_TLB_FLUSH_ENTRIES,
674
update_every,
675
RRDSET_TYPE_LINE);
676
677
p->rd_VirtualTLBFlushEntiresSec =
678
rrddim_add(p->st_VirtualTLBFlushEntiresSec, "flushes", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
695
- rrdlabels_add(p->st_VirtualTLBFlushEntiresSec->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
679
}
680
681
// Set the data for each dimension
805
HYPERV,
806
HYPERV".vm_storage_device_operations",
807
"VM storage device IOPS",
825
- "operations/sec",
808
+ "operations/s",
809
_COMMON_PLUGIN_NAME,
810
_COMMON_PLUGIN_MODULE_NAME,
828
- chart_priority++,
811
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_OPERATIONS,
812
update_every,
813
RRDSET_TYPE_LINE);
814
826
HYPERV,
827
HYPERV".vm_storage_device_bytes",
828
"VM storage device IO",
846
- "bytes/sec",
829
+ "bytes/s",
830
_COMMON_PLUGIN_NAME,
831
_COMMON_PLUGIN_MODULE_NAME,
849
- chart_priority++,
832
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_BYTES,
833
update_every,
834
RRDSET_TYPE_AREA);
835
847
HYPERV,
848
HYPERV".vm_storage_device_errors",
849
"VM storage device errors",
867
- "errors/sec",
850
+ "errors/s",
851
_COMMON_PLUGIN_NAME,
852
_COMMON_PLUGIN_MODULE_NAME,
870
- chart_priority++,
853
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_STORAGE_DEVICE_ERRORS,
854
update_every,
855
RRDSET_TYPE_LINE);
856
1033
p->charts_created = true;
1034
1035
p->st_bytes = rrdset_create_localhost(
1053
- "vswitch_bytes",
1036
+ "vswitch_traffic",
1037
windows_shared_buffer,
1038
NULL,
1039
HYPERV,
1057
- HYPERV ".vswitch_bytes",
1040
+ HYPERV ".vswitch_traffic",
1041
"Virtual switch traffic",
1059
- "bytes/sec",
1042
+ "kilobits/s",
1043
_COMMON_PLUGIN_NAME,
1044
_COMMON_PLUGIN_MODULE_NAME,
1062
- chart_priority++,
1045
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_TRAFFIC,
1046
update_every,
1064
- RRDSET_TYPE_LINE);
1047
+ RRDSET_TYPE_AREA);
1048
1066
- p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1067
- p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1049
+ p->rd_BytesReceivedSec = rrddim_add(p->st_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1050
+ p->rd_BytesSentSec = rrddim_add(p->st_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1051
rrdlabels_add(p->st_bytes->rrdlabels, "vswitch", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1052
1053
p->st_packets = rrdset_create_localhost(
1057
HYPERV,
1058
HYPERV ".vswitch_packets",
1059
"Virtual switch packets",
1077
- "packets/sec",
1060
+ "packets/s",
1061
_COMMON_PLUGIN_NAME,
1062
_COMMON_PLUGIN_MODULE_NAME,
1080
- chart_priority++,
1063
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS,
1064
update_every,
1065
RRDSET_TYPE_LINE);
1066
1075
HYPERV,
1076
HYPERV ".vswitch_directed_packets",
1077
"Virtual switch directed packets",
1095
- "packets/sec",
1078
+ "packets/s",
1079
_COMMON_PLUGIN_NAME,
1080
_COMMON_PLUGIN_MODULE_NAME,
1098
- chart_priority++,
1081
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DIRECTED_PACKETS,
1082
update_every,
1083
RRDSET_TYPE_LINE);
1084
1095
HYPERV,
1096
HYPERV ".vswitch_broadcast_packets",
1097
"Virtual switch broadcast packets",
1115
- "packets/sec",
1098
+ "packets/s",
1099
_COMMON_PLUGIN_NAME,
1100
_COMMON_PLUGIN_MODULE_NAME,
1118
- chart_priority++,
1101
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_BROADCAST_PACKETS,
1102
update_every,
1103
RRDSET_TYPE_LINE);
1104
1115
HYPERV,
1116
HYPERV ".vswitch_multicast_packets",
1117
"Virtual switch multicast packets",
1135
- "packets/sec",
1118
+ "packets/s",
1119
_COMMON_PLUGIN_NAME,
1120
_COMMON_PLUGIN_MODULE_NAME,
1138
- chart_priority++,
1121
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_MULTICAST_PACKETS,
1122
update_every,
1123
RRDSET_TYPE_LINE);
1124
1135
HYPERV,
1136
HYPERV ".vswitch_dropped_packets",
1137
"Virtual switch dropped packets",
1155
- "drops/sec",
1138
+ "drops/s",
1139
_COMMON_PLUGIN_NAME,
1140
_COMMON_PLUGIN_MODULE_NAME,
1158
- chart_priority++,
1141
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_DROPPED_PACKETS,
1142
update_every,
1143
RRDSET_TYPE_LINE);
1144
1155
HYPERV,
1156
HYPERV ".vswitch_extensions_dropped_packets",
1157
"Virtual switch extensions dropped packets",
1175
- "drops/sec",
1158
+ "drops/s",
1159
_COMMON_PLUGIN_NAME,
1160
_COMMON_PLUGIN_MODULE_NAME,
1178
- chart_priority++,
1161
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_EXTENSIONS_DROPPED_PACKETS,
1162
update_every,
1163
RRDSET_TYPE_LINE);
1164
1175
HYPERV,
1176
HYPERV ".vswitch_packets_flooded",
1177
"Virtual switch flooded packets",
1195
- "packets/sec",
1178
+ "packets/s",
1179
_COMMON_PLUGIN_NAME,
1180
_COMMON_PLUGIN_MODULE_NAME,
1198
- chart_priority++,
1181
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PACKETS_FLOODED,
1182
update_every,
1183
RRDSET_TYPE_LINE);
1184
1192
HYPERV,
1193
HYPERV ".vswitch_learned_mac_addresses",
1194
"Virtual switch learned MAC addresses",
1212
- "mac addresses/sec",
1195
+ "mac addresses/s",
1196
_COMMON_PLUGIN_NAME,
1197
_COMMON_PLUGIN_MODULE_NAME,
1215
- chart_priority++,
1198
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_LEARNED_MAC_ADDRESSES,
1199
update_every,
1200
RRDSET_TYPE_LINE);
1201
1209
HYPERV,
1210
HYPERV ".vswitch_purged_mac_addresses",
1211
"Virtual switch purged MAC addresses",
1229
- "mac addresses/sec",
1212
+ "mac addresses/s",
1213
_COMMON_PLUGIN_NAME,
1214
_COMMON_PLUGIN_MODULE_NAME,
1232
- chart_priority++,
1215
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VSWITCH_PURGED_MAC_ADDRESSES,
1216
update_every,
1217
RRDSET_TYPE_LINE);
1218
1262
return true;
1263
}
1264
1282
-
1265
struct hypervisor_network_adapter {
1266
bool collected_metadata;
1267
bool charts_created;
1268
1287
- RRDSET *st_packets;
1269
+ RRDSET *st_dropped_packets;
1270
DEFINE_RD(DroppedPacketsOutgoingSec);
1271
DEFINE_RD(DroppedPacketsIncomingSec);
1272
1273
+ RRDSET *st_send_receive_packets;
1274
+ DEFINE_RD(PacketsSentSec);
1275
+ DEFINE_RD(PacketsReceivedSec);
1276
+
1277
+ RRDSET *st_send_receive_bytes;
1278
+ DEFINE_RD(BytesSentSec);
1279
+ DEFINE_RD(BytesReceivedSec);
1280
+
1281
+ RRDSET *st_IPsecoffloadBytes;
1282
+ DEFINE_RD(IPsecoffloadBytesReceivedSec);
1283
+ DEFINE_RD(IPsecoffloadBytesSentSec);
1284
+
1285
+ RRDSET *st_DirectedPackets;
1286
+ DEFINE_RD(DirectedPacketsSentSec);
1287
+ DEFINE_RD(DirectedPacketsReceivedSec);
1288
+
1289
+ RRDSET *st_BroadcastPackets;
1290
+ DEFINE_RD(BroadcastPacketsSentSec);
1291
+ DEFINE_RD(BroadcastPacketsReceivedSec);
1292
+
1293
+ RRDSET *st_MulticastPackets;
1294
+ DEFINE_RD(MulticastPacketsSentSec);
1295
+ DEFINE_RD(MulticastPacketsReceivedSec);
1296
+
1297
COUNTER_DATA DroppedPacketsOutgoingSec;
1298
COUNTER_DATA DroppedPacketsIncomingSec;
1299
+
1300
+ COUNTER_DATA PacketsSentSec;
1301
+ COUNTER_DATA PacketsReceivedSec;
1302
+
1303
+ COUNTER_DATA BytesSentSec;
1304
+ COUNTER_DATA BytesReceivedSec;
1305
+
1306
+ COUNTER_DATA IPsecoffloadBytesReceivedSec;
1307
+ COUNTER_DATA IPsecoffloadBytesSentSec;
1308
+
1309
+ COUNTER_DATA DirectedPacketsSentSec;
1310
+ COUNTER_DATA DirectedPacketsReceivedSec;
1311
+
1312
+ COUNTER_DATA BroadcastPacketsSentSec;
1313
+ COUNTER_DATA BroadcastPacketsReceivedSec;
1314
+
1315
+ COUNTER_DATA MulticastPacketsSentSec;
1316
+ COUNTER_DATA MulticastPacketsReceivedSec;
1317
};
1318
1319
// Initialize the keys for the root partition metrics
1321
{
1322
p->DroppedPacketsOutgoingSec.key = "Dropped Packets Outgoing/sec";
1323
p->DroppedPacketsIncomingSec.key = "Dropped Packets Incoming/sec";
1324
+
1325
+ p->PacketsSentSec.key = "Packets Sent/sec";
1326
+ p->PacketsReceivedSec.key = "Packets Received/sec";
1327
+
1328
+ p->BytesSentSec.key = "Bytes Sent/sec";
1329
+ p->BytesReceivedSec.key = "Bytes Received/sec";
1330
+
1331
+ p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
1332
+ p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1333
+ p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1334
+ p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1335
+ p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1336
+ p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1337
+ p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1338
+ p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1339
}
1340
1341
void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1372
GET_INSTANCE_COUNTER(DroppedPacketsIncomingSec);
1373
GET_INSTANCE_COUNTER(DroppedPacketsOutgoingSec);
1374
1375
+ GET_INSTANCE_COUNTER(PacketsReceivedSec);
1376
+ GET_INSTANCE_COUNTER(PacketsSentSec);
1377
+
1378
+ GET_INSTANCE_COUNTER(BytesReceivedSec);
1379
+ GET_INSTANCE_COUNTER(BytesSentSec);
1380
+
1381
+ GET_INSTANCE_COUNTER(IPsecoffloadBytesReceivedSec);
1382
+ GET_INSTANCE_COUNTER(IPsecoffloadBytesSentSec);
1383
+
1384
+ GET_INSTANCE_COUNTER(DirectedPacketsSentSec);
1385
+ GET_INSTANCE_COUNTER(DirectedPacketsReceivedSec);
1386
+
1387
+ GET_INSTANCE_COUNTER(BroadcastPacketsSentSec);
1388
+ GET_INSTANCE_COUNTER(BroadcastPacketsReceivedSec);
1389
+
1390
+ GET_INSTANCE_COUNTER(MulticastPacketsSentSec);
1391
+ GET_INSTANCE_COUNTER(MulticastPacketsReceivedSec);
1392
+
1393
if (!p->charts_created) {
1394
p->charts_created = true;
1338
- p->st_packets = rrdset_create_localhost(
1395
+ p->st_dropped_packets = rrdset_create_localhost(
1396
"vm_net_interface_packets_dropped",
1397
windows_shared_buffer,
1398
NULL,
1399
HYPERV,
1400
HYPERV".vm_net_interface_packets_dropped",
1401
"VM interface packets dropped",
1345
- "drops/sec",
1402
+ "drops/s",
1403
+ _COMMON_PLUGIN_NAME,
1404
+ _COMMON_PLUGIN_MODULE_NAME,
1405
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS_DROPPED,
1406
+ update_every,
1407
+ RRDSET_TYPE_LINE);
1408
+
1409
+ p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1410
+ p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1411
+
1412
+ rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1413
+
1414
+ p->st_send_receive_packets = rrdset_create_localhost(
1415
+ "vm_net_interface_packets",
1416
+ windows_shared_buffer,
1417
+ NULL,
1418
+ HYPERV,
1419
+ HYPERV ".vm_net_interface_packets",
1420
+ "VM interface packets",
1421
+ "packets/s",
1422
+ _COMMON_PLUGIN_NAME,
1423
+ _COMMON_PLUGIN_MODULE_NAME,
1424
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
1425
+ update_every,
1426
+ RRDSET_TYPE_LINE);
1427
+
1428
+ p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1429
+ p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1430
+
1431
+ rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1432
+
1433
+ p->st_send_receive_bytes = rrdset_create_localhost(
1434
+ "vm_net_interface_traffic",
1435
+ windows_shared_buffer,
1436
+ NULL,
1437
+ HYPERV,
1438
+ HYPERV ".vm_net_interface_traffic",
1439
+ "VM interface traffic",
1440
+ "kilobits/s",
1441
+ _COMMON_PLUGIN_NAME,
1442
+ _COMMON_PLUGIN_MODULE_NAME,
1443
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1444
+ update_every,
1445
+ RRDSET_TYPE_AREA);
1446
+
1447
+ p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1448
+ p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1449
+ rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1450
+
1451
+ p->st_IPsecoffloadBytes = rrdset_create_localhost(
1452
+ "vm_net_interface_ipsec_traffic",
1453
+ windows_shared_buffer,
1454
+ NULL,
1455
+ HYPERV,
1456
+ HYPERV ".vm_net_interface_ipsec_traffic",
1457
+ "VM interface traffic",
1458
+ "kilobits/s",
1459
+ _COMMON_PLUGIN_NAME,
1460
+ _COMMON_PLUGIN_MODULE_NAME,
1461
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_IPSEC_TRAFFIC,
1462
+ update_every,
1463
+ RRDSET_TYPE_AREA);
1464
+
1465
+ p->rd_IPsecoffloadBytesReceivedSec =
1466
+ rrddim_add(p->st_IPsecoffloadBytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1467
+ p->rd_IPsecoffloadBytesSentSec =
1468
+ rrddim_add(p->st_IPsecoffloadBytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1469
+ rrdlabels_add(
1470
+ p->st_IPsecoffloadBytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1471
+
1472
+ p->st_DirectedPackets = rrdset_create_localhost(
1473
+ "vm_net_interface_directed_packets",
1474
+ windows_shared_buffer,
1475
+ NULL,
1476
+ HYPERV,
1477
+ HYPERV ".vm_net_interface_directed_packets",
1478
+ "VM interface traffic",
1479
+ "packets/s",
1480
+ _COMMON_PLUGIN_NAME,
1481
+ _COMMON_PLUGIN_MODULE_NAME,
1482
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_DIRECTED_PACKETS,
1483
+ update_every,
1484
+ RRDSET_TYPE_LINE);
1485
+
1486
+ p->rd_DirectedPacketsReceivedSec =
1487
+ rrddim_add(p->st_DirectedPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1488
+ p->rd_DirectedPacketsSentSec =
1489
+ rrddim_add(p->st_DirectedPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1490
+ rrdlabels_add(
1491
+ p->st_DirectedPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1492
+
1493
+ p->st_BroadcastPackets = rrdset_create_localhost(
1494
+ "vm_net_interface_broadcast_packets",
1495
+ windows_shared_buffer,
1496
+ NULL,
1497
+ HYPERV,
1498
+ HYPERV ".vm_net_interface_broadcast_packets",
1499
+ "VM interface broadcast",
1500
+ "packets/s",
1501
+ _COMMON_PLUGIN_NAME,
1502
+ _COMMON_PLUGIN_MODULE_NAME,
1503
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_PACKETS,
1504
+ update_every,
1505
+ RRDSET_TYPE_LINE);
1506
+
1507
+ p->rd_BroadcastPacketsReceivedSec =
1508
+ rrddim_add(p->st_BroadcastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1509
+ p->rd_BroadcastPacketsSentSec =
1510
+ rrddim_add(p->st_BroadcastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1511
+ rrdlabels_add(
1512
+ p->st_BroadcastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1513
+
1514
+ p->st_MulticastPackets = rrdset_create_localhost(
1515
+ "vm_net_interface_multicast_packets",
1516
+ windows_shared_buffer,
1517
+ NULL,
1518
+ HYPERV,
1519
+ HYPERV ".vm_net_interface_multicast_packets",
1520
+ "VM interface multicast",
1521
+ "packets/s",
1522
_COMMON_PLUGIN_NAME,
1523
_COMMON_PLUGIN_MODULE_NAME,
1348
- chart_priority++,
1524
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_MULTICAST_PACKETS,
1525
update_every,
1526
RRDSET_TYPE_LINE);
1527
1352
- p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1353
- p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1528
+ p->rd_MulticastPacketsReceivedSec =
1529
+ rrddim_add(p->st_MulticastPackets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1530
+ p->rd_MulticastPacketsSentSec =
1531
+ rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1532
+ rrdlabels_add(
1533
+ p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1534
+
1535
1355
- rrdlabels_add(p->st_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1536
}
1537
1358
- SETP_DIM_VALUE(st_packets, DroppedPacketsIncomingSec);
1359
- SETP_DIM_VALUE(st_packets, DroppedPacketsOutgoingSec);
1538
+ SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
1539
+ SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsOutgoingSec);
1540
1361
- rrdset_done(p->st_packets);
1541
+ SETP_DIM_VALUE(st_send_receive_packets, PacketsReceivedSec);
1542
+ SETP_DIM_VALUE(st_send_receive_packets, PacketsSentSec);
1543
+
1544
+ SETP_DIM_VALUE(st_send_receive_bytes, BytesReceivedSec);
1545
+ SETP_DIM_VALUE(st_send_receive_bytes, BytesSentSec);
1546
+
1547
+ SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesReceivedSec);
1548
+ SETP_DIM_VALUE(st_IPsecoffloadBytes, IPsecoffloadBytesSentSec);
1549
+
1550
+ SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsSentSec);
1551
+ SETP_DIM_VALUE(st_DirectedPackets, DirectedPacketsReceivedSec);
1552
+
1553
+ SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
1554
+ SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
1555
+
1556
+ SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
1557
+ SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
1558
+
1559
+ rrdset_done(p->st_IPsecoffloadBytes);
1560
+ rrdset_done(p->st_DirectedPackets);
1561
+ rrdset_done(p->st_BroadcastPackets);
1562
+ rrdset_done(p->st_MulticastPackets);
1563
+ rrdset_done(p->st_send_receive_bytes);
1564
+ rrdset_done(p->st_send_receive_packets);
1565
+ rrdset_done(p->st_dropped_packets);
1566
}
1567
return true;
1568
}
1579
DEFINE_RD(HypervisorRunTime);
1580
DEFINE_RD(RemoteRunTime);
1581
1582
+ RRDSET *st_HypervisorProcessorTotal;
1583
+ DEFINE_RD(TotalRunTime);
1584
+
1585
COUNTER_DATA GuestRunTime;
1586
COUNTER_DATA HypervisorRunTime;
1587
COUNTER_DATA RemoteRunTime;
1588
+ COUNTER_DATA TotalRunTime;
1589
+ collected_number GuestRunTime_total;
1590
+ collected_number HypervisorRunTime_total;
1591
+ collected_number RemoteRunTime_total;
1592
+ collected_number TotalRunTime_total;
1593
};
1594
1595
1598
p->GuestRunTime.key = "% Guest Run Time";
1599
p->HypervisorRunTime.key = "% Hypervisor Run Time";
1600
p->RemoteRunTime.key = "% Remote Run Time";
1601
+ p->TotalRunTime.key = "% Total Run Time";
1602
+ p->GuestRunTime_total = 0;
1603
+ p->HypervisorRunTime_total = 0;
1604
+ p->RemoteRunTime_total = 0;
1605
+ p->TotalRunTime_total = 0;
1606
}
1607
1608
void dict_hyperv_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1627
1628
get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1629
1413
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1630
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1631
continue;
1632
1633
+ char *vm = strchr(windows_shared_buffer, ':');
1634
+ if (vm)
1635
+ *vm = '\0';
1636
+
1637
struct hypervisor_processor *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
1638
1639
if (!p->collected_metadata) {
1643
GET_INSTANCE_COUNTER(GuestRunTime);
1644
GET_INSTANCE_COUNTER(HypervisorRunTime);
1645
GET_INSTANCE_COUNTER(RemoteRunTime);
1646
+ GET_INSTANCE_COUNTER(TotalRunTime);
1647
1648
if (!p->charts_created) {
1649
p->charts_created = true;
1428
- p->st_HypervisorProcessor = rrdset_create_localhost(
1650
+ p->st_HypervisorProcessorTotal = rrdset_create_localhost(
1651
"vm_cpu_usage",
1652
windows_shared_buffer,
1653
NULL,
1654
HYPERV,
1655
HYPERV ".vm_cpu_usage",
1434
- "VM CPU usage (100% = 1 core)",
1656
+ "VM CPU usage",
1657
"percentage",
1658
_COMMON_PLUGIN_NAME,
1659
_COMMON_PLUGIN_MODULE_NAME,
1438
- chart_priority++,
1660
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE,
1661
update_every,
1662
RRDSET_TYPE_STACKED);
1663
1664
+ p->rd_TotalRunTime =
1665
+ rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1666
+ rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1667
+
1668
+ p->st_HypervisorProcessor = rrdset_create_localhost(
1669
+ "vm_cpu_usage_by_run_context",
1670
+ windows_shared_buffer,
1671
+ NULL,
1672
+ HYPERV,
1673
+ HYPERV ".vm_cpu_usage_by_run_context",
1674
+ "VM CPU usage by run context",
1675
+ "percentage",
1676
+ _COMMON_PLUGIN_NAME,
1677
+ _COMMON_PLUGIN_MODULE_NAME,
1678
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1679
+ update_every,
1680
+ RRDSET_TYPE_STACKED);
1681
+
1682
p->rd_GuestRunTime =
1443
- rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1683
+ rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1684
p->rd_HypervisorRunTime =
1445
- rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1685
+ rrddim_add(p->st_HypervisorProcessor, "hypervisor", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1686
p->rd_RemoteRunTime =
1447
- rrddim_add(p->st_HypervisorProcessor, "remote", NULL, -1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
1687
+ rrddim_add(p->st_HypervisorProcessor, "remote", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1688
1689
rrdlabels_add(p->st_HypervisorProcessor->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1690
}
1691
1452
- SETP_DIM_VALUE(st_HypervisorProcessor, GuestRunTime);
1453
- SETP_DIM_VALUE(st_HypervisorProcessor, HypervisorRunTime);
1454
- SETP_DIM_VALUE(st_HypervisorProcessor, RemoteRunTime);
1692
+ p->GuestRunTime_total += (collected_number)p->GuestRunTime.current.Data;
1693
+ p->HypervisorRunTime_total += (collected_number)p->HypervisorRunTime.current.Data;
1694
+ p->RemoteRunTime_total += (collected_number)p->RemoteRunTime.current.Data;
1695
+ p->TotalRunTime_total += (collected_number)p->TotalRunTime.current.Data;
1696
+ }
1697
1456
- rrdset_done(p->st_HypervisorProcessor);
1698
+ {
1699
+ struct hypervisor_processor *p;
1700
+ dfe_start_read(item->instance, p) {
1701
+ rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
1702
+ rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
1703
+ rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
1704
+ rrdset_done(p->st_HypervisorProcessor);
1705
+
1706
+ rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
1707
+ rrdset_done(p->st_HypervisorProcessorTotal);
1708
+
1709
+ p->GuestRunTime_total = 0;
1710
+ p->HypervisorRunTime_total = 0;
1711
+ p->RemoteRunTime_total = 0;
1712
+ p->TotalRunTime_total = 0;
1713
+ }
1714
+ dfe_done(p);
1715
}
1716
+
1717
return true;
1718
}
1719