From 1e457e36de9e67cf65275e8ac2d530356a34093c Mon Sep 17 00:00:00 2001 From: Thomas Jungblut Date: Wed, 17 Dec 2025 11:37:02 +0100 Subject: [PATCH] Add more extensive runtime metrics I've noticed that K8s and apiserver contains several metrics that etcd does not have. This PR adds the missing metrics to the default Prometheus registry. Signed-off-by: Thomas Jungblut --- server/etcdserver/metrics.go | 5 +++++ tests/e2e/metrics_test.go | 2 ++ 2 files changed, 7 insertions(+) diff --git a/server/etcdserver/metrics.go b/server/etcdserver/metrics.go index 7176d30adbc0..52b3f582e22e 100644 --- a/server/etcdserver/metrics.go +++ b/server/etcdserver/metrics.go @@ -19,6 +19,7 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/collectors" "go.uber.org/zap" "go.etcd.io/etcd/api/v3/version" @@ -162,6 +163,10 @@ var ( ) func init() { + // register more extensive go runtime metrics, for that we need to unregister the default metrics first + prometheus.Unregister(collectors.NewGoCollector()) + prometheus.MustRegister(collectors.NewGoCollector(collectors.WithGoCollectorRuntimeMetrics(collectors.MetricsAll))) + prometheus.MustRegister(hasLeader) prometheus.MustRegister(isLeader) prometheus.MustRegister(leaderChanges) diff --git a/tests/e2e/metrics_test.go b/tests/e2e/metrics_test.go index f9e593f06ee9..f4476339d7a3 100644 --- a/tests/e2e/metrics_test.go +++ b/tests/e2e/metrics_test.go @@ -217,6 +217,7 @@ func TestNoMetricsMissing(t *testing.T) { "etcd_snap_db_save_total_duration_seconds", "etcd_snap_fsync_duration_seconds", "go_gc_duration_seconds", + "go_gc_heap_allocs_by_size_bytes", "go_gc_gogc_percent", "go_gc_gomemlimit_bytes", "go_goroutines", @@ -244,6 +245,7 @@ func TestNoMetricsMissing(t *testing.T) { "go_memstats_stack_sys_bytes", "go_memstats_sys_bytes", "go_sched_gomaxprocs_threads", + "go_sched_pauses_stopping_gc_seconds", "go_threads", "grpc_server_handled_total", "grpc_server_msg_received_total",