diff --git a/app/presenters/alert_management/alert_presenter.rb b/app/presenters/alert_management/alert_presenter.rb
index d6ebc8e18b112123ee2aa3b41398af6def2a7783..c3067e6377fc26fc366fb5733ec657c17807a620 100644
--- a/app/presenters/alert_management/alert_presenter.rb
+++ b/app/presenters/alert_management/alert_presenter.rb
@@ -47,6 +47,13 @@ def metrics_dashboard_url; end
 
     private
 
+    def details_url
+      ::Gitlab::Routing.url_helpers.details_project_alert_management_url(
+        project,
+        alert.iid
+      )
+    end
+
     attr_reader :alert, :project
 
     def alerting_alert
@@ -67,6 +74,7 @@ def metadata_list
       metadata << list_item('Monitoring tool', monitoring_tool) if monitoring_tool
       metadata << list_item('Hosts', host_links) if hosts.any?
       metadata << list_item('Description', description) if description.present?
+      metadata << list_item('GitLab alert', details_url) if details_url.present?
 
       metadata.join(MARKDOWN_LINE_BREAK)
     end
diff --git a/app/presenters/projects/prometheus/alert_presenter.rb b/app/presenters/projects/prometheus/alert_presenter.rb
index 1cf8b202810d7abad0d9a2f14a6de5ef8f45a416..14a51b4a4fc1523e3a40d33ba1bc6a0871eec4da 100644
--- a/app/presenters/projects/prometheus/alert_presenter.rb
+++ b/app/presenters/projects/prometheus/alert_presenter.rb
@@ -77,6 +77,15 @@ def metrics_dashboard_url
         end
       end
 
+      def details_url
+        return unless am_alert
+
+        ::Gitlab::Routing.url_helpers.details_project_alert_management_url(
+          project,
+          am_alert.iid
+        )
+      end
+
       private
 
       def alert_title
@@ -97,6 +106,7 @@ def metadata_list
         metadata << list_item(service.label.humanize, service.value) if service
         metadata << list_item(monitoring_tool.label.humanize, monitoring_tool.value) if monitoring_tool
         metadata << list_item(hosts.label.humanize, host_links) if hosts
+        metadata << list_item('GitLab alert', details_url) if details_url
 
         metadata.join(MARKDOWN_LINE_BREAK)
       end
diff --git a/app/services/incident_management/create_issue_service.rb b/app/services/incident_management/create_issue_service.rb
index 34c70b002b6fd417028fcc5d1a3c7b8925c4fec4..d1c5c6752d4f4e6f103d25e2364e03bfc32d8ed2 100644
--- a/app/services/incident_management/create_issue_service.rb
+++ b/app/services/incident_management/create_issue_service.rb
@@ -5,13 +5,16 @@ class CreateIssueService < BaseService
     include Gitlab::Utils::StrongMemoize
     include IncidentManagement::Settings
 
-    def initialize(project, params)
-      super(project, User.alert_bot, params)
+    attr_reader :alert
+
+    def initialize(project, alert)
+      super(project, User.alert_bot)
+      @alert = alert
     end
 
     def execute
       return error('setting disabled') unless incident_management_setting.create_issue?
-      return error('invalid alert') unless alert.valid?
+      return error('invalid alert') unless alert_presenter.valid?
 
       result = create_incident
       return error(result.message, result.payload[:issue]) unless result.success?
@@ -31,7 +34,7 @@ def create_incident
     end
 
     def issue_title
-      alert.full_title
+      alert_presenter.full_title
     end
 
     def issue_description
@@ -45,16 +48,16 @@ def issue_description
     end
 
     def alert_summary
-      alert.issue_summary_markdown
+      alert_presenter.issue_summary_markdown
     end
 
     def alert_markdown
-      alert.alert_markdown
+      alert_presenter.alert_markdown
     end
 
-    def alert
-      strong_memoize(:alert) do
-        Gitlab::Alerting::Alert.new(project: project, payload: params).present
+    def alert_presenter
+      strong_memoize(:alert_presenter) do
+        Gitlab::Alerting::Alert.for_alert_management_alert(project: project, alert: alert).present
       end
     end
 
diff --git a/app/workers/incident_management/process_alert_worker.rb b/app/workers/incident_management/process_alert_worker.rb
index 26c86a3aa2bc73c2cafc9c9ea98e6cc006b40c7c..a8c6c9aa12151856c8433d5f8a742f6396f8f8dd 100644
--- a/app/workers/incident_management/process_alert_worker.rb
+++ b/app/workers/incident_management/process_alert_worker.rb
@@ -29,17 +29,9 @@ def find_alert(alert_id)
       AlertManagement::Alert.find_by_id(alert_id)
     end
 
-    def parsed_payload(alert)
-      if alert.prometheus?
-        alert.payload
-      else
-        Gitlab::Alerting::NotificationPayloadParser.call(alert.payload.to_h, alert.project)
-      end
-    end
-
     def create_issue_for(alert)
       IncidentManagement::CreateIssueService
-        .new(alert.project, parsed_payload(alert))
+        .new(alert.project, alert)
         .execute
     end
 
diff --git a/changelogs/unreleased/215088-add-alert-url-to-issue-description.yml b/changelogs/unreleased/215088-add-alert-url-to-issue-description.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c3682301fab248046bfde337083af4caf832de59
--- /dev/null
+++ b/changelogs/unreleased/215088-add-alert-url-to-issue-description.yml
@@ -0,0 +1,5 @@
+---
+title: Add alert url into incident issue markdown
+merge_request: 38649
+author:
+type: added
diff --git a/lib/gitlab/alerting/alert.rb b/lib/gitlab/alerting/alert.rb
index dad3dabb4fcb69455afb09db622783a2c34d771d..94b81b7d2906a1eefffdc32863e2a9fa551bfd54 100644
--- a/lib/gitlab/alerting/alert.rb
+++ b/lib/gitlab/alerting/alert.rb
@@ -7,7 +7,17 @@ class Alert
       include Gitlab::Utils::StrongMemoize
       include Presentable
 
-      attr_accessor :project, :payload
+      attr_accessor :project, :payload, :am_alert
+
+      def self.for_alert_management_alert(project:, alert:)
+        params = if alert.prometheus?
+                   alert.payload
+                 else
+                   Gitlab::Alerting::NotificationPayloadParser.call(alert.payload.to_h, alert.project)
+                 end
+
+        self.new(project: project, payload: params, am_alert: alert)
+      end
 
       def gitlab_alert
         strong_memoize(:gitlab_alert) do
diff --git a/spec/presenters/alert_management/alert_presenter_spec.rb b/spec/presenters/alert_management/alert_presenter_spec.rb
index ccea0d36a28377aca9ca25712e0aaa07ab637d64..4281babee61d68761aed3eafc078486f0550ede4 100644
--- a/spec/presenters/alert_management/alert_presenter_spec.rb
+++ b/spec/presenters/alert_management/alert_presenter_spec.rb
@@ -4,6 +4,7 @@
 
 RSpec.describe AlertManagement::AlertPresenter do
   let_it_be(:project) { create(:project) }
+
   let_it_be(:generic_payload) do
     {
       'title' => 'Alert title',
@@ -12,10 +13,13 @@
       'runbook' => 'https://runbook.com'
     }
   end
+
   let_it_be(:alert) do
-    build(:alert_management_alert, :with_description, :with_host, :with_service, :with_monitoring_tool, project: project, payload: generic_payload)
+    create(:alert_management_alert, :with_description, :with_host, :with_service, :with_monitoring_tool, project: project, payload: generic_payload)
   end
 
+  let(:alert_url) { "http://localhost/#{project.full_path}/-/alert_management/#{alert.iid}/details" }
+
   subject(:presenter) { described_class.new(alert) }
 
   describe '#issue_description' do
@@ -31,7 +35,8 @@
           **Service:** #{alert.service}#{markdown_line_break}
           **Monitoring tool:** #{alert.monitoring_tool}#{markdown_line_break}
           **Hosts:** #{alert.hosts.join(' ')}#{markdown_line_break}
-          **Description:** #{alert.description}
+          **Description:** #{alert.description}#{markdown_line_break}
+          **GitLab alert:** #{alert_url}
 
           #### Alert Details
 
diff --git a/spec/presenters/alert_management/prometheus_alert_presenter_spec.rb b/spec/presenters/alert_management/prometheus_alert_presenter_spec.rb
index 70c85619fd1f333d615ac3ed0ab7a7bf47933c79..3cfff3c1b2f4533af419fc94134b642f83b7b4a1 100644
--- a/spec/presenters/alert_management/prometheus_alert_presenter_spec.rb
+++ b/spec/presenters/alert_management/prometheus_alert_presenter_spec.rb
@@ -16,10 +16,12 @@
     }
   end
 
-  let(:alert) do
+  let!(:alert) do
     create(:alert_management_alert, :prometheus, project: project, payload: payload)
   end
 
+  let(:alert_url) { "http://localhost/#{project.full_path}/-/alert_management/#{alert.iid}/details" }
+
   subject(:presenter) { described_class.new(alert) }
 
   describe '#issue_description' do
@@ -33,7 +35,8 @@
           **Start time:** #{presenter.start_time}#{markdown_line_break}
           **Severity:** #{presenter.severity}#{markdown_line_break}
           **full_query:** `vector(1)`#{markdown_line_break}
-          **Monitoring tool:** Prometheus
+          **Monitoring tool:** Prometheus#{markdown_line_break}
+          **GitLab alert:** #{alert_url}
 
           #### Alert Details
 
diff --git a/spec/presenters/projects/prometheus/alert_presenter_spec.rb b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
index 89c5438b074d69a4df537580478aa878d94e275a..2d58a7f2cfa821077dc1efa3c721ff66eb4a5315 100644
--- a/spec/presenters/projects/prometheus/alert_presenter_spec.rb
+++ b/spec/presenters/projects/prometheus/alert_presenter_spec.rb
@@ -293,6 +293,19 @@
     end
   end
 
+  describe '#details_url' do
+    subject { presenter.details_url }
+
+    it { is_expected.to eq(nil) }
+
+    context 'alert management alert present' do
+      let_it_be(:am_alert) { create(:alert_management_alert, project: project) }
+      let(:alert) { create(:alerting_alert, project: project, payload: payload, am_alert: am_alert) }
+
+      it { is_expected.to eq("http://localhost/#{project.full_path}/-/alert_management/#{am_alert.iid}/details") }
+    end
+  end
+
   context 'with gitlab alert' do
     include_context 'gitlab alert'
 
diff --git a/spec/services/incident_management/create_issue_service_spec.rb b/spec/services/incident_management/create_issue_service_spec.rb
index 60b3a513a67ace88e5506cbbdc4c6ff222791c16..6c77779fd9205266c9238f58ea17a80917586954 100644
--- a/spec/services/incident_management/create_issue_service_spec.rb
+++ b/spec/services/incident_management/create_issue_service_spec.rb
@@ -5,7 +5,6 @@
 RSpec.describe IncidentManagement::CreateIssueService do
   let(:project) { create(:project, :repository, :private) }
   let_it_be(:user) { User.alert_bot }
-  let(:service) { described_class.new(project, alert_payload) }
   let(:alert_starts_at) { Time.current }
   let(:alert_title) { 'TITLE' }
   let(:alert_annotations) { { title: alert_title } }
@@ -17,8 +16,11 @@
     )
   end
 
+  let(:alert) { create(:alert_management_alert, :prometheus, project: project, payload: alert_payload) }
+  let(:service) { described_class.new(project, alert) }
+
   let(:alert_presenter) do
-    Gitlab::Alerting::Alert.new(project: project, payload: alert_payload).present
+    Gitlab::Alerting::Alert.for_alert_management_alert(project: project, alert: alert).present
   end
 
   let!(:setting) do
diff --git a/spec/workers/incident_management/process_alert_worker_spec.rb b/spec/workers/incident_management/process_alert_worker_spec.rb
index bed6dc59ac78ba637f2f511aae9779706081b8b3..9aac253c767b6060a9ad51685ef8fd8b662ac60d 100644
--- a/spec/workers/incident_management/process_alert_worker_spec.rb
+++ b/spec/workers/incident_management/process_alert_worker_spec.rb
@@ -19,14 +19,14 @@
       allow(Gitlab::AppLogger).to receive(:warn).and_call_original
 
       allow(IncidentManagement::CreateIssueService)
-        .to receive(:new).with(alert.project, parsed_payload)
+        .to receive(:new).with(alert.project, alert)
         .and_call_original
     end
 
     shared_examples 'creates issue successfully' do
       it 'creates an issue' do
         expect(IncidentManagement::CreateIssueService)
-          .to receive(:new).with(alert.project, parsed_payload)
+          .to receive(:new).with(alert.project, alert)
 
         expect { subject }.to change { Issue.count }.by(1)
       end