summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/config.yaml5
-rw-r--r--docker/Dockerfile21
-rw-r--r--docs/release/release-notes/release_notes.rst57
-rw-r--r--docs/release/release-notes/requirements_notes.rst7
-rw-r--r--docs/testing/user/userguide/overview.rst34
-rw-r--r--docs/testing/user/userguide/posca/posca_factor_multistack_storage.rst59
-rw-r--r--docs/testing/user/userguide/posca/posca_factor_multistack_storage_parallel.rst58
-rw-r--r--docs/testing/user/userguide/posca/posca_factor_soak_throughputs.rst51
-rw-r--r--docs/testing/user/userguide/posca/posca_factor_storperf.rst37
-rw-r--r--docs/testing/user/userguide/posca/posca_feature_moon_resources.rst52
-rw-r--r--docs/testing/user/userguide/posca/posca_feature_moon_tenants.rst55
-rw-r--r--docs/testing/user/userguide/posca/posca_feature_vnf_scale_out.rst46
-rw-r--r--docs/testing/user/userguide/posca_guide.rst4
-rw-r--r--docs/testing/user/userguide/test_cases.rst7
-rw-r--r--monitor/automate_cadvisor_client.py37
-rw-r--r--monitor/automate_collectd_client.py38
-rw-r--r--monitor/config/barometer_client.conf174
-rw-r--r--monitor/config/barometer_server.conf174
-rw-r--r--monitor/config/collectd_client.conf (renamed from monitor/config/collectd-client.conf)0
-rw-r--r--monitor/config/collectd_server.conf (renamed from monitor/config/collectd.conf)0
-rw-r--r--monitor/config/grafana.ini (renamed from monitor/grafana/config/grafana.ini)0
-rw-r--r--monitor/config/openstack_exporter.conf12
-rw-r--r--monitor/config/prometheus.yaml16
-rw-r--r--monitor/dashboard/__init__.py (renamed from monitor/config/__init__.py)2
-rw-r--r--monitor/dashboard/automated_dashboard_datasource.py (renamed from monitor/automated-dashboard-datasource.py)10
-rw-r--r--monitor/dashboard/custom_dashboard.py33
-rw-r--r--monitor/dashboard/custom_query_dashboard.json36
-rw-r--r--monitor/dashboard/jump_server_status.json (renamed from monitor/grafana/dashboards/prometheus-system_rev1.json)1186
-rw-r--r--monitor/dashboard/openstack_stats.json5897
-rw-r--r--monitor/dashboard/stats_overview.json2257
-rw-r--r--monitor/dispatch/__init__.py8
-rw-r--r--monitor/dispatch/client_ip_configure.py25
-rw-r--r--monitor/dispatch/install_barometer_client.sh8
-rw-r--r--monitor/dispatch/install_cadvisor_client.sh (renamed from monitor/cadvisor_install.sh)6
-rw-r--r--monitor/dispatch/install_clients.py118
-rw-r--r--monitor/dispatch/install_collectd_client.sh8
-rw-r--r--monitor/dispatch/server_ip_configure.py25
-rw-r--r--monitor/install-collectd-client.sh8
-rw-r--r--monitor/monitoring.sh167
-rw-r--r--monitor/uninstall.py52
-rw-r--r--requirements/requirements.txt70
-rwxr-xr-xrun_tests.sh4
-rw-r--r--testsuites/posca/testcase_cfg/posca_factor_multistack_storage.yaml35
-rw-r--r--testsuites/posca/testcase_cfg/posca_factor_multistack_storage_parallel.yaml33
-rw-r--r--testsuites/posca/testcase_cfg/posca_factor_ping.yaml4
-rw-r--r--testsuites/posca/testcase_cfg/posca_factor_soak_throughputs.yaml35
-rw-r--r--testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml21
-rw-r--r--testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml29
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon.py121
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json13
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json4
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json11
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json23
-rw-r--r--testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json11
-rw-r--r--testsuites/posca/testcase_dashboard/posca_moon_resources.py36
-rw-r--r--testsuites/posca/testcase_dashboard/posca_moon_tenants.py36
-rw-r--r--testsuites/posca/testcase_script/posca_factor_multistack_storage.py236
-rw-r--r--testsuites/posca/testcase_script/posca_factor_multistack_storage_parallel.py164
-rw-r--r--testsuites/posca/testcase_script/posca_factor_ping.py18
-rw-r--r--testsuites/posca/testcase_script/posca_factor_soak_throughputs.py192
-rw-r--r--testsuites/posca/testcase_script/posca_factor_system_bandwidth.py4
-rw-r--r--testsuites/posca/testcase_script/posca_feature_moon_resources.py59
-rw-r--r--testsuites/posca/testcase_script/posca_feature_moon_tenants.py112
-rw-r--r--testsuites/posca/testcase_script/posca_feature_testpmd_scale_up.py5
-rw-r--r--testsuites/posca/testcase_script/posca_feature_vnf_scale_out.py10
-rw-r--r--testsuites/run_testsuite.py19
-rw-r--r--utils/env_prepare/config_prepare.sh129
-rw-r--r--utils/env_prepare/moon_prepare.bash35
-rw-r--r--utils/env_prepare/moon_prepare.py25
-rw-r--r--utils/env_prepare/quota_prepare.py56
-rw-r--r--utils/env_prepare/stack_prepare.py47
-rw-r--r--utils/infra_setup/heat/manager.py2
-rw-r--r--utils/infra_setup/runner/docker_env.py2
-rw-r--r--utils/infra_setup/runner/yardstick.py15
-rw-r--r--utils/parser.py5
-rwxr-xr-xverify.sh8
76 files changed, 11407 insertions, 1012 deletions
diff --git a/config/config.yaml b/config/config.yaml
index 76e42b30..e01c01f9 100644
--- a/config/config.yaml
+++ b/config/config.yaml
@@ -13,4 +13,7 @@ common_config:
pod_info: '/tmp/pod.yaml'
yardstick_rc_dir: '/etc/yardstick/openstack.creds'
releng_dir: '/home/opnfv/releng'
- fetch_os_file: 'utils/fetch_os_creds.sh' \ No newline at end of file
+ fetch_os_file: 'utils/fetch_os_creds.sh'
+ yardstick_image_dir: '/tmp/yardstick.img'
+ image_url: 'http://artifacts.opnfv.org/yardstick/images/yardstick-nsb-image.img'
+ yardstick_image_name: 'bottlenecks_yardstick'
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 69e1d65b..c91a60f1 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -7,8 +7,8 @@
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-FROM ubuntu:14.04
-MAINTAINER MatthewLi <matthew.lijun@huawei.com>
+FROM ubuntu:16.04
+MAINTAINER Yang (Gabriel) Yu <gabriel.yuyang@huawei.com>
LABEL image=opnfv/bottlenecks
@@ -21,7 +21,6 @@ ARG BRANCH=master
# Bottlenecks repo
ENV BOTTLENECKS_REPO_DIR ${REPOS_DIR}/bottlenecks
ENV RELENG_REPO_DIR ${REPOS_DIR}/releng
-ENV creds ${BOTTLENECKS_REPO_DIR}/config/openstack.creds
#new test suite required packages can be added here
RUN apt-get update && apt-get install -y \
@@ -32,23 +31,23 @@ RUN apt-get update && apt-get install -y \
curl \
wget \
git \
- sshpass \
python \
- python-dev \
python-pip \
vim \
+ iputils-ping \
+ sshpass \
+ sudo \
python-setuptools && \
- easy_install -U setuptools==30.0.0
-
-RUN apt-get -y autoremove && \
+ apt-get -y autoremove && \
apt-get clean
+RUN easy_install -U setuptools==30.0.0
+
RUN mkdir -p ${REPOS_DIR}
RUN git config --global http.sslVerify false
RUN git clone -b $BRANCH https://gerrit.opnfv.org/gerrit/bottlenecks ${BOTTLENECKS_REPO_DIR}
RUN git clone https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO_DIR}
-RUN easy_install pytz
-RUN pip install -r ${REPOS_DIR}/bottlenecks/requirements/requirements.txt
-RUN pip install -U /home/opnfv/bottlenecks
+RUN pip install -r ${BOTTLENECKS_REPO_DIR}/requirements/requirements.txt
+RUN pip install -U ${BOTTLENECKS_REPO_DIR}
diff --git a/docs/release/release-notes/release_notes.rst b/docs/release/release-notes/release_notes.rst
index b52830ec..49e2b7d3 100644
--- a/docs/release/release-notes/release_notes.rst
+++ b/docs/release/release-notes/release_notes.rst
@@ -3,10 +3,9 @@
.. (c) Huawei Technologies Co.,Ltd and others.
-==================================================
-Bottlenecks Release Notes for OPNFV Danube Release
-==================================================
-
+===============================
+OPNFV Bottlenecks Release Notes
+===============================
.. _Bottlenecks: https://wiki.opnfv.org/display/bottlenecks
@@ -59,6 +58,9 @@ Version History
| Nov 15th, 2017 | 1.6.1 | Bottlenecks Euphrates release 5.1 |
| | | |
+----------------+--------------------+-----------------------------------+
+| Apr 10th, 2018 | 1.7 | Bottlenecks Fraser release 6.0 |
+| | | |
++----------------+--------------------+-----------------------------------+
Summary
=======
@@ -81,6 +83,33 @@ Bottlenecks_ team.
Release Data
============
+Fraser Release Data
+-----------------------
+
++--------------------------------------+--------------------------------+
+| **Project** | Bottlenecks |
+| | |
++--------------------------------------+--------------------------------+
+| **Repo/tag** | * Bottlenecks/6.0.0 |
+| | |
+| | |
++--------------------------------------+--------------------------------+
+| **Bottlenecks Docker image tag** | * 6.0.0 |
+| | |
+| | |
++--------------------------------------+--------------------------------+
+| **Release designation** | * 6.0.0 |
+| | |
+| | |
++--------------------------------------+--------------------------------+
+| **Release date** | * Apr 10th 2018 |
+| | |
+| | |
++--------------------------------------+--------------------------------+
+| **Purpose of the delivery** | Fraser stable release |
+| | |
++--------------------------------------+--------------------------------+
+
Euphrates Release Data
-----------------------
@@ -206,8 +235,8 @@ Bramaputra Release Data
+--------------------------------------+--------------------------------+
-Danube Deliverables
-===================
+Release Deliverables
+====================
Software Deliverables
---------------------
@@ -220,6 +249,12 @@ Software Deliverables
Documentatiion Deliverables
---------------------------
+**Bottlenecks documentation <fraser>**
+
+* Release Notes: http://docs.opnfv.org/en/stable-fraser/submodules/bottlenecks/docs/release/release-notes/release_notes.html
+* User Guide: http://docs.opnfv.org/en/stable-fraser/submodules/bottlenecks/docs/testing/user/userguide/index.html
+* Developer Guide: http://docs.opnfv.org/en/stable-fraser/submodules/bottlenecks/docs/testing/developer/devguide/index.html
+
**Bottlenecks documentation <euphrates>**
* Release Notes: http://docs.opnfv.org/en/stable-euphrates/submodules/bottlenecks/docs/release/release-notes/release_notes.html
@@ -240,6 +275,16 @@ Documentatiion Deliverables
* http://artifacts.opnfv.org/bottlenecks/colorado/1.0/releasenotes/index.html
* User Guide: http://artifacts.opnfv.org/bottlenecks/colorado/1.0/docs/userguide/index.html
+Reason for Fraser
+=================
+
+* Introduction of data-plane soak tests aiming at benchmarking long duration stability of OPNFV platform
+* Introduction of security tests by cooperating with Moon project to validate the software security based authentication schemes
+* Introduction of multi-stack storage tests and Storperf storage test
+* Testing framework provides local supports for preparing images for openstack resulting in offline running supports for Bottlenecks
+
+These tests cases and refactoring further enhance the capability of Bottlenecks project and let it be adaptable to different usages.
+
Reason for Euphrates
====================
diff --git a/docs/release/release-notes/requirements_notes.rst b/docs/release/release-notes/requirements_notes.rst
index eb5cd743..7476f75a 100644
--- a/docs/release/release-notes/requirements_notes.rst
+++ b/docs/release/release-notes/requirements_notes.rst
@@ -11,9 +11,10 @@ Bottlenecks Requirements Notes for OPNFV Euphrates Release
Installer Requirements
======================
-Bottlenecks Euphrates release is installer-agnostic which means that
+Bottlenecks releases after Euphrates are installer-agnostic which means that
the test cases could be executed over different deployments.
-However, the pod description file and openstack rc file
+However, the pod description file,
+openstack rc file and the admin credentials
are required to automatically get the SUT informations.
=====================
@@ -30,7 +31,7 @@ Software Requirements
Operation System
----------------
-Ubuntu 14.04 is the default system. However, we do not do any linux core operation or call any system related api directly. The software could be runned in higher versions of Ubuntu with high probability. Thorough tests are not performed.
+Ubuntu 14.04 is the default system. However, we do not do any linux core operation or call any system related api directly. The software could be runned in higher versions of Ubuntu with high probability.
Cloud OS
--------
diff --git a/docs/testing/user/userguide/overview.rst b/docs/testing/user/userguide/overview.rst
index 746f24c4..725a4b9d 100644
--- a/docs/testing/user/userguide/overview.rst
+++ b/docs/testing/user/userguide/overview.rst
@@ -55,20 +55,32 @@ Integration Description
+-------------+----------------------+----------------------+
| Euphrates | Any | POSCA |
+-------------+----------------------+----------------------+
+| Fraser | Any | POSCA |
++-------------+----------------------+----------------------+
Test suite & Test case Description
==================================
-+--------+-------------------------------------+
-|POSCA | posca_factor_ping |
-| +-------------------------------------+
-| | posca_factor_system_bandwidth |
-| +-------------------------------------+
-| | posca_facotor_soak_througputs |
-| +-------------------------------------+
-| | posca_feature_vnf_scale_up |
-| +-------------------------------------+
-| | posca_feature_vnf_scale_out |
-+--------+-------------------------------------+
++--------+----+-------------------------------------------+
+|POSCA | 1 | posca_factor_ping |
+| +----+-------------------------------------------+
+| | 2 | posca_factor_system_bandwidth |
+| +----+-------------------------------------------+
+| | 3 | posca_facotor_soak_througputs |
+| +----+-------------------------------------------+
+| | 4 | posca_feature_vnf_scale_up |
+| +----+-------------------------------------------+
+| | 5 | posca_feature_vnf_scale_out |
+| +----+-------------------------------------------+
+| | 6 | posca_factor_storperf |
+| +----+-------------------------------------------+
+| | 7 | posca_factor_multistack_storage_parallel |
+| +----+-------------------------------------------+
+| | 8 | posca_factor_multistack_storage |
+| +----+-------------------------------------------+
+| | 9 | posca_feature_moon_resources |
+| +----+-------------------------------------------+
+| | 10 | posca_feature_moon_tenants |
++--------+----+-------------------------------------------+
As for the abandoned test suite in the previous Bottlenecks releases, please
refer to http://docs.opnfv.org/en/stable-danube/submodules/bottlenecks/docs/testing/user/userguide/deprecated.html.
diff --git a/docs/testing/user/userguide/posca/posca_factor_multistack_storage.rst b/docs/testing/user/userguide/posca/posca_factor_multistack_storage.rst
new file mode 100644
index 00000000..70f555d1
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_factor_multistack_storage.rst
@@ -0,0 +1,59 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+***************************************************
+POSCA Stress (Factor) Test of Multistack Storage
+***************************************************
+
+Test Case
+========
+
++--------------------------------------------------------------------------------------+
+|Bottlenecks POSCA Stress Test MultiStack Storage |
+| |
++--------------+-----------------------------------------------------------------------+
+|test case name| posca_factor_multistack_storage |
+| | |
++--------------+-----------------------------------------------------------------------+
+|description | Stress test regarding multistack storage using |
+| | yardstick as a runner |
++--------------+-----------------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/posca_factor_multistack_storage.yaml |
+| | |
+| | stack number: 5, 10, 20, 50 ... |
+| | |
++--------------+-----------------------------------------------------------------------+
+|test result | Read / Write IOPS, Throughput, latency |
+| | |
++--------------+-----------------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: fio
+ test_times: 10
+ rw: write, read, rw, rr, randomrw
+ bs: 4k
+ size: 50g
+ rwmixwrite: 50
+ num_stack: 1, 3
+ volume_num: 1
+ numjobs: 1
+ direct: 1
+
+ contexts:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_ip:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "storage_bottlenecks"
+
+ dashboard:
+ dashboard: "y"
+ dashboard_ip:
diff --git a/docs/testing/user/userguide/posca/posca_factor_multistack_storage_parallel.rst b/docs/testing/user/userguide/posca/posca_factor_multistack_storage_parallel.rst
new file mode 100644
index 00000000..f8343bde
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_factor_multistack_storage_parallel.rst
@@ -0,0 +1,58 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+***************************************************
+POSCA Stress (Factor) Test of Multistack Storage
+***************************************************
+
+Test Case
+========
+
++------------------------------------------------------------------------------------------------+
+|Bottlenecks POSCA Stress Test Storage (Multistack with Yardstick) |
+| |
++--------------+---------------------------------------------------------------------------------+
+|test case name| posca_factor_multistack_storage_parallel |
+| | |
++--------------+---------------------------------------------------------------------------------+
+|description | Stress test regarding storage while using yardstick |
+| | for multistack as a runner |
++--------------+---------------------------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/posca_factor_multistack_storage_parallel.yaml |
+| | |
+| | |
++--------------+---------------------------------------------------------------------------------+
+|test result | Read / Write IOPS, Throughput, latency |
+| | |
++--------------+---------------------------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: fio
+ test_times: 10
+ rw: write, read, rw, rr, randomrw
+ bs: 4k
+ size: 50g
+ rwmixwrite: 50
+ num_stack: 1, 3
+ volume_num: 1
+ numjobs: 1
+ direct: 1
+
+ contexts:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_ip:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "storage_bottlenecks"
+
+ dashboard:
+ dashboard: "y"
+ dashboard_ip:
diff --git a/docs/testing/user/userguide/posca/posca_factor_soak_throughputs.rst b/docs/testing/user/userguide/posca/posca_factor_soak_throughputs.rst
new file mode 100644
index 00000000..9e427b15
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_factor_soak_throughputs.rst
@@ -0,0 +1,51 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+*************************************
+POSCA Factor Test of Soak Throughputs
+*************************************
+
+Test Case
+========
+
++-----------------------------------------------------------------------------+
+|Bottlenecks POSCA Soak Test Throughputs |
+| |
++--------------+--------------------------------------------------------------+
+|test case name| posca_factor_soak_throughputs |
+| | |
++--------------+--------------------------------------------------------------+
+|description | Long duration stability tests of data-plane traffic |
+| | |
++--------------+--------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/... |
+| | posca_factor_soak_throughputs.yaml |
+| | |
++--------------+--------------------------------------------------------------+
+|test result | THROUGHPUT,THROUGHPUT_UNITS,MEAN_LATENCY,LOCAL_CPU_UTIL, |
+| | REMOTE_CPU_UTIL,LOCAL_BYTES_SENT,REMOTE_BYTES_RECVD |
++--------------+--------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: netperf
+ test_duration_hours: 1
+ vim_pair_ttl: 300
+ vim_pair_lazy_cre_delay: 2
+ package_size:
+ threshhold:
+ package_loss: 0%
+ latency: 300
+
+ runners:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "netperf_soak"
diff --git a/docs/testing/user/userguide/posca/posca_factor_storperf.rst b/docs/testing/user/userguide/posca/posca_factor_storperf.rst
new file mode 100644
index 00000000..2dc9ecdc
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_factor_storperf.rst
@@ -0,0 +1,37 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+***************************************************
+POSCA Stress Test of Storage Usage
+***************************************************
+
+Test Case
+========
+
++-----------------------------------------------------------------------------+
+|Bottlenecks POSCA Stress Test Storage |
+| |
++--------------+--------------------------------------------------------------+
+|test case name| posca_factor_storperf |
+| | |
++--------------+--------------------------------------------------------------+
+|description | Stress test regarding storage using Storperf |
++--------------+--------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/posca_posca_storperf.yaml |
+| | |
+| | |
++--------------+--------------------------------------------------------------+
+|test result | Read / Write IOPS, Throughput, latency |
+| | |
++--------------+--------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: storperf
diff --git a/docs/testing/user/userguide/posca/posca_feature_moon_resources.rst b/docs/testing/user/userguide/posca/posca_feature_moon_resources.rst
new file mode 100644
index 00000000..5f89bca8
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_feature_moon_resources.rst
@@ -0,0 +1,52 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+************************************************************
+POSCA feature Test of Moon Security for resources per tenant
+************************************************************
+
+Test Case
+=========
+
++-----------------------------------------------------------------------------+
+|Bottlenecks POSCA Soak Test Throughputs |
+| |
++--------------+--------------------------------------------------------------+
+|test case name| posca_feature_moon_resources |
+| | |
++--------------+--------------------------------------------------------------+
+|description | Moon authentication capability test for maximum number of |
+| | authentication operations per tenant |
++--------------+--------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/... |
+| | posca_feature_moon_resources.yaml |
+| | |
++--------------+--------------------------------------------------------------+
+|test result | number of tenants, max number of users |
+| | |
++--------------+--------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: https request
+ # info that the cpus and memes have the same number of data.
+ pdp_name: pdp
+ policy_name: "MLS Policy example"
+ model_name: MLS
+ tenants: 1,5,10,20
+ subject_number: 10
+ object_number: 10
+ timeout: 0.2
+
+ runners:
+ stack_create: yardstick
+ Debug: False
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "moon_resource"
diff --git a/docs/testing/user/userguide/posca/posca_feature_moon_tenants.rst b/docs/testing/user/userguide/posca/posca_feature_moon_tenants.rst
new file mode 100644
index 00000000..1ac93f8d
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_feature_moon_tenants.rst
@@ -0,0 +1,55 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+***********************************************
+POSCA feature Test of Moon Security for Tenants
+***********************************************
+
+Test Case
+=========
+
++-----------------------------------------------------------------------------+
+|Bottlenecks POSCA Soak Test Throughputs |
+| |
++--------------+--------------------------------------------------------------+
+|test case name| posca_feature_moon_tenants |
+| | |
++--------------+--------------------------------------------------------------+
+|description | Moon authentication capability test for maximum tenants |
+| | |
++--------------+--------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/... |
+| | posca_feature_moon_tenants.yaml |
+| | |
++--------------+--------------------------------------------------------------+
+|test result | Max number of tenants |
+| | |
++--------------+--------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ tool: https request
+ # info that the cpus and memes have the same number of data.
+ pdp_name: pdp
+ policy_name: "MLS Policy example"
+ model_name: MLS
+ subject_number: 20
+ object_number: 20
+ timeout: 0.003
+ initial_tenants: 0
+ steps_tenants: 1
+ tolerate_time: 20
+ SLA: 5
+
+ runners:
+ stack_create: yardstick
+ Debug: False
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "moon_tenant"
diff --git a/docs/testing/user/userguide/posca/posca_feature_vnf_scale_out.rst b/docs/testing/user/userguide/posca/posca_feature_vnf_scale_out.rst
new file mode 100644
index 00000000..baf30578
--- /dev/null
+++ b/docs/testing/user/userguide/posca/posca_feature_vnf_scale_out.rst
@@ -0,0 +1,46 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International
+.. License.
+.. http://creativecommons.org/licenses/by/4.0
+.. (c) OPNFV, Huawei Tech and others.
+
+***********************************
+POSCA feature Test of VNF Scale Out
+***********************************
+
+Test Case
+=========
+
++-----------------------------------------------------------------------------+
+|Bottlenecks POSCA Soak Test Throughputs |
+| |
++--------------+--------------------------------------------------------------+
+|test case name| posca_feature_nfv_scale_out |
+| | |
++--------------+--------------------------------------------------------------+
+|description | SampleVNF Scale Out Test |
+| | |
++--------------+--------------------------------------------------------------+
+|configuration | config file: |
+| | /testsuite/posca/testcase_cfg/... |
+| | posca_feature_nfv_scale_out.yaml |
+| | |
++--------------+--------------------------------------------------------------+
+|test result | throughputs, latency, loss rate |
+| | |
++--------------+--------------------------------------------------------------+
+
+Configuration
+============
+::
+
+ load_manager:
+ scenarios:
+ number_vnfs: 1, 2, 4
+ iterations: 10
+ interval: 35
+
+ runners:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_dir: "samples/vnf_samples/nsut/acl"
+ yardstick_testcase: "tc_heat_rfc2544_ipv4_1rule_1flow_64B_trex_correlated_traffic_scale_out"
diff --git a/docs/testing/user/userguide/posca_guide.rst b/docs/testing/user/userguide/posca_guide.rst
index ec623d03..934415f0 100644
--- a/docs/testing/user/userguide/posca_guide.rst
+++ b/docs/testing/user/userguide/posca_guide.rst
@@ -100,7 +100,7 @@ Edit admin_rc.sh and add the following line
export OS_CACERT=/tmp/os_cacert
If you have deployed your openstack environment by compass,
-you could use the following command to get the required files. For Fuel, Apex and JOID installer, we only provide limited support now
+you could use the following command to get the required files. As to Fuel, Apex and JOID installers, we only provide limited support now
for retrieving the configuration/description files. If you find that the following command can not do the magic, you should put the
required files in /tmp manually.
@@ -108,7 +108,7 @@ required files in /tmp manually.
bash ./utils/env_prepare/config_prepare.sh -i <installer> [--debug]
-Note that if we execute the command above, then admin_rc.sh and pod.yml gets created automatically in /tmp folder along with the line `export OS_CACERT=/tmp/os_cacert` added in admin_rc.sh file.
+Note that if we execute the command above, then admin_rc.sh and pod.yml will be created automatically in /tmp folder along with the line `export OS_CACERT=/tmp/os_cacert` added in admin_rc.sh file.
Executing Specified Testcase
diff --git a/docs/testing/user/userguide/test_cases.rst b/docs/testing/user/userguide/test_cases.rst
index 57e338e9..b6b1d17f 100644
--- a/docs/testing/user/userguide/test_cases.rst
+++ b/docs/testing/user/userguide/test_cases.rst
@@ -11,3 +11,10 @@ Bottlenecks - Test Cases
./posca/posca_factor_system_bandwidth.rst
./posca/posca_factor_ping.rst
+ ./posca/posca_factor_storperf.rst
+ ./posca/posca_factor_multistack_storage.rst
+ ./posca/posca_factor_multistack_storage_parallel.rst
+ ./posca/posca_factor_soak_throughputs.rst
+ ./posca/posca_feature_moon_resources.rst
+ ./posca/posca_feature_moon_tenants.rst
+ ./posca/posca_feature_vnf_scale_out.rst
diff --git a/monitor/automate_cadvisor_client.py b/monitor/automate_cadvisor_client.py
deleted file mode 100644
index 95b98e9d..00000000
--- a/monitor/automate_cadvisor_client.py
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Tech and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-import logging
-import sys
-import yaml
-sys.path.insert(0, '/home/opnfv/bottlenecks/utils/infra_setup/passwordless_SSH/')
-import ssh
-
-logger = logging.getLogger(__name__)
-with open('/tmp/pod.yaml') as f:
- dataMap = yaml.safe_load(f)
- for x in dataMap:
- for y in dataMap[x]:
- if (y['role']=='Controller') or (y['role']=='Compute'):
- ip = str(y['ip'])
- user = str(y['user'])
- pwd = str(y['password'])
- ssh_d = ssh.SSH(user, host= ip, password= pwd)
- status, stdout, stderr = ssh_d.execute("cd /etc && mkdir cadvisor-config")
- if status:
- raise Exception("Command failed with non-zero status.")
- logger.info(stdout.splitlines())
- with open("/home/opnfv/bottlenecks/monitor/cadvisor_install.sh") as stdin_file:
- ssh_d.run("cat > /etc/cadvisor-config/install.sh", stdin=stdin_file)
- status, stdout, stderr = ssh_d.execute("sudo apt-get install docker.io")
- if status:
- raise Exception("Command for installing docker failed.")
- logger.info(stdout.splitlines())
- ssh_d.run("cd /etc/cadvisor-config/ && bash ./install.sh")
-
diff --git a/monitor/automate_collectd_client.py b/monitor/automate_collectd_client.py
deleted file mode 100644
index 6dd70676..00000000
--- a/monitor/automate_collectd_client.py
+++ /dev/null
@@ -1,38 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 Huawei Tech and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-import logging
-import sys
-import yaml
-sys.path.insert(0, '/home/opnfv/bottlenecks/utils/infra_setup/passwordless_SSH/')
-import ssh
-
-logger = logging.getLogger(__name__)
-with open('/tmp/pod.yaml') as f:
- dataMap = yaml.safe_load(f)
- for x in dataMap:
- for y in dataMap[x]:
- if (y['role']=='Controller') or (y['role']=='Compute'):
- ip = str(y['ip'])
- user = str(y['user'])
- pwd = str(y['password'])
- ssh_d = ssh.SSH(user, host= ip, password= pwd)
- status, stdout, stderr = ssh_d.execute("cd /etc && mkdir collectd-config")
- if status:
- raise Exception("Command failed with non-zero status.")
- logger.info(stdout.splitlines())
- with open("/home/opnfv/bottlenecks/monitor/install-collectd-client.sh") as stdin_file:
- ssh_d.run("cat > /etc/collectd-config/install.sh", stdin=stdin_file)
- with open("/home/opnfv/bottlenecks/monitor/config/collectd-client.conf") as stdin_file:
- ssh_d.run("cat > /etc/collectd-config/collectd.conf", stdin=stdin_file)
- status, stdout, stderr = ssh_d.execute("sudo apt-get install docker.io")
- if status:
- raise Exception("Command for installing docker failed.")
- logger.info(stdout.splitlines())
- ssh_d.run("cd /etc/collectd-config/ && bash ./install.sh")
diff --git a/monitor/config/barometer_client.conf b/monitor/config/barometer_client.conf
new file mode 100644
index 00000000..a7481f17
--- /dev/null
+++ b/monitor/config/barometer_client.conf
@@ -0,0 +1,174 @@
+#
+# Config file for collectd(1).
+# Please read collectd.conf(5) for a list of options.
+# http://collectd.org/
+#
+
+##############################################################################
+# Global #
+#----------------------------------------------------------------------------#
+# Global settings for the daemon. #
+##############################################################################
+
+#Hostname "localhost"
+#FQDNLookup true
+#BaseDir "${prefix}/var/lib/collectd"
+#PIDFile "${prefix}/var/run/collectd.pid"
+#PluginDir "${exec_prefix}/lib/collectd"
+#TypesDB "/opt/collectd/share/collectd/types.db"
+
+#----------------------------------------------------------------------------#
+# When enabled, plugins are loaded automatically with the default options #
+# when an appropriate <Plugin ...> block is encountered. #
+# Disabled by default. #
+#----------------------------------------------------------------------------#
+#AutoLoadPlugin false
+
+#----------------------------------------------------------------------------#
+# When enabled, internal statistics are collected, using "collectd" as the #
+# plugin name. #
+# Disabled by default. #
+#----------------------------------------------------------------------------#
+#CollectInternalStats false
+
+#----------------------------------------------------------------------------#
+# Interval at which to query values. This may be overwritten on a per-plugin #
+# base by using the 'Interval' option of the LoadPlugin block: #
+# <LoadPlugin foo> #
+# Interval 60 #
+# </LoadPlugin> #
+#----------------------------------------------------------------------------#
+#Interval 10
+
+#MaxReadInterval 86400
+#Timeout 2
+#ReadThreads 5
+#WriteThreads 5
+
+# Limit the size of the write queue. Default is no limit. Setting up a limit is
+# recommended for servers handling a high volume of traffic.
+#WriteQueueLimitHigh 1000000
+#WriteQueueLimitLow 800000
+
+##############################################################################
+# Logging #
+#----------------------------------------------------------------------------#
+# Plugins which provide logging functions should be loaded first, so log #
+# messages generated when loading or configuring other plugins can be #
+# accessed. #
+##############################################################################
+
+LoadPlugin syslog
+#LoadPlugin logfile
+#LoadPlugin log_logstash
+
+#<Plugin logfile>
+# LogLevel info
+# File STDOUT
+# Timestamp true
+# PrintSeverity false
+#</Plugin>
+
+#<Plugin log_logstash>
+# LogLevel info
+# File "${prefix}/var/log/collectd.json.log"
+#</Plugin>
+
+#<Plugin syslog>
+# LogLevel info
+#</Plugin>
+
+##############################################################################
+# LoadPlugin section #
+#----------------------------------------------------------------------------#
+# Lines beginning with a single `#' belong to plugins which have been built #
+# but are disabled by default. #
+# #
+# Lines beginning with `##' belong to plugins which have not been built due #
+# to missing dependencies or because they have been deactivated explicitly. #
+##############################################################################
+
+##LoadPlugin barometer
+LoadPlugin cpu
+LoadPlugin interface
+LoadPlugin load
+LoadPlugin memory
+LoadPlugin network
+LoadPlugin ovs_events
+LoadPlugin ovs_stats
+LoadPlugin rrdtool
+LoadPlugin write_http
+
+##############################################################################
+# Plugin configuration #
+#----------------------------------------------------------------------------#
+# In this section configuration stubs for each plugin are provided. A desc- #
+# ription of those options is available in the collectd.conf(5) manual page. #
+##############################################################################
+
+#<Plugin "barometer">
+# Device "/dev/i2c-0";
+# Oversampling 512
+# PressureOffset 0.0
+# TemperatureOffset 0.0
+# Normalization 2
+# Altitude 238.0
+# TemperatureSensor "myserver/onewire-F10FCA000800/temperature"
+#</Plugin>
+
+#<Plugin cpu>
+# ReportByCpu true
+# ReportByState true
+# ValuesPercentage false
+# ReportNumCpu false
+# ReportGuestState false
+# SubtractGuestState true
+#</Plugin>
+
+#<Plugin interface>
+# Interface "eth0"
+# IgnoreSelected false
+# ReportInactive true
+# UniqueName false
+#</Plugin>
+
+#<Plugin memcached>
+# <Instance "local">
+# #Host "memcache.example.com"
+# Address "127.0.0.1"
+# Port "11211"
+# </Instance>
+#</Plugin>
+
+#<Plugin memory>
+# ValuesAbsolute true
+# ValuesPercentage false
+#</Plugin>
+
+<Plugin network>
+ Server "192.168.114.2" "25826"
+</Plugin>
+
+<Plugin ovs_events>
+ Port "6640"
+ Address "127.0.0.1"
+ Socket "/var/run/openvswitch/db.sock"
+ Interfaces "br0" "veth0"
+ SendNotification true
+ DispatchValues true
+</Plugin>
+
+<Plugin ovs_stats>
+ Port "6640"
+ Address "127.0.0.1"
+ Socket "/var/run/openvswitch/db.sock"
+ Bridges "br0" "br_ext"
+</Plugin>
+
+<Plugin write_http>
+ <Node "collectd_exporter">
+ URL "http://192.168.114.2:9103/collectd-post"
+ Format "JSON"
+ StoreRates false
+ </Node>
+</Plugin>
diff --git a/monitor/config/barometer_server.conf b/monitor/config/barometer_server.conf
new file mode 100644
index 00000000..0d85db38
--- /dev/null
+++ b/monitor/config/barometer_server.conf
@@ -0,0 +1,174 @@
+#
+# Config file for collectd(1).
+# Please read collectd.conf(5) for a list of options.
+# http://collectd.org/
+#
+
+##############################################################################
+# Global #
+#----------------------------------------------------------------------------#
+# Global settings for the daemon. #
+##############################################################################
+
+#Hostname "localhost"
+#FQDNLookup true
+#BaseDir "${prefix}/var/lib/collectd"
+#PIDFile "${prefix}/var/run/collectd.pid"
+#PluginDir "${exec_prefix}/lib/collectd"
+#TypesDB "/opt/collectd/share/collectd/types.db"
+
+#----------------------------------------------------------------------------#
+# When enabled, plugins are loaded automatically with the default options #
+# when an appropriate <Plugin ...> block is encountered. #
+# Disabled by default. #
+#----------------------------------------------------------------------------#
+#AutoLoadPlugin false
+
+#----------------------------------------------------------------------------#
+# When enabled, internal statistics are collected, using "collectd" as the #
+# plugin name. #
+# Disabled by default. #
+#----------------------------------------------------------------------------#
+#CollectInternalStats false
+
+#----------------------------------------------------------------------------#
+# Interval at which to query values. This may be overwritten on a per-plugin #
+# base by using the 'Interval' option of the LoadPlugin block: #
+# <LoadPlugin foo> #
+# Interval 60 #
+# </LoadPlugin> #
+#----------------------------------------------------------------------------#
+#Interval 10
+
+#MaxReadInterval 86400
+#Timeout 2
+#ReadThreads 5
+#WriteThreads 5
+
+# Limit the size of the write queue. Default is no limit. Setting up a limit is
+# recommended for servers handling a high volume of traffic.
+#WriteQueueLimitHigh 1000000
+#WriteQueueLimitLow 800000
+
+##############################################################################
+# Logging #
+#----------------------------------------------------------------------------#
+# Plugins which provide logging functions should be loaded first, so log #
+# messages generated when loading or configuring other plugins can be #
+# accessed. #
+##############################################################################
+
+LoadPlugin syslog
+#LoadPlugin logfile
+#LoadPlugin log_logstash
+
+#<Plugin logfile>
+# LogLevel info
+# File STDOUT
+# Timestamp true
+# PrintSeverity false
+#</Plugin>
+
+#<Plugin log_logstash>
+# LogLevel info
+# File "${prefix}/var/log/collectd.json.log"
+#</Plugin>
+
+#<Plugin syslog>
+# LogLevel info
+#</Plugin>
+
+##############################################################################
+# LoadPlugin section #
+#----------------------------------------------------------------------------#
+# Lines beginning with a single `#' belong to plugins which have been built #
+# but are disabled by default. #
+# #
+# Lines beginning with `##' belong to plugins which have not been built due #
+# to missing dependencies or because they have been deactivated explicitly. #
+##############################################################################
+
+##LoadPlugin barometer
+LoadPlugin cpu
+LoadPlugin interface
+LoadPlugin load
+LoadPlugin memory
+LoadPlugin network
+LoadPlugin ovs_events
+LoadPlugin ovs_stats
+LoadPlugin rrdtool
+LoadPlugin write_http
+
+##############################################################################
+# Plugin configuration #
+#----------------------------------------------------------------------------#
+# In this section configuration stubs for each plugin are provided. A desc- #
+# ription of those options is available in the collectd.conf(5) manual page. #
+##############################################################################
+
+#<Plugin "barometer">
+# Device "/dev/i2c-0";
+# Oversampling 512
+# PressureOffset 0.0
+# TemperatureOffset 0.0
+# Normalization 2
+# Altitude 238.0
+# TemperatureSensor "myserver/onewire-F10FCA000800/temperature"
+#</Plugin>
+
+#<Plugin cpu>
+# ReportByCpu true
+# ReportByState true
+# ValuesPercentage false
+# ReportNumCpu false
+# ReportGuestState false
+# SubtractGuestState true
+#</Plugin>
+
+#<Plugin interface>
+# Interface "eth0"
+# IgnoreSelected false
+# ReportInactive true
+# UniqueName false
+#</Plugin>
+
+#<Plugin memcached>
+# <Instance "local">
+# #Host "memcache.example.com"
+# Address "127.0.0.1"
+# Port "11211"
+# </Instance>
+#</Plugin>
+
+#<Plugin memory>
+# ValuesAbsolute true
+# ValuesPercentage false
+#</Plugin>
+
+<Plugin network>
+ Listen "192.168.114.2" "25826"
+</Plugin>
+
+<Plugin ovs_events>
+ Port "6640"
+ Address "127.0.0.1"
+ Socket "/var/run/openvswitch/db.sock"
+ Interfaces "br0" "veth0"
+ SendNotification true
+ DispatchValues true
+</Plugin>
+
+<Plugin ovs_stats>
+ Port "6640"
+ Address "127.0.0.1"
+ Socket "/var/run/openvswitch/db.sock"
+ Bridges "br0" "br_ext"
+</Plugin>
+
+<Plugin write_http>
+ <Node "collectd_exporter">
+ URL "http://192.168.114.2:9103/collectd-post"
+ Format "JSON"
+ StoreRates false
+ </Node>
+</Plugin>
diff --git a/monitor/config/collectd-client.conf b/monitor/config/collectd_client.conf
index 96a2a690..96a2a690 100644
--- a/monitor/config/collectd-client.conf
+++ b/monitor/config/collectd_client.conf
diff --git a/monitor/config/collectd.conf b/monitor/config/collectd_server.conf
index 6be610e5..6be610e5 100644
--- a/monitor/config/collectd.conf
+++ b/monitor/config/collectd_server.conf
diff --git a/monitor/grafana/config/grafana.ini b/monitor/config/grafana.ini
index eb4055ca..eb4055ca 100644
--- a/monitor/grafana/config/grafana.ini
+++ b/monitor/config/grafana.ini
diff --git a/monitor/config/openstack_exporter.conf b/monitor/config/openstack_exporter.conf
new file mode 100644
index 00000000..54a9cba8
--- /dev/null
+++ b/monitor/config/openstack_exporter.conf
@@ -0,0 +1,12 @@
+OS_AUTH_URL=https://192.16.1.222:5000/v3
+OS_PASSWORD=e5748a478dcfe05e9eaf7
+OS_PROJECT_NAME=admin
+OS_USERNAME=admin
+OS_USER_DOMAIN_NAME=Default
+OS_REGION_NAME=RegionOne
+TIMEOUT_SECONDS=20
+OS_POLLING_INTERVAL=60
+OS_RETRIES=0
+LISTEN_PORT=9104
+OS_CPU_OC_RATIO=1.5
+OS_RAM_OC_RATIO=1
diff --git a/monitor/config/prometheus.yaml b/monitor/config/prometheus.yaml
index 3736d8e4..4ece441a 100644
--- a/monitor/config/prometheus.yaml
+++ b/monitor/config/prometheus.yaml
@@ -25,7 +25,7 @@ scrape_configs:
scrape_interval: 5s
static_configs:
- - targets: ['192.168.121.2:9090']
+ - targets: ['192.168.114.2:9090']
- job_name: 'cadvisor'
@@ -33,7 +33,7 @@ scrape_configs:
scrape_interval: 5s
static_configs:
- - targets: ['192.168.121.2:8080','10.1.0.50:8080','10.1.0.51:8080']
+ - targets: ['192.168.114.2:8080','10.1.0.50:8080','10.1.0.51:8080','10.1.0.52:8080','10.1.0.53:8080','10.1.0.54:8080']
- job_name: 'collectd'
@@ -41,7 +41,7 @@ scrape_configs:
scrape_interval: 5s
static_configs:
- - targets: ['192.168.121.2:9103']
+ - targets: ['192.168.114.2:9103']
- job_name: 'node'
@@ -49,4 +49,12 @@ scrape_configs:
scrape_interval: 5s
static_configs:
- - targets: ['192.168.121.2:9100']
+ - targets: ['192.168.114.2:9100']
+
+ - job_name: 'openstack'
+
+ # Override the global default and scrape targets from this job every 5 seconds.
+ scrape_interval: 5s
+
+ static_configs:
+ - targets: ['192.168.114.2:9104']
diff --git a/monitor/config/__init__.py b/monitor/dashboard/__init__.py
index b124dfa9..a90f1d17 100644
--- a/monitor/config/__init__.py
+++ b/monitor/dashboard/__init__.py
@@ -1,5 +1,5 @@
##############################################################################
-# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
diff --git a/monitor/automated-dashboard-datasource.py b/monitor/dashboard/automated_dashboard_datasource.py
index 1e1b42f7..88b91515 100644
--- a/monitor/automated-dashboard-datasource.py
+++ b/monitor/dashboard/automated_dashboard_datasource.py
@@ -14,6 +14,7 @@ from oslo_serialization import jsonutils
logger = logging.getLogger(__name__)
+MONITOR_DASHBOARD = "/home/opnfv/bottlenecks/monitor/dashboard/"
def _create_dashboard(ip, port, path):
@@ -23,7 +24,7 @@ def _create_dashboard(ip, port, path):
data = jsonutils.load(f)
try:
post(url, {"dashboard": data})
- logger.info( "Trying to post dashboard json!")
+ logger.info("Trying to post dashboard json!")
except Exception:
logger.info("Create dashboard failed")
raise
@@ -63,7 +64,8 @@ def post(url, data):
ip_address = socket.gethostbyname(socket.gethostname())
-_create_dashboard(ip_address, 3000, '/var/lib/grafana/' +
- 'dashboards/' +
- 'prometheus-system_rev1.json')
_create_data_source(ip_address, 3000)
+_create_dashboard(ip_address, 3000, MONITOR_DASHBOARD + 'stats_overview.json')
+_create_dashboard(ip_address, 3000,
+ MONITOR_DASHBOARD + 'jump_server_status.json')
+_create_dashboard(ip_address, 3000, MONITOR_DASHBOARD + 'openstack_stats.json')
diff --git a/monitor/dashboard/custom_dashboard.py b/monitor/dashboard/custom_dashboard.py
new file mode 100644
index 00000000..2a4f79cf
--- /dev/null
+++ b/monitor/dashboard/custom_dashboard.py
@@ -0,0 +1,33 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Tech and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import json
+
+
+def customize_query(filename, rowtitle, panelname, expr):
+ with open(filename, 'r+') as f:
+ data = json.load(f)
+ x = data['rows'] # this is an array of the rows of the dashboard
+ for y in x:
+ if y['title'] == rowtitle:
+ pan = y['panels']
+ for i in range(len(pan) - 1):
+ z = pan[i]
+ if z['title'] == panelname:
+ tar = z['targets']
+ for a in tar:
+ a['expr'] = expr
+ f.seek(0) # <--- reset file position to start
+ json.dump(data, f, indent=4)
+ f.truncate()
+
+
+customize_query("/home/opnfv/bottlenecks/monitor/custom-query-dashboard.json",
+ "Dashboard Row", "Memory Usage per Container",
+ "Sample Prometheus Query")
diff --git a/monitor/dashboard/custom_query_dashboard.json b/monitor/dashboard/custom_query_dashboard.json
new file mode 100644
index 00000000..7f2e53a3
--- /dev/null
+++ b/monitor/dashboard/custom_query_dashboard.json
@@ -0,0 +1,36 @@
+{
+ "rows": [
+ {
+ "repeat": null,
+ "titleSize": "h6",
+ "repeatIteration": null,
+ "title": "Dashboard Row",
+ "height": 150,
+ "repeatRowId": null,
+ "panels": [
+ {
+ "title": "Memory Usage per Container",
+ "aliasColors": {},
+ "id": 31,
+ "cacheTimeout": null,
+ "valueName": "current",
+ "targets": [
+ {
+ "hide": false,
+ "expr": "Sample Prometheus Query",
+ "step": 1800,
+ "legendFormat": "",
+ "intervalFactor": 2,
+ "refId": "A"
+ }
+ ]
+ },
+ {
+ "content": "Sample Content"
+ }
+ ],
+ "showTitle": false,
+ "collapse": true
+ }
+ ]
+}
diff --git a/monitor/grafana/dashboards/prometheus-system_rev1.json b/monitor/dashboard/jump_server_status.json
index 99e98b4f..823caba8 100644
--- a/monitor/grafana/dashboards/prometheus-system_rev1.json
+++ b/monitor/dashboard/jump_server_status.json
@@ -1,58 +1,40 @@
{
- "__inputs": [
- {
- "name": "DS_PROMETHEUS",
- "label": "Prometheus",
- "description": "",
- "type": "datasource",
- "pluginId": "prometheus",
- "pluginName": "Prometheus"
- }
- ],
- "__requires": [
- {
- "type": "panel",
- "id": "singlestat",
- "name": "Singlestat",
- "version": ""
- },
- {
- "type": "panel",
- "id": "graph",
- "name": "Graph",
- "version": ""
- },
- {
- "type": "grafana",
- "id": "grafana",
- "name": "Grafana",
- "version": "3.1.0"
- },
- {
- "type": "datasource",
- "id": "prometheus",
- "name": "Prometheus",
- "version": "1.0.0"
- }
- ],
- "id": null,
- "title": "Prometheus system",
- "tags": [
- "system",
- "prometheus",
- "online",
- "home"
- ],
- "style": "dark",
- "timezone": "browser",
+ "annotations": {
+ "list": [
+ {
+ "datasource": "automated-ds",
+ "enable": false,
+ "expr": "ALERTS{alias=\"$host\", alertstate=\"firing\"}",
+ "iconColor": "rgb(252, 5, 0)",
+ "name": "Alert",
+ "tagKeys": "severity",
+ "textFormat": "{{ alias }} : {{alertstate}}",
+ "titleFormat": "{{ alertname }}"
+ },
+ {
+ "datasource": "automated-ds",
+ "enable": true,
+ "expr": "ALERTS{alias=\"$host\",alertstate=\"pending\"}",
+ "iconColor": "rgb(228, 242, 9)",
+ "name": "Warning",
+ "tagKeys": "severity",
+ "textFormat": "{{ alias }} : {{ alertstate }}",
+ "titleFormat": "{{ alertname }}"
+ }
+ ]
+ },
+ "description": "Load, CPU, RAM, network, process ...",
"editable": true,
+ "gnetId": 159,
+ "graphTooltip": 1,
"hideControls": false,
- "sharedCrosshair": true,
+ "id": null,
+ "links": [],
+ "refresh": false,
"rows": [
{
"collapse": false,
- "editable": true,
- "height": "250px",
+ "height": "101",
"panels": [
{
"cacheTimeout": null,
@@ -63,7 +45,7 @@
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
- "datasource": "${DS_PROMETHEUS}",
+ "datasource": "automated-ds",
"decimals": 1,
"editable": true,
"error": false,
@@ -75,7 +57,7 @@
"thresholdLabels": false,
"thresholdMarkers": true
},
- "height": "50px",
+ "height": "",
"id": 19,
"interval": null,
"links": [],
@@ -111,12 +93,14 @@
"lineColor": "rgb(31, 120, 193)",
"show": false
},
+ "tableColumn": "",
"targets": [
{
"calculatedInterval": "10m",
"datasourceErrors": {},
"errors": {},
"expr": "node_time{alias=\"$host\"} - node_boot_time{alias=\"$host\"}",
+ "format": "time_series",
"interval": "5m",
"intervalFactor": 1,
"legendFormat": "",
@@ -143,7 +127,7 @@
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
- "datasource": "${DS_PROMETHEUS}",
+ "datasource": "automated-ds",
"editable": true,
"error": false,
"format": "none",
@@ -154,10 +138,9 @@
"thresholdLabels": false,
"thresholdMarkers": true
},
- "height": "55px",
+ "height": "",
"id": 25,
"interval": null,
- "isNew": true,
"links": [],
"mappingType": 1,
"mappingTypes": [
@@ -191,6 +174,7 @@
"lineColor": "rgb(31, 120, 193)",
"show": false
},
+ "tableColumn": "",
"targets": [
{
"expr": "count(node_cpu{mode=\"user\", alias=\"$host\"})",
@@ -222,7 +206,7 @@
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
- "datasource": "${DS_PROMETHEUS}",
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
@@ -234,10 +218,9 @@
"thresholdLabels": false,
"thresholdMarkers": true
},
- "height": "55px",
+ "height": "",
"id": 26,
"interval": null,
- "isNew": true,
"links": [],
"mappingType": 1,
"mappingTypes": [
@@ -271,15 +254,17 @@
"lineColor": "rgb(31, 120, 193)",
"show": false
},
+ "tableColumn": "",
"targets": [
{
"expr": "node_memory_MemAvailable{alias=\"$host\"}",
+ "format": "time_series",
"interval": "",
"intervalFactor": 1,
"legendFormat": "",
"metric": "node_memory_MemAvailable",
"refId": "A",
- "step": 30
+ "step": 20
}
],
"thresholds": "",
@@ -304,7 +289,7 @@
"rgba(237, 129, 40, 0.89)",
"rgba(245, 54, 54, 0.9)"
],
- "datasource": "${DS_PROMETHEUS}",
+ "datasource": "automated-ds",
"decimals": 0,
"editable": true,
"error": false,
@@ -316,7 +301,7 @@
"thresholdLabels": false,
"thresholdMarkers": true
},
- "height": "50px",
+ "height": "",
"id": 9,
"interval": null,
"links": [],
@@ -350,21 +335,23 @@
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
- "show": true
+ "show": false
},
+ "tableColumn": "",
"targets": [
{
"calculatedInterval": "10m",
"datasourceErrors": {},
"errors": {},
"expr": "(node_memory_MemAvailable{alias=\"$host\"} or (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"})) / node_memory_MemTotal{alias=\"$host\"} * 100",
- "interval": "5m",
+ "format": "time_series",
+ "interval": "",
"intervalFactor": 1,
"legendFormat": "",
"metric": "node_mem",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%20%2F%20node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20*%20100%22%2C%22range_input%22%3A%2243201s%22%2C%22end_input%22%3A%222015-9-15%2013%3A54%22%2C%22step_input%22%3A%22%22%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 300
+ "step": 20
}
],
"thresholds": "90,95",
@@ -376,106 +363,42 @@
"valueName": "current"
},
{
- "aliasColors": {},
- "bars": false,
- "datasource": "${DS_PROMETHEUS}",
- "decimals": 2,
- "editable": true,
- "error": false,
- "fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "height": "260px",
- "id": 2,
- "legend": {
- "alignAsTable": true,
- "avg": true,
- "current": false,
- "hideEmpty": false,
- "max": true,
- "min": true,
- "rightSide": true,
- "show": true,
- "total": false,
- "values": true
- },
- "lines": true,
- "linewidth": 2,
+ "headings": true,
+ "id": 32,
+ "limit": 10,
"links": [],
- "nullPointMode": "null",
- "percentage": false,
- "pointradius": 5,
- "points": false,
- "renderer": "flot",
- "seriesOverrides": [],
+ "query": "",
+ "recent": true,
+ "search": false,
"span": 12,
- "stack": true,
- "steppedLine": false,
- "targets": [
- {
- "calculatedInterval": "2s",
- "datasourceErrors": {},
- "errors": {},
- "expr": "sum(rate(node_cpu{alias=\"$host\"}[$interval])) by (mode) * 100 / count_scalar(node_cpu{mode=\"user\", alias=\"$host\"}) or sum(irate(node_cpu{alias=\"$host\"}[5m])) by (mode) * 100 / count_scalar(node_cpu{mode=\"user\", alias=\"$host\"})",
- "intervalFactor": 1,
- "legendFormat": "{{ mode }}",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22sum(rate(node_cpu%7Balias%3D%5C%22%24host%5C%22%7D%5B%24interval%5D))%20by%20(mode)%20*%20100%22%2C%22range_input%22%3A%223600s%22%2C%22end_input%22%3A%222015-10-22%2015%3A27%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "A",
- "step": 2
- }
- ],
- "timeFrom": null,
- "timeShift": null,
- "title": "CPU Usage",
- "tooltip": {
- "msResolution": false,
- "shared": true,
- "sort": 0,
- "value_type": "individual"
- },
- "type": "graph",
- "xaxis": {
- "show": true
- },
- "yaxes": [
- {
- "format": "percent",
- "label": "",
- "logBase": 1,
- "max": 100,
- "min": 0,
- "show": true
- },
- {
- "format": "short",
- "logBase": 1,
- "max": null,
- "min": 0,
- "show": true
- }
- ]
- },
+ "starred": true,
+ "tags": [],
+ "title": "Status Quick Access",
+ "type": "dashlist"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "System Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": false,
+ "height": 299,
+ "panels": [
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgb(241, 156, 15)",
- "threshold2": null,
- "threshold2Color": "rgb(246, 17, 17)",
- "thresholdLine": true
- },
+ "grid": {},
"id": 18,
"legend": {
"alignAsTable": true,
@@ -512,6 +435,7 @@
"color": "#E5AC0E"
}
],
+ "spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
@@ -526,7 +450,7 @@
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_load1%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%223601s%22%2C%22end_input%22%3A%222015-10-22%2015%3A27%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Afalse%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 2,
+ "step": 1,
"target": ""
},
{
@@ -539,7 +463,7 @@
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_load5%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%223600s%22%2C%22end_input%22%3A%222015-10-22%2015%3A27%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Afalse%2C%22tab%22%3A0%7D%5D",
"refId": "B",
- "step": 2,
+ "step": 1,
"target": ""
},
{
@@ -552,10 +476,11 @@
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_load15%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%223600s%22%2C%22end_input%22%3A%222015-10-22%2015%3A27%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Afalse%2C%22tab%22%3A0%7D%5D",
"refId": "C",
- "step": 2,
+ "step": 1,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Load Average",
@@ -568,7 +493,11 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
@@ -587,33 +516,20 @@
"show": true
}
]
- }
- ],
- "showTitle": false,
- "title": "System Stats"
- },
- {
- "collapse": false,
- "editable": true,
- "height": "300px",
- "panels": [
+ },
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
+ "grid": {},
"height": "",
- "id": 6,
+ "id": 2,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -621,7 +537,7 @@
"hideEmpty": false,
"max": true,
"min": true,
- "rightSide": false,
+ "rightSide": true,
"show": true,
"total": false,
"values": true
@@ -634,23 +550,9 @@
"pointradius": 5,
"points": false,
"renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "Used",
- "color": "#0A437C"
- },
- {
- "alias": "Available",
- "color": "#5195CE"
- },
- {
- "alias": "Total",
- "color": "#052B51",
- "legend": false,
- "stack": false
- }
- ],
- "span": 6,
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 12,
"stack": true,
"steppedLine": false,
"targets": [
@@ -658,67 +560,45 @@
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "node_memory_MemTotal{alias=\"$host\"}",
- "intervalFactor": 1,
- "legendFormat": "Total",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "C",
- "step": 5,
- "target": ""
- },
- {
- "calculatedInterval": "2s",
- "datasourceErrors": {},
- "errors": {},
- "expr": "node_memory_MemTotal{alias=\"$host\"} - (node_memory_MemAvailable{alias=\"$host\"} or (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"}))",
+ "expr": "sum(rate(node_cpu{alias=\"$host\"}[$interval])) by (mode) * 100 / count_scalar(node_cpu{mode=\"user\", alias=\"$host\"}) or sum(irate(node_cpu{alias=\"$host\"}[5m])) by (mode) * 100 / count_scalar(node_cpu{mode=\"user\", alias=\"$host\"})",
+ "format": "time_series",
"intervalFactor": 1,
- "legendFormat": "Used",
+ "legendFormat": "{{ mode }}",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22sum(rate(node_cpu%7Balias%3D%5C%22%24host%5C%22%7D%5B%24interval%5D))%20by%20(mode)%20*%20100%22%2C%22range_input%22%3A%223600s%22%2C%22end_input%22%3A%222015-10-22%2015%3A27%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
- "target": ""
- },
- {
- "calculatedInterval": "2s",
- "datasourceErrors": {},
- "errors": {},
- "expr": "node_memory_MemAvailable{alias=\"$host\"} or (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"})",
- "intervalFactor": 1,
- "legendFormat": "Available",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "B",
- "step": 5,
- "target": ""
+ "step": 1
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Memory",
+ "title": "CPU Usage",
"tooltip": {
"msResolution": false,
"shared": true,
"sort": 0,
"value_type": "individual"
},
- "transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "bytes",
+ "format": "percent",
"label": "",
"logBase": 1,
- "max": null,
+ "max": 100,
"min": 0,
"show": true
},
{
- "format": "bytes",
+ "format": "short",
"logBase": 1,
"max": null,
"min": 0,
@@ -728,21 +608,16 @@
},
{
"aliasColors": {},
- "bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "bars": true,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
- "fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "height": "",
- "id": 29,
+ "fill": 2,
+ "grid": {},
+ "id": 20,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -755,7 +630,7 @@
"total": false,
"values": true
},
- "lines": true,
+ "lines": false,
"linewidth": 2,
"links": [],
"nullPointMode": "null",
@@ -763,67 +638,52 @@
"pointradius": 5,
"points": false,
"renderer": "flot",
- "seriesOverrides": [],
- "span": 6,
+ "seriesOverrides": [
+ {
+ "alias": "Processes blocked waiting for I/O to complete",
+ "color": "#E24D42"
+ },
+ {
+ "alias": "Processes in runnable state",
+ "color": "#6ED0E0"
+ }
+ ],
+ "spaceLength": 10,
+ "span": 5,
"stack": true,
"steppedLine": false,
"targets": [
{
- "calculatedInterval": "2s",
+ "calculatedInterval": "2m",
"datasourceErrors": {},
"errors": {},
- "expr": "node_memory_MemTotal{alias=\"$host\"} - (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"})",
+ "expr": "node_procs_running{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Used",
+ "legendFormat": "Processes in runnable state",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_running%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
+ "step": 2,
"target": ""
},
{
- "calculatedInterval": "2s",
+ "calculatedInterval": "2m",
"datasourceErrors": {},
"errors": {},
- "expr": "node_memory_MemFree{alias=\"$host\"}",
+ "expr": "node_procs_blocked{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Free",
+ "legendFormat": "Processes blocked waiting for I/O to complete",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_blocked%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "B",
- "step": 5,
- "target": ""
- },
- {
- "calculatedInterval": "2s",
- "datasourceErrors": {},
- "errors": {},
- "expr": "node_memory_Buffers{alias=\"$host\"}",
- "intervalFactor": 1,
- "legendFormat": "Buffers",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "D",
- "step": 5,
- "target": ""
- },
- {
- "calculatedInterval": "2s",
- "datasourceErrors": {},
- "errors": {},
- "expr": "node_memory_Cached{alias=\"$host\"}",
- "intervalFactor": 1,
- "legendFormat": "Cached",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "E",
- "step": 5,
+ "step": 2,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Memory Distribution",
+ "title": "Processes",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -833,11 +693,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "bytes",
+ "format": "none",
"label": "",
"logBase": 1,
"max": null,
@@ -845,7 +709,7 @@
"show": true
},
{
- "format": "bytes",
+ "format": "none",
"logBase": 1,
"max": null,
"min": 0,
@@ -856,18 +720,14 @@
{
"aliasColors": {},
"bars": true,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgb(241, 156, 15)",
- "threshold2": null,
- "threshold2Color": "rgb(246, 17, 17)",
- "thresholdLine": true
- },
+ "grid": {},
"id": 24,
"legend": {
"alignAsTable": true,
@@ -895,7 +755,8 @@
"color": "#EF843C"
}
],
- "span": 6,
+ "spaceLength": 10,
+ "span": 3,
"stack": false,
"steppedLine": false,
"targets": [
@@ -904,6 +765,7 @@
"datasourceErrors": {},
"errors": {},
"expr": "rate(node_forks{alias=\"$host\"}[$interval]) or irate(node_forks{alias=\"$host\"}[5m])",
+ "format": "time_series",
"intervalFactor": 1,
"legendFormat": "Forks",
"metric": "",
@@ -913,6 +775,7 @@
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Forks",
@@ -925,7 +788,11 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
@@ -947,20 +814,16 @@
},
{
"aliasColors": {},
- "bars": true,
- "datasource": "${DS_PROMETHEUS}",
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgb(241, 156, 15)",
- "threshold2": null,
- "threshold2Color": "rgb(246, 17, 17)",
- "thresholdLine": true
- },
- "id": 20,
+ "grid": {},
+ "id": 28,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -973,7 +836,7 @@
"total": false,
"values": true
},
- "lines": false,
+ "lines": true,
"linewidth": 2,
"links": [],
"nullPointMode": "null",
@@ -983,50 +846,35 @@
"renderer": "flot",
"seriesOverrides": [
{
- "alias": "Processes blocked waiting for I/O to complete",
- "color": "#E24D42"
- },
- {
- "alias": "Processes in runnable state",
- "color": "#6ED0E0"
+ "alias": "Interrupts",
+ "color": "#D683CE"
}
],
- "span": 6,
- "stack": true,
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
"steppedLine": false,
"targets": [
{
"calculatedInterval": "2m",
"datasourceErrors": {},
"errors": {},
- "expr": "node_procs_running{alias=\"$host\"}",
+ "expr": "rate(node_intr{alias=\"$host\"}[$interval]) or irate(node_intr{alias=\"$host\"}[5m])",
"intervalFactor": 1,
- "legendFormat": "Processes in runnable state",
+ "legendFormat": "Interrupts",
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_running%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
"step": 5,
"target": ""
- },
- {
- "calculatedInterval": "2m",
- "datasourceErrors": {},
- "errors": {},
- "expr": "node_procs_blocked{alias=\"$host\"}",
- "intervalFactor": 1,
- "legendFormat": "Processes blocked waiting for I/O to complete",
- "metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_blocked%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "B",
- "step": 5,
- "target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Processes",
+ "title": "Interrupts",
"tooltip": {
- "msResolution": false,
+ "msResolution": true,
"shared": true,
"sort": 0,
"value_type": "individual"
@@ -1034,7 +882,11 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
@@ -1053,23 +905,31 @@
"show": true
}
]
- },
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "CPU Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": false,
+ "height": 291,
+ "panels": [
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgb(241, 156, 15)",
- "threshold2": null,
- "threshold2Color": "rgb(246, 17, 17)",
- "thresholdLine": true
- },
- "id": 27,
+ "grid": {},
+ "id": 31,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1091,27 +951,42 @@
"points": false,
"renderer": "flot",
"seriesOverrides": [],
- "span": 6,
+ "spaceLength": 10,
+ "span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
- "calculatedInterval": "2m",
+ "calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_context_switches{alias=\"$host\"}[$interval]) or irate(node_context_switches{alias=\"$host\"}[5m])",
+ "expr": "rate(node_vmstat_pgpgin{alias=\"$host\"}[$interval]) * 1024 or irate(node_vmstat_pgpgin{alias=\"$host\"}[5m]) * 1024",
"intervalFactor": 1,
- "legendFormat": "Context Switches",
+ "legendFormat": "Page In",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_running%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
+ "step": 1,
+ "target": ""
+ },
+ {
+ "calculatedInterval": "2s",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "rate(node_vmstat_pgpgout{alias=\"$host\"}[$interval]) * 1024 or irate(node_vmstat_pgpgout{alias=\"$host\"}[5m]) * 1024",
+ "intervalFactor": 1,
+ "legendFormat": "Page Out",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "B",
+ "step": 1,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Context Switches",
+ "title": "I/O Activity",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1121,11 +996,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "none",
+ "format": "Bps",
"label": "",
"logBase": 1,
"max": null,
@@ -1133,7 +1012,7 @@
"show": true
},
{
- "format": "none",
+ "format": "bytes",
"logBase": 1,
"max": null,
"min": 0,
@@ -1144,19 +1023,16 @@
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
- "fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgb(241, 156, 15)",
- "threshold2": null,
- "threshold2Color": "rgb(246, 17, 17)",
- "thresholdLine": true
- },
- "id": 28,
+ "fill": 6,
+ "grid": {},
+ "height": "",
+ "id": 6,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1179,33 +1055,71 @@
"renderer": "flot",
"seriesOverrides": [
{
- "alias": "Interrupts",
- "color": "#D683CE"
+ "alias": "Used",
+ "color": "#0A437C"
+ },
+ {
+ "alias": "Available",
+ "color": "#5195CE"
+ },
+ {
+ "alias": "Total",
+ "color": "#052B51",
+ "legend": false,
+ "stack": false
}
],
+ "spaceLength": 10,
"span": 6,
- "stack": false,
+ "stack": true,
"steppedLine": false,
"targets": [
{
- "calculatedInterval": "2m",
+ "calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_intr{alias=\"$host\"}[$interval]) or irate(node_intr{alias=\"$host\"}[5m])",
+ "expr": "node_memory_MemTotal{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Interrupts",
+ "legendFormat": "Total",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_running%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "C",
+ "step": 2,
+ "target": ""
+ },
+ {
+ "calculatedInterval": "2s",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "node_memory_MemTotal{alias=\"$host\"} - (node_memory_MemAvailable{alias=\"$host\"} or (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"}))",
+ "intervalFactor": 1,
+ "legendFormat": "Used",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
+ "step": 2,
+ "target": ""
+ },
+ {
+ "calculatedInterval": "2s",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "node_memory_MemAvailable{alias=\"$host\"} or (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"})",
+ "intervalFactor": 1,
+ "legendFormat": "Available",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "B",
+ "step": 2,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Interrupts",
+ "title": "Memory",
"tooltip": {
- "msResolution": true,
+ "msResolution": false,
"shared": true,
"sort": 0,
"value_type": "individual"
@@ -1213,11 +1127,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "none",
+ "format": "bytes",
"label": "",
"logBase": 1,
"max": null,
@@ -1225,7 +1143,7 @@
"show": true
},
{
- "format": "none",
+ "format": "bytes",
"logBase": 1,
"max": null,
"min": 0,
@@ -1236,19 +1154,15 @@
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "id": 21,
+ "grid": {},
+ "id": 23,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1269,7 +1183,17 @@
"pointradius": 5,
"points": false,
"renderer": "flot",
- "seriesOverrides": [],
+ "seriesOverrides": [
+ {
+ "alias": "Used",
+ "color": "#584477"
+ },
+ {
+ "alias": "Free",
+ "color": "#AEA2E0"
+ }
+ ],
+ "spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
@@ -1278,32 +1202,33 @@
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[$interval]) or irate(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[5m])",
+ "expr": "node_memory_SwapTotal{alias=\"$host\"} - node_memory_SwapFree{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Inbound: {{ device }}",
+ "legendFormat": "Used",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "B",
- "step": 5,
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "A",
+ "step": 2,
"target": ""
},
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[$interval]) or irate(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[5m])",
+ "expr": "node_memory_SwapFree{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Outbound: {{ device }}",
+ "legendFormat": "Free",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "A",
- "step": 5,
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "B",
+ "step": 2,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Network Traffic",
+ "title": "Swap",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1313,11 +1238,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "Bps",
+ "format": "bytes",
"label": "",
"logBase": 1,
"max": null,
@@ -1335,20 +1264,17 @@
},
{
"aliasColors": {},
- "bars": true,
- "datasource": "${DS_PROMETHEUS}",
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "id": 22,
+ "grid": {},
+ "height": "",
+ "id": 29,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1358,12 +1284,10 @@
"min": true,
"rightSide": false,
"show": true,
- "sort": "min",
- "sortDesc": true,
"total": false,
"values": true
},
- "lines": false,
+ "lines": true,
"linewidth": 2,
"links": [],
"nullPointMode": "null",
@@ -1372,6 +1296,7 @@
"points": false,
"renderer": "flot",
"seriesOverrides": [],
+ "spaceLength": 10,
"span": 6,
"stack": true,
"steppedLine": false,
@@ -1380,34 +1305,59 @@
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "sum(increase(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[1h]))",
- "interval": "1h",
+ "expr": "node_memory_MemTotal{alias=\"$host\"} - (node_memory_MemFree{alias=\"$host\"} + node_memory_Buffers{alias=\"$host\"} + node_memory_Cached{alias=\"$host\"})",
"intervalFactor": 1,
- "legendFormat": "Received",
+ "legendFormat": "Used",
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 3600,
+ "step": 2,
"target": ""
},
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "sum(increase(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[1h]))",
- "interval": "1h",
+ "expr": "node_memory_MemFree{alias=\"$host\"}",
"intervalFactor": 1,
- "legendFormat": "Sent",
+ "legendFormat": "Free",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "B",
- "step": 3600,
+ "step": 2,
+ "target": ""
+ },
+ {
+ "calculatedInterval": "2s",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "node_memory_Buffers{alias=\"$host\"}",
+ "intervalFactor": 1,
+ "legendFormat": "Buffers",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "D",
+ "step": 2,
+ "target": ""
+ },
+ {
+ "calculatedInterval": "2s",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "node_memory_Cached{alias=\"$host\"}",
+ "intervalFactor": 1,
+ "legendFormat": "Cached",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "E",
+ "step": 2,
"target": ""
}
],
- "timeFrom": "24h",
+ "thresholds": [],
+ "timeFrom": null,
"timeShift": null,
- "title": "Network Utilization Hourly",
+ "title": "Memory Distribution",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1417,7 +1367,11 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
@@ -1440,19 +1394,15 @@
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
- "fill": 6,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "id": 23,
+ "fill": 2,
+ "grid": {},
+ "id": 30,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1473,50 +1423,43 @@
"pointradius": 5,
"points": false,
"renderer": "flot",
- "seriesOverrides": [
- {
- "alias": "Used",
- "color": "#584477"
- },
- {
- "alias": "Free",
- "color": "#AEA2E0"
- }
- ],
+ "seriesOverrides": [],
+ "spaceLength": 10,
"span": 6,
- "stack": true,
+ "stack": false,
"steppedLine": false,
"targets": [
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "node_memory_SwapTotal{alias=\"$host\"} - node_memory_SwapFree{alias=\"$host\"}",
+ "expr": "rate(node_vmstat_pswpin{alias=\"$host\"}[$interval]) * 4096 or irate(node_vmstat_pswpin{alias=\"$host\"}[5m]) * 4096",
"intervalFactor": 1,
- "legendFormat": "Used",
+ "legendFormat": "Swap In",
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
+ "step": 2,
"target": ""
},
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "node_memory_SwapFree{alias=\"$host\"}",
+ "expr": "rate(node_vmstat_pswpout{alias=\"$host\"}[$interval]) * 4096 or irate(node_vmstat_pswpout{alias=\"$host\"}[5m]) * 4096",
"intervalFactor": 1,
- "legendFormat": "Free",
+ "legendFormat": "Swap Out",
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "B",
- "step": 5,
+ "step": 2,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Swap",
+ "title": "Swap Activity",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1526,11 +1469,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "bytes",
+ "format": "Bps",
"label": "",
"logBase": 1,
"max": null,
@@ -1545,23 +1492,31 @@
"show": true
}
]
- },
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Storage Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": false,
+ "height": 283,
+ "panels": [
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
- "fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "id": 30,
+ "fill": 6,
+ "grid": {},
+ "id": 21,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1569,7 +1524,7 @@
"hideEmpty": false,
"max": true,
"min": true,
- "rightSide": false,
+ "rightSide": true,
"show": true,
"total": false,
"values": true
@@ -1583,40 +1538,44 @@
"points": false,
"renderer": "flot",
"seriesOverrides": [],
- "span": 6,
- "stack": false,
+ "spaceLength": 10,
+ "span": 12,
+ "stack": true,
"steppedLine": false,
"targets": [
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_vmstat_pswpin{alias=\"$host\"}[$interval]) * 4096 or irate(node_vmstat_pswpin{alias=\"$host\"}[5m]) * 4096",
+ "expr": "rate(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[$interval]) or irate(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[5m])",
+ "format": "time_series",
"intervalFactor": 1,
- "legendFormat": "Swap In",
+ "legendFormat": "Inbound: {{ device }}",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "A",
- "step": 5,
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "B",
+ "step": 1,
"target": ""
},
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_vmstat_pswpout{alias=\"$host\"}[$interval]) * 4096 or irate(node_vmstat_pswpout{alias=\"$host\"}[5m]) * 4096",
+ "expr": "rate(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[$interval]) or irate(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[5m])",
+ "format": "time_series",
"intervalFactor": 1,
- "legendFormat": "Swap Out",
+ "legendFormat": "Outbound: {{ device }}",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
- "refId": "B",
- "step": 5,
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "A",
+ "step": 1,
"target": ""
}
],
+ "thresholds": [],
"timeFrom": null,
"timeShift": null,
- "title": "Swap Activity",
+ "title": "Network Traffic",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1626,7 +1585,11 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
@@ -1649,19 +1612,15 @@
{
"aliasColors": {},
"bars": false,
- "datasource": "${DS_PROMETHEUS}",
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
"decimals": 2,
"editable": true,
"error": false,
"fill": 2,
- "grid": {
- "threshold1": null,
- "threshold1Color": "rgba(216, 200, 27, 0.27)",
- "threshold2": null,
- "threshold2Color": "rgba(234, 112, 112, 0.22)",
- "thresholdLine": false
- },
- "id": 31,
+ "grid": {},
+ "id": 27,
"legend": {
"alignAsTable": true,
"avg": true,
@@ -1683,40 +1642,136 @@
"points": false,
"renderer": "flot",
"seriesOverrides": [],
+ "spaceLength": 10,
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
+ "calculatedInterval": "2m",
+ "datasourceErrors": {},
+ "errors": {},
+ "expr": "rate(node_context_switches{alias=\"$host\"}[$interval]) or irate(node_context_switches{alias=\"$host\"}[5m])",
+ "format": "time_series",
+ "intervalFactor": 1,
+ "legendFormat": "Context Switches",
+ "metric": "",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_procs_running%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%2243200s%22%2C%22end_input%22%3A%222015-9-18%2013%3A46%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "refId": "A",
+ "step": 2,
+ "target": ""
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Context Switches",
+ "tooltip": {
+ "msResolution": false,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "none",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": 0,
+ "show": true
+ },
+ {
+ "format": "none",
+ "logBase": 1,
+ "max": null,
+ "min": 0,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": true,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "decimals": 2,
+ "editable": true,
+ "error": false,
+ "fill": 6,
+ "grid": {},
+ "id": 22,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": false,
+ "hideEmpty": false,
+ "max": true,
+ "min": true,
+ "rightSide": false,
+ "show": true,
+ "sort": "min",
+ "sortDesc": true,
+ "total": false,
+ "values": true
+ },
+ "lines": false,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_vmstat_pgpgin{alias=\"$host\"}[$interval]) * 1024 or irate(node_vmstat_pgpgin{alias=\"$host\"}[5m]) * 1024",
+ "expr": "sum(increase(node_network_receive_bytes{alias=\"$host\", device!=\"lo\"}[1h]))",
+ "interval": "1h",
"intervalFactor": 1,
- "legendFormat": "Page In",
+ "legendFormat": "Received",
"metric": "",
"prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "A",
- "step": 5,
+ "step": 3600,
"target": ""
},
{
"calculatedInterval": "2s",
"datasourceErrors": {},
"errors": {},
- "expr": "rate(node_vmstat_pgpgout{alias=\"$host\"}[$interval]) * 1024 or irate(node_vmstat_pgpgout{alias=\"$host\"}[5m]) * 1024",
+ "expr": "sum(increase(node_network_transmit_bytes{alias=\"$host\", device!=\"lo\"}[1h]))",
+ "interval": "1h",
"intervalFactor": 1,
- "legendFormat": "Page Out",
+ "legendFormat": "Sent",
"metric": "",
- "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
+ "prometheusLink": "/api/datasources/proxy/1/graph#%5B%7B%22expr%22%3A%22node_memory_MemTotal%7Balias%3D%5C%22%24host%5C%22%7D%20-%20(node_memory_MemFree%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Buffers%7Balias%3D%5C%22%24host%5C%22%7D%20%2B%20node_memory_Cached%7Balias%3D%5C%22%24host%5C%22%7D)%22%2C%22range_input%22%3A%22900s%22%2C%22end_input%22%3A%222015-10-22%2015%3A25%22%2C%22step_input%22%3A%22%22%2C%22stacked%22%3Atrue%2C%22tab%22%3A0%7D%5D",
"refId": "B",
- "step": 5,
+ "step": 3600,
"target": ""
}
],
- "timeFrom": null,
+ "thresholds": [],
+ "timeFrom": "24h",
"timeShift": null,
- "title": "I/O Activity",
+ "title": "Network Utilization Hourly",
"tooltip": {
"msResolution": false,
"shared": true,
@@ -1726,11 +1781,15 @@
"transparent": false,
"type": "graph",
"xaxis": {
- "show": true
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
},
"yaxes": [
{
- "format": "Bps",
+ "format": "bytes",
"label": "",
"logBase": 1,
"max": null,
@@ -1747,44 +1806,17 @@
]
}
],
- "title": "New row"
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Network Stats",
+ "titleSize": "h5"
}
],
- "time": {
- "from": "now-1h",
- "to": "now"
- },
- "timepicker": {
- "collapse": false,
- "enable": true,
- "notice": false,
- "now": true,
- "refresh_intervals": [
- "5s",
- "10s",
- "30s",
- "1m",
- "5m",
- "15m",
- "30m",
- "1h",
- "2h",
- "1d"
- ],
- "status": "Stable",
- "time_options": [
- "5m",
- "15m",
- "1h",
- "6h",
- "12h",
- "24h",
- "2d",
- "7d",
- "30d"
- ],
- "type": "timepicker"
- },
+ "schemaVersion": 14,
+ "style": "dark",
+ "tags": [],
"templating": {
"list": [
{
@@ -1793,7 +1825,6 @@
"auto_count": 200,
"auto_min": "1s",
"current": {
- "selected": true,
"text": "5s",
"value": "5s"
},
@@ -1847,13 +1878,18 @@
}
],
"query": "1s,5s,1m,5m,1h,6h,1d",
- "refresh": 0,
+ "refresh": 2,
"type": "interval"
},
{
"allFormat": "glob",
- "current": {},
- "datasource": "${DS_PROMETHEUS}",
+ "allValue": null,
+ "current": {
+ "isNone": true,
+ "text": "None",
+ "value": ""
+ },
+ "datasource": "automated-ds",
"hide": 0,
"includeAll": false,
"label": "Host",
@@ -1865,41 +1901,51 @@
"refresh": 1,
"refresh_on_load": false,
"regex": "",
+ "sort": 0,
"tagValuesQuery": "alias",
+ "tags": [],
"tagsQuery": "up",
"type": "query",
"useTags": false
}
]
},
- "annotations": {
- "list": [
- {
- "datasource": "${DS_PROMETHEUS}",
- "enable": false,
- "expr": "ALERTS{alias=\"$host\", alertstate=\"firing\"}",
- "iconColor": "rgb(252, 5, 0)",
- "name": "Alert",
- "tagKeys": "severity",
- "textFormat": "{{ alias }} : {{alertstate}}",
- "titleFormat": "{{ alertname }}"
- },
- {
- "datasource": "${DS_PROMETHEUS}",
- "enable": true,
- "expr": "ALERTS{alias=\"$host\",alertstate=\"pending\"}",
- "iconColor": "rgb(228, 242, 9)",
- "name": "Warning",
- "tagKeys": "severity",
- "textFormat": "{{ alias }} : {{ alertstate }}",
- "titleFormat": "{{ alertname }}"
- }
- ]
+ "time": {
+ "from": "now-30m",
+ "to": "now"
},
- "refresh": "30s",
- "schemaVersion": 12,
- "version": 18,
- "links": [],
- "gnetId": 159,
- "description": "Prometheus for system metrics. \r\nLoad, CPU, RAM, network, process ... "
+ "timepicker": {
+ "collapse": false,
+ "enable": true,
+ "notice": false,
+ "now": true,
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "status": "Stable",
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ],
+ "type": "timepicker"
+ },
+ "timezone": "browser",
+ "title": "Jump Server Status",
+ "version": 1
} \ No newline at end of file
diff --git a/monitor/dashboard/openstack_stats.json b/monitor/dashboard/openstack_stats.json
new file mode 100644
index 00000000..ce2c360d
--- /dev/null
+++ b/monitor/dashboard/openstack_stats.json
@@ -0,0 +1,5897 @@
+{
+ "annotations": {
+ "list": []
+ },
+ "editable": true,
+ "gnetId": null,
+ "graphTooltip": 1,
+ "hideControls": false,
+ "id": null,
+ "links": [],
+ "refresh": "1m",
+ "rows": [
+ {
+ "collapse": false,
+ "height": 236,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 2,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Keystone",
+ "name": "Drilldown dashboard",
+ "title": "Keystone",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_keystone_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Keystone",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 84,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Nova",
+ "name": "Drilldown dashboard",
+ "title": "Nova",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_nova_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Nova",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 85,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Neutron",
+ "name": "Drilldown dashboard",
+ "title": "Neutron",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_neutron_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Neutron",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 86,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Heat",
+ "name": "Drilldown dashboard",
+ "title": "Heat",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_keystone_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Heat",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 87,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Heat-cfn",
+ "name": "Drilldown dashboard",
+ "title": "Heat-cfn",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_heat_cfn_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Heat-cfn",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 88,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Ceilometer",
+ "name": "Drilldown dashboard",
+ "title": "Ceilometer",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_ceilometer_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Ceilometer",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 89,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Glance",
+ "name": "Drilldown dashboard",
+ "title": "Glance",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_glance_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Glance",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 90,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "CinderV3",
+ "name": "Drilldown dashboard",
+ "title": "CinderV3",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_cinderv3_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "CinderV3",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 91,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Aodh",
+ "name": "Drilldown dashboard",
+ "title": "Aodh",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_aodh_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Aodh",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 92,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Gnocchi",
+ "name": "Drilldown dashboard",
+ "title": "Gnocchi",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_gnocchi_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Gnocchi",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 93,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Placement",
+ "name": "Drilldown dashboard",
+ "title": "Placement",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_placement_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Placement",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgb(241, 12, 12)",
+ "rgba(240, 228, 24, 0.73)",
+ "rgba(106, 249, 0, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 94,
+ "interval": "> 60s",
+ "links": [
+ {
+ "dashboard": "Tacker",
+ "name": "Drilldown dashboard",
+ "title": "Tacker",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "condition": "",
+ "dsType": "influxdb",
+ "expr": "openstack_check_tacker_api",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "groupby_field": "",
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'keystone' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "step": 120,
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "keystone"
+ }
+ ]
+ }
+ ],
+ "thresholds": "0.1,0.9",
+ "title": "Tacker",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "UP",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ }
+ ],
+ "valueName": "current"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OpenStack API Availability",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": false,
+ "height": 250,
+ "panels": [
+ {
+ "headings": true,
+ "id": 83,
+ "limit": 10,
+ "links": [],
+ "query": "",
+ "recent": true,
+ "search": false,
+ "span": 12,
+ "starred": true,
+ "tags": [],
+ "title": "Status Quick Access",
+ "type": "dashlist"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Row",
+ "titleSize": "h6"
+ },
+ {
+ "collapse": true,
+ "height": 223,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 64,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_running_instances",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20,40",
+ "title": "Total Instances",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 67,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_running_tasks",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20,40",
+ "title": "Total Tasks",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 66,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_running_instances",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Running Instances",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 68,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_running_tasks",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Running Tasks",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 69,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_used_vcpus",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20,40",
+ "title": "Total Used vCPUs",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 77,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_free_vcpus",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20,40",
+ "title": "Total Free vCPUs",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 71,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_used_vcpus",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Used vCPUs",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 78,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_free_vcpus",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Free vCPUs",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "decmbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 73,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_free_ram_MB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20000,40000",
+ "title": "Total Free RAM",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "decmbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 79,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_used_ram_MB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "20000,40000",
+ "title": "Total Used RAM",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 80,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_free_ram_MB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Total Free RAM",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decmbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 75,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_used_ram_MB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Total Used RAM",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decmbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "decgbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 70,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_free_disk_GB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "100,500",
+ "title": "Total Free Disk",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "format": "decgbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 81,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_total_used_disk_GB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "100,500",
+ "title": "Total Used Disk",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 82,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_free_disk_GB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Total Free Disk",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decgbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 72,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_used_disk_GB",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Total Used Disk",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "decgbytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Consumed Resources",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 217,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 55,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_metering_agent_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Neutron Metering Agent Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 49,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_dhcp_agent_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Neutron DHCP Agent Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 56,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_neutron_metering_agent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Neutron Metering Agent",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 50,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_neutron_dhcp_agent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Neutron DHCP Agent",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 51,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_l3_agent_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Neutron L3 Agent Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 53,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_metadata_agent_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Neutron Metadata Agent Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 52,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_neutron_l3_agent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Neutron L3 Agent",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 54,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_neutron_metadata_agent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Neutron Metadata Agent",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 47,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_openvswitch_agent_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Neutron OVS Agent Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 48,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_neutron_neutron_openvswitch_agent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 4
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Neutron OVS Agent",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OpenStack Neutron Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 198,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 59,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_nova_scheduler_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Nova Scheduler Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 60,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_nova_conductor_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Nova Conductor Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 58,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 2,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_nova_nova_compute",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 20
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Nova Compute",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 61,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_nova_nova_scheduler",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 4
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Nova Scheduler",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 57,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_nova_compute_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Nova Compute Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 63,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_nova_consoleauth_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Nova ConsoleAuth",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 62,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_nova_nova_conductor",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Nova Conductor",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 65,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_nova_nova_consoleauth",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Nova ConsoleAuth",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OpenStack Nova Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 208,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 46,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_cinder_volume_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Cinder Volume Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 45,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "openstack_services_cinder_scheduler_up_percent",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "50,80",
+ "title": "Cinder Scheduler Up",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 42,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_cinderv3_cinder_scheduler",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Cinder Scheduler",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 43,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "openstack_services_cinderv3_cinder_volume",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{region}} : {{host}}: {{state}} ",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Cinder Volume",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OpenStack Cinder Stats",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": "250px",
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 16,
+ "interval": ">60s",
+ "links": [
+ {
+ "dashboard": "RabbitMQ",
+ "name": "Drilldown dashboard",
+ "title": "RabbitMQ",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'rabbitmq' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "rabbitmq"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "RabbitMQ",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 15,
+ "interval": ">60s",
+ "links": [
+ {
+ "dashboard": "MySQL",
+ "name": "Drilldown dashboard",
+ "title": "MySQL",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'mysql' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "mysql"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "MySQL",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 18,
+ "interval": ">60s",
+ "links": [
+ {
+ "dashUri": "db/apache",
+ "dashboard": "Apache",
+ "name": "Drilldown dashboard",
+ "title": "Apache",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'apache' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "apache"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "Apache",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 10,
+ "interval": ">60s",
+ "links": [
+ {
+ "dashUri": "db/haproxy",
+ "dashboard": "HAProxy",
+ "name": "Drilldown dashboard",
+ "title": "HAProxy",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'haproxy-openstack' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "haproxy-openstack"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "haproxy",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 17,
+ "interval": ">60s",
+ "links": [
+ {
+ "dashUri": "db/memcached",
+ "dashboard": "Memcached",
+ "name": "Drilldown dashboard",
+ "title": "Memcached",
+ "type": "dashboard"
+ }
+ ],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'memcached' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "environment_label",
+ "operator": "=",
+ "value": "$environment"
+ },
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "memcached"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "memcached",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": true,
+ "colorValue": false,
+ "colors": [
+ "rgba(71, 212, 59, 0.4)",
+ "rgba(245, 150, 40, 0.73)",
+ "rgba(225, 40, 40, 0.59)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "short",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 29,
+ "interval": ">60s",
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "column": "value",
+ "dsType": "influxdb",
+ "expr": "",
+ "fill": "",
+ "format": "time_series",
+ "function": "last",
+ "groupBy": [
+ {
+ "params": [
+ "$interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "groupByTags": [],
+ "interval": "",
+ "intervalFactor": 2,
+ "measurement": "cluster_status",
+ "policy": "default",
+ "query": "SELECT last(\"value\") FROM \"cluster_status\" WHERE \"cluster_name\" = 'memcached' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "value"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "last"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "cluster_name",
+ "operator": "=",
+ "value": "pacemaker"
+ }
+ ]
+ }
+ ],
+ "thresholds": "1,3",
+ "title": "pacemaker",
+ "type": "singlestat",
+ "valueFontSize": "50%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "no data",
+ "value": "null"
+ },
+ {
+ "op": "=",
+ "text": "OKAY",
+ "value": "0"
+ },
+ {
+ "op": "=",
+ "text": "WARN",
+ "value": "1"
+ },
+ {
+ "op": "=",
+ "text": "UNKW",
+ "value": "2"
+ },
+ {
+ "op": "=",
+ "text": "CRIT",
+ "value": "3"
+ },
+ {
+ "op": "=",
+ "text": "DOWN",
+ "value": "4"
+ }
+ ],
+ "valueName": "current"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Middleware Stats",
+ "titleSize": "h5"
+ }
+ ],
+ "schemaVersion": 14,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "enable": true,
+ "list": [
+ {
+ "allFormat": "regex values",
+ "allValue": null,
+ "current": {
+ "isNone": true,
+ "text": "None",
+ "value": ""
+ },
+ "datasource": null,
+ "hide": 0,
+ "includeAll": false,
+ "label": null,
+ "multi": false,
+ "name": "environment",
+ "options": [],
+ "query": "show tag values from cpu_idle with key = environment_label",
+ "refresh": 1,
+ "refresh_on_load": true,
+ "regex": "",
+ "sort": 0,
+ "tagValuesQuery": "",
+ "tags": [],
+ "tagsQuery": "",
+ "type": "query",
+ "useTags": false
+ }
+ ]
+ },
+ "time": {
+ "from": "now-30m",
+ "to": "now"
+ },
+ "timepicker": {
+ "collapse": false,
+ "enable": true,
+ "notice": false,
+ "now": true,
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "status": "Stable",
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ],
+ "type": "timepicker"
+ },
+ "timezone": "browser",
+ "title": "OpenStack Stats",
+ "version": 4
+} \ No newline at end of file
diff --git a/monitor/dashboard/stats_overview.json b/monitor/dashboard/stats_overview.json
new file mode 100644
index 00000000..440bb5a2
--- /dev/null
+++ b/monitor/dashboard/stats_overview.json
@@ -0,0 +1,2257 @@
+{
+ "annotations": {
+ "list": []
+ },
+ "description": "A monitoring dashboard for OPNFV long duration test",
+ "editable": true,
+ "gnetId": 893,
+ "graphTooltip": 1,
+ "hideControls": false,
+ "id": null,
+ "links": [],
+ "refresh": false,
+ "rows": [
+ {
+ "collapse": false,
+ "height": -295,
+ "panels": [
+ {
+ "content": "<img src=\"https://wiki.opnfv.org/download/attachments/13212037/soak_monitoring.png\" alt=\"Monitoring Soak Test logo\" style=\"height: 66px;\">\n\n<p style=\"margin-top: 10px;\">\nYou're using the monitoring suite developed by OPNFV Bottlenecks team for OPNFV long duration test.\nThe monitoring suite consists of a monitoring dashboard - \n<a href=\"http://www.grafana.org/\">Grafana</a> ,\na monitoring data source -\n<a href=\"http://prometheus.io/\">Prometheus</a> and\nseveral monitoring tools -\n<a href=\"https://wiki.opnfv.org/display/fastpath/Barometer+Home/\">Barometer</a>,\n<a href=\"https://github.com/google/cadvisor/\">Cadvisor</a> and\n<a href=\"https://github.com/prometheus/node_exporter/\">Node</a>.\nThe monitoring suite is evolving along with OPNFV releases and enriched features will be included based on practical needs.\n</p>",
+ "editable": true,
+ "error": false,
+ "height": "100",
+ "id": 91,
+ "links": [],
+ "mode": "html",
+ "span": 7,
+ "style": {},
+ "title": "",
+ "transparent": true,
+ "type": "text"
+ },
+ {
+ "content": "### OPNFV Long Duration Test\nThis is a collaborative initiative launched by OPNFV test working group (Testperf) for long duration stability test (soak test) in NFV realm.\nSeveral testing projects in OPNFV has been involved, i.e.,\n[Bottlenecks - system limit testing](https://wiki.opnfv.org/display/bottlenecks),\n[Functest - functional testing](https://wiki.opnfv.org/display/functest),\n[NFVbench -NFVI benchmark testing](https://wiki.opnfv.org/display/bottlenecks),\n[Storperf - storage testing](https://wiki.opnfv.org/display/bottlenecks),\n[VSperf - data path testing](https://wiki.opnfv.org/display/bottlenecks) and\n[Yardstick - performance testing](https://wiki.opnfv.org/display/bottlenecks).\nFor more detail, please refer to the [OPNFV LDT WIKI](https://wiki.opnfv.org/display/testing/Long+Duration+Testing).",
+ "editable": true,
+ "error": false,
+ "id": 92,
+ "links": [],
+ "mode": "markdown",
+ "span": 5,
+ "style": {},
+ "title": "",
+ "transparent": true,
+ "type": "text"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": false,
+ "title": "Dashboard Information",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": false,
+ "height": 177,
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "decimals": 0,
+ "editable": true,
+ "error": false,
+ "format": "s",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "height": "",
+ "id": 24,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "30%",
+ "prefix": "",
+ "prefixFontSize": "20%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "time() - node_boot_time",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "",
+ "title": "Uptime",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "format": "none",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 31,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 1,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "count(rate(container_last_seen{name=~\".+\"}[$interval]))",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "",
+ "title": "Containers",
+ "type": "singlestat",
+ "valueFontSize": "120%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "decimals": 1,
+ "editable": true,
+ "error": false,
+ "format": "percentunit",
+ "gauge": {
+ "maxValue": 1,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 26,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "min((node_filesystem_size{fstype=~\"xfs|ext4\"} - node_filesystem_free{fstype=~\"xfs|ext4\"} )/ node_filesystem_size{fstype=~\"xfs|ext4\"})",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "0.75, 0.90",
+ "title": "Disk space",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "automated-ds",
+ "decimals": 0,
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "id": 25,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "span": 2,
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "expr": "((node_memory_MemTotal - node_memory_MemAvailable) / node_memory_MemTotal) * 100",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 40
+ }
+ ],
+ "thresholds": "70, 90",
+ "title": "Memory",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {
+ "{id=\"/\",instance=\"cadvisor:8080\",job=\"prometheus\"}": "#BA43A9"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 5,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 3,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(container_cpu_system_seconds_total[1m]))",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "a",
+ "refId": "B",
+ "step": 120
+ },
+ {
+ "expr": "sum(rate(container_cpu_system_seconds_total{name=~\".+\"}[1m]))",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "nur container",
+ "refId": "F",
+ "step": 4
+ },
+ {
+ "expr": "sum(rate(container_cpu_system_seconds_total{id=\"/\"}[1m]))",
+ "format": "time_series",
+ "hide": true,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "nur docker host",
+ "metric": "",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "sum(rate(process_cpu_seconds_total[$interval])) * 100",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "metric": "",
+ "refId": "C",
+ "step": 10
+ },
+ {
+ "expr": "sum(rate(container_cpu_system_seconds_total{name=~\".+\"}[1m])) + sum(rate(container_cpu_system_seconds_total{id=\"/\"}[1m])) + sum(rate(process_cpu_seconds_total[1m]))",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "D",
+ "step": 4
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU Usage",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percent",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "aliasColors": {
+ "Available Memory": "#7EB26D",
+ "Unavailable Memory": "#7EB26D"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 38,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 2,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "container_memory_rss{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "D",
+ "step": 20
+ },
+ {
+ "expr": "sum(container_memory_rss{name=~\".+\"})",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "A",
+ "step": 20
+ },
+ {
+ "expr": "container_memory_usage_bytes{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "B",
+ "step": 20
+ },
+ {
+ "expr": "container_memory_rss{id=\"/\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "C",
+ "step": 20
+ },
+ {
+ "expr": "sum(container_memory_rss)",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "E",
+ "step": 20
+ },
+ {
+ "expr": "node_memory_Buffers",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "node_memory_Dirty",
+ "refId": "N",
+ "step": 30
+ },
+ {
+ "expr": "node_memory_MemFree",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Free Memory",
+ "refId": "F",
+ "step": 20
+ },
+ {
+ "expr": "node_memory_MemAvailable",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Available Memory",
+ "refId": "H",
+ "step": 20
+ },
+ {
+ "expr": "node_memory_MemTotal - node_memory_MemAvailable",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Unavailable Memory",
+ "refId": "G",
+ "step": 20
+ },
+ {
+ "expr": "node_memory_Inactive",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "I",
+ "step": 2
+ },
+ {
+ "expr": "node_memory_KernelStack",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "J",
+ "step": 30
+ },
+ {
+ "expr": "node_memory_Active",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "K",
+ "step": 30
+ },
+ {
+ "expr": "node_memory_MemTotal - (node_memory_Active + node_memory_MemFree + node_memory_Inactive)",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "Unknown",
+ "refId": "L",
+ "step": 40
+ },
+ {
+ "expr": "node_memory_MemFree + node_memory_Inactive ",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "M",
+ "step": 30
+ },
+ {
+ "expr": "container_memory_rss{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{__name__}}",
+ "refId": "O",
+ "step": 30
+ },
+ {
+ "expr": "node_memory_Inactive + node_memory_MemFree + node_memory_MemAvailable",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "P",
+ "step": 40
+ }
+ ],
+ "thresholds": [
+ {
+ "colorMode": "critical",
+ "fill": true,
+ "line": true,
+ "op": "gt",
+ "value": 10000000000
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Available Memory",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": 0,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "headings": true,
+ "id": 94,
+ "limit": 10,
+ "links": [],
+ "query": "",
+ "recent": true,
+ "search": false,
+ "span": 12,
+ "starred": true,
+ "tags": [],
+ "title": "Status Quick Access",
+ "type": "dashlist"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Nodes Overview - CPU, Network, Storage, Container Count",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 265,
+ "panels": [
+ {
+ "alert": {
+ "conditions": [
+ {
+ "evaluator": {
+ "params": [
+ 1.25
+ ],
+ "type": "gt"
+ },
+ "query": {
+ "params": [
+ "A",
+ "5m",
+ "now"
+ ]
+ },
+ "reducer": {
+ "params": [],
+ "type": "avg"
+ },
+ "type": "query"
+ }
+ ],
+ "executionErrorState": "alerting",
+ "frequency": "60s",
+ "handler": 1,
+ "name": "Panel Title alert",
+ "noDataState": "keep_state",
+ "notifications": [
+ {
+ "id": 1
+ }
+ ]
+ },
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "decimals": 0,
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "id": 28,
+ "legend": {
+ "alignAsTable": false,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_load1 / count by(job, instance)(count by(job, instance, cpu)(node_cpu))",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "A",
+ "step": 10
+ },
+ {
+ "expr": "count by(exported_instance, job)(collectd_load_0{exported_instance=~\"host.\"}) / (count by(job, exported_instance)(count by(exported_instance, job, cpu)(collectd_cpu{exported_instance=~\"host.\"})))",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "B",
+ "step": 10
+ }
+ ],
+ "thresholds": [
+ {
+ "colorMode": "critical",
+ "fill": true,
+ "line": true,
+ "op": "gt",
+ "value": 1.25
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU Loads on Nodes",
+ "tooltip": {
+ "msResolution": false,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percentunit",
+ "label": null,
+ "logBase": 1,
+ "max": "1",
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "aliasColors": {
+ "SENT": "#BF1B00"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 19,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 1,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(container_network_transmit_bytes_total[$interval])) by (instance) - sum(rate(container_network_receive_bytes_total[$interval])) by (instance)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "(SENT - RECEIVED) {{instance}}",
+ "refId": "A",
+ "step": 10
+ },
+ {
+ "expr": "- sum(rate(container_network_transmit_bytes_total[$interval])) by (instance)",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "SENT - {{instance}}",
+ "refId": "B",
+ "step": 10
+ },
+ {
+ "expr": "sum(rate(container_network_receive_bytes_total[$interval])) by (instance)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "RECEIVED - {{instance}}",
+ "refId": "C",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Network Loads on Nodes",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "aliasColors": {
+ "IN on /sda": "#7EB26D",
+ "OUT on /sda": "#890F02"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 3,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 4,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "-sum(rate(node_disk_bytes_read[$interval])) by (device)",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "OUT on /{{device}}",
+ "metric": "node_disk_bytes_read",
+ "refId": "A",
+ "step": 10
+ },
+ {
+ "expr": "sum(rate(node_disk_bytes_written[$interval])) by (device)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "IN on /{{device}}",
+ "metric": "",
+ "refId": "B",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Disk I/O",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Loads on Nodes - CPU, Network, Disk Loads Records",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 281,
+ "panels": [
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 8,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(container_network_receive_bytes_total{name=~\".+\"}[$interval])) by (name)",
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "- rate(container_network_transmit_bytes_total{name=~\".+\"}[$interval])",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "B",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Received Network Traffic per Container",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 9,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(container_network_transmit_bytes_total{name=~\".+\"}[$interval])) by (name)",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "rate(container_network_transmit_bytes_total{id=\"/\"}[$interval])",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "B",
+ "step": 10
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Sent Network Traffic per Container",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "Bps",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": "",
+ "logBase": 10,
+ "max": 8,
+ "min": 0,
+ "show": false
+ }
+ ]
+ },
+ {
+ "alert": {
+ "conditions": [
+ {
+ "evaluator": {
+ "params": [
+ 850000000000
+ ],
+ "type": "gt"
+ },
+ "query": {
+ "params": [
+ "A",
+ "5m",
+ "now"
+ ]
+ },
+ "reducer": {
+ "params": [],
+ "type": "avg"
+ },
+ "type": "query"
+ }
+ ],
+ "executionErrorState": "alerting",
+ "frequency": "60s",
+ "handler": 1,
+ "name": "Free/Used Disk Space alert",
+ "noDataState": "keep_state",
+ "notifications": [
+ {
+ "id": 1
+ }
+ ]
+ },
+ "aliasColors": {
+ "Belegete Festplatte": "#BF1B00",
+ "Free Disk Space": "#7EB26D",
+ "Used Disk Space": "#7EB26D",
+ "{}": "#BF1B00"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "id": 13,
+ "legend": {
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "show": false,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [
+ {
+ "alias": "Used Disk Space",
+ "yaxis": 1
+ }
+ ],
+ "spaceLength": 10,
+ "span": 3,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "node_filesystem_size{fstype=\"aufs\"} - node_filesystem_free{fstype=\"aufs\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "",
+ "refId": "A",
+ "step": 10
+ }
+ ],
+ "thresholds": [
+ {
+ "colorMode": "critical",
+ "fill": true,
+ "line": true,
+ "op": "gt",
+ "value": 850000000000
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Used Disk Space",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": false,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "max": 1000000000000,
+ "min": 0,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 5,
+ "grid": {},
+ "id": 1,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 9,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(rate(container_cpu_usage_seconds_total{name=~\".+\"}[$interval])) by (name) * 100",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "metric": "",
+ "refId": "F",
+ "step": 4
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "CPU Usage per Container",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percent",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": false
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 3,
+ "grid": {},
+ "id": 10,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(container_memory_rss{name=~\".+\"}) by (name)",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "container_memory_usage_bytes{name=~\".+\"}",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Usage per Container",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fill": 3,
+ "grid": {},
+ "id": 34,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "null as zero",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "sum(container_memory_swap{name=~\".+\"}) by (name)",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "container_memory_usage_bytes{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "B",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Memory Swap per Container",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 95,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "count by(device)(container_fs_io_current)",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "refId": "A",
+ "step": 120
+ },
+ {
+ "expr": "container_fs_read_seconds_total{name=~\".+\"}",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "Read - {{name}}",
+ "refId": "B",
+ "step": 4
+ },
+ {
+ "expr": "-container_fs_write_seconds_total{name=~\".+\"}",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "Write - {{name}}",
+ "refId": "C",
+ "step": 4
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Container IO Seconds Total",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "automated-ds",
+ "fill": 1,
+ "id": 96,
+ "legend": {
+ "alignAsTable": true,
+ "avg": false,
+ "current": false,
+ "max": false,
+ "min": false,
+ "rightSide": true,
+ "show": true,
+ "total": false,
+ "values": false
+ },
+ "lines": true,
+ "linewidth": 1,
+ "links": [],
+ "nullPointMode": "null",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "span": 6,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "expr": "container_fs_io_current{name=~\".+\"}",
+ "format": "time_series",
+ "hide": false,
+ "interval": "",
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "container_fs_read_seconds_total{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "Read - {{name}}",
+ "refId": "B",
+ "step": 240
+ },
+ {
+ "expr": "container_fs_write_seconds_total{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "Write - {{name}}",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Container IO Current",
+ "tooltip": {
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ]
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Containers on Nodes - CPU, Traffic, Memory Usage",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": null,
+ "panels": [
+ {
+ "columns": [],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "filterNull": false,
+ "fontSize": "100%",
+ "height": "400",
+ "hideTimeOverride": false,
+ "id": 93,
+ "links": [],
+ "pageSize": 100,
+ "repeat": null,
+ "scroll": true,
+ "showHeader": true,
+ "sort": {
+ "col": 0,
+ "desc": false
+ },
+ "span": 9,
+ "styles": [
+ {
+ "colorMode": null,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "decimals": 2,
+ "pattern": "/.*/",
+ "thresholds": [],
+ "type": "number",
+ "unit": "short"
+ }
+ ],
+ "targets": [
+ {
+ "expr": "cadvisor_version_info",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{instance}} - cAdvisor Version: {{cadvisorVersion}} - Docker Version: {{dockerVersion}} - OS Version: {{osVersion}} - Host Kernel Version: {{kernelVersion}}",
+ "refId": "A",
+ "step": 4
+ },
+ {
+ "expr": "prometheus_build_info",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{instance}} - Prometheus Version: {{version}} - Go Version: {{goversion}} - Prometheus Branch: {{branch}}",
+ "refId": "B",
+ "step": 4
+ },
+ {
+ "expr": "node_exporter_build_info",
+ "format": "time_series",
+ "intervalFactor": 2,
+ "legendFormat": "{{instance}} - Node-Exporter Version: {{version}} - Go Version: {{goversion}} - Node Exporter Branch: {{branch}}",
+ "refId": "C",
+ "step": 4
+ },
+ {
+ "expr": "collectd_exporter_build_info",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{instance}} - Collectd Exporter Version: {{version}} - Go Version: {{goversion}} - Collectd Exporter Branch: {{branch}} ",
+ "refId": "G",
+ "step": 4
+ }
+ ],
+ "timeFrom": null,
+ "timeShift": null,
+ "title": "Versions",
+ "transform": "timeseries_aggregations",
+ "type": "table"
+ },
+ {
+ "columns": [
+ {
+ "text": "Avg",
+ "value": "avg"
+ }
+ ],
+ "datasource": "automated-ds",
+ "editable": true,
+ "error": false,
+ "fontSize": "100%",
+ "height": "400",
+ "id": 36,
+ "links": [],
+ "pageSize": null,
+ "scroll": true,
+ "showHeader": true,
+ "sort": {
+ "col": 0,
+ "desc": true
+ },
+ "span": 3,
+ "styles": [
+ {
+ "colorMode": null,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "decimals": 2,
+ "pattern": "/.*/",
+ "thresholds": [
+ "10000000",
+ " 25000000"
+ ],
+ "type": "number",
+ "unit": "decbytes"
+ }
+ ],
+ "targets": [
+ {
+ "expr": "sum(container_spec_memory_limit_bytes{name=~\".+\"} - container_memory_usage_bytes{name=~\".+\"}) by (name) ",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "metric": "",
+ "refId": "A",
+ "step": 240
+ },
+ {
+ "expr": "sum(container_spec_memory_limit_bytes{name=~\".+\"}) by (name) ",
+ "format": "time_series",
+ "hide": false,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "B",
+ "step": 10
+ },
+ {
+ "expr": "container_memory_usage_bytes{name=~\".+\"}",
+ "format": "time_series",
+ "hide": true,
+ "intervalFactor": 2,
+ "legendFormat": "{{name}}",
+ "refId": "C",
+ "step": 240
+ }
+ ],
+ "title": "Limit memory",
+ "transform": "timeseries_aggregations",
+ "type": "table"
+ }
+ ],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Versions - Host OS, Docker, APP, Build Information",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 250,
+ "panels": [],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "OVS Bridges on Nodes - TODO",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 250,
+ "panels": [],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "VMs on Nodes - TODO",
+ "titleSize": "h5"
+ },
+ {
+ "collapse": true,
+ "height": 250,
+ "panels": [],
+ "repeat": null,
+ "repeatIteration": null,
+ "repeatRowId": null,
+ "showTitle": true,
+ "title": "Traffic Generators Status - TODO",
+ "titleSize": "h5"
+ }
+ ],
+ "schemaVersion": 14,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "allValue": ".+",
+ "current": {
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": "automated-ds",
+ "hide": 0,
+ "includeAll": true,
+ "label": "Container Group",
+ "multi": true,
+ "name": "containergroup",
+ "options": [],
+ "query": "label_values(container_group)",
+ "refresh": 1,
+ "regex": "",
+ "sort": 0,
+ "tagValuesQuery": null,
+ "tags": [],
+ "tagsQuery": null,
+ "type": "query",
+ "useTags": false
+ },
+ {
+ "auto": true,
+ "auto_count": 50,
+ "auto_min": "50s",
+ "current": {
+ "text": "auto",
+ "value": "$__auto_interval"
+ },
+ "datasource": null,
+ "hide": 0,
+ "includeAll": false,
+ "label": "Interval",
+ "multi": false,
+ "name": "interval",
+ "options": [
+ {
+ "selected": true,
+ "text": "auto",
+ "value": "$__auto_interval"
+ },
+ {
+ "selected": false,
+ "text": "30s",
+ "value": "30s"
+ },
+ {
+ "selected": false,
+ "text": "1m",
+ "value": "1m"
+ },
+ {
+ "selected": false,
+ "text": "2m",
+ "value": "2m"
+ },
+ {
+ "selected": false,
+ "text": "3m",
+ "value": "3m"
+ },
+ {
+ "selected": false,
+ "text": "5m",
+ "value": "5m"
+ },
+ {
+ "selected": false,
+ "text": "7m",
+ "value": "7m"
+ },
+ {
+ "selected": false,
+ "text": "10m",
+ "value": "10m"
+ },
+ {
+ "selected": false,
+ "text": "30m",
+ "value": "30m"
+ },
+ {
+ "selected": false,
+ "text": "1h",
+ "value": "1h"
+ },
+ {
+ "selected": false,
+ "text": "6h",
+ "value": "6h"
+ },
+ {
+ "selected": false,
+ "text": "12h",
+ "value": "12h"
+ },
+ {
+ "selected": false,
+ "text": "1d",
+ "value": "1d"
+ },
+ {
+ "selected": false,
+ "text": "7d",
+ "value": "7d"
+ },
+ {
+ "selected": false,
+ "text": "14d",
+ "value": "14d"
+ },
+ {
+ "selected": false,
+ "text": "30d",
+ "value": "30d"
+ }
+ ],
+ "query": "30s,1m,2m,3m,5m,7m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
+ "refresh": 2,
+ "type": "interval"
+ },
+ {
+ "allValue": null,
+ "current": {
+ "text": null,
+ "value": null
+ },
+ "datasource": "automated-ds",
+ "hide": 0,
+ "includeAll": false,
+ "label": "Node",
+ "multi": true,
+ "name": "server",
+ "options": [],
+ "query": "label_values(node_boot_time, instance)",
+ "refresh": 1,
+ "regex": "/([^:]+):.*/",
+ "sort": 0,
+ "tagValuesQuery": null,
+ "tags": [],
+ "tagsQuery": null,
+ "type": "query",
+ "useTags": false
+ }
+ ]
+ },
+ "time": {
+ "from": "now-30m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "browser",
+ "title": "Stats Overview",
+ "version": 2
+} \ No newline at end of file
diff --git a/monitor/dispatch/__init__.py b/monitor/dispatch/__init__.py
new file mode 100644
index 00000000..a90f1d17
--- /dev/null
+++ b/monitor/dispatch/__init__.py
@@ -0,0 +1,8 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
diff --git a/monitor/dispatch/client_ip_configure.py b/monitor/dispatch/client_ip_configure.py
new file mode 100644
index 00000000..2a66f7b2
--- /dev/null
+++ b/monitor/dispatch/client_ip_configure.py
@@ -0,0 +1,25 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Tech and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import fileinput
+import re
+import logging
+import socket
+
+logger = logging.getLogger(__name__)
+ip_address = socket.gethostbyname(socket.gethostname())
+
+for line in fileinput.input(inplace=1):
+ ip = " Server \"" + str(ip_address) + "\" \"25826\""
+ line = re.sub(r'.*Server.*25826.*', r'' + str(ip), line.rstrip())
+ print(line)
+
+for line in fileinput.input(inplace=1):
+ ip = " URL \"http://" + str(ip_address) + ":9103/collectd-post\""
+ line = re.sub(r'.*URL.*collectd-post.*', r'' + str(ip), line.rstrip())
+ print(line)
diff --git a/monitor/dispatch/install_barometer_client.sh b/monitor/dispatch/install_barometer_client.sh
new file mode 100644
index 00000000..80667cd0
--- /dev/null
+++ b/monitor/dispatch/install_barometer_client.sh
@@ -0,0 +1,8 @@
+HOSTNAME=`hostname`
+
+docker pull opnfv/barometer
+sudo docker run --name bottlenecks-barometer-${HOSTNAME} -d --net=host \
+ -v /etc/barometer_config/barometer_client.conf:/src/barometer/src/collectd/collectd/src/collectd.conf \
+ -v /etc/barometer_config/barometer_client.conf:/opt/collectd/etc/collectd.conf \
+ -v /var/run:/var/run -v /tmp:/tmp \
+ --privileged opnfv/barometer /run_collectd.sh \ No newline at end of file
diff --git a/monitor/cadvisor_install.sh b/monitor/dispatch/install_cadvisor_client.sh
index 524e24d8..bcd0e8a1 100644
--- a/monitor/cadvisor_install.sh
+++ b/monitor/dispatch/install_cadvisor_client.sh
@@ -1,4 +1,7 @@
+HOSTNAME=`hostname`
+
sudo docker run \
+ --name=bottlenecks-cadvisor-${HOSTNAME} \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
@@ -6,5 +9,4 @@ sudo docker run \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
- --name=cadvisor \
- google/cadvisor:v0.25.0 \ -storage_driver=Prometheus
+ google/cadvisor:v0.25.0
diff --git a/monitor/dispatch/install_clients.py b/monitor/dispatch/install_clients.py
new file mode 100644
index 00000000..ab7d0f5a
--- /dev/null
+++ b/monitor/dispatch/install_clients.py
@@ -0,0 +1,118 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Tech and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''
+Currently supported installers are Apex, Compass...
+Supported monitoring tools are Cadvisor, Collectd, Barometer...
+Carefully, do not change the path or name of the configuration files which
+are hard coded for docker volume mapping.
+'''
+import os
+import logging
+import yaml
+import utils.infra_setup.passwordless_SSH.ssh as ssh
+import argparse
+
+logger = logging.getLogger(__name__)
+
+parser = argparse.ArgumentParser(description='Monitoring Clients Dispatcher')
+parser.add_argument("-i", "--INSTALLER_TYPE",
+ help="The installer for the system under monitoring")
+# Barometer config and installation files
+# /home/opnfv/bottlenecks/monitor/dispatch/install_barometer_client.sh
+# /home/opnfv/bottlenecks/monitor/config/barometer_client.conf
+# Cadvisor installation file
+# /home/opnfv/bottlenecks/monitor/dispatch/install_cadvisor_client.sh
+# Collectd config and installation files
+# /home/opnfv/bottlenecks/monitor/dispatch/install_collectd_client.sh
+# /home/opnfv/bottlenecks/monitor/config/collectd_client.conf
+parser.add_argument("-s", "--INSTALlATION_SCRIPT",
+ help="The path of the script to install monitoring script")
+parser.add_argument("-c", "--CLIENT_CONFIG", default="",
+ help="The path of the config of monitoring client")
+parser.add_argument("-p", "--POD_DISCRIPTOR", default="/tmp/pod.yaml",
+ help="The path of pod discrition file")
+args = parser.parse_args()
+
+INSTALLERS = ['apex', 'compass']
+if args.INSTALLER_TYPE not in INSTALLERS:
+ raise Exception("The installer is not supported.")
+if not args.INSTALlATION_SCRIPT:
+ raise Exception("Must specify the client installation script path!")
+
+if "barometer" in args.INSTALlATION_SCRIPT.lower():
+ CONFIG_FILE = "/etc/barometer_config/barometer_client.conf"
+ CONFIG_DIR = "barometer_config"
+ INSTALlATION_SCRIPT = "/etc/barometer_config/install.sh"
+elif "collectd" in args.INSTALlATION_SCRIPT.lower():
+ CONFIG_FILE = "/etc/collectd_config/collectd_client.conf"
+ CONFIG_DIR = "collectd_config"
+ INSTALlATION_SCRIPT = "/etc/collectd_config/install.sh"
+elif "cadvisor" in args.INSTALlATION_SCRIPT.lower():
+ CONFIG_DIR = "cadvisor_config"
+ INSTALlATION_SCRIPT = "/etc/cadvisor_config/install.sh"
+else:
+ raise Exception("The monitor client is not supported")
+
+
+def main():
+ with open(args.POD_DISCRIPTOR) as f:
+ dataMap = yaml.safe_load(f)
+ for x in dataMap:
+ for y in dataMap[x]:
+ if (y['role'].lower() == 'controller') or (
+ y['role'].lower() == 'compute'):
+ ip = str(y['ip'])
+ user = str(y['user'])
+ pwd = str(y['password'])
+ idkey = str(y['key_filename'])
+
+ if pwd:
+ ssh_d = ssh.SSH(user, host=ip, password=pwd)
+ elif idkey:
+ idkey = "/tmp/id_rsa"
+ ssh_d = ssh.SSH(user, host=ip, key_filename=idkey)
+ status, stdout, stderr = ssh_d.execute(
+ "cd /etc && mkdir " + CONFIG_DIR
+ )
+ if status:
+ print Exception(
+ "Command: \"mkdir {}\".format(CONFIG_DIR) failed.")
+ logger.info(stdout.splitlines())
+ if args.CLIENT_CONFIG:
+ with open(args.CLIENT_CONFIG) as stdin_file:
+ ssh_d.run("cat > " + CONFIG_FILE,
+ stdin=stdin_file)
+ with open(args.INSTALlATION_SCRIPT) as stdin_file:
+ ssh_d.run("cat > " + INSTALlATION_SCRIPT,
+ stdin=stdin_file)
+
+ for u in os.uname():
+ if 'ubuntu' in u.lower():
+ NODE_OS = 'ubuntu'
+ break
+ if NODE_OS == 'ubuntu':
+ status, stdout, stderr = ssh_d.execute(
+ "sudo apt-get install -y docker.io"
+ )
+ else:
+ status, stdout, stderr = ssh_d.execute(
+ "sudo yum install -y docker-io"
+ )
+ if status:
+ raise Exception(
+ "Command for installing docker failed.")
+ logger.info(stdout.splitlines())
+
+ ssh_d.run(
+ "cd /etc/{}/ && bash ./install.sh".format(CONFIG_DIR)
+ )
+
+
+if __name__ == '__main__':
+ main()
diff --git a/monitor/dispatch/install_collectd_client.sh b/monitor/dispatch/install_collectd_client.sh
new file mode 100644
index 00000000..4f081124
--- /dev/null
+++ b/monitor/dispatch/install_collectd_client.sh
@@ -0,0 +1,8 @@
+MONITOR_CONFIG="/etc/collectd_config"
+HOSTNAME=`hostname`
+
+sudo docker run --name bottlenecks-collectd-${HOSTNAME} -d \
+ --privileged \
+ -v ${MONITOR_CONFIG}/collectd_client.conf:/etc/collectd/collectd.conf:ro \
+ -v /proc:/mnt/proc:ro \
+ fr3nd/collectd:5.5.0-1
diff --git a/monitor/dispatch/server_ip_configure.py b/monitor/dispatch/server_ip_configure.py
new file mode 100644
index 00000000..62aa6288
--- /dev/null
+++ b/monitor/dispatch/server_ip_configure.py
@@ -0,0 +1,25 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Tech and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import fileinput
+import re
+import logging
+import socket
+
+logger = logging.getLogger(__name__)
+ip_address = socket.gethostbyname(socket.gethostname())
+
+for line in fileinput.input(inplace=1):
+ ip = " Listen \"" + str(ip_address) + "\" \"25826\""
+ line = re.sub(r'.*Listen.*25826.*', r'' + str(ip), line.rstrip())
+ print(line)
+
+for line in fileinput.input(inplace=1):
+ ip = " URL \"http://" + str(ip_address) + ":9103/collectd-post\""
+ line = re.sub(r'.*URL.*collectd-post.*', r'' + str(ip), line.rstrip())
+ print(line)
diff --git a/monitor/install-collectd-client.sh b/monitor/install-collectd-client.sh
deleted file mode 100644
index 00fa4c88..00000000
--- a/monitor/install-collectd-client.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-MONITOR_CONFIG="/etc/collectd-config"
-
-# Collectd
-sudo docker run --name bottlenecks-automated-collectd -d \
- --privileged \
- -v ${MONITOR_CONFIG}:/etc/collectd:ro \
- -v /proc:/mnt/proc:ro \
- fr3nd/collectd:5.5.0-1
diff --git a/monitor/monitoring.sh b/monitor/monitoring.sh
index 16cb3086..89750614 100644
--- a/monitor/monitoring.sh
+++ b/monitor/monitoring.sh
@@ -7,11 +7,98 @@
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
-
MONITOR_CONFIG="/home/opnfv/bottlenecks/monitor/config"
-GRAFANA="/home/opnfv/bottlenecks/monitor/grafana"
+DISPATCH="/home/opnfv/bottlenecks/monitor/dispatch"
+OPENSTACK_ENV=${MONITOR_CONFIG}/openstack_exporter.conf
+
+usage="Script to run the tests in Bottlenecks.
+
+usage:
+ bash $(basename "$0") [-h|--help] [-i|--installer <installer typer>] [-o|--openstack-env <openstack env>]
+
+where:
+ -h|--help show the help text
+ -i|--installer specify the installer for the system to be monitored
+ <installer type>
+ one of the following:
+ (apex, compass)
+ -o|--opentack-env specify the openstack env file for openstack monitoring
+ defalt value is \"${MONITOR_CONFIG}/openstack_exporter.conf\"
+
+examples:
+ $(basename "$0") -i compass"
+
+
+info () {
+ logger -s -t "BOTTLENECKS INFO" "$*"
+}
+
+error () {
+ logger -s -t "BOTTLENECKS ERROR" "$*"
+ exit 1
+}
+
+# Process input variables
+while [[ $# > 0 ]]
+ do
+ key="$1"
+ case $key in
+ -h|--help)
+ echo "$usage"
+ exit 0
+ shift
+ ;;
+ -i|--installer)
+ INSTALLER_TYPE="$2"
+ shift
+ ;;
+ -i|--openstack-env)
+ OPENSTACK_ENV="$2"
+ shift
+ ;;
+ *)
+ error "unkown input options $1 $2"
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+
+barometer_client_install_sh="/home/opnfv/bottlenecks/monitor/dispatch/install_barometer_client.sh"
+barometer_client_install_conf="/home/opnfv/bottlenecks/monitor/config/barometer_client.conf"
+
+cadvisor_client_install_sh="/home/opnfv/bottlenecks/monitor/dispatch/install_cadvisor_client.sh"
+
+collectd_client_install_sh="/home/opnfv/bottlenecks/monitor/dispatch/install_collectd_client.sh"
+collectd_client_install_conf="/home/opnfv/bottlenecks/monitor/config/collectd_client.conf"
+
+# INSTALL GRAFANA + PROMETHEUS + CADVISOR + BAROMETER on the JUMPERSERVER
+# # Node-Exporter
+echo == installation of monitoring module is started ==
+
+# # Collectd
+# # Configure IP Address in collectd server configuration
+# python ${DISPATCH}/server_ip_configure.py ${MONITOR_CONFIG}/collectd_server.conf
+# sudo docker run --name bottlenecks-collectd -d \
+# --privileged \
+# -v ${MONITOR_CONFIG}/collectd_server.conf:/etc/collectd/collectd.conf:ro \
+# -v /proc:/mnt/proc:ro \
+# fr3nd/collectd:5.5.0-1
+
+set +e
+# Prometheus
+sudo docker run --name bottlenecks-prometheus \
+ -d -p 9090:9090 \
+ -v ${MONITOR_CONFIG}/prometheus.yaml:/etc/prometheus/prometheus.yml \
+ prom/prometheus:v1.7.1
+
+# Collectd-Exporter
+sudo docker run --name bottlenecks-collectd-exporter \
+ -d -p 9103:9103 -p 25826:25826/udp \
+ prom/collectd-exporter:0.3.1 \
+ -collectd.listen-address=":25826"
-# Node-Exporter
sudo docker run --name bottlenecks-node-exporter \
-d -p 9100:9100 \
-v "/proc:/host/proc:ro" \
@@ -23,31 +110,24 @@ sudo docker run --name bottlenecks-node-exporter \
-collector.sysfs /host/sys \
-collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
-# Collectd
-sudo docker run --name bottlenecks-collectd -d \
- --privileged \
- -v ${MONITOR_CONFIG}:/etc/collectd:ro \
- -v /proc:/mnt/proc:ro \
- fr3nd/collectd:5.5.0-1
-
-# Collectd-Exporter
-sudo docker run --name bottlenecks-collectd-exporter \
- -d -p 9103:9103 \
- -p 25826:25826/udp prom/collectd-exporter:0.3.1 \
- -collectd.listen-address=":25826"
-
-# Prometheus
-sudo docker run --name bottlenecks-prometheus \
- -d -p 9090:9090 \
- -v ${MONITOR_CONFIG}/prometheus.yaml:/etc/prometheus/prometheus.yml \
- prom/prometheus:v1.7.1
+# Openstack-Exporter
+sudo docker run --name bottlenecks-openstack-exporter \
+ -v /tmp:/tmp \
+ -p 9104:9104 --env-file ${OPENSTACK_ENV} \
+ -d gabrielyuyang/att-prometheus-openstack-exporter:latest
# Grafana
sudo docker run --name bottlenecks-grafana \
-d -p 3000:3000 \
- -v ${GRAFANA}/config/grafana.ini:/etc/grafana/grafana.ini \
+ -v ${MONITOR_CONFIG}/grafana.ini:/etc/grafana/grafana.ini \
grafana/grafana:4.5.0
+# Automate Prometheus Datasource and Grafana Dashboard creation
+set -e
+sleep 5
+python ${DISPATCH}/../dashboard/automated_dashboard_datasource.py
+
+set +e
# Cadvisor
sudo docker run \
--volume=/:/rootfs:ro \
@@ -57,14 +137,43 @@ sudo docker run \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
- --name=cadvisor \
- google/cadvisor:v0.25.0 \ -storage_driver=Prometheus
+ --name=bottlenecks-cadvisor \
+ google/cadvisor:v0.25.0
+
-# Automate Collectd Client
-python automate_collectd_client.py
+set -e
+# Barometer
+# Configure IP Address in barometer server configuration
+sleep 5
+python ${DISPATCH}/server_ip_configure.py ${MONITOR_CONFIG}/barometer_server.conf
+
+set +e
+# Install on jumpserver
+docker pull opnfv/barometer
+sudo docker run --name bottlenecks-barometer -d --net=host \
+ -v ${MONITOR_CONFIG}/barometer_server.conf:/src/barometer/src/collectd/collectd/src/collectd.conf \
+ -v ${MONITOR_CONFIG}/barometer_server.conf:/opt/collectd/etc/collectd.conf \
+ -v /var/run:/var/run \
+ -v /tmp:/tmp \
+ --privileged opnfv/barometer /run_collectd.sh
+
+set -e
+# INSTALL BAROMETER + CADVISOR (+ COLLECTD) CLIENTS on COMPUTE/CONTROL NODES
+# Configure IP Address in barometer client configuration
+python ${DISPATCH}/client_ip_configure.py ${MONITOR_CONFIG}/barometer_client.conf
+
+# Automate Barometer client installation
+python ${DISPATCH}/install_clients.py \
+ -i ${INSTALLER_TYPE} -s ${barometer_client_install_sh} \
+ -c ${barometer_client_install_conf}
+
+# # Configure IP Address in collectd client configuration
+# python ${DISPATCH}/client_ip_configure.py ${MONITOR_CONFIG}/collectd_client.conf
+# # Automate Collectd Client installation
+# python ${DISPATCH}/automate_collectd_client.py
# Automate Cadvisor Client
-python automate_cadvisor_client.py
+python ${DISPATCH}/install_clients.py \
+ -i ${INSTALLER_TYPE} -s ${cadvisor_client_install_sh}
-# Automate Prometheus Datasource and Grafana Dashboard creation
-python automated-dashboard-datasource.py
+echo == installation of monitoring module is finished ==
diff --git a/monitor/uninstall.py b/monitor/uninstall.py
new file mode 100644
index 00000000..3a9cf0c7
--- /dev/null
+++ b/monitor/uninstall.py
@@ -0,0 +1,52 @@
+##############################################################################
+# Copyright (c) 2018 Huawei Tech and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import logging
+import yaml
+import os
+import utils.infra_setup.passwordless_SSH.ssh as ssh
+
+LOG = logging.getLogger(__name__)
+DEL_DOCKER_SCRIPT = "/home/opnfv/bottlenecks/docker/docker_cleanup.sh"
+
+
+def ssh_del_docker(docker_name):
+ with open('/tmp/pod.yaml') as f:
+ dataMap = yaml.safe_load(f)
+ for x in dataMap:
+ for y in dataMap[x]:
+ if (y['role'] == 'Controller') or (y['role'] == 'Compute'):
+ ip = str(y['ip'])
+ user = str(y['user'])
+ pwd = str(y['password'])
+ ssh_d = ssh.SSH(user, host=ip, password=pwd)
+
+ status, stdout, stderr = ssh_d.execute(
+ "cd /etc"
+ )
+ with open(DEL_DOCKER_SCRIPT) as stdin_file:
+ ssh_d.run("cat > /etc/docker_cleanup.sh",
+ stdin=stdin_file)
+
+ ssh_d.run("cd /etc/ && bash ./docker_cleanup.sh -d " +
+ docker_name)
+
+
+def local_del_docker(docker_name):
+ os.system('bash ' + DEL_DOCKER_SCRIPT + ' -d ' + docker_name)
+
+
+ssh_del_docker('cadvisor')
+ssh_del_docker('barometer')
+
+local_del_docker('prometheus')
+local_del_docker('cadvisor')
+local_del_docker('barometer')
+local_del_docker('grafana')
+local_del_docker('collectd')
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index 113be337..dacffcea 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -8,75 +8,13 @@
##############################################################################
appdirs==1.4.0
-Babel==2.2.0
-backport-ipaddress==0.1
-cliff==2.0.0
-cmd2==0.6.8
-coverage==4.1b2
-debtcollector==1.3.0
-ecdsa==0.13
-extras==0.0.3
-fixtures==1.4.0
+pyopenssl==17.5.0
+python-openstackclient==3.11.0
+python-heatclient==1.11.0
+python-neutronclient==6.1.1
flake8==2.5.4
-funcsigs==0.4
-functools32==3.2.3.post2
-futures==3.0.5
-iso8601==0.1.11
Jinja2==2.8
-jsonpatch==1.13
-jsonpointer==1.10
-jsonschema==2.5.1
-keystoneauth1==2.3.0
-linecache2==1.0.0
-lxml==3.5.0
-MarkupSafe==0.23
-mccabe==0.4.0
-mock==1.3.0
-monotonic==1.0
-msgpack-python==0.4.7
-netaddr==0.7.18
-netifaces==0.10.4
nose==1.3.7
-openstacksdk==0.8.1
-os-client-config==1.16.0
-oslo.config==3.9.0
-oslo.i18n==3.4.0
-oslo.serialization==2.4.0
-oslo.utils==3.7.0
-paramiko==1.16.0
-pbr==1.8.1
-pep8==1.7.0
-positional==1.0.1
-prettytable==0.7.2
-pycrypto==2.6.1
-pyflakes==1.0.0
-pyparsing==2.1.0
-pyrsistent==0.11.12
-python-cinderclient==1.6.0
-python-glanceclient==2.0.0
-python-heatclient==1.0.0
-python-keystoneclient==2.3.1
-python-mimeparse==1.5.1
-python-neutronclient==4.1.1
-python-novaclient==3.3.0
-python-openstackclient==2.2.0
-python-subunit==1.2.0
-python-swiftclient==3.0.0
-pytz==2015.7
-PyYAML==3.11
-requests==2.9.1
-requestsexceptions==1.1.3
-scp==0.10.2
-simplejson==3.8.2
-six==1.10.0
-stevedore==1.12.0
-testrepository==0.0.20
-testtools==2.0.0
-traceback2==1.4.0
-unicodecsv==0.14.1
-unittest2==1.1.0
-warlock==1.2.0
-wrapt==1.10.6
pyroute2==0.4.10
elasticsearch==5.0.1
docker==2.0.2
diff --git a/run_tests.sh b/run_tests.sh
index 2463edbf..3bf18c62 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -17,12 +17,12 @@ where:
-h|--help show the help text
-s|--teststory run specific test story
<test story> one of the following:
- (rubbos, vstf, posca_factor_test)
+ (posca_factor_test)
user can also define their own test story and pass as var to this file,
please refer to testsuites/posca/testsuite_story/ for details
-c|--testcase run specific test case
<test case> one of the following:
- (posca_factor_system_bandwidth, posca_factor_ping)
+ (posca_factor_ping, posca_factor_soak_throughputs, ...)
--cleanup cleanup test dockers runing when test is done (false by default)
--report push results to DB (false by default)
diff --git a/testsuites/posca/testcase_cfg/posca_factor_multistack_storage.yaml b/testsuites/posca/testcase_cfg/posca_factor_multistack_storage.yaml
new file mode 100644
index 00000000..e2f48438
--- /dev/null
+++ b/testsuites/posca/testcase_cfg/posca_factor_multistack_storage.yaml
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+load_manager:
+ scenarios:
+ tool: fio
+ test_times: 10
+ #this "rw" value could be write read rw rr or randrw
+ rw: 'randrw'
+ bs: '4k'
+ size: '20g'
+ rwmixwrite: '50'
+ num_thread: 1, 2
+ num_stack: 1
+ volume_num: '1'
+ num_jobs: '1'
+ direct: '1'
+ volume_size: 50
+
+ runners:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "storage_bottlenecks"
+
+contexts:
+ dashboard: "Bottlenecks-ELK"
+ yardstick: "Bottlenecks-Yardstick"
+ yardstick_envpre: True
diff --git a/testsuites/posca/testcase_cfg/posca_factor_multistack_storage_parallel.yaml b/testsuites/posca/testcase_cfg/posca_factor_multistack_storage_parallel.yaml
new file mode 100644
index 00000000..b55b826c
--- /dev/null
+++ b/testsuites/posca/testcase_cfg/posca_factor_multistack_storage_parallel.yaml
@@ -0,0 +1,33 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+load_manager:
+ scenarios:
+ tool: fio
+ # for this option we provide " write, read, rw, rr"
+ rw: "randrw"
+ bs: "4k"
+ size: "20g"
+ rwmixwrite: "50"
+ num_stack: 1, 3
+ volume_num: "1"
+ num_jobs: "1"
+ direct: "1"
+ volume_size: 50
+
+ runners:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "storage_bottlenecks"
+
+contexts:
+ dashboard: "Bottlenecks-ELK"
+ yardstick: "Bottlenecks-Yardstick"
+ yardstick_envpre: True
diff --git a/testsuites/posca/testcase_cfg/posca_factor_ping.yaml b/testsuites/posca/testcase_cfg/posca_factor_ping.yaml
index 25654357..ea70e336 100644
--- a/testsuites/posca/testcase_cfg/posca_factor_ping.yaml
+++ b/testsuites/posca/testcase_cfg/posca_factor_ping.yaml
@@ -16,8 +16,8 @@ load_manager:
tool: ping
test_times: 100
package_size:
- num_stack: 20, 20
- threshhold: 20
+ num_stack: 5, 5
+ threshhold: 5
package_loss: 0%
runners:
diff --git a/testsuites/posca/testcase_cfg/posca_factor_soak_throughputs.yaml b/testsuites/posca/testcase_cfg/posca_factor_soak_throughputs.yaml
new file mode 100644
index 00000000..983b7d76
--- /dev/null
+++ b/testsuites/posca/testcase_cfg/posca_factor_soak_throughputs.yaml
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Sample config file for life-cycle throuphputs baseline test
+# Each vm pair will have its ttl (time to live) and creation delay
+# (lazy creation delay) specified.
+# Multiple context are used to specify the host and target VMs.
+
+load_manager:
+ scenarios:
+ tool: netperf
+ test_duration_hours: 0.1
+ vim_pair_ttl: 10
+ vim_pair_lazy_cre_delay: 120
+ package_size:
+ threshhold:
+ package_loss: 0%
+ latency: 300
+
+ runners:
+ stack_create: yardstick
+ flavor:
+ yardstick_test_dir: "samples"
+ yardstick_testcase: "netperf_soak"
+
+contexts:
+ dashboard: "Bottlenecks-ELK"
+ yardstick: "Bottlenecks-Yardstick"
+ yardstick_envpre: True
diff --git a/testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml b/testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml
index d6b325f7..bbf65ba7 100644
--- a/testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml
+++ b/testsuites/posca/testcase_cfg/posca_feature_moon_resources.yaml
@@ -11,20 +11,27 @@ load_manager:
scenarios:
tool: https request
# info that the cpus and memes have the same number of data.
+ pdp_name: pdp
+ policy_name: "MLS Policy example"
+ model_name: MLS
tenants: 1,5,10,20
+ subject_number: 10
+ object_number: 10
+ timeout: 0.2
runners:
stack_create: yardstick
Debug: False
yardstick_test_dir: "samples"
- yardstick_testcase: "bottlenecks_moon_resources"
-
- runner_exta:
- # info this section is for yardstick do some exta env prepare.
- installation_method: yardstick
- installation_type: testpmd
+ yardstick_testcase: "moon_resource"
contexts:
# info that dashboard if have data, we will create the data dashboard.
dashboard: "Bottlenecks-ELK"
- yardstick: "Bottlenecks-yardstick" \ No newline at end of file
+ yardstick: "Bottlenecks-yardstick"
+ moon_monitoring: True
+ moon_environment:
+ ip: "192.168.37.205"
+ user: "root"
+ password: "root"
+ consul_port: 30005
diff --git a/testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml b/testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml
index 3b621a99..7feb6e4e 100644
--- a/testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml
+++ b/testsuites/posca/testcase_cfg/posca_feature_moon_tenants.yaml
@@ -11,25 +11,30 @@ load_manager:
scenarios:
tool: https request
# info that the cpus and memes have the same number of data.
- resources: 20
- initial: 0
- threshhold: 5
- timeout: 30
+ pdp_name: pdp
+ policy_name: "MLS Policy example"
+ model_name: MLS
+ subject_number: 20
+ object_number: 20
+ timeout: 0.003
+ initial_tenants: 0
+ steps_tenants: 1
+ tolerate_time: 20
SLA: 5
-
runners:
stack_create: yardstick
Debug: False
yardstick_test_dir: "samples"
- yardstick_testcase: "bottlenecks_moon_tenants"
-
- runner_exta:
- # info this section is for yardstick do some exta env prepare.
- installation_method: yardstick
- installation_type: testpmd
+ yardstick_testcase: "moon_tenant"
contexts:
# info that dashboard if have data, we will create the data dashboard.
dashboard: "Bottlenecks-ELK"
- yardstick: "Bottlenecks-yardstick" \ No newline at end of file
+ yardstick: "Bottlenecks-yardstick"
+ moon_monitoring: True
+ moon_environment:
+ ip: "192.168.37.205"
+ user: "root"
+ password: "root"
+ consul_port: 30005
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon.py b/testsuites/posca/testcase_dashboard/posca_feature_moon.py
new file mode 100644
index 00000000..6819ea84
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon.py
@@ -0,0 +1,121 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import json
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+ "posca",
+ "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+ global es
+ print runner_config
+ es_ip = runner_config['dashboard_ip'].split(':')
+ es = Elasticsearch([{'host': es_ip[0]}])
+ print test_data["test_body"]
+ res = es.index(index="bottlenecks",
+ doc_type=test_data["testcase"],
+ body=test_data["test_body"][0])
+ if res['created'] == "False":
+ LOG.error("date send to kibana have errors ", test_data["data_body"])
+
+
+def posca_moon_init(runner_config):
+ global es
+ es_ip = runner_config['dashboard_ip'].split(':')
+ es = Elasticsearch([{'host': es_ip[0]}])
+ # Create bottlenecks index
+ with open(dashboard_dir + 'posca_feature_moon_index_pattern.json')\
+ as index_pattern:
+ doc = json.load(index_pattern)
+ res = es.index(
+ index=".kibana",
+ doc_type="index-pattern",
+ id="bottlenecks",
+ body=doc)
+ if res['created'] == "True":
+ LOG.info("bottlenecks index-pattern has created")
+ else:
+ LOG.info("bottlenecks index-pattern has existed")
+
+ with open(dashboard_dir + 'posca_system_bandwidth_config.json')\
+ as index_config:
+ doc = json.load(index_config)
+ res = es.index(index=".kibana", doc_type="config", id="4.6.1", body=doc)
+ if res['created'] == "True":
+ LOG.info("bottlenecks config has created")
+ else:
+ LOG.info("bottlenecks config has existed")
+
+ # Configure discover panel
+ with open(dashboard_dir + 'posca_feature_moon_discover.json')\
+ as index_discover:
+ doc = json.load(index_discover)
+ res = es.index(
+ index=".kibana",
+ doc_type="search",
+ id="moon",
+ body=doc)
+ if res['created'] == "True":
+ LOG.info("moon testcase search has created")
+ else:
+ LOG.info("moon testcase search has existed")
+
+ # Create testing data in line graph
+ with open(dashboard_dir + 'posca_feature_moon_resources_histogram.json')\
+ as line_data:
+ doc = json.load(line_data)
+ res = es.index(
+ index=".kibana",
+ doc_type="visualization",
+ id="resources",
+ body=doc)
+ if res['created'] == "True":
+ LOG.info("moon resources visualization has created")
+ else:
+ LOG.info("moon resources visualization has existed")
+
+ # Create comparison results in line chart
+ with open(dashboard_dir + 'posca_feature_moon_tenants_histogram.json')\
+ as line_char:
+ doc = json.load(line_char)
+ res = es.index(
+ index=".kibana",
+ doc_type="visualization",
+ id="tenants",
+ body=doc)
+ if res['created'] == "True":
+ LOG.info("moon tenants visualization has created")
+ else:
+ LOG.info("moon tenants visualization has existed")
+
+ # Create dashboard
+ with open(dashboard_dir + 'posca_feature_moon_dashboard.json')\
+ as dashboard:
+ doc = json.load(dashboard)
+ res = es.index(
+ index=".kibana",
+ doc_type="dashboard",
+ id="moon",
+ body=doc)
+ if res['created'] == "True":
+ LOG.info("moon testcases dashboard has created")
+ else:
+ LOG.info("moon testcases dashboard has existed")
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json
new file mode 100644
index 00000000..53a4a750
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon_dashboard.json
@@ -0,0 +1,13 @@
+{
+ "title": "moon",
+ "hits": 0,
+ "description": "",
+ "panelsJSON": "[{\"id\":\"resources\",\"type\":\"visualization\",\"panelIndex\":1,\"size_x\":8,\"size_y\":7,\"col\":1,\"row\":1},{\"id\":\"tenants\",\"type\":\"visualization\",\"panelIndex\":2,\"size_x\":3,\"size_y\":7,\"col\":9,\"row\":1}]",
+ "optionsJSON": "{\"darkTheme\":false}",
+ "uiStateJSON": "{}",
+ "version": 1,
+ "timeRestore": false,
+ "kibanaSavedObjectMeta": {
+ "searchSourceJSON": "{\"filter\":[{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}}}]}"
+ }
+} \ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json
new file mode 100644
index 00000000..2bff871a
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon_index_pattern.json
@@ -0,0 +1,4 @@
+{
+ "title": "bottlenecks",
+ "fields": "[{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"tenant_max\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"max_user\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"tenant_number\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":true,\"analyzed\":false,\"doc_values\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"indexed\":false,\"analyzed\":false,\"doc_values\":false}]"
+} \ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json
new file mode 100644
index 00000000..c8977a72
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon_resources_histogram.json
@@ -0,0 +1,11 @@
+{
+ "title": "resources",
+ "visState": "{\"title\":\"New Visualization\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"max_user\"}},{\"id\":\"2\",\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"tenant_number\",\"size\":5,\"order\":\"asc\",\"orderBy\":\"_term\"}}],\"listeners\":{}}",
+ "uiStateJSON": "{}",
+ "description": "",
+ "savedSearchId": "moon",
+ "version": 1,
+ "kibanaSavedObjectMeta": {
+ "searchSourceJSON": "{\"filter\":[]}"
+ }
+} \ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json
new file mode 100644
index 00000000..03360f89
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_discover.json
@@ -0,0 +1,23 @@
+{
+ "_index": ".kibana",
+ "_type": "search",
+ "_id": "tenants",
+ "_version": 1,
+ "found": true,
+ "_source": {
+ "title": "tenants",
+ "description": "",
+ "hits": 0,
+ "columns": [
+ "_source"
+ ],
+ "sort": [
+ "_score",
+ "desc"
+ ],
+ "version": 1,
+ "kibanaSavedObjectMeta": {
+ "searchSourceJSON": "{\"index\":\"bottlenecks\",\"filter\":[],\"highlight\":{\"pre_tags\":[\"@kibana-highlighted-field@\"],\"post_tags\":[\"@/kibana-highlighted-field@\"],\"fields\":{\"*\":{}},\"require_field_match\":false,\"fragment_size\":2147483647},\"query\":{\"query_string\":{\"query\":\"_type:posca_factor_moon_tenants\",\"analyze_wildcard\":true}}}"
+ }
+ }
+} \ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json
new file mode 100644
index 00000000..a731acfc
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_feature_moon_tenants_histogram.json
@@ -0,0 +1,11 @@
+{
+ "title": "tenants",
+ "visState": "{\"title\":\"New Visualization\",\"type\":\"histogram\",\"params\":{\"shareYAxis\":true,\"addTooltip\":true,\"addLegend\":true,\"scale\":\"linear\",\"mode\":\"stacked\",\"times\":[],\"addTimeMarker\":false,\"defaultYExtents\":false,\"setYExtents\":false,\"yAxis\":{}},\"aggs\":[{\"id\":\"1\",\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"tenant_max\"}}],\"listeners\":{}}",
+ "uiStateJSON": "{}",
+ "description": "",
+ "savedSearchId": "moon",
+ "version": 1,
+ "kibanaSavedObjectMeta": {
+ "searchSourceJSON": "{\"filter\":[]}"
+ }
+} \ No newline at end of file
diff --git a/testsuites/posca/testcase_dashboard/posca_moon_resources.py b/testsuites/posca/testcase_dashboard/posca_moon_resources.py
new file mode 100644
index 00000000..446faccc
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_moon_resources.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+ "posca",
+ "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+ global es
+ print runner_config
+ es_ip = runner_config['dashboard_ip'].split(':')
+ es = Elasticsearch([{'host': es_ip[0]}])
+ print test_data["test_body"]
+ res = es.index(index="bottlenecks",
+ doc_type=test_data["testcase"],
+ body=test_data["test_body"][0])
+ if res['created'] == "False":
+ LOG.error("date send to kibana have errors ", test_data["data_body"])
diff --git a/testsuites/posca/testcase_dashboard/posca_moon_tenants.py b/testsuites/posca/testcase_dashboard/posca_moon_tenants.py
new file mode 100644
index 00000000..446faccc
--- /dev/null
+++ b/testsuites/posca/testcase_dashboard/posca_moon_tenants.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file realize a function of creating dashboard of stress ping test'''
+import ConfigParser
+from elasticsearch import Elasticsearch
+import os
+import utils.logger as log
+from utils.parser import Parser as conf_parser
+
+LOG = log.Logger(__name__).getLogger()
+config = ConfigParser.ConfigParser()
+es = Elasticsearch()
+dashboard_path = os.path.join(conf_parser.test_dir,
+ "posca",
+ "testcase_dashboard")
+dashboard_dir = dashboard_path + "/"
+
+
+def dashboard_send_data(runner_config, test_data):
+ global es
+ print runner_config
+ es_ip = runner_config['dashboard_ip'].split(':')
+ es = Elasticsearch([{'host': es_ip[0]}])
+ print test_data["test_body"]
+ res = es.index(index="bottlenecks",
+ doc_type=test_data["testcase"],
+ body=test_data["test_body"][0])
+ if res['created'] == "False":
+ LOG.error("date send to kibana have errors ", test_data["data_body"])
diff --git a/testsuites/posca/testcase_script/posca_factor_multistack_storage.py b/testsuites/posca/testcase_script/posca_factor_multistack_storage.py
new file mode 100644
index 00000000..34ee225c
--- /dev/null
+++ b/testsuites/posca/testcase_script/posca_factor_multistack_storage.py
@@ -0,0 +1,236 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file realize the function of run posca multistack storage stress test
+This file contain several part:
+First is create a script to realize several threading run'''
+
+import utils.logger as log
+import uuid
+import json
+import os
+import time
+import threading
+import datetime
+import Queue
+from utils.parser import Parser as conf_parser
+import utils.env_prepare.quota_prepare as quota_prepare
+import utils.env_prepare.stack_prepare as stack_prepare
+import utils.infra_setup.runner.yardstick as yardstick_task
+
+import utils.infra_setup.runner.docker_env as docker_env
+
+# --------------------------------------------------
+# logging configuration
+# --------------------------------------------------
+LOG = log.Logger(__name__).getLogger()
+
+test_dict = {
+ "action": "runTestCase",
+ "args": {
+ "opts": {
+ "task-args": {}
+ },
+ "testcase": "multistack_storage_bottlenecks"
+ }
+}
+testfile = os.path.basename(__file__)
+testcase, file_format = os.path.splitext(testfile)
+cidr = "/home/opnfv/repos/yardstick/samples/storage_bottlenecks.yaml"
+runner_DEBUG = True
+q = Queue.Queue()
+final_result = Queue.Queue()
+
+
+def env_pre(test_config):
+ test_yardstick = False
+ if "yardstick" in test_config["contexts"].keys():
+ test_yardstick = True
+ stack_prepare._prepare_env_daemon(test_yardstick)
+ quota_prepare.quota_env_prepare()
+ LOG.info("yardstick environment prepare!")
+ if(test_config["contexts"]['yardstick_envpre']):
+ stdout = yardstick_task.yardstick_image_prepare()
+ LOG.debug(stdout)
+
+
+def testcase_parser(out_file="yardstick.out", **parameter_info):
+ cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
+ cidr=cidr,
+ outfile=out_file,
+ parameter=parameter_info)
+ return cmd
+
+
+def do_test(test_config):
+ out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+ yardstick_container = docker_env.yardstick_info['container']
+ cmd = testcase_parser(out_file=out_file, **test_config)
+ print(cmd)
+ stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+ LOG.info(stdout)
+ loop_value = 0
+ while loop_value < 60:
+ time.sleep(2)
+ loop_value = loop_value + 1
+ with open(out_file) as f:
+ data = json.load(f)
+ if data["result"]["criteria"] == "PASS":
+ LOG.info("yardstick run success")
+ LOG.info("%s" % data["result"]["testcases"])
+ break
+ else:
+ LOG.error("yardstick error exit")
+ break
+
+ save_data = final_config_to_result(test_config, data)
+ return save_data
+
+
+def config_to_result(num, out_num, during_date):
+ testdata = {}
+ test_result = {}
+ final_data = {}
+
+ final_data["read_iops"] = 0
+ final_data["read_bw"] = 0
+ final_data["read_lat"] = 0
+ final_data["write_iops"] = 0
+ final_data["write_bw"] = 0
+ final_data["write_lat"] = 0
+
+ test_result["number_of_stacks"] = float(num)
+ test_result["success_times"] = out_num
+ test_result["success_rate"] = out_num / num
+ test_result["duration_time"] = during_date
+ testdata["data_body"] = test_result
+ testdata["testcase"] = testcase
+
+ while not final_result.empty():
+ data = final_result.get()
+ final_data["read_iops"] += data["read_iops"]
+ final_data["read_bw"] += data["read_bw"]
+ if final_data["read_lat"] is 0:
+ final_data["read_lat"] = data["read_lat"]
+ else:
+ final_data["read_lat"] += data["read_lat"]
+ final_data["read_lat"] = final_data["read_lat"]/2
+ final_data["write_iops"] += data["write_iops"]
+ final_data["write_bw"] += data["read_iops"]
+ if final_data["write_lat"] is 0:
+ final_data["write_lat"] = data["write_lat"]
+ else:
+ final_data["write_lat"] += data["write_lat"]
+ final_data["write_lat"] = final_data["write_lat"]/2
+
+ testdata["test_value"] = final_data
+ LOG.info("Final testdata is %s" % testdata)
+ return testdata
+
+
+def final_config_to_result(test_config, test_result):
+ out_data = test_result["result"]["testcases"]
+ test_data = out_data["storage_bottlenecks"]["tc_data"]
+ testdata = {}
+ testdata["read_iops"] = 0
+ testdata["read_bw"] = 0
+ testdata["read_lat"] = 0
+ testdata["write_iops"] = 0
+ testdata["write_bw"] = 0
+ testdata["write_lat"] = 0
+ print(testdata["read_iops"])
+ for result in test_data:
+ testdata["read_iops"] += result["data"]["read_iops"]
+ testdata["read_bw"] += result["data"]["read_bw"]
+ if testdata["read_lat"] is 0:
+ testdata["read_lat"] = result["data"]["read_lat"]
+ else:
+ testdata["read_lat"] += result["data"]["read_lat"]
+ testdata["read_lat"] = testdata["read_lat"]/2
+ testdata["write_iops"] += result["data"]["write_iops"]
+ testdata["write_bw"] += result["data"]["write_bw"]
+ if testdata["write_lat"] is 0:
+ testdata["write_lat"] = result["data"]["write_lat"]
+ else:
+ testdata["write_lat"] += result["data"]["write_lat"]
+ testdata["write_lat"] = testdata["write_lat"]/2
+ final_result.put(testdata)
+ q.put(1)
+ return testdata
+
+
+def func_run(con_dic):
+ test_date = do_test(con_dic)
+ return test_date
+
+
+def run(test_config):
+ con_dic = test_config["load_manager"]
+ scenarios_conf = con_dic["scenarios"]
+
+ if test_config["contexts"]["yardstick_ip"] is None:
+ con_dic["contexts"]["yardstick_ip"] =\
+ conf_parser.ip_parser("yardstick_test_ip")
+
+ env_pre(test_config)
+ LOG.info("yardstick environment prepare done!")
+
+ stack_num = scenarios_conf["num_stack"]
+ test_num = conf_parser.str_to_list(scenarios_conf["num_thread"])
+ rw = scenarios_conf["rw"]
+ bs = scenarios_conf["bs"]
+ size = scenarios_conf["size"]
+ rwmixwrite = scenarios_conf["rwmixwrite"]
+ numjobs = scenarios_conf["num_jobs"]
+ direct = scenarios_conf["direct"]
+ volume_num = scenarios_conf["volume_num"]
+ volume_size = scenarios_conf["volume_size"]
+
+ for value in test_num:
+ result = []
+ out_num = 0
+ num = int(value)
+ # pool = multiprocessing.Pool(processes=num)
+ threadings = []
+ LOG.info("begin to run %s thread" % num)
+
+ starttime = datetime.datetime.now()
+
+ for i in xrange(0, num):
+ case_config = {"stack_num": int(stack_num),
+ "volume_num": volume_num,
+ "rw": rw,
+ "bs": bs,
+ "size": size,
+ "rwmixwrite": rwmixwrite,
+ "numjobs": numjobs,
+ "direct": direct,
+ "volume_size": int(volume_size)}
+ tmp_thread = threading.Thread(target=func_run, args=(case_config,))
+ threadings.append(tmp_thread)
+ tmp_thread.start()
+
+ for one_thread in threadings:
+ one_thread.join()
+ while not q.empty():
+ result.append(q.get())
+ for item in result:
+ out_num = out_num + float(item)
+
+ print(result)
+
+ endtime = datetime.datetime.now()
+ LOG.info("%s thread success %d times" % (num, out_num))
+ during_date = (endtime - starttime).seconds
+
+ data_reply = config_to_result(num, out_num, during_date)
+ conf_parser.result_to_file(data_reply, test_config["out_file"])
+
+ LOG.info('END POSCA stress multistack storage test')
+ return data_reply
diff --git a/testsuites/posca/testcase_script/posca_factor_multistack_storage_parallel.py b/testsuites/posca/testcase_script/posca_factor_multistack_storage_parallel.py
new file mode 100644
index 00000000..8c623d41
--- /dev/null
+++ b/testsuites/posca/testcase_script/posca_factor_multistack_storage_parallel.py
@@ -0,0 +1,164 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file realize the function of run posca multistack storage stress test
+This file contain several part:
+First is create a script to realize several threading run'''
+
+import utils.logger as log
+import uuid
+import json
+import os
+import time
+from utils.parser import Parser as conf_parser
+import utils.env_prepare.quota_prepare as quota_prepare
+import utils.env_prepare.stack_prepare as stack_prepare
+import utils.infra_setup.runner.yardstick as yardstick_task
+
+import utils.infra_setup.runner.docker_env as docker_env
+
+# --------------------------------------------------
+# logging configuration
+# --------------------------------------------------
+LOG = log.Logger(__name__).getLogger()
+
+test_dict = {
+ "action": "runTestCase",
+ "args": {
+ "opts": {
+ "task-args": {}
+ },
+ "testcase": "multistack_storage_bottlenecks_parallel"
+ }
+}
+testfile = os.path.basename(__file__)
+testcase, file_format = os.path.splitext(testfile)
+cidr = "/home/opnfv/repos/yardstick/samples/storage_bottlenecks.yaml"
+runner_DEBUG = True
+
+
+def env_pre(test_config):
+ test_yardstick = False
+ if "yardstick" in test_config["contexts"].keys():
+ test_yardstick = True
+ stack_prepare._prepare_env_daemon(test_yardstick)
+ quota_prepare.quota_env_prepare()
+ if(test_config["contexts"]['yardstick_envpre']):
+ LOG.info("yardstick environment prepare!")
+ stdout = yardstick_task.yardstick_image_prepare()
+ LOG.debug(stdout)
+
+
+def testcase_parser(out_file="yardstick.out", **parameter_info):
+ cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
+ cidr=cidr,
+ outfile=out_file,
+ parameter=parameter_info)
+ return cmd
+
+
+def do_test(test_config):
+ out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+ yardstick_container = docker_env.yardstick_info['container']
+ cmd = testcase_parser(out_file=out_file, **test_config)
+ print(cmd)
+ stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+ LOG.info(stdout)
+ loop_value = 0
+ while loop_value < 60:
+ time.sleep(2)
+ loop_value = loop_value + 1
+ with open(out_file) as f:
+ data = json.load(f)
+ if data["result"]["criteria"] == "PASS":
+ LOG.info("yardstick run success")
+ LOG.info("%s" % data["result"]["testcases"])
+ break
+ else:
+ LOG.error("yardstick error exit")
+ break
+
+ save_data = config_to_result(test_config, data)
+ LOG.info(save_data)
+ return save_data
+
+
+def config_to_result(test_config, test_result):
+ print(test_result)
+ out_data = test_result["result"]["testcases"]
+ test_data = out_data["storage_bottlenecks"]["tc_data"]
+ testdata = {}
+ testdata["read_iops"] = 0
+ testdata["read_bw"] = 0
+ testdata["read_lat"] = 0
+ testdata["write_iops"] = 0
+ testdata["write_bw"] = 0
+ testdata["write_lat"] = 0
+ print(testdata["read_iops"])
+ for result in test_data:
+ testdata["read_iops"] += result["data"]["read_iops"]
+ testdata["read_bw"] += result["data"]["read_bw"]
+ if testdata["read_lat"] is 0:
+ testdata["read_lat"] = result["data"]["read_lat"]
+ else:
+ testdata["read_lat"] += result["data"]["read_lat"]
+ testdata["read_lat"] = testdata["read_lat"]/2
+ testdata["write_iops"] += result["data"]["write_iops"]
+ testdata["write_bw"] += result["data"]["write_bw"]
+ if testdata["write_lat"] is 0:
+ testdata["write_lat"] = result["data"]["write_lat"]
+ else:
+ testdata["write_lat"] += result["data"]["write_lat"]
+ testdata["write_lat"] = testdata["write_lat"]/2
+ return testdata
+
+
+def run(test_config):
+ con_dic = test_config["load_manager"]
+ scenarios_conf = con_dic["scenarios"]
+
+ if test_config["contexts"]["yardstick_ip"] is None:
+ con_dic["contexts"]["yardstick_ip"] =\
+ conf_parser.ip_parser("yardstick_test_ip")
+
+ env_pre(test_config)
+ LOG.info("yardstick environment prepare done!")
+
+ test_num = conf_parser.str_to_list(scenarios_conf["num_stack"])
+ rw = scenarios_conf["rw"]
+ bs = scenarios_conf["bs"]
+ size = scenarios_conf["size"]
+ rwmixwrite = scenarios_conf["rwmixwrite"]
+ numjobs = scenarios_conf["num_jobs"]
+ direct = scenarios_conf["direct"]
+ volume_num = scenarios_conf["volume_num"]
+ volume_size = scenarios_conf["volume_size"]
+
+ result = []
+
+ for value in test_num:
+ case_config = {"stack_num": int(value),
+ "volume_num": volume_num,
+ "rw": rw,
+ "bs": bs,
+ "size": size,
+ "rwmixwrite": rwmixwrite,
+ "numjobs": numjobs,
+ "direct": direct,
+ "volume_size": int(volume_size)}
+ data_reply = do_test(case_config)
+ result.append(data_reply)
+
+ LOG.info("%s stack successful run" % (value))
+
+ conf_parser.result_to_file(data_reply, test_config["out_file"])
+
+ LOG.info('END POSCA stress multistack storage parallel testcase')
+ LOG.info("The result data is %s", result)
+ return result
diff --git a/testsuites/posca/testcase_script/posca_factor_ping.py b/testsuites/posca/testcase_script/posca_factor_ping.py
index 3a2277cf..4ee43964 100644
--- a/testsuites/posca/testcase_script/posca_factor_ping.py
+++ b/testsuites/posca/testcase_script/posca_factor_ping.py
@@ -23,6 +23,7 @@ import Queue
from utils.parser import Parser as conf_parser
import utils.env_prepare.quota_prepare as quota_prepare
import utils.env_prepare.stack_prepare as stack_prepare
+import utils.infra_setup.runner.yardstick as runner_yardstick
import testsuites.posca.testcase_dashboard.posca_stress_ping as DashBoard
import utils.infra_setup.runner.docker_env as docker_env
@@ -42,6 +43,8 @@ test_dict = {
}
testfile = os.path.basename(__file__)
testcase, file_format = os.path.splitext(testfile)
+cidr = "/home/opnfv/repos/yardstick/samples/ping_bottlenecks.yaml"
+runner_DEBUG = True
q = Queue.Queue()
@@ -52,20 +55,21 @@ def env_pre(test_config):
test_yardstick = True
stack_prepare._prepare_env_daemon(test_yardstick)
quota_prepare.quota_env_prepare()
- cmd = ('yardstick env prepare')
LOG.info("yardstick environment prepare!")
if(test_config["contexts"]['yardstick_envpre']):
- yardstick_container = docker_env.yardstick_info['container']
- stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+ stdout = runner_yardstick.yardstick_image_prepare()
LOG.debug(stdout)
def do_test():
func_name = sys._getframe().f_code.co_name
out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+ parameter_info = {}
yardstick_container = docker_env.yardstick_info['container']
- cmd = ('yardstick task start /home/opnfv/repos/yardstick/'
- 'samples/ping_bottlenecks.yaml --output-file ' + out_file)
+ cmd = runner_yardstick.yardstick_command_parser(debug=runner_DEBUG,
+ cidr=cidr,
+ outfile=out_file,
+ parameter=parameter_info)
stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
LOG.info(stdout)
out_value = 0
@@ -75,11 +79,11 @@ def do_test():
loop_value = loop_value + 1
with open(out_file) as f:
data = json.load(f)
- if data["status"] == 1:
+ if data["result"]["criteria"] == "PASS":
LOG.info("yardstick run success")
out_value = 1
break
- elif data["status"] == 2:
+ else:
LOG.error("yardstick error exit")
out_value = 0
break
diff --git a/testsuites/posca/testcase_script/posca_factor_soak_throughputs.py b/testsuites/posca/testcase_script/posca_factor_soak_throughputs.py
new file mode 100644
index 00000000..2fd35006
--- /dev/null
+++ b/testsuites/posca/testcase_script/posca_factor_soak_throughputs.py
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+'''This file is to do data-plane baseline test for
+VM pair life-cycle events using netperf.
+Testing steps are summarized below:
+1. run_test load testcase configuration
+2. Bottlenecks eliminates the environments limits/constraints
+3. Bottlenecks tells Yardstick to prepare environment
+4. Bottlenecks tells Yardstick to run test
+ 3.1 to create stack
+ 3.2 to install netperf
+ 3.3 to send/forward packets for t2 seconds
+ 3.4 record results and detroy stack
+ 3.4 after every t1 seconds goto 3.1 and repeat the workflow
+5. Bottlenecks collects testing results from Yardstick
+6. Bottlenecks tells Yardstick to stop when time ends
+ or system fails the test
+7. Bottlenecks sends testing data to bottlenecks-elk'''
+
+import utils.logger as log
+import uuid
+import json
+import os
+import time
+import threading
+import datetime
+import Queue
+from utils.parser import Parser as conf_parser
+import utils.env_prepare.quota_prepare as quota_prepare
+import utils.env_prepare.stack_prepare as stack_prepare
+import utils.infra_setup.runner.yardstick as runner_yardstick
+import utils.infra_setup.runner.docker_env as docker_env
+import math
+
+# --------------------------------------------------
+# logging configuration
+# --------------------------------------------------
+LOG = log.Logger(__name__).getLogger()
+
+test_dict = {
+ "action": "runTestCase",
+ "args": {
+ "opts": {
+ "task-args": {}
+ },
+ "testcase": "netperf_bottlenecks"
+ }
+}
+testfile = os.path.basename(__file__)
+testcase, file_format = os.path.splitext(testfile)
+cidr = "/home/opnfv/repos/yardstick/samples/netperf_soak.yaml"
+runner_DEBUG = True
+
+q = Queue.Queue()
+
+
+def env_pre(test_config):
+ test_yardstick = False
+ if "yardstick" in test_config["contexts"].keys():
+ test_yardstick = True
+ stack_prepare._prepare_env_daemon(test_yardstick)
+ quota_prepare.quota_env_prepare()
+ LOG.info("yardstick environment prepare!")
+ if(test_config["contexts"]['yardstick_envpre']):
+ stdout = runner_yardstick.yardstick_image_prepare()
+ LOG.debug(stdout)
+
+
+def do_test(con_dic):
+ out_file = ("/tmp/yardstick_" + str(uuid.uuid4()) + ".out")
+ parameter_info = dict(test_time=con_dic["scenarios"]["vim_pair_ttl"])
+ yardstick_container = docker_env.yardstick_info['container']
+ cmd = runner_yardstick.yardstick_command_parser(debug=runner_DEBUG,
+ cidr=cidr,
+ outfile=out_file,
+ parameter=parameter_info)
+ stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+ LOG.info(stdout)
+ out_value = 0
+ loop_value = 0
+ while loop_value < 60:
+ time.sleep(2)
+ loop_value = loop_value + 1
+ with open(out_file) as f:
+ data = json.load(f)
+ if data["result"]["criteria"] == "PASS":
+ LOG.info("Success run yardstick netperf_soak test!")
+ out_value = 1
+ break
+ elif data["result"]["criteria"] == "FAIL":
+ LOG.error("Failed run yardstick netperf_soak test!")
+ out_value = 0
+ break
+ q.put((out_value, data["result"]["testcases"]))
+ return out_value
+
+
+def config_to_result(
+ test_duration, added_duration, vim_pair_ttl,
+ vim_pair_lazy_cre_delay,
+ vim_pair_num, vim_pair_success_num, result):
+ testdata = {}
+ test_result = {}
+ test_result["test_duration"] = test_duration
+ test_result["sum_duration"] = added_duration
+ test_result["vim_pair_ttl"] = vim_pair_ttl
+ test_result["vim_pair_cre_interval"] = vim_pair_lazy_cre_delay
+ test_result["vim_pair_num"] = vim_pair_num
+ test_result["vim_pair_success_num"] = vim_pair_success_num
+ test_result["result"] = result
+ testdata["data_body"] = test_result
+ testdata["testcase"] = testcase
+ return testdata
+
+
+def func_run(con_dic):
+ test_date = do_test(con_dic)
+ return test_date
+
+
+def run(test_config):
+ con_dic = test_config["load_manager"]
+
+ env_pre(test_config)
+ LOG.info("yardstick environment prepare done!")
+
+ test_duration = float(
+ con_dic["scenarios"]["test_duration_hours"]) * 3600
+ vim_pair_ttl = float(
+ con_dic["scenarios"]["vim_pair_ttl"])
+ vim_pair_lazy_cre_delay = float(
+ con_dic["scenarios"]["vim_pair_lazy_cre_delay"])
+ vim_pair_num = int(math.ceil(
+ (test_duration - vim_pair_ttl) / vim_pair_lazy_cre_delay
+ ) + 1)
+
+ threadings = []
+ result = []
+ vim_pair_success_num = 0
+
+ start_time = datetime.datetime.now()
+
+ LOG.info("Data-path test duration are %i seconds", test_duration)
+ LOG.info("TTL of each VM pair are %i seconds", vim_pair_ttl)
+ LOG.info("Creation delay between VM pairs are %i seconds",
+ vim_pair_lazy_cre_delay)
+ LOG.info("Number of VM pairs to be created are %i", vim_pair_num)
+
+ for vim_pair_index in xrange(0, vim_pair_num):
+ index_thread = threading.Thread(target=func_run,
+ args=(con_dic,))
+ threadings.append(index_thread)
+ index_thread.start()
+ vim_pair_error = False
+ for wait_time in xrange(0, int(vim_pair_lazy_cre_delay)):
+ time.sleep(1)
+ while not q.empty():
+ result.append(q.get())
+ for one_result in result:
+ if '0' == one_result[0]:
+ vim_pair_error = True
+ break
+ if vim_pair_error:
+ break
+ for one_thread in threadings:
+ one_thread.join()
+ while not q.empty():
+ result.append(q.get())
+ for item in result:
+ vim_pair_success_num += int(item[0])
+
+ end_time = datetime.datetime.now()
+ added_duration = (end_time - start_time).seconds
+ LOG.info("Number of success VM pairs/threads are %s out %s ",
+ vim_pair_success_num, vim_pair_num)
+
+ return_result = config_to_result(
+ test_duration, added_duration, vim_pair_ttl,
+ vim_pair_lazy_cre_delay,
+ vim_pair_num, vim_pair_success_num, result
+ )
+
+ conf_parser.result_to_file(return_result, test_config["out_file"])
+
+ return vim_pair_error
diff --git a/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py b/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py
index 1a54554c..9d8b0ec6 100644
--- a/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py
+++ b/testsuites/posca/testcase_script/posca_factor_system_bandwidth.py
@@ -79,10 +79,10 @@ def do_test(test_config, Use_Dashboard, context_conf):
with open(out_file) as f:
data = json.load(f)
if data["status"] == 1:
- LOG.info("yardstick run success")
+ LOG.info("Success run yardstick netperf_bottlenecks test!")
break
elif data["status"] == 2:
- LOG.error("yardstick error exit")
+ LOG.error("Failed to run yardstick netperf_bottlenecks test!")
exit()
save_data = config_to_result(test_config, data['result'][1])
diff --git a/testsuites/posca/testcase_script/posca_feature_moon_resources.py b/testsuites/posca/testcase_script/posca_feature_moon_resources.py
index 3c66c7b9..8b23824c 100644
--- a/testsuites/posca/testcase_script/posca_feature_moon_resources.py
+++ b/testsuites/posca/testcase_script/posca_feature_moon_resources.py
@@ -18,8 +18,9 @@ import uuid
import json
import utils.logger as log
from utils.parser import Parser as conf_parser
-import utils.env_prepare.stack_prepare as stack_prepare
+import utils.env_prepare.moon_prepare as moon_env
import utils.infra_setup.runner.docker_env as docker_env
+import testsuites.posca.testcase_dashboard.posca_feature_moon as DashBoard
import utils.infra_setup.runner.yardstick as yardstick_task
# --------------------------------------------------
@@ -29,35 +30,35 @@ LOG = log.Logger(__name__).getLogger()
testfile = os.path.basename(__file__)
testcase, file_format = os.path.splitext(testfile)
-# cidr = "/home/opnfv/repos/yardstick/samples/pvp_throughput_bottlenecks.yaml"
runner_DEBUG = True
-def env_pre(con_dic):
- LOG.info("yardstick environment prepare!")
- stack_prepare._prepare_env_daemon(True)
+def env_pre(test_config):
+ if "moon_monitoring" in test_config["contexts"].keys():
+ if test_config["contexts"]['moon_envpre'] is True:
+ moon_environment = test_config["contexts"]['moon_environment']
+ moon_env.moon_envprepare(moon_environment)
+ LOG.info("moon environment prepare!")
def config_to_result(test_config, test_result):
- final_data = []
- print(test_result)
+ final_data = {}
+ final_data["testcase"] = "posca_factor_moon_resources"
+ final_data["test_body"] = []
out_data = test_result["result"]["testcases"]
- test_data = out_data["pvp_throughput_bottlenecks"]["tc_data"]
+ test_data = out_data["moon_resource"]["tc_data"]
for result in test_data:
testdata = {}
- testdata["vcpu"] = test_config["vcpu"]
- testdata["memory"] = test_config["memory"]
- testdata["nrFlows"] = result["data"]["nrFlows"]
- testdata["packet_size"] = result["data"]["packet_size"]
- testdata["throughput"] = result["data"]["throughput_rx_mbps"]
- final_data.append(testdata)
+ testdata["tenant_number"] = int(test_config["tenant_number"])
+ testdata["max_user"] = result["data"]["max_user"]
+ final_data["test_body"].append(testdata)
return final_data
def testcase_parser(runner_conf, out_file="yardstick.out", **parameter_info):
cidr = "/home/opnfv/repos/yardstick/" + \
- runner_conf["yardstick_test_dir"] + \
- runner_conf["yardstick_testcase"]
+ runner_conf["yardstick_test_dir"] + "/" + \
+ runner_conf["yardstick_testcase"] + ".yaml"
cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
cidr=cidr,
outfile=out_file,
@@ -84,24 +85,21 @@ def do_test(runner_conf, test_config, Use_Dashboard, context_conf):
elif data["status"] == 2:
LOG.error("yardstick error exit")
exit()
- # data = json.load(output)
save_data = config_to_result(test_config, data)
if Use_Dashboard is True:
print("use dashboard")
- # DashBoard.dashboard_send_data(context_conf, save_data)
-
- # return save_data["data_body"]
+ DashBoard.dashboard_send_data(context_conf, save_data)
return save_data
def run(test_config):
load_config = test_config["load_manager"]
scenarios_conf = load_config["scenarios"]
- runner_conf = test_config["runners"]
+ runner_conf = load_config["runners"]
+ contexts_conf = test_config["contexts"]
Use_Dashboard = False
-
- env_pre(None)
+ env_pre(test_config)
if test_config["contexts"]["yardstick_ip"] is None:
load_config["contexts"]["yardstick_ip"] =\
conf_parser.ip_parser("yardstick_test_ip")
@@ -112,9 +110,14 @@ def run(test_config):
conf_parser.ip_parser("dashboard")
LOG.info("Create Dashboard data")
Use_Dashboard = True
- # DashBoard.dashboard_system_bandwidth(test_config["contexts"])
+ DashBoard.posca_moon_init(test_config["contexts"])
tenants_conf = conf_parser.str_to_list(scenarios_conf["tenants"])
+ subject_number = int(scenarios_conf["subject_number"])
+ object_number = int(scenarios_conf["object_number"])
+ timeout = scenarios_conf["timeout"]
+ consul_host = contexts_conf["moon_environment"]["ip"]
+ consul_port = contexts_conf["moon_environment"]["consul_port"]
load_config["result_file"] = os.path.dirname(
os.path.abspath(__file__)) + "/test_case/result"
@@ -122,7 +125,13 @@ def run(test_config):
result = []
for tenants in tenants_conf:
- case_config = {"tenants": tenants}
+ print tenants
+ case_config = {"tenant_number": tenants,
+ "subject_number": subject_number,
+ "object_number": object_number,
+ "timeout": timeout,
+ "consul_host": consul_host,
+ "consul_port": consul_port}
data_reply = do_test(runner_conf, case_config,
Use_Dashboard, test_config["contexts"])
diff --git a/testsuites/posca/testcase_script/posca_feature_moon_tenants.py b/testsuites/posca/testcase_script/posca_feature_moon_tenants.py
index 8f4061df..e932575c 100644
--- a/testsuites/posca/testcase_script/posca_feature_moon_tenants.py
+++ b/testsuites/posca/testcase_script/posca_feature_moon_tenants.py
@@ -15,14 +15,15 @@ This test is using yardstick as a tool to begin test.'''
import os
import time
import uuid
-import json
import Queue
import multiprocessing
import utils.logger as log
from utils.parser import Parser as conf_parser
-import utils.env_prepare.stack_prepare as stack_prepare
+import utils.env_prepare.moon_prepare as moon_env
import utils.infra_setup.runner.docker_env as docker_env
+
import utils.infra_setup.runner.yardstick as yardstick_task
+import testsuites.posca.testcase_dashboard.posca_feature_moon as DashBoard
# --------------------------------------------------
# logging configuration
@@ -31,36 +32,31 @@ LOG = log.Logger(__name__).getLogger()
testfile = os.path.basename(__file__)
testcase, file_format = os.path.splitext(testfile)
-# cidr = "/home/opnfv/repos/yardstick/samples/pvp_throughput_bottlenecks.yaml"
-runner_switch = True
runner_DEBUG = True
+manager = multiprocessing.Manager()
+switch = manager.Value('tmp', 0)
-def env_pre(con_dic):
+def env_pre(test_config):
+ if "moon_monitoring" in test_config["contexts"].keys():
+ if test_config["contexts"]['moon_envpre'] is True:
+ moon_environment = test_config["contexts"]['moon_environment']
+ moon_env.moon_envprepare(moon_environment)
LOG.info("yardstick environment prepare!")
- stack_prepare._prepare_env_daemon(True)
-
-
-def config_to_result(test_config, test_result):
- final_data = []
- print(test_result)
- out_data = test_result["result"]["testcases"]
- test_data = out_data["pvp_throughput_bottlenecks"]["tc_data"]
- for result in test_data:
- testdata = {}
- testdata["vcpu"] = test_config["vcpu"]
- testdata["memory"] = test_config["memory"]
- testdata["nrFlows"] = result["data"]["nrFlows"]
- testdata["packet_size"] = result["data"]["packet_size"]
- testdata["throughput"] = result["data"]["throughput_rx_mbps"]
- final_data.append(testdata)
+
+
+def config_to_result(test_result):
+ final_data = {}
+ final_data["testcase"] = "posca_factor_moon_tenants"
+ final_data["test_body"] = []
+ final_data["test_body"].append(test_result)
return final_data
def testcase_parser(runner_conf, out_file="yardstick.out", **parameter_info):
cidr = "/home/opnfv/repos/yardstick/" + \
- runner_conf["yardstick_test_dir"] + \
- runner_conf["yardstick_testcase"]
+ runner_conf["yardstick_test_dir"] + "/" + \
+ runner_conf["yardstick_testcase"] + ".yaml"
cmd = yardstick_task.yardstick_command_parser(debug=runner_DEBUG,
cidr=cidr,
outfile=out_file,
@@ -75,36 +71,19 @@ def do_test(runner_conf, test_config, Use_Dashboard, context_conf):
print(cmd)
stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
LOG.info(stdout)
- loop_value = 0
- while loop_value < 60:
- time.sleep(2)
- loop_value = loop_value + 1
- with open(out_file) as f:
- data = json.load(f)
- if data["status"] == 1:
- LOG.info("yardstick run success")
- break
- elif data["status"] == 2:
- LOG.error("yardstick error exit")
- exit()
- # data = json.load(output)
-
- save_data = config_to_result(test_config, data)
- if Use_Dashboard is True:
- print("use dashboard")
- # DashBoard.dashboard_send_data(context_conf, save_data)
-
- # return save_data["data_body"]
- return save_data
+ switch.value += 1
+ save_date = []
+ return save_date
def run(test_config):
load_config = test_config["load_manager"]
scenarios_conf = load_config["scenarios"]
- runner_conf = test_config["runners"]
+ contexts_conf = test_config["contexts"]
+ runner_conf = load_config["runners"]
Use_Dashboard = False
- env_pre(None)
+ env_pre(test_config)
if test_config["contexts"]["yardstick_ip"] is None:
load_config["contexts"]["yardstick_ip"] =\
conf_parser.ip_parser("yardstick_test_ip")
@@ -115,15 +94,22 @@ def run(test_config):
conf_parser.ip_parser("dashboard")
LOG.info("Create Dashboard data")
Use_Dashboard = True
- # DashBoard.dashboard_system_bandwidth(test_config["contexts"])
-
- resources = conf_parser.str_to_list(scenarios_conf["resources"])
- initial = conf_parser.str_to_list(scenarios_conf["initial"])
- threshhold = conf_parser.str_to_list(scenarios_conf["threshhold"])
- timeout = conf_parser.str_to_list(scenarios_conf["timeout"])
- SLA = conf_parser.str_to_list(scenarios_conf["SLA"])
- case_config = {"SLA": SLA,
- "resources": resources}
+ DashBoard.posca_moon_init(test_config["contexts"])
+
+ subject_number = int(scenarios_conf["subject_number"])
+ object_number = int(scenarios_conf["object_number"])
+ timeout = scenarios_conf["timeout"]
+ consul_host = contexts_conf["moon_environment"]["ip"]
+ consul_port = contexts_conf["moon_environment"]["consul_port"]
+
+ initial = scenarios_conf["initial_tenants"]
+ threshhold = scenarios_conf["steps_tenants"]
+ tolerate_time = scenarios_conf["tolerate_time"]
+ case_config = {"subject_number": subject_number,
+ "object_number": object_number,
+ "timeout": timeout,
+ "consul_host": consul_host,
+ "consul_port": consul_port}
process_queue = Queue.Queue()
@@ -136,8 +122,8 @@ def run(test_config):
tenant_number = threshhold
else:
tenant_number = initial
-
- while runner_switch is True:
+ while switch.value == 0:
+ LOG.info("Start %d process", tenant_number)
for tenant in range(0, tenant_number):
process = multiprocessing.Process(target=do_test,
args=(runner_conf,
@@ -150,7 +136,7 @@ def run(test_config):
result = result + tenant_number
tenant_number = threshhold
- time.sleep(timeout)
+ time.sleep(tolerate_time)
while process_queue.qsize():
process = process_queue.get()
@@ -161,6 +147,12 @@ def run(test_config):
else:
result = result - threshhold
+ testdate = {"tenant_max": result}
+ testresult = config_to_result(testdate)
LOG.info("Finished bottlenecks testcase")
- LOG.info("The result data is %s", result)
- return result
+ LOG.info("The result data is %d", result)
+ if Use_Dashboard is True:
+ print "Use Dashboard"
+ DashBoard.dashboard_send_data(test_config["contexts"], testresult)
+
+ return testresult
diff --git a/testsuites/posca/testcase_script/posca_feature_testpmd_scale_up.py b/testsuites/posca/testcase_script/posca_feature_testpmd_scale_up.py
index 830ff73f..08c4cbe9 100644
--- a/testsuites/posca/testcase_script/posca_feature_testpmd_scale_up.py
+++ b/testsuites/posca/testcase_script/posca_feature_testpmd_scale_up.py
@@ -81,14 +81,10 @@ def do_test(test_config, Use_Dashboard, context_conf):
elif data["status"] == 2:
LOG.error("yardstick error exit")
exit()
- # data = json.load(output)
save_data = config_to_result(test_config, data)
if Use_Dashboard is True:
print("use dashboard")
- # DashBoard.dashboard_send_data(context_conf, save_data)
-
- # return save_data["data_body"]
return save_data
@@ -108,7 +104,6 @@ def run(test_config):
conf_parser.ip_parser("dashboard")
LOG.info("Create Dashboard data")
Use_Dashboard = True
- # DashBoard.dashboard_system_bandwidth(test_config["contexts"])
cpus = conf_parser.str_to_list(scenarios_conf["cpus"])
mems = conf_parser.str_to_list(scenarios_conf["mems"])
diff --git a/testsuites/posca/testcase_script/posca_feature_vnf_scale_out.py b/testsuites/posca/testcase_script/posca_feature_vnf_scale_out.py
index 6d53515f..417cf2b9 100644
--- a/testsuites/posca/testcase_script/posca_feature_vnf_scale_out.py
+++ b/testsuites/posca/testcase_script/posca_feature_vnf_scale_out.py
@@ -46,12 +46,9 @@ def env_pre(test_config):
print(test_yardstick)
stack_prepare._prepare_env_daemon(test_yardstick)
quota_prepare.quota_env_prepare()
- cmd = ('yardstick env prepare')
LOG.info("yardstick environment prepare!")
- print docker_env.yardstick_info['container']
if(test_config["contexts"]['yardstick_envpre']):
- yardstick_container = docker_env.yardstick_info['container']
- stdout = docker_env.docker_exec_cmd(yardstick_container, cmd)
+ stdout = yardstick_task.yardstick_image_prepare()
LOG.debug(stdout)
@@ -99,16 +96,11 @@ def do_test(test_config, Use_Dashboard, context_conf):
elif data["status"] == 2:
LOG.error("yardstick error exit")
exit()
- # data = json.load(output)
save_data = config_to_result(test_config, data)
- print("^^^^^^^^^^^^^^^^^^^^^^^^^")
- print save_data
if Use_Dashboard is True:
print("use dashboard")
- # DashBoard.dashboard_send_data(context_conf, save_data)
- # return save_data["data_body"]
return save_data
diff --git a/testsuites/run_testsuite.py b/testsuites/run_testsuite.py
index 2e82b205..0f03d3e7 100644
--- a/testsuites/run_testsuite.py
+++ b/testsuites/run_testsuite.py
@@ -36,6 +36,15 @@ LOG = log.Logger(__name__).getLogger()
# ------------------------------------------------------
+def copy_hosts_file():
+ LOG.info("Begin copying hosts file to Bottlenecks-Yardstick")
+ os.system('cp /etc/hosts /tmp/hosts')
+ yardstick_docker = docker_env.docker_find('Bottlenecks-Yardstick')
+ cp_cmd = 'sudo cp -f /tmp/hosts /etc/hosts'
+ docker_env.docker_exec_cmd(yardstick_docker, cp_cmd)
+ LOG.info("Done with copying hosts file to Bottlenecks-Yardstick")
+
+
def posca_testcase_run(testsuite, testcase_script, test_config):
module_string = "testsuites.%s.testcase_script.%s" % (testsuite,
@@ -107,10 +116,12 @@ def testsuite_run(test_level, test_name, REPORT="False"):
conf_parser.Parser.testcase_out_dir(testcase)
start_date = datetime.datetime.now()
docker_env_prepare(config[testcase])
- try:
- posca_testcase_run(tester_parser[0], testcase, config[testcase])
- except Exception, e:
- LOG.warning('e.message:\t%s', e.message)
+ copy_hosts_file()
+ #try:
+ # posca_testcase_run(tester_parser[0], testcase, config[testcase])
+ #except Exception, e:
+ # LOG.warning('e.message:\t%s', e.message)
+ posca_testcase_run(tester_parser[0], testcase, config[testcase])
stop_date = datetime.datetime.now()
LOG.info("End of %s testcase in POSCA testsuite", testcase)
criteria = "FAIL"
diff --git a/utils/env_prepare/config_prepare.sh b/utils/env_prepare/config_prepare.sh
index 053c9da4..b13b5a02 100644
--- a/utils/env_prepare/config_prepare.sh
+++ b/utils/env_prepare/config_prepare.sh
@@ -18,7 +18,7 @@ where:
-h|--help show the help text
-i|--installer input the name of the installer
<installer> one of the following:
- (compass, fuel, joid, apex)
+ (apex, compass, fuel, joid)
--debug
debug option switch
examples:
@@ -45,6 +45,10 @@ while [[ $# > 0 ]]
redirect="/dev/stdout"
shift
;;
+ *)
+ echo "unkown option $1 $2"
+ exit 1
+ ;;
esac
shift
done
@@ -59,22 +63,27 @@ error () {
exit 1
}
-# Define Variables
-echo "BOTTLENECKS INFO: Downloading Releng"
+# Repo and configs
RELENG_REPO="/home/releng"
+BOTTLENECKS_CONFIG=/tmp
+OPENRC=${BOTTLENECKS_CONFIG}/admin_rc.sh
+OS_CACERT=${BOTTLENECKS_CONFIG}/os_cacert
+
+
+##############################################################################
+# Preparing scripts for openstack and pod configs for OPNFV Installers
+##############################################################################
+# Define Variables
+info "Downloading Releng fetch_os_creds script for openstack/pod configs of OPNFV installers"
+
[ -d ${RELENG_REPO} ] && rm -rf ${RELENG_REPO}
git clone https://gerrit.opnfv.org/gerrit/releng ${RELENG_REPO} >${redirect}
-echo "BOTTLENECKS INFO: Downloading Yardstick"
+info "Downloading Yardstick for pod configs of OPNFV installers"
YARDSTICK_REPO="/home/yardstick"
[ -d ${YARDSTICK_REPO} ] && rm -rf ${YARDSTICK_REPO}
git clone https://gerrit.opnfv.org/gerrit/yardstick ${YARDSTICK_REPO} >${redirect}
-BOTTLENECKS_CONFIG=/tmp
-
-OPENRC=${BOTTLENECKS_CONFIG}/admin_rc.sh
-OS_CACERT=${BOTTLENECKS_CONFIG}/os_cacert
-
# Preparing configuration files for testing
if [[ ${INSTALLER_TYPE} != "" ]]; then
# Preparing OpenStack RC and Cacert files
@@ -84,73 +93,79 @@ if [[ ${INSTALLER_TYPE} != "" ]]; then
INSTALLER_IP=192.168.200.2
if [[ ${BRANCH} == 'master' ]]; then
${RELENG_REPO}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} -o ${OS_CACERT} >${redirect}
- if [[ -f ${OS_CACERT} ]]; then
- echo "BOTTLENECKS INFO: successfully fetching os_cacert for openstack: ${OS_CACERT}"
- else
- echo "BOTTLENECKS ERROR: couldn't find os_cacert file: ${OS_CACERT}, please check if the it's been properly provided."
- exit 1
- fi
else
${RELENG_REPO}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} >${redirect}
fi
+ elif [[ $INSTALLER_TYPE == 'apex' ]]; then
+ INSTALLER_IP=$(sudo virsh domifaddr undercloud | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
+ ${RELENG_REPO}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} -o ${OS_CACERT} >${redirect}
+ echo ${cmd}
+ ${cmd}
else
- error "The isntaller is not specified"
- exit 1
- fi
-
- if [[ -f ${OPENRC} ]]; then
- echo "BOTTLENECKS INFO: openstack credentials path is ${OPENRC}"
- if [[ $INSTALLER_TYPE == 'compass' && ${BRANCH} == 'master' ]]; then
- echo "BOTTLENECKS INFO: writing ${OS_CACERT} to ${OPENRC}"
- echo "export OS_CACERT=${OS_CACERT}" >> ${OPENRC}
- fi
- cat ${OPENRC}
- else
- echo "BOTTLENECKS ERROR: couldn't find openstack rc file: ${OPENRC}, please check if the it's been properly provided."
+ error "The installer is not specified"
exit 1
fi
# Finding and crearting POD description files from different deployments
- ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
-
- if [ "$INSTALLER_TYPE" == "fuel" ]; then
- echo "Fetching id_rsa file from jump_server $INSTALLER_IP..."
- sshpass -p r00tme sudo scp $ssh_options root@${INSTALLER_IP}:~/.ssh/id_rsa ${BOTTLENECKS_CONFIG}/id_rsa
- fi
+ if [[ ${INSTALLER_TYPE} == 'compass' ]]; then
+ cmd="sudo cp ${YARDSTICK_REPO}/etc/yardstick/nodes/compass_sclab_virtual/pod.yaml \
+ ${BOTTLENECKS_CONFIG}"
+ info ${cmd}
+ ${cmd}
+ elif [[ ${INSTALLER_TYPE} == 'apex' ]]; then
+ sudo pip install virtualenv
- if [ "$INSTALLER_TYPE" == "apex" ]; then
- echo "Fetching id_rsa file from jump_server $INSTALLER_IP..."
- sudo scp $ssh_options stack@${INSTALLER_IP}:~/.ssh/id_rsa ${BOTTLENECKS_CONFIG}/id_rsa
- fi
+ sudo virtualenv venv
+ source venv/bin/activate
+ sudo pip install -e ${RELENG_REPO}/modules/ >/dev/null
+ sudo pip install netaddr
- if [[ ${INSTALLER_TYPE} == compass ]]; then
- options="-u root -p root"
- elif [[ ${INSTALLER_TYPE} == fuel ]]; then
- options="-u root -p r00tme"
- elif [[ ${INSTALLER_TYPE} == apex ]]; then
options="-u stack -k /root/.ssh/id_rsa"
- else
- echo "Don't support to generate pod.yaml on ${INSTALLER_TYPE} currently."
- fi
-
- if [[ ${INSTALLER_TYPE} != compass ]]; then
cmd="sudo python ${RELENG_REPO}/utils/create_pod_file.py -t ${INSTALLER_TYPE} \
- -i ${INSTALLER_IP} ${options} -f ${BOTTLENECKS_CONFIG}/pod.yaml \
- -s ${BOTTLENECKS_CONFIG}/id_rsa"
- echo ${cmd}
+ -i ${INSTALLER_IP} ${options} -f ${BOTTLENECKS_CONFIG}/pod.yaml"
+ info ${cmd}
${cmd}
- else
- cmd="sudo cp ${YARDSTICK_REPO}/etc/yardstick/nodes/compass_sclab_virtual/pod.yaml \
- ${BOTTLENECKS_CONFIG}"
- echo ${cmd}
+
+ ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
+ cmd="sudo scp $ssh_options stack@${INSTALLER_IP}:~/.ssh/id_rsa ${BOTTLENECKS_CONFIG}/id_rsa"
+ info ${cmd}
${cmd}
+
+ deactivate
fi
+
+ ##############################################################################
+ # Check the existence of the output configs for OPNFV Installers
+ ##############################################################################
+ # Checking the pod decription file
if [ -f ${BOTTLENECKS_CONFIG}/pod.yaml ]; then
- echo "FILE: ${BOTTLENECKS_CONFIG}/pod.yaml:"
+ info "FILE - ${BOTTLENECKS_CONFIG}/pod.yaml:"
cat ${BOTTLENECKS_CONFIG}/pod.yaml
else
- echo "ERROR: cannot find file ${BOTTLENECKS_CONFIG}/pod.yaml. Please check if it is existing."
+ error "Cannot find file ${BOTTLENECKS_CONFIG}/pod.yaml. Please check if it is existing."
sudo ls -al ${BOTTLENECKS_CONFIG}
fi
+
+ # Checking the openstack rc and os_cacert file
+ if [[ -f ${OPENRC} ]]; then
+ info "Opentack credentials path is ${OPENRC}"
+ if [[ -f ${OS_CACERT} ]]; then
+ info "Writing ${OS_CACERT} to ${OPENRC}"
+ echo "export OS_CACERT=${OS_CACERT}" >> ${OPENRC}
+ cat ${OPENRC}
+ else
+ error "Couldn't find openstack cacert file: ${OS_CACERT}, please check if the it's been properly provided."
+ fi
+ else
+ error "Couldn't find openstack rc file: ${OPENRC}, please check if the it's been properly provided."
+ exit 1
+ fi
+
+ # Checking ssh key id_rsa
+ if [[ -f "/tmp/id_rsa" ]]; then
+ info "Path of ssh key file for openstack nodes is /tmp/id_rsa"
+ else
+ error "Couldn't find the ssh key file for openstack nodes. If you are using user/pwd in pod.yaml, please ignore."
+ fi
fi
diff --git a/utils/env_prepare/moon_prepare.bash b/utils/env_prepare/moon_prepare.bash
new file mode 100644
index 00000000..7625418c
--- /dev/null
+++ b/utils/env_prepare/moon_prepare.bash
@@ -0,0 +1,35 @@
+#!/bin/bash
+##############################################################################
+# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+if grep -q "cadvisor" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+then
+ sed -e "/cadvisor-port=0/d" -i /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
+ systemctl daemon-reload
+ systemctl restart kubelet
+
+fi
+if kubectl get po -n monitoring |grep prometheus-k8s |grep -q Running
+then
+ echo "monitoring k8s deployment has been done"
+else
+ git clone https://github.com/coreos/prometheus-operator.git
+ cd prometheus-operator
+ kubectl apply -n kube-system -f bundle.yaml
+ cd contrib/kube-prometheus
+ sleep 10
+ hack/cluster-monitoring/deploy
+fi
+
+while ! $(kubectl get po -n monitoring |grep prometheus-k8s |grep -q Running);do
+ echo "waiting for monitoring deployment finish!"
+ sleep 10
+done
+
+echo "waiting for monitoring tool works"
+sleep 60
diff --git a/utils/env_prepare/moon_prepare.py b/utils/env_prepare/moon_prepare.py
new file mode 100644
index 00000000..41739454
--- /dev/null
+++ b/utils/env_prepare/moon_prepare.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+##############################################################################
+# Copyright (c) 2018 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import utils.infra_setup.passwordless_SSH.ssh as localssh
+
+
+def moon_envprepare(host_info):
+ if ("password") in host_info:
+ client = localssh.SSH(user=host_info["user"],
+ host=host_info["ip"],
+ password=host_info["password"])
+ else:
+ client = localssh.SSH(user=host_info["user"],
+ host=host_info["ip"],
+ key_filename=host_info["keyfile"])
+ with open("/home/opnfv/bottlenecks/utils/env_prepare/moon_prepare.bash",
+ "rb") as stdin_file:
+ client.run("cat > ~/bottlenecks_envprepare.bash", stdin=stdin_file)
+ client.execute("sudo bash ~/bottlenecks_envprepare.bash")
diff --git a/utils/env_prepare/quota_prepare.py b/utils/env_prepare/quota_prepare.py
index 267e70ab..367f7613 100644
--- a/utils/env_prepare/quota_prepare.py
+++ b/utils/env_prepare/quota_prepare.py
@@ -42,18 +42,52 @@ nova_quota = {"ram": -1,
"injected_file_path_bytes": -1}
+def check_https_enabled():
+ LOG.debug("Check if https is enabled in OpenStack")
+ os_auth_url = os.getenv('OS_AUTH_URL')
+ if os_auth_url.startswith('https'):
+ LOG.debug("https is enabled")
+ return True
+ LOG.debug("https is not enabled")
+ return False
+
+
def quota_env_prepare():
- tenant_name = os.getenv("OS_TENANT_NAME")
- cmd = ("openstack project list | grep " +
- tenant_name +
- " | awk '{print $2}'")
+ https_enabled = check_https_enabled()
+ insecure_option = ''
+ insecure = os.getenv('OS_INSECURE',)
+ if https_enabled:
+ LOG.info("https is enabled")
+ if insecure:
+ if insecure.lower() == "true":
+ insecure_option = ' --insecure '
+ else:
+ LOG.warn("Env variable OS_INSECURE is {}: if https + no "
+ "credential used, it should be set as True."
+ .format(insecure))
- result = commands.getstatusoutput(cmd)
- if result[0] == 0:
- LOG.info("Get %s project id is %s" % (tenant_name, result[1]))
+ quota_name = os.getenv("OS_PROJECT_NAME")
+ if quota_name:
+ cmd = ("openstack {} project list | grep ".format(insecure_option) +
+ quota_name +
+ " | awk '{print $2}'")
+ result = commands.getstatusoutput(cmd)
+ if result[0] == 0 and 'exception' not in result[1]:
+ LOG.info("Get %s project name is %s" % (quota_name, result[1]))
+ else:
+ LOG.error("can't get openstack project name")
+ return 1
else:
- LOG.error("can't get openstack project id")
- return 1
+ quota_name = os.getenv("OS_TENANT_NAME")
+ cmd = ("openstack {} tenant list | grep ".format(insecure_option) +
+ quota_name +
+ " | awk '{print $2}'")
+ result = commands.getstatusoutput(cmd)
+ if result[0] == 0 and 'exception' not in result[1]:
+ LOG.info("Get %s tenant name is %s" % (quota_name, result[1]))
+ else:
+ LOG.error("can't get openstack tenant name")
+ return 1
openstack_id = result[1]
@@ -62,7 +96,7 @@ def quota_env_prepare():
nova_q = nova_client.quotas.get(openstack_id).to_dict()
neutron_q = neutron_client.show_quota(openstack_id)
- LOG.info(tenant_name + "tenant nova and neutron quota(previous) :")
+ LOG.info(quota_name + " nova and neutron quotas (previous) :")
LOG.info(nova_q)
LOG.info(neutron_q)
@@ -73,7 +107,7 @@ def quota_env_prepare():
nova_q = nova_client.quotas.get(openstack_id).to_dict()
neutron_q = neutron_client.show_quota(openstack_id)
- LOG.info(tenant_name + "tenant nova and neutron quota(now) :")
+ LOG.info(quota_name + " nova and neutron quotas (now) :")
LOG.info(nova_q)
LOG.info(neutron_q)
return 0
diff --git a/utils/env_prepare/stack_prepare.py b/utils/env_prepare/stack_prepare.py
index c7dae390..6b9bc510 100644
--- a/utils/env_prepare/stack_prepare.py
+++ b/utils/env_prepare/stack_prepare.py
@@ -14,6 +14,7 @@ from utils.logger import Logger
from utils.parser import Parser as config
import utils.infra_setup.heat.manager as utils
import utils.infra_setup.runner.docker_env as docker_env
+import utils.infra_setup.heat.manager as client_manager
LOG = Logger(__name__).getLogger()
@@ -37,16 +38,6 @@ def _prepare_env_daemon(test_yardstick):
config.bottlenecks_config["yardstick_rc_dir"])
docker_env.docker_exec_cmd(yardstick_contain,
cmd)
- file_orig = ("/home/opnfv/repos/yardstick/etc"
- "/yardstick/yardstick.conf.sample")
- file_after = "/etc/yardstick/yardstick.conf"
- cmd = "cp %s %s" % (file_orig,
- file_after)
- docker_env.docker_exec_cmd(yardstick_contain,
- cmd)
- cmd = "sed -i '12s/http/file/g' /etc/yardstick/yardstick.conf"
- docker_env.docker_exec_cmd(yardstick_contain,
- cmd)
# update the external_network
_source_file(rc_file)
@@ -83,7 +74,14 @@ def _source_file(rc_file):
p = subprocess.Popen(". %s; env" % rc_file, stdout=subprocess.PIPE,
shell=True)
output = p.communicate()[0]
- env = dict((line.split('=', 1) for line in output.splitlines()))
+ output_lines = output.splitlines()
+ env = list()
+ for line in output_lines:
+ if '=' in line:
+ env.append(tuple(line.split('=', 1)))
+
+ env = dict(env)
+# env = dict((line.split('=', 1) for line in output_lines))
os.environ.update(env)
return env
@@ -103,3 +101,30 @@ def _append_external_network(rc_file):
except OSError as e:
if e.errno != errno.EEXIST:
raise
+
+
+def prepare_image(image_name, image_dir):
+ glance_client = client_manager._get_glance_client()
+ if not os.path.isfile(image_dir):
+ LOG.error("Error: file %s does not exist.", image_dir)
+ return None
+ try:
+ images = glance_client.images.list()
+ image_id = next((i.id for i in images if i.name == image_name), None)
+ if image_id is not None:
+ LOG.info("Image %s already exists.", image_name)
+ else:
+ LOG.info("Creating image '%s' from '%s'...", image_name, image_dir)
+
+ image = glance_client.images.create(
+ name=image_name, visibility="public", disk_format="qcow2",
+ container_format="bare")
+ image_id = image.id
+ with open(image_dir) as image_data:
+ glance_client.images.upload(image_id, image_data)
+ return image_id
+ except Exception: # pylint: disable=broad-except
+ LOG.error(
+ "Error [create_glance_image(glance_client, '%s', '%s')]",
+ image_name, image_dir)
+ return None
diff --git a/utils/infra_setup/heat/manager.py b/utils/infra_setup/heat/manager.py
index 5c181ae6..1a360b78 100644
--- a/utils/infra_setup/heat/manager.py
+++ b/utils/infra_setup/heat/manager.py
@@ -35,7 +35,7 @@ def _get_neutron_client():
return neutron_client
-def stack_create_images(
+def create_images(
imagefile=None,
image_name="bottlenecks_image"):
print "========== Create image in OS =========="
diff --git a/utils/infra_setup/runner/docker_env.py b/utils/infra_setup/runner/docker_env.py
index 54478ffc..438d3d19 100644
--- a/utils/infra_setup/runner/docker_env.py
+++ b/utils/infra_setup/runner/docker_env.py
@@ -45,7 +45,7 @@ def env_yardstick(docker_name):
volume = get_self_volume()
yardstick_tag = os.getenv("Yardstick_TAG")
if yardstick_tag is None:
- yardstick_tag = "danube.3.1"
+ yardstick_tag = "latest"
env_docker = client.containers.run(image="opnfv/yardstick:%s"
% yardstick_tag,
privileged=True,
diff --git a/utils/infra_setup/runner/yardstick.py b/utils/infra_setup/runner/yardstick.py
index 559b9c10..3eeeee6b 100644
--- a/utils/infra_setup/runner/yardstick.py
+++ b/utils/infra_setup/runner/yardstick.py
@@ -15,15 +15,27 @@ At present, This file contain the following function:
4.how the process of task.'''
import sys
+import os
import time
import requests
import json
+import urllib
import utils.logger as logger
+from utils.parser import Parser as config
+import utils.env_prepare.stack_prepare as env
headers = {"Content-Type": "application/json"}
LOG = logger.Logger(__name__).getLogger()
+def yardstick_image_prepare():
+ if not os.path.exists(config.bottlenecks_config["yardstick_image_dir"]):
+ urllib.urlretrieve(config.bottlenecks_config["image_url"],
+ config.bottlenecks_config["yardstick_image_dir"])
+ env.prepare_image(config.bottlenecks_config["yardstick_image_name"],
+ config.bottlenecks_config["yardstick_image_dir"])
+
+
def yardstick_command_parser(debug, cidr, outfile, parameter):
cmd = "yardstick"
if debug:
@@ -31,6 +43,9 @@ def yardstick_command_parser(debug, cidr, outfile, parameter):
cmd += " task start "
cmd += str(cidr)
cmd += " --output-file " + outfile
+ image_name = config.bottlenecks_config["yardstick_image_name"]
+ parameter["image_name"] = image_name
+ LOG.info(parameter)
if parameter is not None:
cmd += " --task-args " + '"' + str(parameter) + '"'
return cmd
diff --git a/utils/parser.py b/utils/parser.py
index b46a3b91..c0c10721 100644
--- a/utils/parser.py
+++ b/utils/parser.py
@@ -45,6 +45,11 @@ class Parser():
cls.bottlenecks_config["pod_info"] = common_config['pod_info']
cls.bottlenecks_config["yardstick_rc_dir"] = \
common_config['yardstick_rc_dir']
+ cls.bottlenecks_config["yardstick_image_dir"] = \
+ common_config['yardstick_image_dir']
+ cls.bottlenecks_config["image_url"] = common_config['image_url']
+ cls.bottlenecks_config["yardstick_image_name"] = \
+ common_config['yardstick_image_name']
cls.config_dir_check(cls.bottlenecks_config["log_dir"])
@classmethod
diff --git a/verify.sh b/verify.sh
index 64b5072b..1cdac39c 100755
--- a/verify.sh
+++ b/verify.sh
@@ -12,6 +12,7 @@
# Run flake8, unit, coverage test
getopts ":f" FILE_OPTION
+STYLE_CHECK_DIRS="testsuites/posca/ utils/ monitor/"
run_flake8() {
echo "========================================="
@@ -19,9 +20,9 @@ run_flake8() {
echo "-----------------------------------------"
logfile=flake8_verify.log
if [ $FILE_OPTION == "f" ]; then
- flake8 --append-config=flake8_cfg testsuites/posca/ utils/ > $logfile
+ flake8 --append-config=flake8_cfg ${STYLE_CHECK_DIRS} > $logfile
else
- flake8 --append-config=flake8_cfg testsuites/posca/ utils/
+ flake8 --append-config=flake8_cfg ${STYLE_CHECK_DIRS}
fi
if [ $? -ne 0 ]; then
@@ -53,7 +54,8 @@ run_nosetests() {
utils/env_prepare/__init__.py \
utils/infra_setup/__init__.py \
monitor/__init__.py \
- monitor/config/__init__.py
+ monitor/dashboard/__init__.py \
+ monitor/dispatch/__init__.py
echo "===================END==================="
}