feat: add :51090/metrics endpoint with Prometheus metrics listening on machine IP (#304)

Signed-off-by: Miek Gieben <miek@miek.nl>
Co-authored-by: Pasha Sviderski <me@psviderski.name>
This commit is contained in:
Miek Gieben
2026-05-29 18:23:07 +10:00
committed by GitHub
co-authored by Pasha Sviderski
parent 11df8e4a75
commit 24b81af43c
8 changed files with 169 additions and 1 deletions
+13
View File
@@ -20,6 +20,7 @@ import (
"github.com/psviderski/uncloud/internal/machine/dns"
"github.com/psviderski/uncloud/internal/machine/docker"
"github.com/psviderski/uncloud/internal/machine/firewall"
"github.com/psviderski/uncloud/internal/machine/metrics"
"github.com/psviderski/uncloud/internal/machine/network"
"github.com/psviderski/uncloud/internal/machine/store"
"github.com/psviderski/unregistry"
@@ -55,6 +56,8 @@ type clusterController struct {
// unregistry is the embedded container registry that uses the local Docker (containerd) image store as its backend.
unregistry *unregistry.Registry
metricsServer *metrics.Server
// stopped is a channel that is closed when the controller is stopped.
stopped chan struct{}
}
@@ -72,6 +75,7 @@ func newClusterController(
dnsServer *dns.Server,
dnsResolver *dns.ClusterResolver,
unregistry *unregistry.Registry,
metricsServer *metrics.Server,
) (*clusterController, error) {
slog.Info("Starting WireGuard network.")
wgnet, err := network.NewWireGuardNetwork()
@@ -95,6 +99,7 @@ func newClusterController(
dnsServer: dnsServer,
dnsResolver: dnsResolver,
unregistry: unregistry,
metricsServer: metricsServer,
stopped: make(chan struct{}),
}, nil
}
@@ -186,6 +191,14 @@ func (cc *clusterController) Run(ctx context.Context) error {
return err
}
errGroup.Go(func() error {
slog.Info("Starting metrics server.")
if err := cc.metricsServer.Run(ctx); err != nil {
return fmt.Errorf("metrics server failed: %w", err)
}
return nil
})
errGroup.Go(func() error {
slog.Info("Starting embedded DNS resolver.")
if err := cc.dnsResolver.Run(ctx); err != nil {