From 3865d69db355f7ba0023bbc72c8d23a062dfad3d Mon Sep 17 00:00:00 2001 From: Maciej Borsz Date: Thu, 19 Apr 2018 11:42:40 +0200 Subject: [PATCH] etcdserver: add is_leader prometheus metric that is 1 on the leader. Before this change, we had now way to find a leader using /metrics endpoint. This commit adds a metric to do that. --- etcdserver/metrics.go | 7 +++++++ etcdserver/raft.go | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/etcdserver/metrics.go b/etcdserver/metrics.go index 2b549f738f7..6e95e531af6 100644 --- a/etcdserver/metrics.go +++ b/etcdserver/metrics.go @@ -28,6 +28,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", @@ -62,6 +68,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 8e46f5e6889..45733512fd1 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -171,6 +171,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() }