diff --git a/metrics_server/metrics_server.rb b/metrics_server/metrics_server.rb
index a324b034b5e5e7264ded1c0bfeac4a8c2a2f6b60..269d03f6d0c1a3c2e0a241aeac9d46b827e31e4a 100644
--- a/metrics_server/metrics_server.rb
+++ b/metrics_server/metrics_server.rb
@@ -38,8 +38,7 @@ def start_for_sidekiq(**options)
     def spawn(target, metrics_dir:, **options)
       return spawn_ruby_server(target, metrics_dir: metrics_dir, **options) unless new_metrics_server?
 
-      name = settings_key(target)
-      settings = ::Settings.monitoring[name]
+      settings = settings_value(target)
       path = options[:path]&.then { |p| Pathname.new(p) } || Pathname.new('')
       cmd = path.join('gitlab-metrics-exporter').to_path
       env = {
@@ -51,7 +50,7 @@ def spawn(target, metrics_dir:, **options)
       }
 
       if settings['log_enabled']
-        env['GME_LOG_FILE'] = File.join(Rails.root, 'log', "#{name}.log")
+        env['GME_LOG_FILE'] = File.join(Rails.root, 'log', "#{name(target)}.log")
         env['GME_LOG_LEVEL'] = 'info'
       else
         env['GME_LOG_LEVEL'] = 'quiet'
@@ -106,8 +105,27 @@ def fork(target, metrics_dir:, wipe_metrics_dir: false, reset_signals: [])
       pid
     end
 
+    def name(target)
+      case target
+      when 'puma' then 'web_exporter'
+      when 'sidekiq' then 'sidekiq_exporter'
+      else ensure_valid_target!(target)
+      end
+    end
+
     private
 
+    # We need to use `.` (dot) notation to access the updates we did in `config/initializers/1_settings.rb`
+    # For that reason, avoid using `[]` ("optional/dynamic settings notation") to resolve it dynamically.
+    # Refer to https://gitlab.com/gitlab-org/gitlab/-/issues/386865
+    def settings_value(target)
+      case target
+      when 'puma' then ::Settings.monitoring.web_exporter
+      when 'sidekiq' then ::Settings.monitoring.sidekiq_exporter
+      else ensure_valid_target!(target)
+      end
+    end
+
     def new_metrics_server?
       Gitlab::Utils.to_boolean(ENV['GITLAB_GOLANG_METRICS_SERVER'])
     end
@@ -115,14 +133,6 @@ def new_metrics_server?
     def ensure_valid_target!(target)
       raise "Target must be one of [puma,sidekiq]" unless %w(puma sidekiq).include?(target)
     end
-
-    def settings_key(target)
-      case target
-      when 'puma' then 'web_exporter'
-      when 'sidekiq' then 'sidekiq_exporter'
-      else ensure_valid_target!(target)
-      end
-    end
   end
 
   def initialize(target, metrics_dir, wipe_metrics_dir)
@@ -152,7 +162,7 @@ def start
       when 'puma'
         Gitlab::Metrics::Exporter::WebExporter.instance(**default_opts)
       when 'sidekiq'
-        settings = Settings.new(Settings.monitoring[name])
+        settings = Settings.new(Settings.monitoring.sidekiq_exporter)
         Gitlab::Metrics::Exporter::SidekiqExporter.instance(settings, **default_opts)
       end
 
@@ -160,9 +170,6 @@ def start
   end
 
   def name
-    case @target
-    when 'puma' then 'web_exporter'
-    when 'sidekiq' then 'sidekiq_exporter'
-    end
+    self.class.name(@target)
   end
 end
diff --git a/spec/commands/metrics_server/metrics_server_spec.rb b/spec/commands/metrics_server/metrics_server_spec.rb
index f93be1d9f8854dddfd828c46e6b7384946f42770..310e31da04501c7a7d4c6966393407082e89cb2a 100644
--- a/spec/commands/metrics_server/metrics_server_spec.rb
+++ b/spec/commands/metrics_server/metrics_server_spec.rb
@@ -70,7 +70,8 @@
       before do
         if use_golang_server
           stub_env('GITLAB_GOLANG_METRICS_SERVER', '1')
-          allow(Settings).to receive(:monitoring).and_return(config.dig('test', 'monitoring'))
+          allow(Settings).to receive(:monitoring).and_return(
+            Settingslogic.new(config.dig('test', 'monitoring')))
         else
           config_file.write(YAML.dump(config))
           config_file.close
diff --git a/spec/metrics_server/metrics_server_spec.rb b/spec/metrics_server/metrics_server_spec.rb
index 76ea9cd66ba42662eebd6389df6e368ce7094b5b..efa716754f171d343393c6346c16849266047127 100644
--- a/spec/metrics_server/metrics_server_spec.rb
+++ b/spec/metrics_server/metrics_server_spec.rb
@@ -99,20 +99,22 @@
         context 'for Golang server' do
           let(:log_enabled) { false }
           let(:settings) do
-            {
-              'web_exporter' => {
-                'enabled' => true,
-                'address' => 'localhost',
-                'port' => '8083',
-                'log_enabled' => log_enabled
-              },
-              'sidekiq_exporter' => {
-                'enabled' => true,
-                'address' => 'localhost',
-                'port' => '8082',
-                'log_enabled' => log_enabled
+            Settingslogic.new(
+              {
+                'web_exporter' => {
+                  'enabled' => true,
+                  'address' => 'localhost',
+                  'port' => '8083',
+                  'log_enabled' => log_enabled
+                },
+                'sidekiq_exporter' => {
+                  'enabled' => true,
+                  'address' => 'localhost',
+                  'port' => '8082',
+                  'log_enabled' => log_enabled
+                }
               }
-            }
+            )
           end
 
           let(:expected_port) { target == 'puma' ? '8083' : '8082' }
@@ -175,11 +177,13 @@
 
           context 'when TLS settings are present' do
             before do
-              %w(web_exporter sidekiq_exporter).each do |key|
-                settings[key]['tls_enabled'] = true
-                settings[key]['tls_cert_path'] = '/path/to/cert.pem'
-                settings[key]['tls_key_path'] = '/path/to/key.pem'
-              end
+              settings.web_exporter['tls_enabled'] = true
+              settings.web_exporter['tls_cert_path'] = '/path/to/cert.pem'
+              settings.web_exporter['tls_key_path'] = '/path/to/key.pem'
+
+              settings.sidekiq_exporter['tls_enabled'] = true
+              settings.sidekiq_exporter['tls_cert_path'] = '/path/to/cert.pem'
+              settings.sidekiq_exporter['tls_key_path'] = '/path/to/key.pem'
             end
 
             it 'sets the correct environment variables' do
@@ -300,12 +304,12 @@
   end
 
   context 'for sidekiq' do
-    let(:settings) { { "sidekiq_exporter" => { "enabled" => true } } }
+    let(:settings) { Settingslogic.new({ "sidekiq_exporter" => { "enabled" => true } }) }
 
     before do
       allow(::Settings).to receive(:monitoring).and_return(settings)
       allow(Gitlab::Metrics::Exporter::SidekiqExporter).to receive(:instance).with(
-        settings['sidekiq_exporter'], gc_requests: true, synchronous: true
+        settings.sidekiq_exporter, gc_requests: true, synchronous: true
       ).and_return(exporter_double)
     end
 
@@ -358,4 +362,28 @@
       end
     end
   end
+
+  describe '.name' do
+    subject { described_class.name(target) }
+
+    context 'for puma' do
+      let(:target) { 'puma' }
+
+      it { is_expected.to eq 'web_exporter' }
+    end
+
+    context 'for sidekiq' do
+      let(:target) { 'sidekiq' }
+
+      it { is_expected.to eq 'sidekiq_exporter' }
+    end
+
+    context 'for invalid target' do
+      let(:target) { 'invalid' }
+
+      it 'raises error' do
+        expect { subject }.to raise_error(RuntimeError, "Target must be one of [puma,sidekiq]")
+      end
+    end
+  end
 end