@cryptotaxi247 / netdata-1 / commits / 38731a94e

update ebpf-socket function name and columns (#16727)

improve ebpf-socket function

Ilya Mashchenko committed Jan 4, 2024 at 22:45 UTC 38731a94e9c607749cdfd97caea8e3dc7af0439f
2 files changed +70 -100
collectors/ebpf.plugin/ebpf_functions.c
+69 -99
@@ -92,6 +92,10 @@ static inline void ebpf_socket_fill_fake_socket(netdata_socket_plus_t *fake_valu
92 fake_values->data.protocol = AF_UNSPEC;
93 }
94
95 +static NETDATA_DOUBLE bytes_to_mb(uint64_t bytes) {
96 + return (NETDATA_DOUBLE)bytes / (1024 * 1024);
97 +}
98 +
99 /**
100 * Fill function buffer
101 *
@@ -112,10 +116,10 @@ static void ebpf_fill_function_buffer(BUFFER *wb, netdata_socket_plus_t *values,
116 buffer_json_add_array_item_uint64(wb, (uint64_t)values->pid);
117
118 // NAME
115 - buffer_json_add_array_item_string(wb, (name) ? name : "not identified");
119 + buffer_json_add_array_item_string(wb, (name) ? name : "unknown");
120
121 // Origin
118 - buffer_json_add_array_item_string(wb, (values->data.external_origin) ? "incoming" : "outgoing");
122 + buffer_json_add_array_item_string(wb, (values->data.external_origin) ? "in" : "out");
123
124 // Source IP
125 buffer_json_add_array_item_string(wb, values->socket_string.src_ip);
@@ -131,39 +135,19 @@ static void ebpf_fill_function_buffer(BUFFER *wb, netdata_socket_plus_t *values,
135
136 uint64_t connections;
137 if (values->data.protocol == IPPROTO_TCP) {
134 - // Protocol
138 buffer_json_add_array_item_string(wb, "TCP");
136 -
137 - // Bytes received
138 - buffer_json_add_array_item_uint64(wb, (uint64_t) values->data.tcp.tcp_bytes_received);
139 -
140 - // Bytes sent
141 - buffer_json_add_array_item_uint64(wb, (uint64_t) values->data.tcp.tcp_bytes_sent);
142 -
143 - // Connections
139 + buffer_json_add_array_item_double(wb, bytes_to_mb(values->data.tcp.tcp_bytes_received));
140 + buffer_json_add_array_item_double(wb, bytes_to_mb(values->data.tcp.tcp_bytes_sent));
141 connections = values->data.tcp.ipv4_connect + values->data.tcp.ipv6_connect;
142 } else if (values->data.protocol == IPPROTO_UDP) {
146 - // Protocol
143 buffer_json_add_array_item_string(wb, "UDP");
148 -
149 - // Bytes received
150 - buffer_json_add_array_item_uint64(wb, (uint64_t) values->data.udp.udp_bytes_received);
151 -
152 - // Bytes sent
153 - buffer_json_add_array_item_uint64(wb, (uint64_t) values->data.udp.udp_bytes_sent);
154 -
155 - // Connections
144 + buffer_json_add_array_item_double(wb, bytes_to_mb(values->data.udp.udp_bytes_received));
145 + buffer_json_add_array_item_double(wb, bytes_to_mb(values->data.udp.udp_bytes_sent));
146 connections = values->data.udp.call_udp_sent + values->data.udp.call_udp_received;
147 } else {
158 - // Protocol
148 buffer_json_add_array_item_string(wb, "UNSPEC");
160 -
161 - // Bytes received
162 - buffer_json_add_array_item_uint64(wb, 0);
163 -
164 - // Bytes sent
165 - buffer_json_add_array_item_uint64(wb, 0);
166 -
149 + buffer_json_add_array_item_double(wb, 0);
150 + buffer_json_add_array_item_double(wb, 0);
151 connections = 1;
152 }
153
@@ -475,26 +459,29 @@ for (int i = 1; i < PLUGINSD_MAX_WORDS; i++) {
459 RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY,
460 NULL);
461
478 - buffer_rrdf_table_add_field(wb, fields_id++, "PName", "Process Name", RRDF_FIELD_TYPE_STRING,
462 + buffer_rrdf_table_add_field(wb, fields_id++, "Name", "Process Name", RRDF_FIELD_TYPE_STRING,
463 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
464 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
465 RRDF_FIELD_FILTER_MULTISELECT,
482 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
466 + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY | RRDF_FIELD_OPTS_FULL_WIDTH,
467 + NULL);
468
484 - buffer_rrdf_table_add_field(wb, fields_id++, "Origin", "The connection origin.", RRDF_FIELD_TYPE_STRING,
469 + buffer_rrdf_table_add_field(wb, fields_id++, "Origin", "Connection Origin", RRDF_FIELD_TYPE_STRING,
470 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
471 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
472 RRDF_FIELD_FILTER_MULTISELECT,
488 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
473 + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
474 + NULL);
475
490 - buffer_rrdf_table_add_field(wb, fields_id++, "Request from", "Request from IP", RRDF_FIELD_TYPE_STRING,
476 + buffer_rrdf_table_add_field(wb, fields_id++, "Src", "Source IP Address", RRDF_FIELD_TYPE_STRING,
477 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
478 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
479 RRDF_FIELD_FILTER_MULTISELECT,
494 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
480 + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
481 + NULL);
482
483 /*
497 - buffer_rrdf_table_add_field(wb, fields_id++, "SRC PORT", "Source Port", RRDF_FIELD_TYPE_INTEGER,
484 + buffer_rrdf_table_add_field(wb, fields_id++, "SrcPort", "Source Port", RRDF_FIELD_TYPE_INTEGER,
485 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 0, NULL, NAN,
486 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
487 RRDF_FIELD_FILTER_MULTISELECT,
@@ -502,70 +489,74 @@ for (int i = 1; i < PLUGINSD_MAX_WORDS; i++) {
489 NULL);
490 */
491
505 - buffer_rrdf_table_add_field(wb, fields_id++, "Destination IP", "Destination IP", RRDF_FIELD_TYPE_STRING,
492 + buffer_rrdf_table_add_field(wb, fields_id++, "Dst", "Destination IP Address", RRDF_FIELD_TYPE_STRING,
493 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
494 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
495 RRDF_FIELD_FILTER_MULTISELECT,
509 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
496 + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
497 + NULL);
498
511 - buffer_rrdf_table_add_field(wb, fields_id++, "Destination Port", "Destination Port", RRDF_FIELD_TYPE_STRING,
499 + buffer_rrdf_table_add_field(wb, fields_id++, "DstPort", "Destination Port", RRDF_FIELD_TYPE_STRING,
500 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
501 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
502 RRDF_FIELD_FILTER_MULTISELECT,
515 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
503 + RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
504 + NULL);
505
517 - buffer_rrdf_table_add_field(wb, fields_id++, "Protocol", "Communication protocol", RRDF_FIELD_TYPE_STRING,
506 + buffer_rrdf_table_add_field(wb, fields_id++, "Protocol", "Transport Layer Protocol", RRDF_FIELD_TYPE_STRING,
507 RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE, 0, NULL, NAN,
508 RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
509 RRDF_FIELD_FILTER_MULTISELECT,
521 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY, NULL);
510 + RRDF_FIELD_OPTS_NONE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
511 + NULL);
512
523 - buffer_rrdf_table_add_field(wb, fields_id++, "IncomingBandwidth", "Bytes received.", RRDF_FIELD_TYPE_INTEGER,
524 - RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 0, NULL, NAN,
525 - RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
526 - RRDF_FIELD_FILTER_MULTISELECT,
527 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY,
513 + buffer_rrdf_table_add_field(wb, fields_id++, "Rcvd", "Traffic Received", RRDF_FIELD_TYPE_INTEGER,
514 + RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 3, "MB", NAN,
515 + RRDF_FIELD_SORT_DESCENDING, NULL, RRDF_FIELD_SUMMARY_SUM,
516 + RRDF_FIELD_FILTER_NONE,
517 + RRDF_FIELD_OPTS_VISIBLE,
518 NULL);
519
530 - buffer_rrdf_table_add_field(wb, fields_id++, "OutgoingBandwidth", "Bytes sent.", RRDF_FIELD_TYPE_INTEGER,
531 - RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 0, NULL, NAN,
532 - RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
533 - RRDF_FIELD_FILTER_MULTISELECT,
534 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY,
520 + buffer_rrdf_table_add_field(wb, fields_id++, "Sent", "Traffic Sent", RRDF_FIELD_TYPE_INTEGER,
521 + RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 3, "MB", NAN,
522 + RRDF_FIELD_SORT_DESCENDING, NULL, RRDF_FIELD_SUMMARY_SUM,
523 + RRDF_FIELD_FILTER_NONE,
524 + RRDF_FIELD_OPTS_VISIBLE,
525 NULL);
526
537 - buffer_rrdf_table_add_field(wb, fields_id, "Connections", "Number of calls to tcp_vX_connections and udp_sendmsg, where X is the protocol version.", RRDF_FIELD_TYPE_INTEGER,
538 - RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 0, NULL, NAN,
539 - RRDF_FIELD_SORT_ASCENDING, NULL, RRDF_FIELD_SUMMARY_COUNT,
540 - RRDF_FIELD_FILTER_MULTISELECT,
541 - RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_STICKY,
527 + buffer_rrdf_table_add_field(wb, fields_id, "Conns", "Connections", RRDF_FIELD_TYPE_INTEGER,
528 + RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NUMBER, 0, "connections", NAN,
529 + RRDF_FIELD_SORT_DESCENDING, NULL, RRDF_FIELD_SUMMARY_SUM,
530 + RRDF_FIELD_FILTER_NONE,
531 + RRDF_FIELD_OPTS_VISIBLE,
532 NULL);
533 }
534 buffer_json_object_close(wb); // columns
535
546 - buffer_json_member_add_string(wb, "default_sort_column", "IncomingBandwidth");
536 + buffer_json_member_add_string(wb, "default_sort_column", "Rcvd");
537
538 buffer_json_member_add_object(wb, "charts");
539 {
550 - buffer_json_member_add_object(wb, "IncomingConnections");
540 + buffer_json_member_add_object(wb, "Traffic");
541 {
552 - buffer_json_member_add_string(wb, "name", "TCP Inbound Connection");
542 + buffer_json_member_add_string(wb, "name", "Traffic");
543 buffer_json_member_add_string(wb, "type", "stacked-bar");
544 buffer_json_member_add_array(wb, "columns");
545 {
556 - buffer_json_add_array_item_string(wb, "IncomingBandwidth");
546 + buffer_json_add_array_item_string(wb, "Rcvd");
547 + buffer_json_add_array_item_string(wb, "Sent");
548 }
549 buffer_json_array_close(wb);
550 }
551 buffer_json_object_close(wb);
552
562 - buffer_json_member_add_object(wb, "OutgoingConnections");
553 + buffer_json_member_add_object(wb, "Connections");
554 {
564 - buffer_json_member_add_string(wb, "name", "TCP Outgoing Connection");
555 + buffer_json_member_add_string(wb, "name", "Connections");
556 buffer_json_member_add_string(wb, "type", "stacked-bar");
557 buffer_json_member_add_array(wb, "columns");
558 {
568 - buffer_json_add_array_item_string(wb, "OutgoingBandwidth");
559 + buffer_json_add_array_item_string(wb, "Conns");
560 }
561 buffer_json_array_close(wb);
562 }
@@ -576,45 +567,30 @@ for (int i = 1; i < PLUGINSD_MAX_WORDS; i++) {
567 buffer_json_member_add_array(wb, "default_charts");
568 {
569 buffer_json_add_array_item_array(wb);
579 - buffer_json_add_array_item_string(wb, "IncomingConnections");
580 - buffer_json_add_array_item_string(wb, "PName");
570 + buffer_json_add_array_item_string(wb, "Traffic");
571 + buffer_json_add_array_item_string(wb, "Name");
572 buffer_json_array_close(wb);
573
574 buffer_json_add_array_item_array(wb);
584 - buffer_json_add_array_item_string(wb, "OutgoingConnections");
585 - buffer_json_add_array_item_string(wb, "PName");
575 + buffer_json_add_array_item_string(wb, "Connections");
576 + buffer_json_add_array_item_string(wb, "Name");
577 buffer_json_array_close(wb);
578 }
579 buffer_json_array_close(wb);
580
590 - // Do we use only on fields that can be groupped?
581 buffer_json_member_add_object(wb, "group_by");
582 {
593 - // group by PID
594 - buffer_json_member_add_object(wb, "PID");
595 - {
596 - buffer_json_member_add_string(wb, "name", "Process ID");
597 - buffer_json_member_add_array(wb, "columns");
598 - {
599 - buffer_json_add_array_item_string(wb, "PID");
600 - }
601 - buffer_json_array_close(wb);
602 - }
603 - buffer_json_object_close(wb);
604 -
605 - // group by Process Name
606 - buffer_json_member_add_object(wb, "PName");
583 + buffer_json_member_add_object(wb, "Name");
584 {
585 buffer_json_member_add_string(wb, "name", "Process Name");
586 buffer_json_member_add_array(wb, "columns");
587 {
611 - buffer_json_add_array_item_string(wb, "PName");
588 + buffer_json_add_array_item_string(wb, "Name");
589 }
590 buffer_json_array_close(wb);
591 }
592 buffer_json_object_close(wb);
593
617 - // group by Process Name
594 buffer_json_member_add_object(wb, "Origin");
595 {
596 buffer_json_member_add_string(wb, "name", "Origin");
@@ -626,43 +602,39 @@ for (int i = 1; i < PLUGINSD_MAX_WORDS; i++) {
602 }
603 buffer_json_object_close(wb);
604
629 - // group by Request From IP
630 - buffer_json_member_add_object(wb, "Request from");
605 + buffer_json_member_add_object(wb, "Src");
606 {
632 - buffer_json_member_add_string(wb, "name", "Request from IP");
607 + buffer_json_member_add_string(wb, "name", "Source IP");
608 buffer_json_member_add_array(wb, "columns");
609 {
635 - buffer_json_add_array_item_string(wb, "Request from");
610 + buffer_json_add_array_item_string(wb, "Src");
611 }
612 buffer_json_array_close(wb);
613 }
614 buffer_json_object_close(wb);
615
641 - // group by Destination IP
642 - buffer_json_member_add_object(wb, "Destination IP");
616 + buffer_json_member_add_object(wb, "Dst");
617 {
618 buffer_json_member_add_string(wb, "name", "Destination IP");
619 buffer_json_member_add_array(wb, "columns");
620 {
647 - buffer_json_add_array_item_string(wb, "Destination IP");
621 + buffer_json_add_array_item_string(wb, "Dst");
622 }
623 buffer_json_array_close(wb);
624 }
625 buffer_json_object_close(wb);
626
653 - // group by DST Port
654 - buffer_json_member_add_object(wb, "Destination Port");
627 + buffer_json_member_add_object(wb, "DstPort");
628 {
629 buffer_json_member_add_string(wb, "name", "Destination Port");
630 buffer_json_member_add_array(wb, "columns");
631 {
659 - buffer_json_add_array_item_string(wb, "Destination Port");
632 + buffer_json_add_array_item_string(wb, "DstPort");
633 }
634 buffer_json_array_close(wb);
635 }
636 buffer_json_object_close(wb);
637
665 - // group by Protocol
638 buffer_json_member_add_object(wb, "Protocol");
639 {
640 buffer_json_member_add_string(wb, "name", "Protocol");
@@ -711,10 +683,8 @@ void *ebpf_function_thread(void *ptr)
683 &lock,
684 &ebpf_plugin_exit);
685
714 - functions_evloop_add_function(wg,
715 - "ebpf_socket",
716 - ebpf_function_socket_manipulation,
717 - PLUGINS_FUNCTIONS_TIMEOUT_DEFAULT);
686 + functions_evloop_add_function(
687 + wg, EBPF_FUNCTION_SOCKET, ebpf_function_socket_manipulation, PLUGINS_FUNCTIONS_TIMEOUT_DEFAULT);
688
689 pthread_mutex_lock(&lock);
690 int i;
collectors/ebpf.plugin/ebpf_functions.h
+1 -1
@@ -14,7 +14,7 @@ static inline void EBPF_PLUGIN_FUNCTIONS(const char *NAME, const char *DESC, int
14 #define NETDATA_EBPF_FUNCTIONS_MODULE_DESC "Show information about current function status."
15
16 // function list
17 -#define EBPF_FUNCTION_SOCKET "ebpf_socket"
17 +#define EBPF_FUNCTION_SOCKET "network-connections"
18
19 // socket constants
20 #define EBPF_PLUGIN_SOCKET_FUNCTION_DESCRIPTION "Detailed information about open sockets."