From 3b7883f7bfe7d611366c75f640e2ad9dd791621d Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 3 May 2023 14:40:50 -0700 Subject: [PATCH] per peer packet metrics --- node/Metrics.cpp | 6 ++++++ node/Metrics.hpp | 3 +++ node/Peer.cpp | 8 ++++++-- node/Peer.hpp | 4 ++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/node/Metrics.cpp b/node/Metrics.cpp index 1fabf9b2b..aea57114c 100644 --- a/node/Metrics.cpp +++ b/node/Metrics.cpp @@ -181,6 +181,12 @@ namespace ZeroTier { { "zt_peer_latency", "peer latency (ms)", {{}}}; prometheus::simpleapi::gauge_family_t peer_path_count { "zt_peer_path_count", "number of paths to peer" }; + prometheus::simpleapi::counter_family_t peer_incoming_packets + { "zt_peer_incoming_packets", "number of incoming packets from a peer" }; + prometheus::simpleapi::counter_family_t peer_outgoing_packets + { "zt_peer_outgoing_packets", "number of outgoing packets to a peer" }; + prometheus::simpleapi::counter_family_t peer_packet_errors + { "zt_peer_packet_errors" , "number of incoming packet errors from a peer" }; // General Controller Metrics prometheus::simpleapi::gauge_metric_t network_count diff --git a/node/Metrics.hpp b/node/Metrics.hpp index 13df1e4d1..c2c39f7f1 100644 --- a/node/Metrics.hpp +++ b/node/Metrics.hpp @@ -110,6 +110,9 @@ namespace ZeroTier { // Peer Metrics extern prometheus::CustomFamily> peer_latency; extern prometheus::simpleapi::gauge_family_t peer_path_count; + extern prometheus::simpleapi::counter_family_t peer_incoming_packets; + extern prometheus::simpleapi::counter_family_t peer_outgoing_packets; + extern prometheus::simpleapi::counter_family_t peer_packet_errors; // General Controller Metrics extern prometheus::simpleapi::gauge_metric_t network_count; diff --git a/node/Peer.cpp b/node/Peer.cpp index daa663c4e..0a460f6f6 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -52,7 +52,10 @@ Peer::Peer(const RuntimeEnvironment *renv,const Identity &myIdentity,const Ident _localMultipathSupported(false), _lastComputedAggregateMeanLatency(0), _peer_latency{Metrics::peer_latency.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}}, std::vector{1,3,6,10,30,60,100,300,600,1000})}, - _path_count{Metrics::peer_path_count.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}})} + _path_count{Metrics::peer_path_count.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}})}, + _incoming_packet{Metrics::peer_incoming_packets.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}})}, + _outgoing_packet{Metrics::peer_outgoing_packets.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}})}, + _packet_errors{Metrics::peer_packet_errors.Add({{"node_id", OSUtils::nodeIDStr(peerIdentity.address().toInt())}})} { if (!myIdentity.agree(peerIdentity,_key)) { throw ZT_EXCEPTION_INVALID_ARGUMENT; @@ -93,7 +96,7 @@ void Peer::received( default: break; } - + _incoming_packet++; recordIncomingPacket(path, packetId, payloadLength, verb, flowId, now); if (trustEstablished) { @@ -645,6 +648,7 @@ void Peer::recordOutgoingPacket(const SharedPtr &path, const uint64_t pack void Peer::recordIncomingInvalidPacket(const SharedPtr& path) { + _packet_errors++; if (_localMultipathSupported && _bond) { _bond->recordIncomingInvalidPacket(path); } diff --git a/node/Peer.hpp b/node/Peer.hpp index 37b77f0ad..a5ccd45e7 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -144,6 +144,7 @@ public: { SharedPtr bp(getAppropriatePath(now,force)); if (bp) { + _outgoing_packet++; return bp->send(RR,tPtr,data,len,now); } return false; @@ -601,6 +602,9 @@ private: prometheus::Histogram _peer_latency; prometheus::simpleapi::gauge_metric_t _path_count; + prometheus::simpleapi::counter_metric_t _incoming_packet; + prometheus::simpleapi::counter_metric_t _outgoing_packet; + prometheus::simpleapi::counter_metric_t _packet_errors; }; } // namespace ZeroTier