Add alerta UI for prometheus alerts

This change add new service with:
* The new service in monitoring stack: Alerta UI
* Nginx proxy entity for Alerta UI
* Relabeling for prometheus alerts
* New webhook receiver

Change-Id: Id042f2fa04a5881cd48265fa6e7a327237024acc
Prod-related: PROD-19597
diff --git a/docker/swarm/stack/monitoring/alerta.yml b/docker/swarm/stack/monitoring/alerta.yml
new file mode 100644
index 0000000..c0da7d5
--- /dev/null
+++ b/docker/swarm/stack/monitoring/alerta.yml
@@ -0,0 +1,30 @@
+classes:
+- system.prometheus.alerta
+parameters:
+  _param:
+    docker_image_alerta: docker-prod-local.artifactory.mirantis.com/mirantis/external/alerta-web:latest
+    alerta_mongodb_uri: "mongodb://${_param:cluster_node01_address}:27017,${_param:cluster_node02_address}:27017,${_param:cluster_node03_address}:27017/alerta?replicaSet=stacklight"
+    alerta_admin_username: "admin@alerta.io"
+  docker:
+    client:
+      stack:
+        monitoring:
+          service:
+            alerta:
+              networks:
+                - monitoring
+              deploy:
+                labels:
+                  com.mirantis.monitoring: "alerta"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "alerta"
+              image: ${_param:docker_image_alerta}
+              ports:
+                - 15017:8080
+              volumes:
+                - ${prometheus:alerta:config_dir}/alerta.conf:/web/config.js
+              environment:
+                ADMIN_USERS: ${_param:alerta_admin_username}
+                MONGO_URI: ${_param:alerta_mongodb_uri}
\ No newline at end of file
diff --git a/nginx/server/proxy/monitoring/alerta.yml b/nginx/server/proxy/monitoring/alerta.yml
new file mode 100644
index 0000000..432a9dc
--- /dev/null
+++ b/nginx/server/proxy/monitoring/alerta.yml
@@ -0,0 +1,18 @@
+parameters:
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_alerta:
+          enabled: true
+          type: nginx_proxy
+          name: alerta
+          proxy:
+            host: ${_param:prometheus_control_address}
+            port: 15017
+            protocol: http
+          host:
+            name: ${_param:cluster_public_host}
+            port: 15017
+            protocol: https
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/prometheus/alerta/init.yml b/prometheus/alerta/init.yml
new file mode 100644
index 0000000..a82e8d4
--- /dev/null
+++ b/prometheus/alerta/init.yml
@@ -0,0 +1,2 @@
+classes:
+  - service.prometheus.alerta
diff --git a/prometheus/alertmanager/notification/alerta.yml b/prometheus/alertmanager/notification/alerta.yml
new file mode 100644
index 0000000..816aaf6
--- /dev/null
+++ b/prometheus/alertmanager/notification/alerta.yml
@@ -0,0 +1,20 @@
+parameters:
+  _param:
+    alertmanager_notification_alerta_host: alerta
+    alertmanager_notification_alerta_port: 8080
+  prometheus:
+    alertmanager:
+      enabled: true
+      config:
+        route:
+          routes:
+            alerta:
+              receiver: HTTP-alerta
+              continue: true
+        receiver:
+          HTTP-alerta:
+            enabled: true
+            webhook_configs:
+              alerta:
+                url: "http://${_param:alertmanager_notification_alerta_host}:${_param:alertmanager_notification_alerta_port}/api/webhooks/prometheus"
+                send_resolved: true
diff --git a/prometheus/server/alert/alerta_relabel.yml b/prometheus/server/alert/alerta_relabel.yml
new file mode 100644
index 0000000..a81c59a
--- /dev/null
+++ b/prometheus/server/alert/alerta_relabel.yml
@@ -0,0 +1,19 @@
+parameters:
+  _param:
+    alerta_environment_label: Development
+  prometheus:
+    server:
+      config:
+        alert:
+          labels_add:
+            environment: ${_param:alerta_environment_label}
+        alert_relabel_configs:
+          - replacement: "aggregated"
+            source_labels: "instance"
+            target_label: "instance"
+          - source_labels: ["host", "job"]
+            target_label: "instance"
+            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"
+          - source_labels: ["hostname", "job"]
+            target_label: "instance"
+            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"