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.
This commit is contained in:
Maciej Borsz 2018-04-19 11:42:40 +02:00 committed by Joe Betz
parent 16487395e1
commit 3865d69db3
No known key found for this signature in database
GPG Key ID: 4930C680B6E0DDB8
2 changed files with 12 additions and 0 deletions

View File

@ -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)

View File

@ -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()
}