diff --git a/config/nomad/authorizer.nmd.in b/config/nomad/authorizer.nmd.in
index 7fd1366679d2a9bc8770f5df2c220e146aed9a46..0943d87b269a82593e002792780471bcf26bafc8 100644
--- a/config/nomad/authorizer.nmd.in
+++ b/config/nomad/authorizer.nmd.in
@@ -10,7 +10,7 @@ job "authorizer" {
       driver = "raw_exec"
 
       config {
-        command = "@AUTHORIZER_FULLPATH@",
+        command = "@AUTHORIZER_FULLPATH@"
         args =  ["-config","${NOMAD_TASK_DIR}/authorizer.json"]
       }
 
diff --git a/config/nomad/broker.nmd.in b/config/nomad/broker.nmd.in
index c1adccc61884a375ecc34f49ce64cb7eda90b5bc..33774f0b4d2cd0aea9148d5f1ac94d452c3a48d6 100644
--- a/config/nomad/broker.nmd.in
+++ b/config/nomad/broker.nmd.in
@@ -10,7 +10,7 @@ job "broker" {
       driver = "raw_exec"
 
       config {
-        command = "@BROKER_FULLPATH@",
+        command = "@BROKER_FULLPATH@"
         args =  ["-config","${NOMAD_TASK_DIR}/broker.json"]
       }
 
diff --git a/config/nomad/discovery.nmd.in b/config/nomad/discovery.nmd.in
index e3c36befc01f51fcbd7478342fe6fb6006d7b916..621403fc2e2dfe4313a2541864783da6b79c9ad4 100644
--- a/config/nomad/discovery.nmd.in
+++ b/config/nomad/discovery.nmd.in
@@ -10,7 +10,7 @@ job "discovery" {
       driver = "raw_exec"
 
       config {
-        command = "@DISCOVERY_FULLPATH@",
+        command = "@DISCOVERY_FULLPATH@"
         args =  ["-config","${NOMAD_TASK_DIR}/discovery.json"]
       }
 
diff --git a/config/nomad/file_transfer.nmd.in b/config/nomad/file_transfer.nmd.in
index f9cdd712fecd507fc4ccbd38fea5670bb7e8f914..64f122677c9b42cf176a109c6a32d2231ae9ed4c 100644
--- a/config/nomad/file_transfer.nmd.in
+++ b/config/nomad/file_transfer.nmd.in
@@ -10,7 +10,7 @@ job "file_transfer" {
       driver = "raw_exec"
 
       config {
-        command = "@FILE_TRANSFER_FULLPATH@",
+        command = "@FILE_TRANSFER_FULLPATH@"
         args =  ["-config","${NOMAD_TASK_DIR}/file_transfer.json"]
       }
 
diff --git a/config/nomad/nginx.nmd.in b/config/nomad/nginx.nmd.in
index 76d628eaa2d65d3b6b88c9c08bdeae6f71c0dfda..e908b7feefd14d683353824d5610f17a6378b3a4 100644
--- a/config/nomad/nginx.nmd.in
+++ b/config/nomad/nginx.nmd.in
@@ -24,7 +24,7 @@ job "nginx" {
       driver = "raw_exec"
 
       config {
-        command = "nginx",
+        command = "nginx"
         args =  ["-c","${NOMAD_TASK_DIR}/nginx.conf"]
       }
 
diff --git a/config/nomad/nginx_kill_lin.nmd b/config/nomad/nginx_kill_lin.nmd
index cb3abbac259780ce7366042f24a19d635f032994..774fe211bc05e08728e0446ba998760a7ebaaf78 100644
--- a/config/nomad/nginx_kill_lin.nmd
+++ b/config/nomad/nginx_kill_lin.nmd
@@ -9,7 +9,7 @@ job "nginx_kill" {
     task "nginx_kill" {
       driver = "raw_exec"
       config {
-        command = "killall",
+        command = "killall"
         args =  ["nginx"]
       }
    }
diff --git a/config/nomad/nginx_kill_win.nmd b/config/nomad/nginx_kill_win.nmd
index 3480ab65238a697acf6668b771a556e4ec61bc2b..b6873577b9da1232312854d43e6918eb6f22d834 100644
--- a/config/nomad/nginx_kill_win.nmd
+++ b/config/nomad/nginx_kill_win.nmd
@@ -10,7 +10,7 @@ job "nginx_kill" {
     task "nginx_kill" {
       driver = "raw_exec"
       config {
-        command = "taskkill",
+        command = "taskkill"
         args =  ["/f","/im","nginx.exe"]
       }
    }
diff --git a/config/nomad/receiver_fabric.nmd.in b/config/nomad/receiver_fabric.nmd.in
index 0c4d2174727eb6bfca65167b4925001188601a81..3be448ba65db4bcc529ee391b2ea947730c1c8f3 100644
--- a/config/nomad/receiver_fabric.nmd.in
+++ b/config/nomad/receiver_fabric.nmd.in
@@ -10,7 +10,7 @@ job "receiver" {
       driver = "raw_exec"
 
       config {
-        command = "@RECEIVER_DIR@/@RECEIVER_NAME@",
+        command = "@RECEIVER_DIR@/@RECEIVER_NAME@"
         args =  ["${NOMAD_TASK_DIR}/receiver.json"]
       }
 
diff --git a/config/nomad/receiver_tcp.nmd.in b/config/nomad/receiver_tcp.nmd.in
index 0d563934e9741538930dd51b7f90907ece08bb59..fe74ca93f3f633e85e1b3790d2c1be1888a49219 100644
--- a/config/nomad/receiver_tcp.nmd.in
+++ b/config/nomad/receiver_tcp.nmd.in
@@ -10,7 +10,7 @@ job "receiver" {
       driver = "raw_exec"
 
       config {
-        command = "@RECEIVER_DIR@/@RECEIVER_NAME@",
+        command = "@RECEIVER_DIR@/@RECEIVER_NAME@"
         args =  ["${NOMAD_TASK_DIR}/receiver.json"]
       }
 
diff --git a/deploy/asapo_services/asapo_overwrite_vars.tfvars b/deploy/asapo_services/asapo_overwrite_vars.tfvars
index 11be9b69383e51a2a41f3fdbcc49433b4d58748d..3fbc457e1f1efac85d25fcfa476a10ad0cc78c09 100644
--- a/deploy/asapo_services/asapo_overwrite_vars.tfvars
+++ b/deploy/asapo_services/asapo_overwrite_vars.tfvars
@@ -1,7 +1,10 @@
-elk_logs = true
+elk_logs = false
 
-receiver_total_memory_size = 35000
-receiver_dataserver_cache_size = 30 #gb
+asapo_monitor = true
+asapo_monitor_alert = true
+
+receiver_total_memory_size = 500
+receiver_dataserver_cache_size = 0 #gb
 receiver_receive_to_disk_threshold = 50 # mb
 receiver_dataserver_nthreads = 8
 
@@ -10,7 +13,7 @@ influxdb_total_memory_size = 2000
 fluentd_total_memory_size = 1000
 elasticsearch_total_memory_size = 3000
 kibana_total_memory_size = 1000
-mongo_total_memory_size = 20000
+mongo_total_memory_size = 2000
 authorizer_total_memory_size = 512
 discovery_total_memory_size = 512
 
diff --git a/deploy/asapo_services/run.sh b/deploy/asapo_services/run.sh
index 0a4f38fc588f203f46a55db165818d9a4645406b..a017a07937e0d90f158026807298cc84f582bfc3 100755
--- a/deploy/asapo_services/run.sh
+++ b/deploy/asapo_services/run.sh
@@ -22,7 +22,7 @@ mkdir -p $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHAR
 chmod 777 $NOMAD_ALLOC_HOST_SHARED $SERVICE_DATA_CLUSTER_SHARED $DATA_GLOBAL_SHARED
 
 cd $SERVICE_DATA_CLUSTER_SHARED
-mkdir esdatadir fluentd grafana influxdb mongodb
+mkdir esdatadir fluentd grafana influxdb mongodb prometheus alertmanager
 chmod 777 *
 
 mmc=`cat /proc/sys/vm/max_map_count`
diff --git a/deploy/asapo_services/scripts/alert.yml.tpl b/deploy/asapo_services/scripts/alert.yml.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..986dadb1f1517163d87ed9dadf748cdb609f81f5
--- /dev/null
+++ b/deploy/asapo_services/scripts/alert.yml.tpl
@@ -0,0 +1,58 @@
+groups:
+- name: prometheus_alerts
+  rules:
+- name: asapo-nomad-alerts
+  rules:
+  - alert: asapo-services
+    expr: sum(nomad_nomad_job_summary_running{exported_job="asapo-services"}) < 2 or absent(nomad_nomad_job_summary_running{exported_job="asapo-services"})
+    for: 1s
+    labels:
+      severity: fatal
+  - alert: asapo-monitoring
+    expr: sum(nomad_nomad_job_summary_running{exported_job="asapo-monitoring"}) < 2  or absent(nomad_nomad_job_summary_running{exported_job="asapo-monitoring"})
+    for: 1s
+    labels:
+      severity: fatal
+  - alert: asapo-mongo
+    expr: nomad_nomad_job_summary_running{exported_job="asapo-mongo"} < 1  or absent(nomad_nomad_job_summary_running{exported_job="asapo-mongo"})
+    for: 1s
+    labels:
+      severity: fatal
+  - alert: asapo-receivers-incomplete
+    expr: (nomad_nomad_job_summary_running{exported_job="asapo-receivers"} < {{ env "NOMAD_META_n_receivers" }} and sum (nomad_nomad_job_summary_running{exported_job="asapo-receivers"}) > 0)  or absent(nomad_nomad_job_summary_running{exported_job="asapo-receivers"})
+    for: 30s
+    labels:
+      severity: warn
+  - alert: asapo-receivers-absent
+    expr: nomad_nomad_job_summary_running{exported_job="asapo-receivers"} < 1 or absent(nomad_nomad_job_summary_running{exported_job="asapo-receivers"})
+    for: 1s
+    labels:
+      severity: fatal
+  - alert: asapo-nginx
+    expr: nomad_nomad_job_summary_running{exported_job="asapo-nginx"} < 1  or absent(nomad_nomad_job_summary_running{exported_job="asapo-nginx"})
+    for: 1s
+    labels:
+      severity: fatal
+  - alert: asapo-fluentd
+    expr: nomad_nomad_job_summary_running{exported_job="asapo-logging", task_group="fluentd"} < 1  or absent(nomad_nomad_job_summary_running{exported_job="asapo-logging", task_group="fluentd"})
+    for: 1s
+    labels:
+      severity: fatal
+
+- name: asapo-consul-alerts
+  rules:
+    - alert: asapo-discovery
+      expr: sum (up{job="asapo-discovery"}) < 1 or absent(up{job="asapo-discovery"})
+      for: 1s
+      labels:
+        severity: fatal
+    - alert: asapo-brokers-incomplete
+      expr: (sum (up{job="asapo-broker"}) < {{ env "NOMAD_META_n_brokers" }} and sum (up{job="asapo-broker"}) > 0) or absent(up{job="asapo-broker"})
+      for: 30s
+      labels:
+        severity: warn
+    - alert: asapo-brokers-absent
+      expr: sum (up{job="asapo-broker"}) == 0 or absent(up{job="asapo-broker"})
+      for: 1s
+      labels:
+        severity: fatal
\ No newline at end of file
diff --git a/deploy/asapo_services/scripts/asapo-monitoring.nmd.tpl b/deploy/asapo_services/scripts/asapo-monitoring.nmd.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..0e26fcaf5cb817978292599d62bc3b3e3dad9550
--- /dev/null
+++ b/deploy/asapo_services/scripts/asapo-monitoring.nmd.tpl
@@ -0,0 +1,127 @@
+job "asapo-monitoring" {
+  datacenters = [
+    "dc1"]
+  affinity {
+    attribute = "$${meta.node_group}"
+    value = "utl"
+    weight = 100
+  }
+
+  #  update {
+  #    max_parallel = 1
+  #    min_healthy_time = "10s"
+  #    healthy_deadline = "3m"
+  #    auto_revert = false
+  #  }
+
+  group "alerting" {
+    count = "%{ if asapo_monitor_alert }1%{ else }0%{ endif }"
+    restart {
+      attempts = 2
+      interval = "30m"
+      delay = "15s"
+      mode = "fail"
+    }
+
+    task "alertmanager" {
+      driver = "docker"
+      user = "${asapo_user}"
+      config {
+        image = "prom/alertmanager:${alertmanager_version}"
+        args = [
+          "--web.route-prefix=/alertmanager/",
+          "--config.file=/etc/alertmanager/alertmanager.yml",
+          "--storage.path=/alertmanager"
+        ]
+        volumes = [
+          "/${service_dir}/alertmanager:/alertmanager"
+        ]
+      }
+      resources {
+        memory = "${alertmanager_total_memory_size}"
+        network {
+          mbits = 10
+          port "alertmanager_ui" {
+            static = "${alertmanager_port}"
+            to = 9093
+          }
+        }
+      }
+      service {
+        name = "alertmanager"
+        port = "alertmanager_ui"
+        check {
+          name = "alertmanager_ui port alive"
+          type = "http"
+          path = "/alertmanager/-/healthy"
+          interval = "10s"
+          timeout = "2s"
+        }
+      }
+    }
+  }
+
+
+  group "monitoring" {
+    count = "%{ if asapo_monitor }1%{ else }0%{ endif }"
+    restart {
+      attempts = 2
+      interval = "3m"
+      delay = "15s"
+      mode = "delay"
+    }
+
+    task "prometheus" {
+      driver = "docker"
+      user = "${asapo_user}"
+      config {
+        image = "prom/prometheus:${prometheus_version}"
+        args = [
+          "--web.external-url=/prometheus/",
+          "--web.route-prefix=/prometheus/",
+          "--config.file=/etc/prometheus/prometheus.yml"
+        ]
+        volumes = [
+          "local/alert.yml:/etc/prometheus/alert.yml",
+          "local/prometheus.yml:/etc/prometheus/prometheus.yml",
+          "/${service_dir}/prometheus:/prometheus"
+        ]
+      }
+      template {
+        source = "${scripts_dir}/alert.yml.tpl"
+        destination = "local/alert.yml"
+        change_mode = "restart"
+      }
+      template {
+        source = "${scripts_dir}/prometheus.yml.tpl"
+        destination = "local/prometheus.yml"
+        change_mode = "restart"
+      }
+      resources {
+        memory = "${prometheus_total_memory_size}"
+        network {
+          mbits = 10
+          port "prometheus_ui" {
+            static = "${prometheus_port}"
+            to = 9090
+          }
+        }
+      }
+      meta {
+        n_brokers = "${n_brokers}"
+        n_receivers = "${n_receivers}"
+      }
+      service {
+        name = "prometheus"
+        port = "prometheus_ui"
+        check {
+          name = "prometheus_ui port alive"
+          type = "http"
+          path = "/prometheus/-/healthy"
+          interval = "10s"
+          timeout = "2s"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/deploy/asapo_services/scripts/asapo-nginx.nmd.tpl b/deploy/asapo_services/scripts/asapo-nginx.nmd.tpl
index b9ab767cd987122196bf1aa6812f776b324935bd..d22febe4565a30c2946da29bef3c67e69a5a8d5b 100644
--- a/deploy/asapo_services/scripts/asapo-nginx.nmd.tpl
+++ b/deploy/asapo_services/scripts/asapo-nginx.nmd.tpl
@@ -35,6 +35,8 @@ job "asapo-nginx" {
         authorizer_port = "${authorizer_port}"
         discovery_port = "${discovery_port}"
         consul_dns_port = "${consul_dns_port}"
+        prometheus_port = "${prometheus_port}"
+        alertmanager_port = "${alertmanager_port}"
       }
 
       config {
@@ -81,8 +83,6 @@ job "asapo-nginx" {
          destination   = "local/nginx.conf"
          change_mode   = "restart"
       }
-
-
    }
   }
 }
diff --git a/deploy/asapo_services/scripts/asapo.auto.tfvars.in b/deploy/asapo_services/scripts/asapo.auto.tfvars.in
index 98ffb7244e1437d9a6fd523667da29ef1fcaa2a9..39fc875d192bdef6fb9ed90931c174705815edb3 100644
--- a/deploy/asapo_services/scripts/asapo.auto.tfvars.in
+++ b/deploy/asapo_services/scripts/asapo.auto.tfvars.in
@@ -1,7 +1,6 @@
 asapo_imagename_suffix="@ASAPO_VERSION_DOCKER_SUFFIX@"
 asapo_image_tag = "@ASAPO_VERSION@"
 
-
 nginx_version = "1.14"
 elasticsearch_version = "7.3.2"
 kibana_version = "7.3.2"
@@ -13,11 +12,15 @@ perf_monitor = false
 nomad_logs = false
 force_pull_images = false
 
-job_scripts_dir = "/var/run/asapo"
+asapo_monitor = true
+asapo_monitor_alert = false
+prometheus_version = "v2.30.3"
+alertmanager_version = "v0.23.0"
 
-receiver_total_memory_size = "2000"
+job_scripts_dir = "/var/run/asapo"
 
-receiver_dataserver_cache_size = "1" #gb
+receiver_total_memory_size = 2000
+receiver_dataserver_cache_size = 1 #gb
 receiver_dataserver_nthreads = 4
 receiver_receive_to_disk_threshold = 50 #mb
 receiver_network_modes = "tcp"
@@ -32,6 +35,8 @@ kibana_total_memory_size = 256
 mongo_total_memory_size = 256
 authorizer_total_memory_size = 256
 discovery_total_memory_size = 256
+prometheus_total_memory_size = 256
+alertmanager_total_memory_size = 256
 
 ldap_uri = "ldap://localhost:389"
 
@@ -46,6 +51,8 @@ kibana_port = 5601
 discovery_port = 5006
 authorizer_port = 5007
 consul_dns_port = 8600
+prometheus_port = 9090
+alertmanager_port = 9093
 
 n_receivers = 1
 n_brokers = 1
diff --git a/deploy/asapo_services/scripts/nginx.conf.tpl b/deploy/asapo_services/scripts/nginx.conf.tpl
index 03bc7377435d913959c003949822b9e7f230d293..5e697955799ad4e58187b9eb7514d7749762b6d5 100644
--- a/deploy/asapo_services/scripts/nginx.conf.tpl
+++ b/deploy/asapo_services/scripts/nginx.conf.tpl
@@ -35,6 +35,8 @@ http {
           set $kibana_endpoint kibana.service.asapo;
           set $grafana_endpoint grafana.service.asapo;
           set $influxdb_endpoint influxdb.service.asapo;
+          set $prometheus_endpoint prometheus.service.asapo;
+          set $alertmanager_endpoint alertmanager.service.asapo;
           set $elasticsearch_endpoint elasticsearch.service.asapo;
 
    		  location /influxdb/ {
@@ -42,6 +44,14 @@ http {
             proxy_pass http://$influxdb_endpoint:{{ env "NOMAD_META_influxdb_port" }}$uri$is_args$args;
           }
 
+		  location /prometheus/ {
+            proxy_pass http://$prometheus_endpoint:{{ env "NOMAD_META_prometheus_port" }}$uri$is_args$args;
+          }
+
+		  location /alertmanager/ {
+            proxy_pass http://$alertmanager_endpoint:{{ env "NOMAD_META_alertmanager_port" }}$uri$is_args$args;
+          }
+
    		  location /elasticsearch/ {
             rewrite ^/elasticsearch(/.*) $1 break;
             proxy_pass http://$elasticsearch_endpoint:{{ env "NOMAD_META_elasticsearch_port" }}$uri$is_args$args;
diff --git a/deploy/asapo_services/scripts/prometheus.yml.tpl b/deploy/asapo_services/scripts/prometheus.yml.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..89ee5478b17472dbd26adfd01e991ce104e32e4b
--- /dev/null
+++ b/deploy/asapo_services/scripts/prometheus.yml.tpl
@@ -0,0 +1,55 @@
+# my global config
+global:
+  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
+  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
+  # scrape_timeout is set to the global default (10s).
+
+# Alertmanager configuration
+alerting:
+  alertmanagers:
+    - consul_sd_configs:
+        - server: '{{ env "NOMAD_IP_prometheus_ui" }}:8500'
+          services: ['alertmanager']
+      path_prefix: "alertmanager/"
+
+# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
+rule_files:
+  - "alert.yml"
+  # - "second_rules.yml"
+
+# A scrape configuration containing exactly one endpoint to scrape:
+# Here it's Prometheus itself.
+scrape_configs:
+  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
+  - job_name: "prometheus"
+    static_configs:
+      - targets: ["localhost:9090"]
+    # metrics_path defaults to '/metrics'
+    # scheme defaults to 'http'.
+  - job_name: "nomad metrics"
+    consul_sd_configs:
+      - server: '{{ env "NOMAD_IP_prometheus_ui" }}:8500'
+        services:
+          - 'nomad-client'
+    metrics_path: /v1/metrics
+    params:
+      format: ['prometheus']
+  - job_name: discovery
+    consul_sd_configs:
+      - server: '{{ env "NOMAD_IP_prometheus_ui" }}:8500'
+        services:
+          - 'asapo-discovery'
+    relabel_configs:
+      - source_labels: [__meta_consul_service]
+        target_label: job
+
+  #    metrics_path: /health
+  - job_name: dummy
+    consul_sd_configs:
+      - server: '{{ env "NOMAD_IP_prometheus_ui" }}:8500'
+    relabel_configs:
+      - source_labels: [__meta_consul_tags]
+        regex: .*,asapo,.*
+        action: keep
+      - source_labels: [__meta_consul_service]
+        target_label: job
diff --git a/deploy/asapo_services/scripts/resources.tf b/deploy/asapo_services/scripts/resources.tf
index 869b4664f4cde62fbd8495ea5aa42c00ed8b3378..928a5a7620346e3332b33359b43191ee7ee0d497 100644
--- a/deploy/asapo_services/scripts/resources.tf
+++ b/deploy/asapo_services/scripts/resources.tf
@@ -10,6 +10,13 @@ resource "nomad_job" "asapo-perfmetrics" {
   jobspec = data.template_file.asapo_perfmetrics.rendered
 }
 
+
+resource "nomad_job" "asapo-monitoring" {
+  jobspec = data.template_file.asapo_monitoring.rendered
+  depends_on = [null_resource.asapo-broker,null_resource.asapo-receiver]
+}
+
+
 resource "nomad_job" "asapo-logging" {
   jobspec = data.template_file.asapo_logging.rendered
   depends_on = [null_resource.nginx]
diff --git a/deploy/asapo_services/scripts/resources_services.tf b/deploy/asapo_services/scripts/resources_services.tf
index e3cff85810efb48af3bc90347c5e20010204df6b..0ad672ea2d3aee11a1f8856e797115b73e75a9a3 100644
--- a/deploy/asapo_services/scripts/resources_services.tf
+++ b/deploy/asapo_services/scripts/resources_services.tf
@@ -36,6 +36,22 @@ resource "null_resource" "asapo-authorizer" {
 
 }
 
+
+resource "null_resource" "prometheus" {
+  provisioner "local-exec" {
+    command = "asapo-wait-service prometheus ${var.asapo_monitor}"
+  }
+  depends_on = [nomad_job.asapo-monitoring]
+}
+
+resource "null_resource" "alertmanager" {
+  provisioner "local-exec" {
+    command = "asapo-wait-service alertmanager ${var.asapo_monitor && var.asapo_monitor_alert}"
+  }
+  depends_on = [nomad_job.asapo-monitoring]
+}
+
+
 resource "null_resource" "asapo-discovery" {
   provisioner "local-exec" {
     command = "asapo-wait-service asapo-discovery"
@@ -79,4 +95,3 @@ resource "null_resource" "kibana" {
   depends_on = [nomad_job.asapo-logging]
 }
 
-
diff --git a/deploy/asapo_services/scripts/templates.tf b/deploy/asapo_services/scripts/templates.tf
index 5815e2672bad509eb76e2b512444e5926ab1b0f0..2c7fa07d091a702fca4f360588469594cc1bc662 100644
--- a/deploy/asapo_services/scripts/templates.tf
+++ b/deploy/asapo_services/scripts/templates.tf
@@ -9,11 +9,15 @@ data "template_file" "nginx" {
     elasticsearch_port = "${var.elasticsearch_port}"
     grafana_port = "${var.grafana_port}"
     influxdb_port = "${var.influxdb_port}"
+    prometheus_port = "${var.prometheus_port}"
     authorizer_port = "${var.authorizer_port}"
     discovery_port = "${var.discovery_port}"
     asapo_user = "${var.asapo_user}"
     consul_dns_port = "${var.consul_dns_port}"
+    prometheus_port = "${var.prometheus_port}"
+    alertmanager_port = "${var.alertmanager_port}"
   }
+
 }
 
 data "template_file" "asapo_services" {
@@ -99,6 +103,25 @@ data "template_file" "asapo_perfmetrics" {
 }
 
 
+data "template_file" "asapo_monitoring" {
+  template = "${file("${var.job_scripts_dir}/asapo-monitoring.nmd.tpl")}"
+  vars = {
+    n_brokers = "${var.n_brokers}"
+    n_receivers = "${var.n_receivers}"
+    service_dir = "${var.service_dir}"
+    scripts_dir = "${var.job_scripts_dir}"
+    asapo_monitor = "${var.asapo_monitor}"
+    asapo_monitor_alert = "${var.asapo_monitor_alert}"
+    prometheus_version = "${var.prometheus_version}"
+    alertmanager_version = "${var.alertmanager_version}"
+    alertmanager_port = "${var.alertmanager_port}"
+    prometheus_port = "${var.prometheus_port}"
+    prometheus_total_memory_size = "${var.prometheus_total_memory_size}"
+    alertmanager_total_memory_size = "${var.alertmanager_total_memory_size}"
+    asapo_user = "${var.asapo_user}"
+  }
+}
+
 data "template_file" "asapo_mongo" {
   template = "${file("${var.job_scripts_dir}/asapo-mongo.nmd.tpl")}"
   vars = {
diff --git a/deploy/asapo_services/scripts/vars.tf b/deploy/asapo_services/scripts/vars.tf
index 41df4f06f5e92f4a85e0d41f81c17d94f716723f..fab7c9a186d6a1073fa871d02ecb2d2bedba39c6 100644
--- a/deploy/asapo_services/scripts/vars.tf
+++ b/deploy/asapo_services/scripts/vars.tf
@@ -1,6 +1,11 @@
 variable "elk_logs" {}
+
 variable "perf_monitor" {}
 
+variable "asapo_monitor" {}
+
+variable "asapo_monitor_alert" {}
+
 variable "force_pull_images" {}
 
 variable "asapo_user" {}
@@ -19,6 +24,10 @@ variable "influxdb_version" {}
 
 variable "mongo_version" {}
 
+variable "prometheus_version" {}
+
+variable "alertmanager_version" {}
+
 variable "asapo_imagename_suffix" {}
 
 variable "asapo_image_tag" {}
@@ -28,6 +37,7 @@ variable "job_scripts_dir" {}
 variable "service_dir" {}
 
 variable "online_dir" {}
+
 variable "offline_dir" {}
 
 variable "mongo_dir" {}
@@ -42,7 +52,6 @@ variable "receiver_receive_to_disk_threshold" {}
 
 variable "receiver_network_modes" {}
 
-
 variable "grafana_total_memory_size" {}
 
 variable "influxdb_total_memory_size" {}
@@ -59,12 +68,21 @@ variable "authorizer_total_memory_size" {}
 
 variable "discovery_total_memory_size" {}
 
+variable "prometheus_total_memory_size" {}
+
+variable "alertmanager_total_memory_size" {}
+
+
 variable "grafana_port" {}
 
 variable "influxdb_port" {}
 
 variable "influxdb_rpc_port" {}
 
+variable "prometheus_port" {}
+
+variable "alertmanager_port" {}
+
 variable "mongo_port" {}
 
 variable "fluentd_port" {}
diff --git a/deploy/nomad_consul_docker/Dockerfile b/deploy/nomad_consul_docker/Dockerfile
index 380b77c5adcd4807f5bbacd937bb813de9bff134..b49d1e5d635c86d1228afb5582425f0d38ffd8cb 100644
--- a/deploy/nomad_consul_docker/Dockerfile
+++ b/deploy/nomad_consul_docker/Dockerfile
@@ -24,9 +24,9 @@ RUN add-apt-repository \
 RUN apt-get update && apt-get install -y docker-ce-cli wget unzip iproute2 vim td-agent-bit
 
 
-ENV CONSUL_VERSION=1.8.4
-ENV NOMAD_VERSION=0.12.5
-ENV TERRAFORM_VERSION=0.13.3
+ENV CONSUL_VERSION=1.10.3
+ENV NOMAD_VERSION=1.1.6
+ENV TERRAFORM_VERSION=1.0.8
 ENV HASHICORP_RELEASES=https://releases.hashicorp.com
 
 RUN set -eux && \
diff --git a/deploy/nomad_consul_docker/consul.hcl.tpl b/deploy/nomad_consul_docker/consul.hcl.tpl
index 33764c77cbdabe350a4a838a62fcdbfe5211b381..fb2e5bb25598d3dc1cea8025b43d5b0fadc88b43 100644
--- a/deploy/nomad_consul_docker/consul.hcl.tpl
+++ b/deploy/nomad_consul_docker/consul.hcl.tpl
@@ -28,4 +28,7 @@ $bootstrap_expect_string
 rejoin_after_leave = true
 retry_join = $server_adresses
 
-
+telemetry = {
+    disable_compat_1.9 = false
+    prometheus_retention_time = "24h"
+}
diff --git a/deploy/nomad_consul_docker/nomad.hcl.tpl b/deploy/nomad_consul_docker/nomad.hcl.tpl
index 2a5716ee38a99f7c301b25544705a0f8f14cc7d4..4f7477faa4b1b6796b366be6391fa726638126df 100644
--- a/deploy/nomad_consul_docker/nomad.hcl.tpl
+++ b/deploy/nomad_consul_docker/nomad.hcl.tpl
@@ -22,6 +22,9 @@ client {
       "asapo_service" = $is_asapo_lightweight_service_node
       "ib_address" = "$ib_address"
   }
+  template {
+      disable_file_sandbox = true
+  }
 }
 
 plugin "docker" {
@@ -35,7 +38,9 @@ plugin "docker" {
       key  = "/etc/nomad/key.pem"
       ca   = "/etc/nomad/ca.pem"
     }
-
+    volumes {
+        enabled = true
+    }
     allow_privileged = true
 
   }
@@ -48,11 +53,11 @@ plugin "raw_exec" {
 }
 
 telemetry {
-  publish_allocation_metrics = $use_telemetry
-  publish_node_metrics       = $use_telemetry
-  statsd_address = "$telegraf_address"
-  collection_interval = "10s"
+  collection_interval = "1s"
+  disable_hostname = true
+  prometheus_metrics = true
+  publish_allocation_metrics = true
+  publish_node_metrics = true
 }
 
 
-
diff --git a/discovery/src/asapo_discovery/go.mod b/discovery/src/asapo_discovery/go.mod
index d1fbc93e8aa6557c91054b95b2925088f5a36359..e1a2c6e037e52ed27d75885243e180bcfb63a3aa 100644
--- a/discovery/src/asapo_discovery/go.mod
+++ b/discovery/src/asapo_discovery/go.mod
@@ -6,8 +6,8 @@ replace asapo_common v0.0.0 => ../../../common/go/src/asapo_common
 
 require (
 	asapo_common v0.0.0
-	github.com/gorilla/mux v1.8.0
 	github.com/hashicorp/consul/api v1.4.0
+	github.com/prometheus/client_golang v1.11.0
 	github.com/stretchr/testify v1.7.0
 	k8s.io/apimachinery v0.17.0
 	k8s.io/client-go v0.17.0
diff --git a/discovery/src/asapo_discovery/go.sum b/discovery/src/asapo_discovery/go.sum
index 5b43fcb6be3e5b43431604d61ffe18ac5821eb4a..356d38f48e3b3021d57ce478c6f164b10a2e8fe9 100644
--- a/discovery/src/asapo_discovery/go.sum
+++ b/discovery/src/asapo_discovery/go.sum
@@ -12,11 +12,22 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -33,11 +44,19 @@ github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
 github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
 github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
 github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
 github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -46,14 +65,26 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -104,12 +135,21 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
 github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
 github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -128,6 +168,8 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME
 github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
 github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=
 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
@@ -148,6 +190,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
 github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -157,23 +201,47 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
-github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.8.0 h1:nfhvjKcUMhBMVqbKHJlk5RPrrfYr/NMo3692g0dwfWU=
 github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -181,11 +249,13 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
 github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0=
 golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -195,13 +265,16 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
@@ -210,21 +283,32 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk=
 golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -239,6 +323,8 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -248,6 +334,15 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.26.0-rc.1 h1:7QnIQpGRHE5RnLKnESfDoxm2dTapTZua5a0kS0A+VXQ=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
@@ -259,8 +354,10 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/discovery/src/asapo_discovery/server/get_version.go b/discovery/src/asapo_discovery/server/get_version.go
index 3e2abebd5afd815adb2bda77982424acff6c5992..7c1127df3bd049016b2d1be5e4ecb132963a6786 100644
--- a/discovery/src/asapo_discovery/server/get_version.go
+++ b/discovery/src/asapo_discovery/server/get_version.go
@@ -48,6 +48,7 @@ func routeGetVersion(w http.ResponseWriter, r *http.Request) {
 }
 
 func checkDiscoveryApiVersion(w http.ResponseWriter, r *http.Request) bool {
+	nReqests.Inc()
 	_, ok := utils.PrecheckApiVersion(w, r, version.GetDiscoveryApiVersion())
 	return ok
 }
diff --git a/discovery/src/asapo_discovery/server/routes.go b/discovery/src/asapo_discovery/server/routes.go
index d918a8adb6db7208fe001f2bb4df96e94ea7bd06..2e0b31972864702c63af499ab9dc7335b13bae25 100644
--- a/discovery/src/asapo_discovery/server/routes.go
+++ b/discovery/src/asapo_discovery/server/routes.go
@@ -1,10 +1,10 @@
 package server
 
 import (
-	"asapo_discovery/protocols"
-	"net/http"
 	"asapo_common/logger"
 	"asapo_discovery/common"
+	"asapo_discovery/protocols"
+	"net/http"
 )
 
 func getService(service string) (answer []byte, code int) {
diff --git a/discovery/src/asapo_discovery/server/server_nottested.go b/discovery/src/asapo_discovery/server/server_nottested.go
index 2c96a7c9cafd0e7e31b8380896d7a7724c05f027..b6e14de06fd681bf15c2accfe466d530f7b0cc08 100644
--- a/discovery/src/asapo_discovery/server/server_nottested.go
+++ b/discovery/src/asapo_discovery/server/server_nottested.go
@@ -5,15 +5,32 @@ package server
 import (
 	log "asapo_common/logger"
 	"asapo_common/utils"
-    "asapo_common/version"
+	"asapo_common/version"
+	"github.com/prometheus/client_golang/prometheus"
+	"github.com/prometheus/client_golang/prometheus/promhttp"
 	"net/http"
-	"strconv"
 	_ "net/http/pprof"
+	"strconv"
+)
+
+var (
+	nReqests = prometheus.NewCounter(
+		prometheus.CounterOpts{
+			Name: "http_requests",
+			Help: "Number of discovery requests",
+		},
+	)
 )
 
+func init() {
+	prometheus.MustRegister(nReqests)
+}
+
 func Start() {
 	mux := utils.NewRouter(listRoutes)
 	mux.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux)
+	mux.PathPrefix("/metrics").Handler(promhttp.Handler())
+
 	log.Info("Starting ASAPO Discovery, version " + version.GetVersion())
 	log.Info("Listening on port: " + strconv.Itoa(settings.Port))
 	log.Fatal(http.ListenAndServe(":"+strconv.Itoa(settings.Port), http.HandlerFunc(mux.ServeHTTP)))