diff --git a/etcdserver/metrics.go b/etcdserver/metrics.go index 6bf12f9de..980e3ebaf 100644 --- a/etcdserver/metrics.go +++ b/etcdserver/metrics.go @@ -29,6 +29,12 @@ var ( Name: "has_leader", Help: "Whether or not a leader exists. 1 is existence, 0 is not.", }) + isLeader = prometheus.NewGauge(prometheus.GaugeOpts{ + Namespace: "etcd", + Subsystem: "server", + Name: "is_leader", + Help: "Whether or not this member is a leader. 1 if is, 0 otherwise.", + }) leaderChanges = prometheus.NewCounter(prometheus.CounterOpts{ Namespace: "etcd", Subsystem: "server", @@ -76,6 +82,7 @@ var ( func init() { prometheus.MustRegister(hasLeader) + prometheus.MustRegister(isLeader) prometheus.MustRegister(leaderChanges) prometheus.MustRegister(proposalsCommitted) prometheus.MustRegister(proposalsApplied) diff --git a/etcdserver/raft.go b/etcdserver/raft.go index 8a6f18d5a..f6220791e 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -186,6 +186,11 @@ func (r *raftNode) start(rh *raftReadyHandler) { atomic.StoreUint64(&r.lead, rd.SoftState.Lead) islead = rd.RaftState == raft.StateLeader + if islead { + isLeader.Set(1) + } else { + isLeader.Set(0) + } rh.updateLeadership(newLeader) r.td.Reset() }