diff --git a/doc/development/snowplow/dictionary.md b/doc/development/snowplow/dictionary.md
index 589d6f6fb9fe08489938cdf37f211d6b49a25323..02e9ba5ce204efa2fb96bd1a3c061e0bac81b6ea 100644
--- a/doc/development/snowplow/dictionary.md
+++ b/doc/development/snowplow/dictionary.md
@@ -1,44 +1,4 @@
 ---
-stage: Growth
-group: Product Intelligence
-info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
+redirect_to: 'https://metrics.gitlab.com/snowplow.html'
+remove_date: '2021-12-28'
 ---
-
-<!---
-  This documentation is auto generated by a script.
-
-  Please do not edit this file directly, check generate_event_dictionary task on lib/tasks/gitlab/snowplow.rake.
---->
-
-<!-- vale gitlab.Spelling = NO -->
-
-# Event Dictionary
-
-This file is autogenerated, please do not edit it directly.
-
-To generate these files from the GitLab repository, run:
-
-```shell
-bundle exec rake gitlab:snowplow:generate_event_dictionary
-```
-
-The Event Dictionary is based on the following event definition YAML files:
-
-- [`config/events`](https://gitlab.com/gitlab-org/gitlab/-/tree/f9a404301ca22d038e7b9a9eb08d9c1bbd6c4d84/config/events)
-- [`ee/config/events`](https://gitlab.com/gitlab-org/gitlab/-/tree/f9a404301ca22d038e7b9a9eb08d9c1bbd6c4d84/ee/config/events)
-
-## Event definitions
-
-### `epics promote`
-
-| category | action | label | property | value |
-|---|---|---|---|---|
-| `epics` | `promote` | `` | `The string "issue_id"` | `ID of the issue` |
-
-Issue promoted to epic
-
-YAML definition: `/ee/config/events/epics_promote.yml`
-
-Owner: `group::product planning`
-
-Tiers: `premium`, `ultimate`
diff --git a/doc/development/snowplow/index.md b/doc/development/snowplow/index.md
index 11525f186c1184d3215924eea6352c018c7801f7..7f3eae580c8d2363568398bef89e7831e899bf92 100644
--- a/doc/development/snowplow/index.md
+++ b/doc/development/snowplow/index.md
@@ -39,7 +39,7 @@ Snowplow is an enterprise-grade marketing and Product Intelligence platform whic
 
 - [Understanding the structure of Snowplow data](https://docs.snowplowanalytics.com/docs/understanding-your-pipeline/canonical-event/)
 - [Our Iglu schema registry](https://gitlab.com/gitlab-org/iglu)
-- [List of events used in our codebase (Event Dictionary)](dictionary.md)
+- [List of events used in our codebase (Event Dictionary)](https://metrics.gitlab.com/snowplow.html)
 
 ## Enable Snowplow tracking
 
diff --git a/doc/development/snowplow/review_guidelines.md b/doc/development/snowplow/review_guidelines.md
index 8edcbf06a0e45535b4fbb291a41e19adb7fd4f8c..fa0985f6943c33453e504f76790d4902c65be952 100644
--- a/doc/development/snowplow/review_guidelines.md
+++ b/doc/development/snowplow/review_guidelines.md
@@ -14,7 +14,7 @@ general best practices for code reviews, refer to our [code review guide](../cod
 ## Resources for reviewers
 
 - [Snowplow Guide](index.md)
-- [Event Dictionary](dictionary.md)
+- [Event Dictionary](https://metrics.gitlab.com/snowplow.html)
 
 ## Review process
 
diff --git a/lib/gitlab/tracking/docs/helper.rb b/lib/gitlab/tracking/docs/helper.rb
deleted file mode 100644
index 4e03858b7718056aaed64d9ad6a69338635f38f0..0000000000000000000000000000000000000000
--- a/lib/gitlab/tracking/docs/helper.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module Tracking
-    module Docs
-      # Helper with functions to be used by HAML templates
-      module Helper
-        def auto_generated_comment
-          <<-MARKDOWN.strip_heredoc
-            ---
-            stage: Growth
-            group: Product Intelligence
-            info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
-            ---
-
-            <!---
-              This documentation is auto generated by a script.
-
-              Please do not edit this file directly, check generate_event_dictionary task on lib/tasks/gitlab/snowplow.rake.
-            --->
-
-            <!-- vale gitlab.Spelling = NO -->
-          MARKDOWN
-        end
-
-        def render_description(object)
-          return 'Missing description' unless object.description.present?
-
-          object.description
-        end
-
-        def render_event_taxonomy(object)
-          headers = %w[category action label property value]
-          values = %i[category action label property_description value_description]
-          values = values.map { |key| backtick(object.attributes[key]) }
-          values = values.join(" | ")
-
-          [
-            "| #{headers.join(" | ")} |",
-            "#{'|---' * headers.size}|",
-            "| #{values} |"
-          ].join("\n")
-        end
-
-        def md_link_to(anchor_text, url)
-          "[#{anchor_text}](#{url})"
-        end
-
-        def render_owner(object)
-          "Owner: #{backtick(object.product_group)}"
-        end
-
-        def render_tiers(object)
-          "Tiers: #{object.tiers.map(&method(:backtick)).join(', ')}"
-        end
-
-        def render_yaml_definition_path(object)
-          "YAML definition: #{backtick(object.yaml_path)}"
-        end
-
-        def backtick(string)
-          "`#{string}`"
-        end
-      end
-    end
-  end
-end
diff --git a/lib/gitlab/tracking/docs/renderer.rb b/lib/gitlab/tracking/docs/renderer.rb
deleted file mode 100644
index 184b935c2ba640bea20160f3eeab4ade337d2d42..0000000000000000000000000000000000000000
--- a/lib/gitlab/tracking/docs/renderer.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module Tracking
-    module Docs
-      class Renderer
-        include Gitlab::Tracking::Docs::Helper
-        DICTIONARY_PATH = Rails.root.join('doc', 'development', 'snowplow')
-        TEMPLATE_PATH = Rails.root.join('lib', 'gitlab', 'tracking', 'docs', 'templates', 'default.md.haml')
-
-        def initialize(event_definitions)
-          @layout = Haml::Engine.new(File.read(TEMPLATE_PATH))
-          @event_definitions = event_definitions.sort
-        end
-
-        def contents
-          # Render and remove an extra trailing new line
-          @contents ||= @layout.render(self, event_definitions: @event_definitions).sub!(/\n(?=\Z)/, '')
-        end
-
-        def write
-          filename = DICTIONARY_PATH.join('dictionary.md').to_s
-
-          FileUtils.mkdir_p(DICTIONARY_PATH)
-          File.write(filename, contents)
-
-          filename
-        end
-      end
-    end
-  end
-end
diff --git a/lib/gitlab/tracking/docs/templates/default.md.haml b/lib/gitlab/tracking/docs/templates/default.md.haml
deleted file mode 100644
index 568f56590fa62966251c3546a15c3630ad576270..0000000000000000000000000000000000000000
--- a/lib/gitlab/tracking/docs/templates/default.md.haml
+++ /dev/null
@@ -1,35 +0,0 @@
-= auto_generated_comment
-
-:plain
-  # Event Dictionary
-
-  This file is autogenerated, please do not edit it directly.
-
-  To generate these files from the GitLab repository, run:
-
-  ```shell
-  bundle exec rake gitlab:snowplow:generate_event_dictionary
-  ```
-
-  The Event Dictionary is based on the following event definition YAML files:
-
-  - [`config/events`](https://gitlab.com/gitlab-org/gitlab/-/tree/f9a404301ca22d038e7b9a9eb08d9c1bbd6c4d84/config/events)
-  - [`ee/config/events`](https://gitlab.com/gitlab-org/gitlab/-/tree/f9a404301ca22d038e7b9a9eb08d9c1bbd6c4d84/ee/config/events)
-
-  ## Event definitions
-
-\
-- event_definitions.each do |_path, object|
-
-  = "### `#{object.category} #{object.action}`"
-  \
-  = render_event_taxonomy(object)
-  \
-  = render_description(object)
-  \
-  = render_yaml_definition_path(object)
-  \
-  = render_owner(object)
-  \
-  = render_tiers(object)
-  \
diff --git a/lib/tasks/gitlab/snowplow.rake b/lib/tasks/gitlab/snowplow.rake
deleted file mode 100644
index 278ba4a471c481ce28d376a02255881d2b6a8be9..0000000000000000000000000000000000000000
--- a/lib/tasks/gitlab/snowplow.rake
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-namespace :gitlab do
-  namespace :snowplow do
-    desc 'GitLab | Snowplow | Generate event dictionary'
-    task generate_event_dictionary: :environment do
-      items = Gitlab::Tracking::EventDefinition.definitions
-      Gitlab::Tracking::Docs::Renderer.new(items).write
-    end
-  end
-end
diff --git a/spec/lib/gitlab/tracking/docs/helper_spec.rb b/spec/lib/gitlab/tracking/docs/helper_spec.rb
deleted file mode 100644
index 5f7965502f1cc431e1d0fd91f80d4feb13f478a8..0000000000000000000000000000000000000000
--- a/spec/lib/gitlab/tracking/docs/helper_spec.rb
+++ /dev/null
@@ -1,91 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Tracking::Docs::Helper do
-  let_it_be(:klass) do
-    Class.new do
-      include Gitlab::Tracking::Docs::Helper
-    end
-  end
-
-  describe '#auto_generated_comment' do
-    it 'renders information about missing description' do
-      expect(klass.new.auto_generated_comment).to match /This documentation is auto generated by a script/
-    end
-  end
-
-  describe '#render_description' do
-    context 'description is empty' do
-      it 'renders information about missing description' do
-        object = double(description: '')
-
-        expect(klass.new.render_description(object)).to eq('Missing description')
-      end
-    end
-
-    context 'description is present' do
-      it 'render description' do
-        object = double(description: 'some description')
-
-        expect(klass.new.render_description(object)).to eq('some description')
-      end
-    end
-  end
-
-  describe '#render_event_taxonomy' do
-    it 'render table with event taxonomy' do
-      attributes = {
-        category: 'epics',
-        action: 'promote',
-        label: nil,
-        property_description: 'String with issue id',
-        value_description: 'Integer issue id'
-      }
-      object = double(attributes: attributes)
-      event_taxonomy = <<~MD.chomp
-        | category | action | label | property | value |
-        |---|---|---|---|---|
-        | `epics` | `promote` | `` | `String with issue id` | `Integer issue id` |
-      MD
-
-      expect(klass.new.render_event_taxonomy(object)).to eq(event_taxonomy)
-    end
-  end
-
-  describe '#md_link_to' do
-    it 'render link in md format' do
-      expect(klass.new.md_link_to('zelda', 'link')).to eq('[zelda](link)')
-    end
-  end
-
-  describe '#render_owner' do
-    it 'render information about group owning event' do
-      object = double(product_group: "group::product intelligence")
-
-      expect(klass.new.render_owner(object)).to eq("Owner: `group::product intelligence`")
-    end
-  end
-
-  describe '#render_tiers' do
-    it 'render information about tiers' do
-      object = double(tiers: %w[bronze silver gold])
-
-      expect(klass.new.render_tiers(object)).to eq("Tiers: `bronze`, `silver`, `gold`")
-    end
-  end
-
-  describe '#render_yaml_definition_path' do
-    it 'render relative location of yaml definition' do
-      object = double(yaml_path: 'config/events/button_click.yaml')
-
-      expect(klass.new.render_yaml_definition_path(object)).to eq("YAML definition: `config/events/button_click.yaml`")
-    end
-  end
-
-  describe '#backtick' do
-    it 'wraps string in backticks chars' do
-      expect(klass.new.backtick('test')).to eql("`test`")
-    end
-  end
-end
diff --git a/spec/lib/gitlab/tracking/docs/renderer_spec.rb b/spec/lib/gitlab/tracking/docs/renderer_spec.rb
deleted file mode 100644
index 386aea6c23a53d19548e13579029b23b7ab65ed9..0000000000000000000000000000000000000000
--- a/spec/lib/gitlab/tracking/docs/renderer_spec.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::Tracking::Docs::Renderer do
-  describe 'contents' do
-    let(:dictionary_path) { described_class::DICTIONARY_PATH }
-    let(:items) { Gitlab::Tracking::EventDefinition.definitions.first(10).to_h }
-
-    it 'generates dictionary for given items' do
-      generated_dictionary = described_class.new(items).contents
-      table_of_contents_items = items.values.map { |item| "#{item.category} #{item.action}"}
-
-      generated_dictionary_keys = RDoc::Markdown
-        .parse(generated_dictionary)
-        .table_of_contents
-        .select { |metric_doc| metric_doc.level == 3 }
-        .map { |item| item.text.match(%r{<code>(.*)</code>})&.captures&.first }
-
-      expect(generated_dictionary_keys).to match_array(table_of_contents_items)
-    end
-  end
-end