ソースを参照

pkg/mesh: introduce kilo_leader guage metric

This commit introduces a new Prometheus metric to detect if the node is
a leader of its location, from its own point of view.

Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
Lucas Servén Marín 6 年 前
コミット
82c819659d
1 ファイル変更8 行追加0 行削除
  1. 8 0
      pkg/mesh/mesh.go

+ 8 - 0
pkg/mesh/mesh.go

@@ -202,6 +202,7 @@ type Mesh struct {
 	mu    sync.Mutex
 
 	errorCounter     *prometheus.CounterVec
+	leaderGuage      prometheus.Gauge
 	nodesGuage       prometheus.Gauge
 	peersGuage       prometheus.Gauge
 	reconcileCounter prometheus.Counter
@@ -282,6 +283,10 @@ func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularit
 			Name: "kilo_errors_total",
 			Help: "Number of errors that occurred while administering the mesh.",
 		}, []string{"event"}),
+		leaderGuage: prometheus.NewGauge(prometheus.GaugeOpts{
+			Name: "kilo_leader",
+			Help: "Leadership status of the node.",
+		}),
 		nodesGuage: prometheus.NewGauge(prometheus.GaugeOpts{
 			Name: "kilo_nodes",
 			Help: "Number of nodes in the mesh.",
@@ -620,6 +625,7 @@ func (m *Mesh) applyTopology() {
 		return
 	}
 	if t.leader {
+		m.leaderGuage.Set(1)
 		if err := iproute.SetAddress(m.kiloIface, t.wireGuardCIDR); err != nil {
 			level.Error(m.logger).Log("error", err)
 			m.errorCounter.WithLabelValues("apply").Inc()
@@ -642,6 +648,7 @@ func (m *Mesh) applyTopology() {
 			return
 		}
 	} else {
+		m.leaderGuage.Set(0)
 		level.Debug(m.logger).Log("msg", "local node is not the leader")
 		if err := iproute.Set(m.kiloIface, false); err != nil {
 			level.Error(m.logger).Log("error", err)
@@ -663,6 +670,7 @@ func (m *Mesh) applyTopology() {
 func (m *Mesh) RegisterMetrics(r prometheus.Registerer) {
 	r.MustRegister(
 		m.errorCounter,
+		m.leaderGuage,
 		m.nodesGuage,
 		m.peersGuage,
 		m.reconcileCounter,