metropolis/node/core/metrics: expose etcd metrics

Change-Id: Ie916d497b44c05ab51b13d0bb14f4e850291a77e
Reviewed-on: https://review.monogon.dev/c/monogon/+/1950
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/metropolis/node/core/consensus/configuration.go b/metropolis/node/core/consensus/configuration.go
index 6c07ee7..f7fe954 100644
--- a/metropolis/node/core/consensus/configuration.go
+++ b/metropolis/node/core/consensus/configuration.go
@@ -75,6 +75,8 @@
 	externalPort int
 	// externalAddress overrides the address of the node, which is usually its ID.
 	externalAddress string
+	// etcdMetricsPort overrides the default etcd metrics port used by the node.
+	etcdMetricsPort int
 }
 
 // build takes a Config and returns an etcd embed.Config.
@@ -94,6 +96,10 @@
 		host = c.testOverrides.externalAddress
 		extraNames = append(extraNames, host)
 	}
+	etcdPort := int(node.MetricsEtcdListenerPort)
+	if p := c.testOverrides.etcdMetricsPort; p != 0 {
+		etcdPort = p
+	}
 
 	cfg := embed.NewConfig()
 
@@ -102,6 +108,9 @@
 	cfg.InitialClusterToken = "METROPOLIS"
 	cfg.Logger = "zap"
 	cfg.LogOutputs = []string{c.Ephemeral.ServerLogsFIFO.FullPath()}
+	cfg.ListenMetricsUrls = []url.URL{
+		{Scheme: "http", Host: net.JoinHostPort("127.0.0.1", fmt.Sprintf("%d", etcdPort))},
+	}
 
 	cfg.Dir = c.Data.Data.FullPath()