diff --git a/server/peer_server.go b/server/peer_server.go
index <HASH>..<HASH> 100644
--- a/server/peer_server.go
+++ b/server/peer_server.go
@@ -122,6 +122,8 @@ func NewPeerServer(name string, path string, url string, bindAddr string, tlsCon
 	s.raftServer.AddEventListener(raft.HeartbeatTimeoutEventType, s.raftEventLogger)
 	s.raftServer.AddEventListener(raft.ElectionTimeoutThresholdEventType, s.raftEventLogger)
 
+	s.raftServer.AddEventListener(raft.HeartbeatEventType, s.recordMetricEvent)
+
 	return s
 }
 
@@ -499,6 +501,12 @@ func (s *PeerServer) raftEventLogger(event raft.Event) {
 	}
 }
 
+func (s *PeerServer) recordMetricEvent(event raft.Event) {
+	name := fmt.Sprintf("raft.event.%s", event.Type())
+	value := event.Value().(time.Duration)
+	(*s.metrics).Timer(name).Update(value)
+}
+
 func (s *PeerServer) monitorSnapshot() {
 	for {
 		time.Sleep(s.snapConf.checkingInterval)
feat(metrics): Publish peer heartbeat events as metrics