diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 379da90827a12b11849f866322b74f3a10198b0d..bf1dfcd641657636a9044473dde3a384a4d66937 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -16,7 +16,6 @@ class ApplicationController < ActionController::Base
   include SessionlessAuthentication
   include SessionsHelper
   include ConfirmEmailWarning
-  include Gitlab::Tracking::ControllerConcern
   include Gitlab::Experimentation::ControllerConcern
   include InitializesCurrentUserMode
   include Impersonation
diff --git a/app/controllers/groups/email_campaigns_controller.rb b/app/controllers/groups/email_campaigns_controller.rb
index cbb0176ea7bd417a51e656a77dbb5f2ab5cc42a6..8c3c289dc99feb5ba2c029b313aaa3265f3e921e 100644
--- a/app/controllers/groups/email_campaigns_controller.rb
+++ b/app/controllers/groups/email_campaigns_controller.rb
@@ -2,7 +2,6 @@
 
 class Groups::EmailCampaignsController < Groups::ApplicationController
   include InProductMarketingHelper
-  include Gitlab::Tracking::ControllerConcern
 
   EMAIL_CAMPAIGNS_SCHEMA_URL = 'iglu:com.gitlab/email_campaigns/jsonschema/1-0-0'
 
@@ -25,7 +24,7 @@ class Groups::EmailCampaignsController < Groups::ApplicationController
       subject_line: subject_line(@track, @series)
     }
 
-    track_self_describing_event(EMAIL_CAMPAIGNS_SCHEMA_URL, data: data)
+    ::Gitlab::Tracking.self_describing_event(EMAIL_CAMPAIGNS_SCHEMA_URL, data: data)
   end
 
   def redirect_link
diff --git a/app/helpers/packages_helper.rb b/app/helpers/packages_helper.rb
index 8f365fd078660271ace8765d6c6c6c9f3679da14..04465f7798c74148fe37972d5d13db4c56c2fa57 100644
--- a/app/helpers/packages_helper.rb
+++ b/app/helpers/packages_helper.rb
@@ -50,6 +50,7 @@ module PackagesHelper
 
   def track_package_event(event_name, scope, **args)
     ::Packages::CreateEventService.new(nil, current_user, event_name: event_name, scope: scope).execute
-    track_event(event_name, **args)
+    category = args.delete(:category) || self.class.name
+    ::Gitlab::Tracking.event(category, event_name.to_s, **args)
   end
 end
diff --git a/ee/app/controllers/concerns/group_invite_members.rb b/ee/app/controllers/concerns/group_invite_members.rb
index b8030e7f0524a5579b944f4515e009c5716a2251..457c114ca96f2a20ffa0b4554d16d9b5ccc56c25 100644
--- a/ee/app/controllers/concerns/group_invite_members.rb
+++ b/ee/app/controllers/concerns/group_invite_members.rb
@@ -11,7 +11,7 @@ module GroupInviteMembers
 
     result = Members::CreateService.new(current_user, invite_params).execute(group)
 
-    track_event('invite_members', label: 'new_group_form') if result[:status] == :success
+    ::Gitlab::Tracking.event(self.class.name, 'invite_members', label: 'new_group_form') if result[:status] == :success
   end
 
   def emails_param
diff --git a/ee/app/controllers/groups/analytics/coverage_reports_controller.rb b/ee/app/controllers/groups/analytics/coverage_reports_controller.rb
index 2f06788e355073d3b9b1ec009ef4318d7dc4516c..4eb8669b163e2a17243cb0b8c333fc23c513b746 100644
--- a/ee/app/controllers/groups/analytics/coverage_reports_controller.rb
+++ b/ee/app/controllers/groups/analytics/coverage_reports_controller.rb
@@ -11,7 +11,7 @@ class Groups::Analytics::CoverageReportsController < Groups::Analytics::Applicat
   def index
     respond_to do |format|
       format.csv do
-        track_event(:download_code_coverage_csv, **download_tracker_params)
+        ::Gitlab::Tracking.event(self.class.name, 'download_code_coverage_csv', **download_tracker_params)
         send_data(render_csv(report_results), type: 'text/csv; charset=utf-8')
       end
     end
diff --git a/ee/app/controllers/groups/analytics/repository_analytics_controller.rb b/ee/app/controllers/groups/analytics/repository_analytics_controller.rb
index f3a871f700d7e0da31d4ce0e99cd733224249d06..8a4a39891b26b85d37273c91e68ac55aa8335e79 100644
--- a/ee/app/controllers/groups/analytics/repository_analytics_controller.rb
+++ b/ee/app/controllers/groups/analytics/repository_analytics_controller.rb
@@ -12,7 +12,7 @@ class Groups::Analytics::RepositoryAnalyticsController < Groups::Analytics::Appl
   end
 
   def show
-    track_event(**pageview_tracker_params)
+    Gitlab::Tracking.event(self.class.name, 'show', **pageview_tracker_params)
   end
 
   private
diff --git a/ee/app/controllers/survey_responses_controller.rb b/ee/app/controllers/survey_responses_controller.rb
index e352a0e9722ca5c94d670b61019da5d8ae36285b..d0971833a9182501bf0592efd15b093ecf3a6e5e 100644
--- a/ee/app/controllers/survey_responses_controller.rb
+++ b/ee/app/controllers/survey_responses_controller.rb
@@ -1,8 +1,6 @@
 # frozen_string_literal: true
 
 class SurveyResponsesController < ApplicationController
-  include Gitlab::Tracking::ControllerConcern
-
   SURVEY_RESPONSE_SCHEMA_URL = 'iglu:com.gitlab/survey_response/jsonschema/1-0-0'
 
   skip_before_action :authenticate_user!
@@ -28,7 +26,7 @@ class SurveyResponsesController < ApplicationController
       response: params[:response]
     }.compact
 
-    track_self_describing_event(SURVEY_RESPONSE_SCHEMA_URL, data: data)
+    ::Gitlab::Tracking.self_describing_event(SURVEY_RESPONSE_SCHEMA_URL, data: data)
   end
 
   def to_number(param)
diff --git a/ee/spec/controllers/survey_responses_controller_spec.rb b/ee/spec/controllers/survey_responses_controller_spec.rb
index 0f5de3de54679c5a876d35b08c337619e3abbd05..0f15dc8ce07f1b81eb52a8d1740a04c30f4cca75 100644
--- a/ee/spec/controllers/survey_responses_controller_spec.rb
+++ b/ee/spec/controllers/survey_responses_controller_spec.rb
@@ -21,7 +21,7 @@ RSpec.describe SurveyResponsesController do
       end
 
       it 'tracks a survey_response event' do
-        expect(controller).to receive(:track_self_describing_event).with(
+        expect(Gitlab::Tracking).to receive(:self_describing_event).with(
           SurveyResponsesController::SURVEY_RESPONSE_SCHEMA_URL,
           data: { survey_id: 1, response: 'bar' }
         )
@@ -32,7 +32,7 @@ RSpec.describe SurveyResponsesController do
 
     context 'not on GitLab.com' do
       it 'does not track a survey_response event' do
-        expect(controller).not_to receive(:track_self_describing_event)
+        expect(Gitlab::Tracking).not_to receive(:self_describing_event)
 
         subject
       end
diff --git a/lib/gitlab/tracking.rb b/lib/gitlab/tracking.rb
index 9bb793a75cc9ffbb6f022fee422c87250b3301b1..1b64c97b6b57118be295f83de11fe49dac75b33a 100644
--- a/lib/gitlab/tracking.rb
+++ b/lib/gitlab/tracking.rb
@@ -4,21 +4,6 @@ module Gitlab
   module Tracking
     SNOWPLOW_NAMESPACE = 'gl'
 
-    module ControllerConcern
-      extend ActiveSupport::Concern
-
-      protected
-
-      def track_event(action = action_name, **args)
-        category = args.delete(:category) || self.class.name
-        Gitlab::Tracking.event(category, action.to_s, **args)
-      end
-
-      def track_self_describing_event(schema_url, data:, **args)
-        Gitlab::Tracking.self_describing_event(schema_url, data: data, **args)
-      end
-    end
-
     class << self
       def enabled?
         Gitlab::CurrentSettings.snowplow_enabled?
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index 4a729008e67c676bdc10ddb48ccca60e96e02bc6..4809a07f6e96ebfea0ea3aa23e7769fcef73e9c6 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -56,8 +56,6 @@ RSpec.describe ApplicationController do
     end
   end
 
-  it_behaves_like 'a Trackable Controller'
-
   describe '#add_gon_variables' do
     before do
       Gon.clear
diff --git a/spec/controllers/projects/registry/tags_controller_spec.rb b/spec/controllers/projects/registry/tags_controller_spec.rb
index 5bff89b4308c3c13fa12b493fef1524128f957a2..c03a280d2cdb5ddc89d9d7d2745d6fb0c2b6ce30 100644
--- a/spec/controllers/projects/registry/tags_controller_spec.rb
+++ b/spec/controllers/projects/registry/tags_controller_spec.rb
@@ -42,7 +42,7 @@ RSpec.describe Projects::Registry::TagsController do
       it 'tracks the event', :snowplow do
         get_tags
 
-        expect_snowplow_event(category: anything, action: 'list_tags')
+        expect_snowplow_event(category: 'Projects::Registry::TagsController', action: 'list_tags')
       end
     end
 
@@ -107,11 +107,12 @@ RSpec.describe Projects::Registry::TagsController do
           destroy_tag('test.')
         end
 
-        it 'tracks the event' do
+        it 'tracks the event', :snowplow do
           expect_delete_tags(%w[test.])
-          expect(controller).to receive(:track_event).with(:delete_tag)
 
           destroy_tag('test.')
+
+          expect_snowplow_event(category: 'Projects::Registry::TagsController', action: 'delete_tag')
         end
       end
     end
diff --git a/spec/support/shared_examples/controllers/trackable_shared_examples.rb b/spec/support/shared_examples/controllers/trackable_shared_examples.rb
deleted file mode 100644
index dac7d8c94ff0db1ea896456177354d8738a6fe3c..0000000000000000000000000000000000000000
--- a/spec/support/shared_examples/controllers/trackable_shared_examples.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.shared_examples 'a Trackable Controller' do
-  describe '#track_event', :snowplow do
-    before do
-      sign_in user
-    end
-
-    context 'with no params' do
-      controller(described_class) do
-        def index
-          track_event
-          head :ok
-        end
-      end
-
-      it 'tracks the action name', :snowplow do
-        get :index
-
-        expect_snowplow_event(category: 'AnonymousController', action: 'index')
-      end
-    end
-
-    context 'with params' do
-      controller(described_class) do
-        def index
-          track_event('some_event', category: 'SomeCategory', label: 'errorlabel')
-          head :ok
-        end
-      end
-
-      it 'tracks with the specified param' do
-        get :index
-
-        expect_snowplow_event(category: 'SomeCategory', action: 'some_event', label: 'errorlabel')
-      end
-    end
-  end
-end