mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-10 04:01:51 +00:00
improve libp2p connected peer metrics (#4870)
* improve libp2p connected peer metrics * separate discv5 port from libp2p for NAT open * use metric family for DISCOVERY_BYTES * Merge branch 'unstable' of https://github.com/sigp/lighthouse into improve-metrics
This commit is contained in:
@@ -726,29 +726,14 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut connected_peer_count = 0;
|
||||
let mut inbound_connected_peers = 0;
|
||||
let mut outbound_connected_peers = 0;
|
||||
let mut clients_per_peer = HashMap::new();
|
||||
|
||||
for (_peer, peer_info) in self.network_globals.peers.read().connected_peers() {
|
||||
connected_peer_count += 1;
|
||||
if let PeerConnectionStatus::Connected { n_in, .. } = peer_info.connection_status() {
|
||||
if *n_in > 0 {
|
||||
inbound_connected_peers += 1;
|
||||
} else {
|
||||
outbound_connected_peers += 1;
|
||||
}
|
||||
}
|
||||
*clients_per_peer
|
||||
.entry(peer_info.client().kind.to_string())
|
||||
.or_default() += 1;
|
||||
}
|
||||
|
||||
metrics::set_gauge(&metrics::PEERS_CONNECTED, connected_peer_count);
|
||||
metrics::set_gauge(&metrics::NETWORK_INBOUND_PEERS, inbound_connected_peers);
|
||||
metrics::set_gauge(&metrics::NETWORK_OUTBOUND_PEERS, outbound_connected_peers);
|
||||
|
||||
for client_kind in ClientKind::iter() {
|
||||
let value = clients_per_peer.get(&client_kind.to_string()).unwrap_or(&0);
|
||||
metrics::set_gauge_vec(
|
||||
@@ -853,11 +838,8 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
// start a ping and status timer for the peer
|
||||
self.status_peers.insert(*peer_id);
|
||||
|
||||
let connected_peers = self.network_globals.connected_peers() as i64;
|
||||
|
||||
// increment prometheus metrics
|
||||
metrics::inc_counter(&metrics::PEER_CONNECT_EVENT_COUNT);
|
||||
metrics::set_gauge(&metrics::PEERS_CONNECTED, connected_peers);
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
@@ -154,6 +154,8 @@ impl<TSpec: EthSpec> NetworkBehaviour for PeerManager<TSpec> {
|
||||
self.on_dial_failure(peer_id);
|
||||
}
|
||||
FromSwarm::ExternalAddrConfirmed(_) => {
|
||||
// We have an external address confirmed, means we are able to do NAT traversal.
|
||||
metrics::set_gauge_vec(&metrics::NAT_OPEN, &["libp2p"], 1);
|
||||
// TODO: we likely want to check this against our assumed external tcp
|
||||
// address
|
||||
}
|
||||
@@ -243,14 +245,14 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
self.events.push(PeerManagerEvent::MetaData(peer_id));
|
||||
}
|
||||
|
||||
// Check NAT if metrics are enabled
|
||||
if self.network_globals.local_enr.read().udp4().is_some() {
|
||||
metrics::check_nat();
|
||||
}
|
||||
|
||||
// increment prometheus metrics
|
||||
if self.metrics_enabled {
|
||||
let remote_addr = endpoint.get_remote_address();
|
||||
let direction = if endpoint.is_dialer() {
|
||||
"outbound"
|
||||
} else {
|
||||
"inbound"
|
||||
};
|
||||
match remote_addr.iter().find(|proto| {
|
||||
matches!(
|
||||
proto,
|
||||
@@ -258,10 +260,10 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
)
|
||||
}) {
|
||||
Some(multiaddr::Protocol::QuicV1) => {
|
||||
metrics::inc_gauge(&metrics::QUIC_PEERS_CONNECTED);
|
||||
metrics::inc_gauge_vec(&metrics::PEERS_CONNECTED, &[direction, "quic"]);
|
||||
}
|
||||
Some(multiaddr::Protocol::Tcp(_)) => {
|
||||
metrics::inc_gauge(&metrics::TCP_PEERS_CONNECTED);
|
||||
metrics::inc_gauge_vec(&metrics::PEERS_CONNECTED, &[direction, "tcp"]);
|
||||
}
|
||||
Some(_) => unreachable!(),
|
||||
None => {
|
||||
@@ -339,6 +341,12 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
let remote_addr = endpoint.get_remote_address();
|
||||
// Update the prometheus metrics
|
||||
if self.metrics_enabled {
|
||||
let direction = if endpoint.is_dialer() {
|
||||
"outbound"
|
||||
} else {
|
||||
"inbound"
|
||||
};
|
||||
|
||||
match remote_addr.iter().find(|proto| {
|
||||
matches!(
|
||||
proto,
|
||||
@@ -346,10 +354,10 @@ impl<TSpec: EthSpec> PeerManager<TSpec> {
|
||||
)
|
||||
}) {
|
||||
Some(multiaddr::Protocol::QuicV1) => {
|
||||
metrics::dec_gauge(&metrics::QUIC_PEERS_CONNECTED);
|
||||
metrics::dec_gauge_vec(&metrics::PEERS_CONNECTED, &[direction, "quic"]);
|
||||
}
|
||||
Some(multiaddr::Protocol::Tcp(_)) => {
|
||||
metrics::dec_gauge(&metrics::TCP_PEERS_CONNECTED);
|
||||
metrics::dec_gauge_vec(&metrics::PEERS_CONNECTED, &[direction, "tcp"]);
|
||||
}
|
||||
// If it's an unknown protocol we already logged when connection was established.
|
||||
_ => {}
|
||||
|
||||
Reference in New Issue
Block a user