From 559e4b3a9be31069f7d724df22049650dcc4b033 Mon Sep 17 00:00:00 2001 From: Amir Deris Date: Thu, 27 Aug 2026 13:30:46 +0200 Subject: [PATCH] fix(config): disable default Prometheus telemetry sink (CON-335) Default prometheus-retention-time to 0 so freshly initialized nodes keep the bounded in-memory sink without starting the Prometheus sink until an operator sets a positive retention value. Co-authored-by: Cursor --- config/cosmosbase/agreement_test.go | 23 +++++++++---------- sei-cosmos/server/config/config.go | 2 +- sei-cosmos/server/config/config_fuzz_test.go | 9 +++----- sei-cosmos/server/config/config_test.go | 2 +- .../config/testdata/server_config.golden | 2 +- sei-cosmos/telemetry/metrics_test.go | 12 ++++++++++ 6 files changed, 29 insertions(+), 21 deletions(-) diff --git a/config/cosmosbase/agreement_test.go b/config/cosmosbase/agreement_test.go index 103adeb464..cf59e48312 100644 --- a/config/cosmosbase/agreement_test.go +++ b/config/cosmosbase/agreement_test.go @@ -21,18 +21,17 @@ import ( // Held as text because the two sides carry different Go types for the same key often enough that comparing // values would be comparing shapes. What matters here is which keys disagree and what a node gets instead. var legacyConfigManagerDefaults = map[string]string{ - "api.address": "", - "api.max-open-connections": "0", - "api.rpc-max-body-bytes": "0", - "api.rpc-read-timeout": "0", - "api.swagger": "false", - "grpc.enable": "true", - "minimum-gas-prices": "", - "occ-enabled": "false", - "pruning": "default", - "pruning-keep-every": "", - "telemetry.enabled": "false", - "telemetry.prometheus-retention-time": "0", + "api.address": "", + "api.max-open-connections": "0", + "api.rpc-max-body-bytes": "0", + "api.rpc-read-timeout": "0", + "api.swagger": "false", + "grpc.enable": "true", + "minimum-gas-prices": "", + "occ-enabled": "false", + "pruning": "default", + "pruning-keep-every": "", + "telemetry.enabled": "false", } // reasoning says what a node gets under that manager, for the keys where it is worth stating. diff --git a/sei-cosmos/server/config/config.go b/sei-cosmos/server/config/config.go index ee732b85c9..4e442f6371 100644 --- a/sei-cosmos/server/config/config.go +++ b/sei-cosmos/server/config/config.go @@ -362,7 +362,7 @@ func DefaultConfig() *Config { }, Telemetry: telemetry.Config{ Enabled: true, - PrometheusRetentionTime: 7200, + PrometheusRetentionTime: 0, GlobalLabels: nil, }, API: APIConfig{ diff --git a/sei-cosmos/server/config/config_fuzz_test.go b/sei-cosmos/server/config/config_fuzz_test.go index 04ef74c8a4..c9058adb2d 100644 --- a/sei-cosmos/server/config/config_fuzz_test.go +++ b/sei-cosmos/server/config/config_fuzz_test.go @@ -951,8 +951,7 @@ var telemetryKeys = []configtest.KeySpec{ { Key: "telemetry.prometheus-retention-time", Path: "PrometheusRetentionTime", Cast: configtest.CastInt64, Unguarded: true, - Why: "the declared default is 7200 seconds and an absent key resolves 0, which telemetry " + - "reads as retaining nothing, so a scrape finds an empty store", + Why: "zero disables the Prometheus sink and an absent key resolves 0 the same way", }, } @@ -1123,10 +1122,8 @@ func TestGetConfigAbsentSectionDivergences(t *testing.T) { {"grpc.enable", cfg.GRPC.Enable, def.GRPC.Enable, true}, {"grpc.address", cfg.GRPC.Address, def.GRPC.Address, true}, {"telemetry.enabled", cfg.Telemetry.Enabled, def.Telemetry.Enabled, true}, - { - "telemetry.prometheus-retention-time", - cfg.Telemetry.PrometheusRetentionTime, def.Telemetry.PrometheusRetentionTime, true, - }, + {"telemetry.prometheus-retention-time", + cfg.Telemetry.PrometheusRetentionTime, def.Telemetry.PrometheusRetentionTime, false}, // [api]. Five diverge. The three set false have a declared default that is already the // getter's zero, so nothing about the resolved value distinguishes a guard from its absence. diff --git a/sei-cosmos/server/config/config_test.go b/sei-cosmos/server/config/config_test.go index 38a1abc0b9..aca391da6b 100644 --- a/sei-cosmos/server/config/config_test.go +++ b/sei-cosmos/server/config/config_test.go @@ -55,7 +55,7 @@ func TestDefaultSwaggerConfig(t *testing.T) { func TestDefaultTelemetryConfig(t *testing.T) { cfg := DefaultConfig() require.True(t, cfg.Telemetry.Enabled, "Telemetry should be enabled by default") - require.Equal(t, int64(7200), cfg.Telemetry.PrometheusRetentionTime) + require.Equal(t, int64(0), cfg.Telemetry.PrometheusRetentionTime) require.Empty(t, cfg.Telemetry.GlobalLabels) } diff --git a/sei-cosmos/server/config/testdata/server_config.golden b/sei-cosmos/server/config/testdata/server_config.golden index 0adf2cc51b..1cf59bc1f2 100644 --- a/sei-cosmos/server/config/testdata/server_config.golden +++ b/sei-cosmos/server/config/testdata/server_config.golden @@ -17,7 +17,7 @@ Telemetry.Enabled = bool(true) Telemetry.EnableHostname = bool(false) Telemetry.EnableHostnameLabel = bool(false) Telemetry.EnableServiceLabel = bool(false) -Telemetry.PrometheusRetentionTime = int64(7200) +Telemetry.PrometheusRetentionTime = int64(0) Telemetry.GlobalLabels = API.Enable = bool(false) API.Swagger = bool(true) diff --git a/sei-cosmos/telemetry/metrics_test.go b/sei-cosmos/telemetry/metrics_test.go index e88b09387f..afc4646399 100644 --- a/sei-cosmos/telemetry/metrics_test.go +++ b/sei-cosmos/telemetry/metrics_test.go @@ -44,6 +44,18 @@ func TestMetrics_InMem(t *testing.T) { require.Equal(t, 10, jsonMetrics.Counters[0].Count) } +func TestMetrics_PromDisabledByDefaultRetention(t *testing.T) { + m, err := New(Config{ + Enabled: true, + EnableHostname: false, + ServiceName: "test", + PrometheusRetentionTime: 0, + }) + require.NoError(t, err) + require.NotNil(t, m) + require.False(t, m.prometheusEnabled) +} + func TestMetrics_Prom(t *testing.T) { m, err := New(Config{ Enabled: true,