diff --git a/config/metrics/settings/20210204124858_container_registry_enabled.yml b/config/metrics/settings/20210204124858_container_registry_enabled.yml
index f7ef96f196d14d4076132a239f81629fafc15be7..f98b9cb96fb4a3fa398cb710ea68f28260b4dad5 100644
--- a/config/metrics/settings/20210204124858_container_registry_enabled.yml
+++ b/config/metrics/settings/20210204124858_container_registry_enabled.yml
@@ -9,6 +9,10 @@ value_type: boolean
 status: active
 time_frame: none
 data_source: system
+instrumentation_class: GitlabConfigMetric
+options:
+  config:
+    registry: enabled
 distribution:
 - ee
 - ce
diff --git a/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml b/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml
index 0d3382cfe5a384c3b1b2664219afef486f1f1fb8..ac359a9ff7befe087390872e3710944095cceac0 100644
--- a/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml
+++ b/config/metrics/settings/20210204124900_dependency_proxy_enabled.yml
@@ -9,6 +9,10 @@ value_type: boolean
 status: active
 time_frame: none
 data_source: system
+instrumentation_class: GitlabConfigMetric
+options:
+  config:
+    dependency_proxy: enabled
 distribution:
 - ee
 - ce
diff --git a/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml b/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml
index fa645922f92b16a1c2b08da210cc19940234bc7e..dd9a623dc75ec395a2138d14b470f31ec7aed19e 100644
--- a/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml
+++ b/config/metrics/settings/20210204124902_gitlab_shared_runners_enabled.yml
@@ -9,6 +9,10 @@ value_type: boolean
 status: active
 time_frame: none
 data_source: system
+instrumentation_class: GitlabConfigMetric
+options:
+  config:
+    gitlab_ci: shared_runners_enabled
 distribution:
 - ce
 - ee
diff --git a/config/metrics/settings/20210204124906_ldap_enabled.yml b/config/metrics/settings/20210204124906_ldap_enabled.yml
index d5f682912f5675a9c7cdd16a3b3d5c5b21deef4c..59fa6ddfa8dd6373e8ad20b644164ba6b31bc813 100644
--- a/config/metrics/settings/20210204124906_ldap_enabled.yml
+++ b/config/metrics/settings/20210204124906_ldap_enabled.yml
@@ -9,6 +9,10 @@ value_type: boolean
 status: active
 time_frame: none
 data_source: system
+instrumentation_class: GitlabConfigMetric
+options:
+  config:
+    ldap: enabled
 distribution:
 - ce
 - ee
diff --git a/config/metrics/settings/20210204124908_mattermost_enabled.yml b/config/metrics/settings/20210204124908_mattermost_enabled.yml
index 6c8b063547147246cd05ce930cfbfa805036da93..1e8560ae6fd6eedea090b485971b883599d52f5b 100644
--- a/config/metrics/settings/20210204124908_mattermost_enabled.yml
+++ b/config/metrics/settings/20210204124908_mattermost_enabled.yml
@@ -9,6 +9,10 @@ value_type: boolean
 status: active
 time_frame: none
 data_source: system
+instrumentation_class: GitlabConfigMetric
+options:
+  config:
+    mattermost: enabled
 distribution:
 - ce
 - ee
diff --git a/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb b/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb
new file mode 100644
index 0000000000000000000000000000000000000000..daeef06e6c58339325c6e32521b2c42f5deb4e3d
--- /dev/null
+++ b/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Usage
+    module Metrics
+      module Instrumentations
+        class GitlabConfigMetric < GenericMetric
+          value do
+            method_name_array = config_hash_to_method_array(options[:config])
+
+            method_name_array.inject(Gitlab.config, :public_send)
+          end
+
+          private
+
+          def config_hash_to_method_array(object)
+            object.each_with_object([]) do |(key, value), result|
+              result.append(key)
+
+              if value.is_a?(Hash)
+                result.concat(config_hash_to_method_array(value))
+              else
+                result.append(value)
+              end
+            end
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb
index 930a637cdd4ff21b1b199a9d30631c507b737237..2b8b7aedeb2aa61e87de0961a8b9594e9bb95a44 100644
--- a/lib/gitlab/usage_data.rb
+++ b/lib/gitlab/usage_data.rb
@@ -163,11 +163,6 @@ def features_usage_data
 
       def features_usage_data_ce
         {
-          container_registry_enabled: alt_usage_data(fallback: nil) { Gitlab.config.registry.enabled },
-          dependency_proxy_enabled: Gitlab.config.try(:dependency_proxy)&.enabled,
-          gitlab_shared_runners_enabled: alt_usage_data(fallback: nil) { Gitlab.config.gitlab_ci.shared_runners_enabled },
-          ldap_enabled: alt_usage_data(fallback: nil) { Gitlab.config.ldap.enabled },
-          mattermost_enabled: alt_usage_data(fallback: nil) { Gitlab.config.mattermost.enabled },
           omniauth_enabled: alt_usage_data(fallback: nil) { Gitlab::Auth.omniauth_enabled? },
           prometheus_enabled: alt_usage_data(fallback: nil) { Gitlab::Prometheus::Internal.prometheus_enabled? },
           prometheus_metrics_enabled: alt_usage_data(fallback: nil) { Gitlab::Metrics.prometheus_metrics_enabled? },
diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e9814f0cb51bd38902adaf9343c5fe46284471a6
--- /dev/null
+++ b/spec/lib/gitlab/usage/metrics/instrumentations/gitlab_config_metric_spec.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Usage::Metrics::Instrumentations::GitlabConfigMetric, feature_category: :service_ping do
+  describe 'config metric' do
+    using RSpec::Parameterized::TableSyntax
+
+    where(:config_value, :expected_value) do
+      false | false
+      true  | true
+    end
+
+    with_them do
+      before do
+        stub_config(artifacts: { object_store: { enabled: config_value } })
+      end
+
+      it_behaves_like 'a correct instrumented metric value', {
+        time_frame: 'none',
+        options: {
+          config: {
+            artifacts: {
+              object_store: 'enabled'
+            }
+          }
+        }
+      }
+    end
+  end
+end
diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb
index 25a032ec183cded2b8d4c3bf37fe8a2fa42ad767..06492056da2e082132fc2a58bc49653aaa3e5f04 100644
--- a/spec/lib/gitlab/usage_data_spec.rb
+++ b/spec/lib/gitlab/usage_data_spec.rb
@@ -571,13 +571,8 @@ def omniauth_providers
       subject { described_class.features_usage_data_ce }
 
       it 'gathers feature usage data', :aggregate_failures do
-        expect(subject[:mattermost_enabled]).to eq(Gitlab.config.mattermost.enabled)
-        expect(subject[:ldap_enabled]).to eq(Gitlab.config.ldap.enabled)
         expect(subject[:omniauth_enabled]).to eq(Gitlab::Auth.omniauth_enabled?)
         expect(subject[:reply_by_email_enabled]).to eq(Gitlab::Email::IncomingEmail.enabled?)
-        expect(subject[:container_registry_enabled]).to eq(Gitlab.config.registry.enabled)
-        expect(subject[:dependency_proxy_enabled]).to eq(Gitlab.config.dependency_proxy.enabled)
-        expect(subject[:gitlab_shared_runners_enabled]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled)
       end
 
       context 'with embedded Prometheus' do
diff --git a/spec/support/helpers/usage_data_helpers.rb b/spec/support/helpers/usage_data_helpers.rb
index 8f17e44ed741f3d35455cd557d73d0617175b3e2..d8c4c5107c75968dd2db87420ac4663fdf067aa5 100644
--- a/spec/support/helpers/usage_data_helpers.rb
+++ b/spec/support/helpers/usage_data_helpers.rb
@@ -77,13 +77,8 @@ module UsageDataHelpers
   USAGE_DATA_KEYS = %i[
     counts
     recorded_at
-    mattermost_enabled
-    ldap_enabled
     omniauth_enabled
     reply_by_email_enabled
-    container_registry_enabled
-    dependency_proxy_enabled
-    gitlab_shared_runners_enabled
     gitlab_pages
     git
     gitaly