diff --git a/config/metrics/settings/20240607181654_observability_features_ff.yml b/config/metrics/settings/20240607181654_observability_features_ff.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0b4c1e600b80a0e6c11c42520c9f3ebba6b4065a
--- /dev/null
+++ b/config/metrics/settings/20240607181654_observability_features_ff.yml
@@ -0,0 +1,17 @@
+---
+key_path: settings.observability_features_ff
+description: Count of groups with the observability_features feature flag enabled, where the flag is disabled globally
+product_group: observability
+value_type: boolean
+status: active
+milestone: "17.3"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/159930
+time_frame: none
+data_source: database
+data_category: optional
+instrumentation_class: ObservabilityFeaturesFfMetric
+performance_indicator_type: []
+distribution:
+- ee
+tier:
+- ultimate
diff --git a/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb b/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb
new file mode 100644
index 0000000000000000000000000000000000000000..164aebad26bb846d967bc26d8de718246d42661b
--- /dev/null
+++ b/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Usage
+    module Metrics
+      module Instrumentations
+        class ObservabilityFeaturesFfMetric < GenericMetric
+          value do
+            # rubocop:disable Gitlab/FeatureFlagWithoutActor -- we are checking if the flag is enabled for all groups
+            if Feature.enabled?(:observability_features, type: :wip)
+              # If the flag is globally enabled, it's enabled for all groups.
+              # Querying for Group.count here would not be a performant option,
+              # Keeping it as -1 to indicate it is enabled for all.
+              -1
+              # rubocop:enable Gitlab/FeatureFlagWithoutActor
+            else
+              Feature.group_ids_for(:observability_features).length
+            end
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb b/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5de46ea4cc49f98a17d95cb0339e3caebabafe8e
--- /dev/null
+++ b/spec/lib/gitlab/usage/metrics/instrumentations/observability_features_ff_metric_spec.rb
@@ -0,0 +1,32 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Usage::Metrics::Instrumentations::ObservabilityFeaturesFfMetric, feature_category: :product_analytics_data_management do
+  context 'with FF enabled globally' do
+    it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do
+      let(:expected_value) { -1 }
+    end
+  end
+
+  # stub_feature_flags: disabled is required for Feature#group_ids_for to work correctly
+  context 'with FF enabled for specific groups', stub_feature_flags: false do
+    before do
+      stub_feature_flags(observability_features: create_list(:group, 3))
+    end
+
+    it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do
+      let(:expected_value) { 3 }
+    end
+  end
+
+  context 'with FF disabled' do
+    before do
+      stub_feature_flags(observability_features: false)
+    end
+
+    it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'database' } do
+      let(:expected_value) { 0 }
+    end
+  end
+end