From 46bc966aa73f6817e0a6c139ca31048dcc26e3bd 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 94d12e8df92..6b005bfb94d 100644 --- a/etcdserver/metrics.go +++ b/etcdserver/metrics.go @@ -30,6 +30,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", @@ -77,6 +83,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 e8f183af881..ec319ad18a6 100644 --- a/etcdserver/raft.go +++ b/etcdserver/raft.go @@ -182,6 +182,11 @@ func (r *raftNode) start(rh *raftReadyHandler) { rh.updateLead(rd.SoftState.Lead) islead = rd.RaftState == raft.StateLeader + if islead { + isLeader.Set(1) + } else { + isLeader.Set(0) + } rh.updateLeadership(newLeader) r.td.Reset() }