diff --git a/config/nomad/discovery.nmd.in b/config/nomad/discovery.nmd.in
index 621403fc2e2dfe4313a2541864783da6b79c9ad4..c12361721f200aca7dbecacff5149bd7a8c03bc2 100644
--- a/config/nomad/discovery.nmd.in
+++ b/config/nomad/discovery.nmd.in
@@ -6,6 +6,12 @@ job "discovery" {
   group "group" {
     count = 1
 
+    network {
+      port "discovery" {
+        static = "5006"
+      }
+    }
+
     task "discovery" {
       driver = "raw_exec"
 
@@ -17,11 +23,6 @@ job "discovery" {
       resources {
         cpu    = 500 # 500 MHz
         memory = 256 # 256MB
-        network {
-          port "discovery" {
-            static = "5006"
-          }
-        }
       }
 
       service {
diff --git a/config/nomad/nginx.nmd.in b/config/nomad/nginx.nmd.in
index e908b7feefd14d683353824d5610f17a6378b3a4..97d35ab68626b18bc31d05b2b00da5f7f22cda04 100644
--- a/config/nomad/nginx.nmd.in
+++ b/config/nomad/nginx.nmd.in
@@ -20,6 +20,13 @@ job "nginx" {
       mode = "fail"
     }
 
+    network {
+      port "nginx" {
+        static = 8400
+      }
+    }
+
+
     task "nginx" {
       driver = "raw_exec"
 
@@ -31,12 +38,6 @@ job "nginx" {
       resources {
         cpu    = 500 # 500 MHz
         memory = 256 # 256MB
-        network {
-          mbits = 10
-          port "nginx" {
-          static = 8400
-          }
-        }
       }
 
       service {
@@ -45,9 +46,9 @@ job "nginx" {
         check {
           name     = "alive"
           type     = "http"
-	  path     = "/nginx-health"
+	      path     = "/nginx-health"
           timeout  = "2s"
-	  interval = "10s"
+	      interval = "10s"
         }
       }
 
diff --git a/config/nomad/receiver_fabric.nmd.in b/config/nomad/receiver_fabric.nmd.in
index 3be448ba65db4bcc529ee391b2ea947730c1c8f3..938f4cd60ba41e357d9c59f3a9871bcc92c0dc76 100644
--- a/config/nomad/receiver_fabric.nmd.in
+++ b/config/nomad/receiver_fabric.nmd.in
@@ -20,6 +20,7 @@ job "receiver" {
         network {
           port "recv" {}
           port "recv_ds" {}
+          port "recv_metrics" {}
         }
       }
 
diff --git a/config/nomad/receiver_tcp.nmd.in b/config/nomad/receiver_tcp.nmd.in
index fe74ca93f3f633e85e1b3790d2c1be1888a49219..2d7b7c843676de7312760ca07259bca52cf43c2f 100644
--- a/config/nomad/receiver_tcp.nmd.in
+++ b/config/nomad/receiver_tcp.nmd.in
@@ -20,19 +20,32 @@ job "receiver" {
         network {
           port "recv" {}
           port "recv_ds" {}
+          port "recv_metrics" {}
         }
       }
 
       service {
         name = "asapo-receiver"
-        port = "recv"
         check {
           name     = "alive"
           type     = "tcp"
+          port = "recv"
           interval = "10s"
           timeout  = "2s"
           initial_status =   "passing"
         }
+        check {
+          name     = "metrics"
+          type     = "http"
+          port = "recv_metrics"
+          path     = "/metrics"
+          interval = "10s"
+          timeout  = "2s"
+          initial_status =   "passing"
+        }
+        meta {
+          metrics-port = "${NOMAD_PORT_recv_metrics}"
+        }
       }
 
       template {
diff --git a/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json b/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
index 6dde5c8adc0a08182691d7158e067bff336f8815..c32c6703ad90abc586f4c47c4e3a758a56417dd8 100644
--- a/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
+++ b/deploy/asapo_helm_chart/asapo/configs/asapo-receiver.json
@@ -13,6 +13,10 @@
     "ListenPort": {{ .Values.ownServices.receiver.dataServer.port }},
     "NetworkMode": ["tcp"]
   },
+  "Metrics": {
+  "Expose": {{ .Values.ownServices.receiver.metrics.expose },
+  "ListenPort": {{ .Values.ownServices.receiver.metrics.port }}
+  },
   "DataCache": {
     "Use": {{ .Values.ownServices.receiver.dataCache.enable }},
     "SizeGB": {{ .Values.ownServices.receiver.dataCache.sizeGb }},
diff --git a/deploy/asapo_services/scripts/asapo-receivers.nmd.tpl b/deploy/asapo_services/scripts/asapo-receivers.nmd.tpl
index 2096021f5cc99da4edcfbecafaf5c4a2343855d3..a50a5e664c40a954f2c47a232cbacb3f50dc3554 100644
--- a/deploy/asapo_services/scripts/asapo-receivers.nmd.tpl
+++ b/deploy/asapo_services/scripts/asapo-receivers.nmd.tpl
@@ -55,16 +55,28 @@ job "asapo-receivers" {
         network {
           port "recv" {}
           port "recv_ds" {}
+          port "recv_metrics" {}
         }
           memory = "${receiver_total_memory_size}"
       }
 
-
-
       service {
         name = "asapo-receiver"
-        port = "recv"
+        %{ if receiver_expose_metrics  }
         check {
+          name     = "metrics"
+          type     = "http"
+          port = "recv_metrics"
+          path     = "/metrics"
+          interval = "10s"
+          timeout  = "2s"
+          initial_status =   "passing"
+        }
+        meta {
+          metrics-port = "${NOMAD_PORT_recv_metrics}"
+        }
+      %{ else  }
+       check {
           name     = "asapo-receiver-alive"
           type     = "script"
           command  = "/bin/ps"
@@ -72,6 +84,7 @@ job "asapo-receivers" {
           interval = "10s"
           timeout  = "2s"
         }
+      %{ endif  }
         check_restart {
           limit = 2
           grace = "15s"
@@ -85,6 +98,7 @@ job "asapo-receivers" {
         receiver_receive_to_disk_threshold = "${receiver_receive_to_disk_threshold}"
         receiver_network_modes = "${receiver_network_modes}"
         perf_monitor = "${perf_monitor}"
+        receiver_expose_metrics = "${receiver_expose_metrics}"
       }
 
       template {
diff --git a/deploy/asapo_services/scripts/asapo.auto.tfvars.in b/deploy/asapo_services/scripts/asapo.auto.tfvars.in
index 39fc875d192bdef6fb9ed90931c174705815edb3..716e249008bb3bfec7b8bd12685bac95fc702510 100644
--- a/deploy/asapo_services/scripts/asapo.auto.tfvars.in
+++ b/deploy/asapo_services/scripts/asapo.auto.tfvars.in
@@ -24,6 +24,7 @@ receiver_dataserver_cache_size = 1 #gb
 receiver_dataserver_nthreads = 4
 receiver_receive_to_disk_threshold = 50 #mb
 receiver_network_modes = "tcp"
+receiver_expose_metrics = true
 
 grafana_total_memory_size = "256"
 
diff --git a/deploy/asapo_services/scripts/prometheus.yml.tpl b/deploy/asapo_services/scripts/prometheus.yml.tpl
index 89ee5478b17472dbd26adfd01e991ce104e32e4b..812d6158d9f6f6a7ac022f316c9ec2d647721185 100644
--- a/deploy/asapo_services/scripts/prometheus.yml.tpl
+++ b/deploy/asapo_services/scripts/prometheus.yml.tpl
@@ -42,14 +42,19 @@ scrape_configs:
     relabel_configs:
       - source_labels: [__meta_consul_service]
         target_label: job
-
-  #    metrics_path: /health
-  - job_name: dummy
+  - job_name: receiver
     consul_sd_configs:
       - server: '{{ env "NOMAD_IP_prometheus_ui" }}:8500'
+        services:
+          - 'asapo-receiver'
     relabel_configs:
-      - source_labels: [__meta_consul_tags]
-        regex: .*,asapo,.*
-        action: keep
       - source_labels: [__meta_consul_service]
         target_label: job
+      - source_labels: [__meta_consul_service_address,__meta_consul_service_metadata_metrics_port]
+        separator: ';'
+        regex: (.*);(\d{4,5})
+        target_label:  '__address__'
+        replacement: '$1:$2'
+        action: 'replace'
+
+
diff --git a/deploy/asapo_services/scripts/receiver.json.tpl b/deploy/asapo_services/scripts/receiver.json.tpl
index 2a69b27e93c39ed122e3175d9a82beae8ffe582c..da0b30cd3d668b0a1eed5b0fed60033237c1961e 100644
--- a/deploy/asapo_services/scripts/receiver.json.tpl
+++ b/deploy/asapo_services/scripts/receiver.json.tpl
@@ -13,6 +13,10 @@
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }},
     "NetworkMode": ["{{ if or (env "meta.ib_address") "none" | regexMatch "none" }}{{ printf "%s" "tcp" }}{{ else }}{{ env "NOMAD_META_receiver_network_modes" |  split "," | join "\",\"" }}{{ end }}"]
   },
+  "Metrics": {
+    "Expose": {{ env "NOMAD_META_receiver_expose_metrics" }},
+    "ListenPort": {{ env "NOMAD_PORT_recv_metrics" }}
+  },
   "DataCache": {
     "Use": true,
     "SizeGB": {{ env "NOMAD_META_receiver_dataserver_cache_size" }},
diff --git a/deploy/asapo_services/scripts/templates.tf b/deploy/asapo_services/scripts/templates.tf
index 2c7fa07d091a702fca4f360588469594cc1bc662..8914c75e2f679621bd407441d48c7d2cd28e3d78 100644
--- a/deploy/asapo_services/scripts/templates.tf
+++ b/deploy/asapo_services/scripts/templates.tf
@@ -55,6 +55,7 @@ data "template_file" "asapo_receivers" {
     n_receivers = "${var.n_receivers}"
     force_pull_images = "${var.force_pull_images}"
     perf_monitor = "${var.perf_monitor}"
+    receiver_expose_metrics = "${var.receiver_expose_metrics}"
   }
 }
 
diff --git a/deploy/asapo_services/scripts/vars.tf b/deploy/asapo_services/scripts/vars.tf
index fab7c9a186d6a1073fa871d02ecb2d2bedba39c6..16d7da4a66346a4b9f41d027af34392a299cd21f 100644
--- a/deploy/asapo_services/scripts/vars.tf
+++ b/deploy/asapo_services/scripts/vars.tf
@@ -52,6 +52,8 @@ variable "receiver_receive_to_disk_threshold" {}
 
 variable "receiver_network_modes" {}
 
+variable "receiver_expose_metrics" {}
+
 variable "grafana_total_memory_size" {}
 
 variable "influxdb_total_memory_size" {}
diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp
index f88186cbe3a00934cb0ccc5deaa2955d859b9687..4ac76015f002c350473b9c765c6b234d5a1c0898 100644
--- a/receiver/src/main.cpp
+++ b/receiver/src/main.cpp
@@ -77,32 +77,40 @@ int StartReceiver(const asapo::ReceiverConfig* config, asapo::SharedCache cache,
                   asapo::AbstractLogger* logger) {
     static const std::string address = "0.0.0.0:" + std::to_string(config->listen_port);
 
-
     logger->Info(std::string("starting receiver, version ") + asapo::kVersion);
     auto* receiver = new asapo::Receiver(cache);
     logger->Info("listening on " + address);
 
     asapo::Error err;
     receiver->Listen(address, &err);
-    if(err) {
+    if (err) {
         logger->Error("failed to start receiver: " + err->Explain());
         return 1;
     }
     return 0;
 }
 
-asapo::Error StartMetricsServer() {
-    auto srv = std::unique_ptr<asapo::ReceiverMetricsServer>(new asapo::ReceiverMongooseServer());
-    auto* provider = new asapo::ReceiverPrometheusMetrics();
-    srv->ListenAndServe("7009", std::unique_ptr<asapo::ReceiverMetricsProvider>(provider));
-    return nullptr;
+std::unique_ptr<std::thread> StartMetricsServer(const asapo::ReceiverMetricsConfig& config,
+                                                const asapo::AbstractLogger* logger) {
+    if (!config.expose) {
+        return nullptr;
+    }
+    return std::unique_ptr<std::thread> {
+        new std::thread{
+            [config, logger] {
+                auto srv = std::unique_ptr<asapo::ReceiverMetricsServer>(new asapo::ReceiverMongooseServer());
+                auto* provider = new asapo::ReceiverPrometheusMetrics();
+                logger->Debug("metrics server listening on " + std::to_string(config.listen_port));
+                srv->ListenAndServe(std::to_string(config.listen_port),
+                                    std::unique_ptr<asapo::ReceiverMetricsProvider>(provider));
+            }
+        }
+    };
 }
 
-int main (int argc, char* argv[]) {
+int main(int argc, char* argv[]) {
     asapo::ExitAfterPrintVersionIfNeeded("ASAPO Receiver", argc, argv);
 
-//    StartMetricsServer();
-
     auto err = ReadConfigFile(argc, argv);
     const auto& logger = asapo::GetDefaultReceiverLogger();
     if (err) {
@@ -116,15 +124,17 @@ int main (int argc, char* argv[]) {
 
     asapo::SharedCache cache = nullptr;
     if (config->use_datacache) {
-        cache.reset(new asapo::DataCache{config->datacache_size_gb * 1024 * 1024 * 1024, (float)config->datacache_reserved_share / 100});
+        cache.reset(new asapo::DataCache{config->datacache_size_gb * 1024 * 1024 * 1024,
+                                         (float) config->datacache_reserved_share / 100});
     }
 
     auto dataServerThreads = StartDataServers(config, cache, &err);
     if (err) {
-        logger->Error("Cannot start data server: " + err->Explain());
+        logger->Error("cannot start data server: " + err->Explain());
         return 1;
     }
 
+    auto t = StartMetricsServer(config->metrics, logger);
     auto exit_code = StartReceiver(config, cache, logger);
     return exit_code;
 }
diff --git a/receiver/src/metrics/receiver_metrics_config.h b/receiver/src/metrics/receiver_metrics_config.h
new file mode 100644
index 0000000000000000000000000000000000000000..d3c17ebc984fcdc08b411b1bea9aad2d39de576c
--- /dev/null
+++ b/receiver/src/metrics/receiver_metrics_config.h
@@ -0,0 +1,15 @@
+#ifndef ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_CONFIG_H_
+#define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_CONFIG_H_
+
+#include <string>
+
+namespace asapo {
+
+struct ReceiverMetricsConfig {
+    bool expose = false;
+    uint64_t listen_port = 0;
+};
+
+}
+
+#endif //ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_CONFIG_H_
diff --git a/receiver/src/metrics/receiver_metrics_server.h b/receiver/src/metrics/receiver_metrics_server.h
index d2d668757b0fcb5772d8f8e796a5624b13708245..32e186c055e5fb7ea713dd67c03213e8bbc99a45 100644
--- a/receiver/src/metrics/receiver_metrics_server.h
+++ b/receiver/src/metrics/receiver_metrics_server.h
@@ -2,13 +2,17 @@
 #define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_SERVER_H_
 
 #include "asapo/common/error.h"
+
+#include <thread>
+#include <memory>
+
 #include "receiver_metrics_provider.h"
 
 namespace asapo {
 
 class ReceiverMetricsServer {
   public:
-    virtual Error ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider) = 0;
+    virtual void ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider)  = 0;
     virtual ~ReceiverMetricsServer() = default;
 };
 
diff --git a/receiver/src/metrics/receiver_mongoose_server.cpp b/receiver/src/metrics/receiver_mongoose_server.cpp
index 72cefbd8e7e27c851177457b78751d56b3b61df6..fa601ed71667d22345edf649bae959e9464bc9e3 100644
--- a/receiver/src/metrics/receiver_mongoose_server.cpp
+++ b/receiver/src/metrics/receiver_mongoose_server.cpp
@@ -12,33 +12,40 @@
 #pragma GCC diagnostic pop
 #endif
 
+#include "../receiver_logger.h"
+#include "asapo/common/io_error.h"
+
 namespace asapo {
 
-static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
-    auto provider = static_cast<const ReceiverMetricsProvider *>(fn_data);
+static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data) {
+    auto provider = static_cast<const ReceiverMetricsProvider*>(fn_data);
     if (ev == MG_EV_HTTP_MSG) {
-        struct mg_http_message *hm = (struct mg_http_message *) ev_data;
+        struct mg_http_message* hm = (struct mg_http_message*) ev_data;
         if (mg_http_match_uri(hm, "/metrics")) {
-            mg_http_reply(c, 200, "", "{\"result\": %s}\n", provider->Metrics().c_str());
+            mg_http_reply(c, 200, "", "%s", provider->Metrics().c_str());
         } else {
             mg_http_reply(c, 404, "", "%s", "Not found\n");
         }
     }
 }
 
-asapo::Error asapo::ReceiverMongooseServer::ListenAndServe(std::string port,
-                                                           std::unique_ptr<ReceiverMetricsProvider> provider) {
+void asapo::ReceiverMongooseServer::ListenAndServe(std::string port,
+        std::unique_ptr<ReceiverMetricsProvider> provider) {
     struct mg_mgr mgr;                            // Event manager
     mg_mgr_init(&mgr);                            // Initialise event manager
     auto uri = "0.0.0.0:" + port;
-    if (mg_http_listen(&mgr, uri.c_str(), fn, (void *) provider.get()) == NULL) {
-        LOG(LL_ERROR, ("Cannot listen on %s. Use http://ADDR:PORT or :PORT",
-            port.c_str()));
-        exit(EXIT_FAILURE);
+    if (mg_http_listen(&mgr, uri.c_str(), fn, (void*) provider.get()) == NULL) {
+        log__->Error("cannot listen on port " + port);
+        mg_mgr_free(&mgr);
+        return;
     }
     for (;;) mg_mgr_poll(&mgr, 1000);                    // Infinite event loop
     mg_mgr_free(&mgr);
-    return nullptr;
+    return;
+}
+
+ReceiverMongooseServer::ReceiverMongooseServer() : log__{GetDefaultReceiverLogger()} {
+
 }
 
 }
diff --git a/receiver/src/metrics/receiver_mongoose_server.h b/receiver/src/metrics/receiver_mongoose_server.h
index 88587a7f6c79c0de515917d81b78a068d9f2f970..da7e48b2003783187f5e8754dbe9528c39de9604 100644
--- a/receiver/src/metrics/receiver_mongoose_server.h
+++ b/receiver/src/metrics/receiver_mongoose_server.h
@@ -4,10 +4,14 @@
 #include "receiver_metrics_server.h"
 
 namespace asapo {
+class AbstractLogger;
+
 class ReceiverMongooseServer final :  public ReceiverMetricsServer {
   public:
-    Error ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider) override;
-
+    ReceiverMongooseServer();
+    void ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider) override;
+  private:
+    const AbstractLogger* log__;
 };
 
 }
diff --git a/receiver/src/metrics/receiver_prometheus_metrics.cpp b/receiver/src/metrics/receiver_prometheus_metrics.cpp
index a0a671a76ac97edb0d4575b91e208521afa82c60..7ebb2156b355727386de9bf20eeea381333b2f48 100644
--- a/receiver/src/metrics/receiver_prometheus_metrics.cpp
+++ b/receiver/src/metrics/receiver_prometheus_metrics.cpp
@@ -3,7 +3,7 @@
 namespace  asapo {
 
 std::string ReceiverPrometheusMetrics::Metrics() const {
-    return "hello";
+    return "alive 1\n";
 }
 
 }
diff --git a/receiver/src/receiver_config.cpp b/receiver/src/receiver_config.cpp
index 78052168bdddcce8578809b13d266fb6f4cd9818..e78004925d2f20dc1e1270b425d9868a20cfc2c5 100644
--- a/receiver/src/receiver_config.cpp
+++ b/receiver/src/receiver_config.cpp
@@ -35,6 +35,8 @@ Error ReceiverConfigFactory::SetConfig(std::string file_name) {
     (err = parser.GetString("PerformanceDbName", &config.performance_db_name)) ||
     (err = parser.Embedded("DataServer").GetString("AdvertiseURI", &config.dataserver.advertise_uri)) ||
     (err = parser.Embedded("DataServer").GetArrayString("NetworkMode", &config.dataserver.network_mode)) ||
+    (err = parser.Embedded("Metrics").GetBool("Expose", &config.metrics.expose)) ||
+    (err = parser.Embedded("Metrics").GetUInt64("ListenPort", &config.metrics.listen_port)) ||
     (err = parser.GetString("LogLevel", &log_level));
 
     if (err) {
diff --git a/receiver/src/receiver_config.h b/receiver/src/receiver_config.h
index c8128362a7e1d51075f54d327aab620dc35f6fb5..89c0d918fe0cd034a4afc141b204f01e4212c32e 100644
--- a/receiver/src/receiver_config.h
+++ b/receiver/src/receiver_config.h
@@ -6,6 +6,8 @@
 #include "asapo/logger/logger.h"
 
 #include "receiver_data_server/receiver_data_server_config.h"
+#include "metrics/receiver_metrics_config.h"
+
 namespace asapo {
 
 struct ReceiverConfig {
@@ -23,6 +25,7 @@ struct ReceiverConfig {
     LogLevel log_level = LogLevel::Info;
     std::string tag;
     ReceiverDataServerConfig dataserver;
+    ReceiverMetricsConfig metrics;
     std::string discovery_server;
 };
 
diff --git a/receiver/unittests/mock_receiver_config.cpp b/receiver/unittests/mock_receiver_config.cpp
index 5577cbe9ca26d5242e7d0c5294792988ed64bc19..489fe8b96e10bbd72f2524a727c1c9ba74f1ff4f 100644
--- a/receiver/unittests/mock_receiver_config.cpp
+++ b/receiver/unittests/mock_receiver_config.cpp
@@ -64,6 +64,11 @@ Error SetReceiverConfig (const ReceiverConfig& config, std::string error_field)
 
     config_string += "," + Key("NThreads", error_field) + std::to_string(config.dataserver.nthreads);
     config_string += "}";
+    config_string += "," + Key("Metrics", error_field) + "{";
+    config_string += Key("ListenPort", error_field) + std::to_string(config.metrics.listen_port);
+    config_string += "," +  Key("Expose", error_field) + (config.metrics.expose ? "true" : "false");
+    config_string += "}";
+
     config_string += "," + Key("DataCache", error_field) + "{";
     config_string += Key("Use", error_field) + (config.use_datacache ? "true" : "false") ;
     config_string += "," + Key("SizeGB", error_field) + std::to_string(config.datacache_size_gb);
diff --git a/receiver/unittests/test_config.cpp b/receiver/unittests/test_config.cpp
index 40289b3d7d0e189b197a95eed34bdf0d4d6c871d..6e656529e62ce532b52c1777fe56f26251f01797 100644
--- a/receiver/unittests/test_config.cpp
+++ b/receiver/unittests/test_config.cpp
@@ -62,6 +62,9 @@ class ConfigTests : public Test {
         test_config.dataserver.advertise_uri = "0.0.0.1:4201";
         test_config.dataserver.network_mode = {"tcp", "fabric"};
         test_config.receive_to_disk_threshold_mb = 50;
+        test_config.metrics.expose = true;
+        test_config.metrics.listen_port = 123;
+
 
     }
 
@@ -97,9 +100,12 @@ TEST_F(ConfigTests, ReadSettings) {
     ASSERT_THAT(config->dataserver.network_mode[0], Eq("tcp"));
     ASSERT_THAT(config->dataserver.network_mode[1], Eq("fabric"));
     ASSERT_THAT(config->receive_to_disk_threshold_mb, Eq(50));
+    ASSERT_THAT(config->metrics.expose, Eq(true));
+    ASSERT_THAT(config->metrics.listen_port, Eq(123));
 }
 
 
+
 TEST_F(ConfigTests, ErrorReadSettings) {
     PrepareConfig();
 
@@ -107,7 +113,7 @@ TEST_F(ConfigTests, ErrorReadSettings) {
                                     "DataCache", "Use", "SizeGB", "ReservedShare", "DatabaseServer", "Tag",
                                     "AuthorizationServer", "AuthorizationInterval", "PerformanceDbName", "LogLevel",
                                     "NThreads", "DiscoveryServer", "AdvertiseURI", "NetworkMode", "MonitorPerformance",
-                                    "ReceiveToDiskThresholdMB"};
+                                    "ReceiveToDiskThresholdMB", "Metrics", "Expose"};
     for (const auto& field : fields) {
         auto err = asapo::SetReceiverConfig(test_config, field);
         ASSERT_THAT(err, Ne(nullptr));
diff --git a/tests/automatic/common_scripts/start_services.sh b/tests/automatic/common_scripts/start_services.sh
index 944f3ed0bfdf42d0d4bab7ea7c736770202dbbfe..e59a39cb8caf0cf4447f3213363142bcc1bd4b72 100755
--- a/tests/automatic/common_scripts/start_services.sh
+++ b/tests/automatic/common_scripts/start_services.sh
@@ -1,5 +1,5 @@
-nomad run discovery.nmd
-nomad run nginx.nmd
+nomad run -detach discovery.nmd
+nomad run -detach nginx.nmd
 
 while true
 do
@@ -10,10 +10,10 @@ do
   break
 done
 
-nomad run authorizer.nmd
-nomad run file_transfer.nmd
-nomad run receiver_tcp.nmd
-nomad run broker.nmd
+nomad run -detach authorizer.nmd
+nomad run -detach file_transfer.nmd
+nomad run -detach receiver_tcp.nmd
+nomad run -detach broker.nmd
 
 while true
 do
diff --git a/tests/automatic/common_scripts/stop_services.bat b/tests/automatic/common_scripts/stop_services.bat
index 1f75f6970a8ffcac37a7478b7d4672f0c0a532ea..8a584613325ce304694c677118a9af305174ab1e 100644
--- a/tests/automatic/common_scripts/stop_services.bat
+++ b/tests/automatic/common_scripts/stop_services.bat
@@ -1,7 +1,7 @@
-c:\opt\consul\nomad stop receiver
-c:\opt\consul\nomad stop discovery
-c:\opt\consul\nomad stop broker
-c:\opt\consul\nomad stop authorizer
-c:\opt\consul\nomad stop nginx
-c:\opt\consul\nomad stop file_transfer
+c:\opt\consul\nomad stop -purge receiver
+c:\opt\consul\nomad stop -purge discovery
+c:\opt\consul\nomad stop -purge broker
+c:\opt\consul\nomad stop -purge authorizer
+c:\opt\consul\nomad stop -purge nginx
+c:\opt\consul\nomad stop -purge file_transfer
 c:\opt\consul\nomad run nginx_kill.nmd  && c:\opt\consul\nomad stop -yes -purge nginx_kill
diff --git a/tests/automatic/common_scripts/stop_services.sh b/tests/automatic/common_scripts/stop_services.sh
index d10019f51241296db1aaf37c6a6e7ef0f8613eab..084630d7f250262262d4f5439172294b34985413 100755
--- a/tests/automatic/common_scripts/stop_services.sh
+++ b/tests/automatic/common_scripts/stop_services.sh
@@ -1,7 +1,7 @@
-nomad stop nginx
+nomad stop -purge nginx
 nomad run nginx_kill.nmd  && nomad stop -yes -purge nginx_kill
-nomad stop discovery
-nomad stop broker
-nomad stop receiver
-nomad stop authorizer
-nomad stop file_transfer
+nomad stop -purge discovery
+nomad stop -purge broker
+nomad stop -purge receiver
+nomad stop -purge authorizer
+nomad stop -purge file_transfer
diff --git a/tests/automatic/settings/receiver_fabric.json.tpl.lin.in b/tests/automatic/settings/receiver_fabric.json.tpl.lin.in
index 6cf20b1cde759790e4373b650413524c0eb10d86..f7524f9e9a6e47b08d3bd8881a5657af2f7fd518 100644
--- a/tests/automatic/settings/receiver_fabric.json.tpl.lin.in
+++ b/tests/automatic/settings/receiver_fabric.json.tpl.lin.in
@@ -10,6 +10,10 @@
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }},
     "NetworkMode": ["fabric"]
   },
+  "Metrics": {
+    "Expose": true,
+    "ListenPort": {{ env "NOMAD_PORT_recv_metrics" }}
+  },
   "DataCache": {
     "Use": @RECEIVER_USE_CACHE@,
     "SizeGB": 1,
diff --git a/tests/automatic/settings/receiver_tcp.json.tpl.lin.in b/tests/automatic/settings/receiver_tcp.json.tpl.lin.in
index a6f98fe37d8b198a61170a5578f0f212c38b5480..498d9fdcc33c7344ca12d7d13fb36a90b26bd4ee 100644
--- a/tests/automatic/settings/receiver_tcp.json.tpl.lin.in
+++ b/tests/automatic/settings/receiver_tcp.json.tpl.lin.in
@@ -10,6 +10,10 @@
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }},
     "NetworkMode": ["tcp"]
   },
+  "Metrics": {
+    "Expose": true,
+    "ListenPort": {{ env "NOMAD_PORT_recv_metrics" }}
+  },
   "DataCache": {
     "Use": @RECEIVER_USE_CACHE@,
     "SizeGB": 1,
diff --git a/tests/automatic/settings/receiver_tcp.json.tpl.win.in b/tests/automatic/settings/receiver_tcp.json.tpl.win.in
index c0989d12e5dc83a5f0293976f68493f1eb8fc2b4..446ebcbf270af898204cbf7e2d93e2e45d864ecb 100644
--- a/tests/automatic/settings/receiver_tcp.json.tpl.win.in
+++ b/tests/automatic/settings/receiver_tcp.json.tpl.win.in
@@ -13,6 +13,10 @@
     "ListenPort": {{ env "NOMAD_PORT_recv_ds" }},
     "NetworkMode": ["tcp"]
   },
+  "Metrics": {
+    "Expose": true,
+    "ListenPort": {{ env "NOMAD_PORT_recv_metrics" }}
+  },
   "DataCache": {
     "Use": @RECEIVER_USE_CACHE@,
     "SizeGB": 1,