metropolis/node/core/metrics: implement http_sd discovery endpoint
We provide prometheus metrics but dont have a way to discover all nodes,
this change implements a new http endpoint: /discovery. It implements the
http_sd api and returns all current cluster nodes including their roles as
label.
Change-Id: I931a88e2afb285482d122dd059c96f9ebfab4052
Reviewed-on: https://review.monogon.dev/c/monogon/+/1934
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/core/roleserve/roleserve.go b/metropolis/node/core/roleserve/roleserve.go
index ddc5811..02bc510 100644
--- a/metropolis/node/core/roleserve/roleserve.go
+++ b/metropolis/node/core/roleserve/roleserve.go
@@ -167,6 +167,7 @@
s.metrics = &workerMetrics{
curatorConnection: &s.CuratorConnection,
+ localRoles: &s.localRoles,
}
return s
diff --git a/metropolis/node/core/roleserve/worker_metrics.go b/metropolis/node/core/roleserve/worker_metrics.go
index 78c62d6..a9add88 100644
--- a/metropolis/node/core/roleserve/worker_metrics.go
+++ b/metropolis/node/core/roleserve/worker_metrics.go
@@ -3,9 +3,13 @@
import (
"context"
+ cpb "source.monogon.dev/metropolis/proto/common"
+
"source.monogon.dev/metropolis/node/core/metrics"
"source.monogon.dev/metropolis/pkg/event/memory"
"source.monogon.dev/metropolis/pkg/supervisor"
+
+ ipb "source.monogon.dev/metropolis/node/core/curator/proto/api"
)
// workerMetrics runs the Metrics Service, which runs local Prometheus collectors
@@ -14,6 +18,7 @@
// over HTTPS using the Cluster CA.
type workerMetrics struct {
curatorConnection *memory.Value[*curatorConnection]
+ localRoles *memory.Value[*cpb.NodeRoles]
}
func (s *workerMetrics) run(ctx context.Context) error {
@@ -29,6 +34,8 @@
svc := metrics.Service{
Credentials: cc.credentials,
+ Curator: ipb.NewCuratorClient(cc.conn),
+ LocalRoles: s.localRoles,
}
return svc.Run(ctx)
}