diff --git a/cvp_checks/fixtures/base.py b/cvp_checks/fixtures/base.py
index 2407a63..f64c256 100644
--- a/cvp_checks/fixtures/base.py
+++ b/cvp_checks/fixtures/base.py
@@ -14,6 +14,39 @@
     return request.param
 
 
+@pytest.fixture(scope='session')
+def check_prometheus(local_salt_client):
+    salt_output = local_salt_client.cmd(
+        'prometheus:server',
+        'test.ping',
+        expr_form='pillar')
+    if not salt_output:
+        pytest.skip("Prometheus service or prometheus:server pillar \
+          are not found on this environment.")
+
+
+@pytest.fixture(scope='session')
+def check_kibana(local_salt_client):
+    salt_output = local_salt_client.cmd(
+        'kibana:server',
+        'test.ping',
+        expr_form='pillar')
+    if not salt_output:
+        pytest.skip("Kibana service or kibana:server pillar \
+          are not found on this environment.")
+
+
+@pytest.fixture(scope='session')
+def check_grafana(local_salt_client):
+    salt_output = local_salt_client.cmd(
+        'grafana:client',
+        'test.ping',
+        expr_form='pillar')
+    if not salt_output:
+        pytest.skip("Grafana service or grafana:client pillar \
+          are not found on this environment.")
+
+
 def pytest_namespace():
     return {'contrail': None}
 
diff --git a/cvp_checks/tests/test_stacklight.py b/cvp_checks/tests/test_stacklight.py
index 80917f1..81127d4 100644
--- a/cvp_checks/tests/test_stacklight.py
+++ b/cvp_checks/tests/test_stacklight.py
@@ -5,6 +5,7 @@
 from cvp_checks import utils
 
 
+@pytest.mark.usefixtures('check_kibana')
 def test_elasticsearch_cluster(local_salt_client):
     salt_output = local_salt_client.cmd(
         'kibana:server',
@@ -12,10 +13,6 @@
         ['_param:haproxy_elasticsearch_bind_host'],
         expr_form='pillar')
 
-    if not salt_output:
-        pytest.skip("Kibana service or kibana:server pillar \
-        are not found on this environment.")
-
     proxies = {"http": None, "https": None}
     for node in salt_output.keys():
         IP = salt_output[node]
@@ -41,6 +38,7 @@
             json.dumps(resp, indent=4))
 
 
+@pytest.mark.usefixtures('check_kibana')
 def test_elasticsearch_node_count(local_salt_client):
     now = datetime.datetime.now()
     today = now.strftime("%Y.%m.%d")
@@ -51,10 +49,6 @@
         ['_param:haproxy_elasticsearch_bind_host'],
         expr_form='pillar')
 
-    if not salt_output:
-        pytest.skip("Kibana service or kibana:server pillar \
-        are not found on this environment.")
-
     IP = salt_output.values()[0]
     proxies = {"http": None, "https": None}
     resp = json.loads(requests.post('http://{0}:9200/log-{1}/_search?pretty'.
@@ -83,16 +77,17 @@
 
 
 def test_stacklight_services_replicas(local_salt_client):
+    # TODO
+    # change to docker:swarm:role:master ?
     salt_output = local_salt_client.cmd(
-        'docker:client:stack:monitoring',
+        'I@docker:client:stack:monitoring and I@prometheus:server',
         'cmd.run',
         ['docker service ls'],
-        expr_form='pillar')
+        expr_form='compound')
 
     if not salt_output:
-        pytest.skip("Docker replicas or \
-        docker:client:stack:monitoring pillar \
-        are not found on this environment.")
+        pytest.skip("docker:client:stack:monitoring or \
+        prometheus:server pillars are not found on this environment.")
 
     wrong_items = []
     for line in salt_output[salt_output.keys()[0]].split('\n'):
@@ -104,6 +99,7 @@
               {}'''.format(json.dumps(wrong_items, indent=4))
 
 
+@pytest.mark.usefixtures('check_prometheus')
 def test_prometheus_alert_count(local_salt_client):
     IP = utils.get_monitoring_ip('cluster_public_host')
     # keystone:server can return 3 nodes instead of 1
@@ -116,10 +112,6 @@
          'grep -v "0 active"'.format(IP)],
         expr_form='pillar')
 
-    if not nodes_info:
-        pytest.skip("Prometheus server url or keystone:server \
-        pillar are not found on this environment.")
-
     result = nodes_info[nodes_info.keys()[0]].replace('</td>', '').replace(
         '<td><i class="icon-chevron-down"></i> <b>', '').replace('</b>', '')
     assert result == '', 'AlertManager page has some alerts! {}'.format(
@@ -128,14 +120,14 @@
 
 def test_stacklight_containers_status(local_salt_client):
     salt_output = local_salt_client.cmd(
-        'docker:swarm:role:master',
+        'I@docker:swarm:role:master and I@prometheus:server',
         'cmd.run',
         ['docker service ps $(docker stack services -q monitoring)'],
-        expr_form='pillar')
+        expr_form='compound')
 
     if not salt_output:
-        pytest.skip("Docker or docker:swarm:role:master \
-        pillar are not found on this environment.")
+        pytest.skip("docker:swarm:role:master or prometheus:server \
+        pillars are not found on this environment.")
 
     result = {}
     # for old reclass models, docker:swarm:role:master can return
diff --git a/cvp_checks/tests/test_ui_addresses.py b/cvp_checks/tests/test_ui_addresses.py
index 69c0f6a..ee02232 100644
--- a/cvp_checks/tests/test_ui_addresses.py
+++ b/cvp_checks/tests/test_ui_addresses.py
@@ -21,6 +21,7 @@
         IP[0])
 
 
+@pytest.mark.usefixtures('check_kibana')
 def test_ui_kibana(local_salt_client):
     IP = utils.get_monitoring_ip('stacklight_log_address')
     result = local_salt_client.cmd(
@@ -33,6 +34,7 @@
         'Kibana login page is not reachable on {} from ctl nodes'.format(IP)
 
 
+@pytest.mark.usefixtures('check_prometheus')
 def test_ui_prometheus(local_salt_client):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     result = local_salt_client.cmd(
@@ -45,6 +47,7 @@
         'Prometheus page is not reachable on {} from ctl nodes'.format(IP)
 
 
+@pytest.mark.usefixtures('check_prometheus')
 def test_ui_alert_manager(local_salt_client):
     IP = utils.get_monitoring_ip('stacklight_monitor_address')
     result = local_salt_client.cmd(
@@ -56,6 +59,7 @@
         'AlertManager page is not reachable on {} from ctl nodes'.format(IP)
 
 
+@pytest.mark.usefixtures('check_grafana')
 def test_ui_grafana(local_salt_client):
     IP = utils.get_monitoring_ip('cluster_public_host')
     result = local_salt_client.cmd(
diff --git a/cvp_checks/utils/__init__.py b/cvp_checks/utils/__init__.py
index 91501a8..132bfea 100644
--- a/cvp_checks/utils/__init__.py
+++ b/cvp_checks/utils/__init__.py
@@ -73,7 +73,7 @@
 def get_monitoring_ip(param_name):
     local_salt_client = init_salt_client()
     salt_output = local_salt_client.cmd(
-        'docker:client:stack:monitoring',
+        'salt:master',
         'pillar.get',
         ['_param:{}'.format(param_name)],
         expr_form='pillar')
