diff --git a/p2p/peer.go b/p2p/peer.go
index 52a777cd1f6bf39f56d0b7149180515c1ee73897..54fb653e247db5373ac620adeb6f928af37e7c69 100644
--- a/p2p/peer.go
+++ b/p2p/peer.go
@@ -304,6 +304,7 @@ func (p *Peer) handle(msg Msg) error {
 		if metrics.Enabled {
 			m := fmt.Sprintf("%s/%s/%d/%#02x", ingressMeterName, proto.Name, proto.Version, msg.Code-proto.offset)
 			metrics.GetOrRegisterMeter(m, nil).Mark(int64(msg.meterSize))
+			metrics.GetOrRegisterMeter(m+"/packets", nil).Mark(1)
 		}
 		select {
 		case proto.in <- msg:
diff --git a/p2p/rlpx.go b/p2p/rlpx.go
index c134aec1de3c3eaa4a45b97baa4e8753a05d926a..4d903a08a0f64467c7433b7b37dcc46991518741 100644
--- a/p2p/rlpx.go
+++ b/p2p/rlpx.go
@@ -597,6 +597,7 @@ func (rw *rlpxFrameRW) WriteMsg(msg Msg) error {
 	if metrics.Enabled && msg.meterCap.Name != "" { // don't meter non-subprotocol messages
 		m := fmt.Sprintf("%s/%s/%d/%#02x", egressMeterName, msg.meterCap.Name, msg.meterCap.Version, msg.meterCode)
 		metrics.GetOrRegisterMeter(m, nil).Mark(int64(msg.meterSize))
+		metrics.GetOrRegisterMeter(m+"/packets", nil).Mark(1)
 	}
 	// write header
 	headbuf := make([]byte, 32)