mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-12 09:31:20 +00:00
time to establish connection (#3134)
Implementing #2745 , adding a metric to break down time from connection pending to connection established, per protocol stack. ```` $curl -s http://127.0.0.1:42183/metrics | grep nt_duration # HELP libp2p_swarm_connection_establishment_duration Time it took (locally) to finish establishing connections. # TYPE libp2p_swarm_connection_establishment_duration histogram libp2p_swarm_connection_establishment_duration_sum{role="Listener",protocols="/ip4/tcp"} 0.007 libp2p_swarm_connection_establishment_duration_count{role="Listener",protocols="/ip4/tcp"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.001"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.002"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.004"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.008"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.016"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.032"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.064"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.128"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.256"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="0.512"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Listener",protocols="/ip4/tcp",le="+Inf"} 1 lbl@chomp:~lbl $curl -s http://127.0.0.1:34283/metrics | grep nt_duration # HELP libp2p_swarm_connection_establishment_duration Time it took (locally) to finish establishing connections. # TYPE libp2p_swarm_connection_establishment_duration histogram libp2p_swarm_connection_establishment_duration_sum{role="Dialer",protocols="/ip4/tcp"} 0.009 libp2p_swarm_connection_establishment_duration_count{role="Dialer",protocols="/ip4/tcp"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.001"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.002"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.004"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.008"} 0 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.016"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.032"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.064"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.128"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.256"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="0.512"} 1 libp2p_swarm_connection_establishment_duration_bucket{role="Dialer",protocols="/ip4/tcp",le="+Inf"} 1 ````
This commit is contained in:
@ -20,8 +20,11 @@
|
||||
|
||||
use crate::protocol_stack;
|
||||
use prometheus_client::encoding::text::Encode;
|
||||
use prometheus_client::metrics::counter::Counter;
|
||||
use prometheus_client::metrics::family::Family;
|
||||
use prometheus_client::metrics::{
|
||||
counter::Counter,
|
||||
family::Family,
|
||||
histogram::{exponential_buckets, Histogram},
|
||||
};
|
||||
use prometheus_client::registry::Registry;
|
||||
|
||||
pub struct Metrics {
|
||||
@ -29,6 +32,7 @@ pub struct Metrics {
|
||||
connections_incoming_error: Family<IncomingConnectionErrorLabels, Counter>,
|
||||
|
||||
connections_established: Family<ConnectionEstablishedLabels, Counter>,
|
||||
connections_establishment_duration: Family<ConnectionEstablishmentDurationLabels, Histogram>,
|
||||
connections_closed: Family<ConnectionClosedLabels, Counter>,
|
||||
|
||||
new_listen_addr: Family<AddressLabels, Counter>,
|
||||
@ -123,6 +127,15 @@ impl Metrics {
|
||||
Box::new(connections_closed.clone()),
|
||||
);
|
||||
|
||||
let connections_establishment_duration = Family::new_with_constructor(
|
||||
create_connection_establishment_duration_histogram as fn() -> Histogram,
|
||||
);
|
||||
sub_registry.register(
|
||||
"connections_establishment_duration",
|
||||
"Time it took (locally) to establish connections",
|
||||
Box::new(connections_establishment_duration.clone()),
|
||||
);
|
||||
|
||||
Self {
|
||||
connections_incoming,
|
||||
connections_incoming_error,
|
||||
@ -135,6 +148,7 @@ impl Metrics {
|
||||
dial_attempt,
|
||||
outgoing_connection_error,
|
||||
connected_to_banned_peer,
|
||||
connections_establishment_duration,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -143,13 +157,19 @@ impl<TBvEv, THandleErr> super::Recorder<libp2p_swarm::SwarmEvent<TBvEv, THandleE
|
||||
fn record(&self, event: &libp2p_swarm::SwarmEvent<TBvEv, THandleErr>) {
|
||||
match event {
|
||||
libp2p_swarm::SwarmEvent::Behaviour(_) => {}
|
||||
libp2p_swarm::SwarmEvent::ConnectionEstablished { endpoint, .. } => {
|
||||
self.connections_established
|
||||
.get_or_create(&ConnectionEstablishedLabels {
|
||||
role: endpoint.into(),
|
||||
protocols: protocol_stack::as_string(endpoint.get_remote_address()),
|
||||
})
|
||||
.inc();
|
||||
libp2p_swarm::SwarmEvent::ConnectionEstablished {
|
||||
endpoint,
|
||||
established_in: time_taken,
|
||||
..
|
||||
} => {
|
||||
let labels = ConnectionEstablishedLabels {
|
||||
role: endpoint.into(),
|
||||
protocols: protocol_stack::as_string(endpoint.get_remote_address()),
|
||||
};
|
||||
self.connections_established.get_or_create(&labels).inc();
|
||||
self.connections_establishment_duration
|
||||
.get_or_create(&labels)
|
||||
.observe(time_taken.as_secs_f64());
|
||||
}
|
||||
libp2p_swarm::SwarmEvent::ConnectionClosed { endpoint, .. } => {
|
||||
self.connections_closed
|
||||
@ -279,6 +299,8 @@ struct ConnectionEstablishedLabels {
|
||||
protocols: String,
|
||||
}
|
||||
|
||||
type ConnectionEstablishmentDurationLabels = ConnectionEstablishedLabels;
|
||||
|
||||
#[derive(Encode, Hash, Clone, Eq, PartialEq)]
|
||||
struct ConnectionClosedLabels {
|
||||
role: Role,
|
||||
@ -372,3 +394,7 @@ impl<TTransErr> From<&libp2p_swarm::PendingInboundConnectionError<TTransErr>>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn create_connection_establishment_duration_histogram() -> Histogram {
|
||||
Histogram::new(exponential_buckets(1e-3, 2., 10))
|
||||
}
|
||||
|
Reference in New Issue
Block a user