From 678104df8a2546104bb9da63268e1629b8da3540 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 28 Apr 2023 12:26:39 -0700 Subject: [PATCH] Record incoming packet metrics via Peer::recordIncomingPacket --- node/IncomingPacket.cpp | 1 + node/Metrics.cpp | 4 +++ node/Metrics.hpp | 2 ++ node/Peer.cpp | 67 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+) diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index e3437cdc4..532a99fe0 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -86,6 +86,7 @@ bool IncomingPacket::tryDecode(const RuntimeEnvironment *RR,void *tPtr,int32_t f switch(v) { //case Packet::VERB_NOP: default: // ignore unknown verbs, but if they pass auth check they are "received" + Metrics::pkt_nop_in++; peer->received(tPtr,_path,hops(),packetId(),payloadLength(),v,0,Packet::VERB_NOP,false,0,ZT_QOS_NO_FLOW); break; case Packet::VERB_HELLO: r = _doHELLO(RR,tPtr,true); break; diff --git a/node/Metrics.cpp b/node/Metrics.cpp index cdfc04683..1228f501a 100644 --- a/node/Metrics.cpp +++ b/node/Metrics.cpp @@ -27,6 +27,8 @@ namespace ZeroTier { { "zt_packet_incoming", "incoming packet type counts"}; // Incoming packets + prometheus::simpleapi::counter_metric_t pkt_nop_in + { packets.Add({{"packet_type", "nop"}, {"direction", "rx"}}) }; prometheus::simpleapi::counter_metric_t pkt_error_in { packets.Add({{"packet_type", "error"}, {"direction", "rx"}}) }; prometheus::simpleapi::counter_metric_t pkt_ack_in @@ -69,6 +71,8 @@ namespace ZeroTier { { packets.Add({{"packet_type", "path_negotiation_request"}, {"direction", "rx"}}) }; // Outgoing packets + prometheus::simpleapi::counter_metric_t pkt_nop_out + { packets.Add({{"packet_type", "nop"}, {"direction", "tx"}}) }; prometheus::simpleapi::counter_metric_t pkt_error_out { packets.Add({{"packet_type", "error"}, {"direction", "tx"}}) }; prometheus::simpleapi::counter_metric_t pkt_ack_out diff --git a/node/Metrics.hpp b/node/Metrics.hpp index d11eddc86..1c4dc223e 100644 --- a/node/Metrics.hpp +++ b/node/Metrics.hpp @@ -26,6 +26,7 @@ namespace ZeroTier { extern prometheus::simpleapi::counter_family_t packets; // incoming packets + extern prometheus::simpleapi::counter_metric_t pkt_nop_in; extern prometheus::simpleapi::counter_metric_t pkt_error_in; extern prometheus::simpleapi::counter_metric_t pkt_ack_in; extern prometheus::simpleapi::counter_metric_t pkt_qos_in; @@ -48,6 +49,7 @@ namespace ZeroTier { extern prometheus::simpleapi::counter_metric_t pkt_path_negotiation_request_in; // outgoing packets + extern prometheus::simpleapi::counter_metric_t pkt_nop_out; extern prometheus::simpleapi::counter_metric_t pkt_error_out; extern prometheus::simpleapi::counter_metric_t pkt_ack_out; extern prometheus::simpleapi::counter_metric_t pkt_qos_out; diff --git a/node/Peer.cpp b/node/Peer.cpp index 5cb55fa4b..a0442d9a1 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -22,6 +22,7 @@ #include "InetAddress.hpp" #include "RingBuffer.hpp" #include "Utils.hpp" +#include "Metrics.hpp" namespace ZeroTier { @@ -622,6 +623,72 @@ void Peer::recordOutgoingPacket(const SharedPtr &path, const uint64_t pack if (_localMultipathSupported && _bond) { _bond->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); } + + switch (verb) { + case Packet::VERB_NOP: + Metrics::pkt_nop_out++; + break; + case Packet::VERB_HELLO: + Metrics::pkt_hello_out++; + break; + case Packet::VERB_ERROR: + Metrics::pkt_error_out++; + break; + case Packet::VERB_OK: + Metrics::pkt_ok_out++; + break; + case Packet::VERB_WHOIS: + Metrics::pkt_whois_out++; + break; + case Packet::VERB_RENDEZVOUS: + Metrics::pkt_rendezvous_out++; + break; + case Packet::VERB_FRAME: + Metrics::pkt_frame_out++; + break; + case Packet::VERB_EXT_FRAME: + Metrics::pkt_ext_frame_out++; + break; + case Packet::VERB_ECHO: + Metrics::pkt_echo_out++; + break; + case Packet::VERB_MULTICAST_LIKE: + Metrics::pkt_multicast_like_out++; + break; + case Packet::VERB_NETWORK_CREDENTIALS: + Metrics::pkt_network_credentials_out++; + break; + case Packet::VERB_NETWORK_CONFIG_REQUEST: + Metrics::pkt_network_config_request_out++; + break; + case Packet::VERB_NETWORK_CONFIG: + Metrics::pkt_network_config_out++; + break; + case Packet::VERB_MULTICAST_GATHER: + Metrics::pkt_multicast_gather_out++; + break; + case Packet::VERB_MULTICAST_FRAME: + Metrics::pkt_multicast_frame_out++; + break; + case Packet::VERB_PUSH_DIRECT_PATHS: + Metrics::pkt_push_direct_paths_out++; + break; + case Packet::VERB_ACK: + Metrics::pkt_ack_out++; + break; + case Packet::VERB_QOS_MEASUREMENT: + Metrics::pkt_qos_out++; + break; + case Packet::VERB_USER_MESSAGE: + Metrics::pkt_user_message_out++; + break; + case Packet::VERB_REMOTE_TRACE: + Metrics::pkt_remote_trace_out++; + break; + case Packet::VERB_PATH_NEGOTIATION_REQUEST: + Metrics::pkt_path_negotiation_request_out++; + break; + } } void Peer::recordIncomingInvalidPacket(const SharedPtr& path)