add metrics

This commit is contained in:
tycho garen
2022-06-14 06:59:20 -04:00
parent 0a0425ae6f
commit 9532fa4eb7
4 changed files with 30 additions and 4 deletions

View File

@@ -28,7 +28,10 @@ var (
// Metrics contains metrics exposed by this package.
type Metrics struct {
// Number of peers.
Peers metrics.Gauge
Peers metrics.Gauge
PeersStored metrics.Gauge
PeersInactivated metrics.Gauge
// Number of bytes received from a given peer.
PeerReceiveBytesTotal metrics.Counter
// Number of bytes sent to a given peer.
@@ -75,7 +78,18 @@ func PrometheusMetrics(namespace string, labelsAndValues ...string) *Metrics {
Name: "peers",
Help: "Number of peers.",
}, labels).With(labelsAndValues...),
PeersStored: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
Namespace: namespace,
Subsystem: MetricsSubsystem,
Name: "peers_stored",
Help: "Number of peers in the peer Store",
}, labels).With(labelsAndValues...),
PeersInactivated: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{
Namespace: namespace,
Subsystem: MetricsSubsystem,
Name: "peers_inactivated",
Help: "Number of peers inactivated",
}, labels).With(labelsAndValues...),
PeerReceiveBytesTotal: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
Namespace: namespace,
Subsystem: MetricsSubsystem,

View File

@@ -163,6 +163,9 @@ type PeerManagerOptions struct {
// persistentPeers provides fast PersistentPeers lookups. It is built
// by optimize().
persistentPeers map[types.NodeID]bool
// Peer Metrics
Metrics *Metrics
}
// Validate validates the options.
@@ -400,6 +403,7 @@ func (m *PeerManager) prunePeers() error {
if err := m.store.Delete(peerID); err != nil {
return err
}
m.options.Metrics.PeersStored.Add(-1)
}
}
return nil
@@ -437,6 +441,8 @@ func (m *PeerManager) Add(address NodeAddress) (bool, error) {
if err := m.store.Set(peer); err != nil {
return false, err
}
m.options.Metrics.PeersStored.Add(1)
if err := m.prunePeers(); err != nil {
return true, err
}
@@ -614,7 +620,11 @@ func (m *PeerManager) Dialed(address NodeAddress) error {
return fmt.Errorf("peer %q was removed while dialing", address.NodeID)
}
now := time.Now().UTC()
if peer.Inactive {
m.options.Metrics.PeersInactivated.Add(-1)
}
peer.Inactive = false
peer.LastConnected = now
if addressInfo, ok := peer.AddressInfo[address]; ok {
addressInfo.DialFailures = 0
@@ -835,7 +845,7 @@ func (m *PeerManager) Inactivate(peerID types.NodeID) error {
}
peer.Inactive = true
m.options.Metrics.PeersInactivated.Add(1)
return m.store.Set(*peer)
}

View File

@@ -265,7 +265,7 @@ func makeNode(cfg *config.Config,
p2pLogger := logger.With("module", "p2p")
transport := createTransport(p2pLogger, cfg)
peerManager, peerCloser, err := createPeerManager(cfg, dbProvider, p2pLogger, nodeKey.ID)
peerManager, peerCloser, err := createPeerManager(cfg, dbProvider, p2pLogger, nodeKey.ID, nodeMetrics.p2p)
closers = append(closers, peerCloser)
if err != nil {
return nil, combineCloseError(

View File

@@ -457,6 +457,7 @@ func createPeerManager(
dbProvider config.DBProvider,
p2pLogger log.Logger,
nodeID types.NodeID,
metrics *p2p.Metrics,
) (*p2p.PeerManager, closer, error) {
selfAddr, err := p2p.ParseNodeAddress(nodeID.AddressString(cfg.P2P.ExternalAddress))
@@ -504,6 +505,7 @@ func createPeerManager(
MaxRetryTimePersistent: 5 * time.Minute,
RetryTimeJitter: 5 * time.Second,
PrivatePeers: privatePeerIDs,
Metrics: metrics,
}
peers := []p2p.NodeAddress{}