diff --git a/doc/development/internal_analytics/internal_event_instrumentation/migration.md b/doc/development/internal_analytics/internal_event_instrumentation/migration.md
index 6cb43ddebbb7911e48cbbcb9b08bc0a2fa8af074..e9859b08502675fbf2fde4e996d3714bbdde7f97 100644
--- a/doc/development/internal_analytics/internal_event_instrumentation/migration.md
+++ b/doc/development/internal_analytics/internal_event_instrumentation/migration.md
@@ -37,7 +37,9 @@ Gitlab::Tracking.event(name, 'ci_templates_unique', namespace: namespace,
 The code above can be replaced by this:
 
 ```ruby
-Gitlab::InternalEvents.track_event('ci_templates_unique', namespace: namespace, project: project, user: user, additional_properties: { label: label })
+include Gitlab::InternalEventsTracking
+
+track_internal_event('ci_templates_unique', namespace: namespace, project: project, user: user, additional_properties: { label: label })
 ```
 
 The `label`, `property` and `value` attributes need to be sent inside the `additional_properties` hash. In case they were not included in the original call, the `additional_properties` argument can be skipped.
@@ -140,18 +142,20 @@ To start using Internal Events Tracking, follow these steps:
 
    Use `project.id` or `namespace.id` instead of `user.id` if your metric is counting something other than unique users.
 1. Remove the `options` section from both metric definition files.
-1. Call `InternalEvents.track_event` instead of `HLLRedisCounter.track_event`:
+1. Include the `Gitlab::InternalEventsTracking` module and call `track_internal_event` instead of `HLLRedisCounter.track_event`:
 
     ```diff
     - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)
-    + Gitlab::InternalEvents.track_event('project_created', user: current_user)
+    + include Gitlab::InternalEventsTracking
+    + track_internal_event('project_created', user: current_user)
     ```
 
 1. Optional. Add additional values to the event. You typically want to add `project` and `namespace` as it is useful information to have in the data warehouse.
 
     ```diff
     - Gitlab::UsageDataCounters::HLLRedisCounter.track_event(:git_write_action, values: current_user.id)
-    + Gitlab::InternalEvents.track_event('project_created', user: current_user, project: project, namespace: namespace)
+    + include Gitlab::InternalEventsTracking
+    + track_internal_event('project_created', user: current_user, project: project, namespace: namespace)
     ```
 
 1. Update your test to use the `internal event tracking` shared example.
diff --git a/doc/development/internal_analytics/internal_event_instrumentation/quick_start.md b/doc/development/internal_analytics/internal_event_instrumentation/quick_start.md
index e23366e02acb4488660a8b94fdf62a512f0040f2..b152d98b23757130e5928ca71174130ed57a927b 100644
--- a/doc/development/internal_analytics/internal_event_instrumentation/quick_start.md
+++ b/doc/development/internal_analytics/internal_event_instrumentation/quick_start.md
@@ -38,10 +38,12 @@ Triggering an event and thereby updating a metric is slightly different on backe
   <iframe src="https://www.youtube-nocookie.com/embed/Teid7o_2Mmg" frameborder="0" allowfullscreen> </iframe>
 </figure>
 
-To trigger an event, call the `Gitlab::InternalEvents.track_event` method with the desired arguments:
+To trigger an event, call the `track_internal_event` method from the `Gitlab::InternalEventsTracking` module with the desired arguments:
 
 ```ruby
-Gitlab::InternalEvents.track_event(
+include Gitlab::InternalEventsTracking
+
+track_internal_event(
   "i_code_review_user_apply_suggestion",
   user: user,
   namespace: namespace,
@@ -50,6 +52,7 @@ Gitlab::InternalEvents.track_event(
 ```
 
 This method automatically increments all RedisHLL metrics relating to the event `i_code_review_user_apply_suggestion`, and sends a corresponding Snowplow event with all named arguments and standard context (SaaS only).
+In addition, the name of the class triggering the event is saved in the `category` property of the Snowplow event.
 
 If you have defined a metric with a `unique` property such as `unique: project.id` it is required that you provide the `project` argument.
 
@@ -57,6 +60,8 @@ It is encouraged to fill out as many of `user`, `namespace` and `project` as pos
 
 If a `project` but no `namespace` is provided, the `project.namespace` is used as the `namespace` for the event.
 
+In some cases you might want to specify the `category` manually or provide none at all. To do that, you can call the `InternalEvents.track_event` method directly instead of using the module.
+
 #### Additional properties
 
 Additional properties can be passed when tracking events. They can be used to save additional data related to given event. It is possible to send a maximum of three additional properties (2 string and 1 numeric attribute).
diff --git a/scripts/internal_events/cli/text.rb b/scripts/internal_events/cli/text.rb
index 88145120c0ab22d2ddb35815eada5df57fc67fbd..e524b879d380080991230d7250f7157dfa915267 100755
--- a/scripts/internal_events/cli/text.rb
+++ b/scripts/internal_events/cli/text.rb
@@ -157,8 +157,9 @@ module Text
 
       #{format_info('BACKEND')}: Attributes must be specified when the event is triggered
         ex) User, project, and namespace are the identifiers available for backend instrumentation:
+          include Gitlab::InternalEventsTracking
 
-          Gitlab::InternalEvents.track_event(
+          track_internal_event(
             '%s',
             user: user,
             project: project,
diff --git a/scripts/internal_events/cli/usage_viewer.rb b/scripts/internal_events/cli/usage_viewer.rb
index 6a9be38e25d780fa170bedf0eea894af4017b2a1..fdb4303b6db705469ce82a2eda97d1974bb2d6b7 100755
--- a/scripts/internal_events/cli/usage_viewer.rb
+++ b/scripts/internal_events/cli/usage_viewer.rb
@@ -97,7 +97,9 @@ def rails_examples
         #{divider}
         #{format_help('# RAILS')}
 
-        Gitlab::InternalEvents.track_event(#{action}#{args.join(",\n")}#{"\n" unless args.empty?})
+        include Gitlab::InternalEventsTracking
+
+        track_internal_event(#{action}#{args.join(",\n")}#{"\n" unless args.empty?})
 
         #{divider}
       TEXT
diff --git a/spec/scripts/internal_events/cli_spec.rb b/spec/scripts/internal_events/cli_spec.rb
index 1c7a5e924a2fb4d8adc45c683738fe6cfcad1e70..4ea87d3a5a335f80b4793b88251484520819800d 100644
--- a/spec/scripts/internal_events/cli_spec.rb
+++ b/spec/scripts/internal_events/cli_spec.rb
@@ -398,7 +398,9 @@ def select_event_from_list
         --------------------------------------------------
         # RAILS
 
-        Gitlab::InternalEvents.track_event(
+        include Gitlab::InternalEventsTracking
+
+        track_internal_event(
           'internal_events_cli_used',
           project: project,
           namespace: project.namespace,
@@ -456,7 +458,9 @@ def select_event_from_list
         --------------------------------------------------
         # RAILS
 
-        Gitlab::InternalEvents.track_event('internal_events_cli_opened')
+        include Gitlab::InternalEventsTracking
+
+        track_internal_event('internal_events_cli_opened')
 
         --------------------------------------------------
         TEXT
@@ -627,7 +631,9 @@ def select_event_from_list
         --------------------------------------------------
         # RAILS
 
-        Gitlab::InternalEvents.track_event(
+        include Gitlab::InternalEventsTracking
+
+        track_internal_event(
           'internal_events_cli_used',
           project: project,
           namespace: project.namespace,
@@ -643,7 +649,9 @@ def select_event_from_list
         --------------------------------------------------
         # RAILS
 
-        Gitlab::InternalEvents.track_event('internal_events_cli_opened')
+        include Gitlab::InternalEventsTracking
+
+        track_internal_event('internal_events_cli_opened')
 
         --------------------------------------------------
         TEXT