mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #13412 from Jille/known-peers-metric
etcdserver: Expose metrics with all known peers
This commit is contained in:
@@ -241,6 +241,7 @@ func (c *RaftCluster) genID() {
|
||||
func (c *RaftCluster) SetID(localID, cid types.ID) {
|
||||
c.localID = localID
|
||||
c.cid = cid
|
||||
c.buildMembershipMetric()
|
||||
}
|
||||
|
||||
func (c *RaftCluster) SetStore(st v2store.Store) { c.v2store = st }
|
||||
@@ -265,6 +266,7 @@ func (c *RaftCluster) Recover(onSet func(*zap.Logger, *semver.Version)) {
|
||||
c.version = clusterVersionFromStore(c.lg, c.v2store)
|
||||
c.members, c.removed = membersFromStore(c.lg, c.v2store)
|
||||
}
|
||||
c.buildMembershipMetric()
|
||||
|
||||
if c.be != nil {
|
||||
c.downgradeInfo = c.be.DowngradeInfoFromBackend()
|
||||
@@ -394,6 +396,7 @@ func (c *RaftCluster) AddMember(m *Member, shouldApplyV3 ShouldApplyV3) {
|
||||
}
|
||||
|
||||
c.members[m.ID] = m
|
||||
c.updateMembershipMetric(m.ID, true)
|
||||
|
||||
c.lg.Info(
|
||||
"added member",
|
||||
@@ -419,6 +422,7 @@ func (c *RaftCluster) RemoveMember(id types.ID, shouldApplyV3 ShouldApplyV3) {
|
||||
m, ok := c.members[id]
|
||||
delete(c.members, id)
|
||||
c.removed[id] = true
|
||||
c.updateMembershipMetric(id, false)
|
||||
|
||||
if ok {
|
||||
c.lg.Info(
|
||||
@@ -477,6 +481,7 @@ func (c *RaftCluster) PromoteMember(id types.ID, shouldApplyV3 ShouldApplyV3) {
|
||||
defer c.Unlock()
|
||||
|
||||
c.members[id].RaftAttributes.IsLearner = false
|
||||
c.updateMembershipMetric(id, true)
|
||||
if c.v2store != nil {
|
||||
mustUpdateMemberInStore(c.lg, c.v2store, c.members[id])
|
||||
}
|
||||
@@ -715,6 +720,7 @@ func ValidateClusterAndAssignIDs(lg *zap.Logger, local *RaftCluster, existing *R
|
||||
for _, m := range lms {
|
||||
local.members[m.ID] = m
|
||||
}
|
||||
local.buildMembershipMetric()
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -801,3 +807,32 @@ func (c *RaftCluster) PushMembershipToStorage() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// buildMembershipMetric sets the knownPeers metric based on the current
|
||||
// members of the cluster.
|
||||
func (c *RaftCluster) buildMembershipMetric() {
|
||||
if c.localID == 0 {
|
||||
// We don't know our own id yet.
|
||||
return
|
||||
}
|
||||
for p := range c.members {
|
||||
knownPeers.WithLabelValues(c.localID.String(), p.String()).Set(1)
|
||||
}
|
||||
for p := range c.removed {
|
||||
knownPeers.WithLabelValues(c.localID.String(), p.String()).Set(0)
|
||||
}
|
||||
}
|
||||
|
||||
// updateMembershipMetric updates the knownPeers metric to indicate that
|
||||
// the given peer is now (un)known.
|
||||
func (c *RaftCluster) updateMembershipMetric(peer types.ID, known bool) {
|
||||
if c.localID == 0 {
|
||||
// We don't know our own id yet.
|
||||
return
|
||||
}
|
||||
v := float64(0)
|
||||
if known {
|
||||
v = 1
|
||||
}
|
||||
knownPeers.WithLabelValues(c.localID.String(), peer.String()).Set(v)
|
||||
}
|
||||
|
||||
@@ -24,8 +24,17 @@ var (
|
||||
Help: "Which version is running. 1 for 'cluster_version' label with current cluster version",
|
||||
},
|
||||
[]string{"cluster_version"})
|
||||
knownPeers = prometheus.NewGaugeVec(prometheus.GaugeOpts{
|
||||
Namespace: "etcd",
|
||||
Subsystem: "network",
|
||||
Name: "known_peers",
|
||||
Help: "The current number of known peers.",
|
||||
},
|
||||
[]string{"Local", "Remote"},
|
||||
)
|
||||
)
|
||||
|
||||
func init() {
|
||||
prometheus.MustRegister(ClusterVersionMetrics)
|
||||
prometheus.MustRegister(knownPeers)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user