Retire monasca-api repository

This repository is being retired as part of the Monasca project
retirement. The project content has been replaced with a retirement
notice.

Needed-By: I3cb522ce8f51424b64e93c1efaf0dfd1781cd5ac
Change-Id: Iaafdd53ec64083e46aa0ac72d37346465826eb67
Signed-off-by: Goutham Pacha Ravi <gouthampravi@gmail.com>
This commit is contained in:
Goutham Pacha Ravi
2025-08-11 22:14:27 -07:00
parent 681cf917fc
commit b164b2e494
528 changed files with 7 additions and 74761 deletions

View File

@@ -1,8 +0,0 @@
[run]
branch = True
source = monasca_api
omit = monasca_api/tests/*
[report]
ignore_errors = True

View File

@@ -1,4 +0,0 @@
[DEFAULT]
test_path=$OS_TEST_PATH
top_dir=./
group_regex=monasca_api\.tests(?:\.|_)([^_]+)

View File

@@ -1,262 +0,0 @@
- job:
name: monasca-tempest-base
parent: devstack-tempest
description: |
Base job for running tempest tests with monasca-api devstack plugin.
timeout: 7800
required-projects:
- openstack/monasca-agent
- openstack/monasca-api
- openstack/monasca-common
- openstack/monasca-grafana-datasource
- openstack/monasca-notification
- openstack/monasca-persister
- openstack/monasca-statsd
- openstack/monasca-thresh
- openstack/monasca-ui
- openstack/python-monascaclient
- openstack/tempest
- openstack/monasca-tempest-plugin
vars:
devstack_services:
# Disable unneeded services.
etcd3: false
g-api: false
g-reg: false
n-api: false
n-api-meta: false
n-cauth: false
n-cond: false
n-cpu: false
n-novnc: false
n-obj: false
n-sch: false
placement-api: false
s-account: false
s-container: false
s-object: false
s-proxy: false
c-api: false
c-bak: false
c-sch: false
c-vol: false
cinder: false
horizon: false
monasca-log: false
tox_envlist: all
devstack_localrc:
USE_PYTHON3: true
tempest_test_regex: monasca_tempest_tests.tests.api
devstack_plugins:
monasca-api: https://opendev.org/openstack/monasca-api
zuul_copy_output:
/var/log/kafka: logs
/var/log/storm: logs
/var/log/zookeeper: logs
/var/log/monasca/notification: logs
/etc/kafka/server.properties: logs
/etc/kafka/producer.properties: logs
/etc/kafka/consumer.properties: logs
/etc/monasca/monasca-notification.conf: logs
irrelevant-files:
- ^.*\.rst$
- ^.*\.md$
- ^doc/.*$
- ^releasenotes/.*$
- job:
name: monasca-tempest-log-base
parent: devstack-tempest
description: |
Base job for running tempest tests with monasca-log-api devstack plugin.
timeout: 7800
required-projects:
- openstack/monasca-api
- openstack/monasca-common
- openstack/python-monascaclient
- openstack/tempest
- openstack/monasca-tempest-plugin
- openstack/monasca-kibana-plugin
vars:
devstack_services:
monasca-log: true
monasca-log-api: true
# Disable unneeded services.
monasca-agent: false
monasca-notification: false
monasca-persister: false
monasca-thresh: false
monasca-storm: false
etcd3: false
g-api: false
g-reg: false
n-api: false
n-api-meta: false
n-cauth: false
n-cond: false
n-cpu: false
n-novnc: false
n-obj: false
n-sch: false
placement-api: false
s-account: false
s-container: false
s-object: false
s-proxy: false
c-api: false
c-bak: false
c-sch: false
c-vol: false
cinder: false
horizon: false
tox_envlist: all
devstack_localrc:
USE_PYTHON3: true
tempest_test_regex: monasca_tempest_tests.tests.log_api
devstack_plugins:
monasca-api: https://opendev.org/openstack/monasca-api
zuul_copy_output:
/var/log/kafka: logs
/var/log/monasca/notification: logs
/etc/kafka/server.properties: logs
/etc/kafka/producer.properties: logs
/etc/kafka/consumer.properties: logs
/etc/monasca/monasca-notification.conf: logs
irrelevant-files:
- ^.*\.rst$
- ^.*\.md$
- ^doc/.*$
- ^releasenotes/.*$
- job:
name: monasca-tempest-python3-influxdb
parent: monasca-tempest-base
vars:
devstack_localrc:
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: python
MONASCA_METRICS_DB: influxdb
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
- job:
name: monasca-tempest-java-influxdb
parent: monasca-tempest-base
voting: false
vars:
devstack_localrc:
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: java
MONASCA_METRICS_DB: influxdb
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
- job:
name: monasca-tempest-python3-cassandra
parent: monasca-tempest-base
voting: false
vars:
devstack_localrc:
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: python
MONASCA_METRICS_DB: cassandra
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
tempest_test_regex: (?!.*\[.*\btimerange\b.*\])(^monasca_tempest_tests.tests.api)
- job:
name: monasca-tempest-python3-java-cassandra
parent: monasca-tempest-base
voting: false
vars:
devstack_localrc:
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: java
MONASCA_METRICS_DB: cassandra
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
tempest_test_regex: (?!.*\[.*\btimerange\b.*\])(^monasca_tempest_tests.tests.api)
- job:
name: monasca-tempest-log-python3-influxdb
parent: monasca-tempest-log-base
voting: false
vars:
devstack_localrc:
USE_OLD_LOG_API: false
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: python
MONASCA_METRICS_DB: influxdb
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
- job:
name: monasca-tempest-log-oldapi-python3-influxdb
parent: monasca-tempest-log-base
vars:
devstack_localrc:
USE_OLD_LOG_API: true
MONASCA_API_IMPLEMENTATION_LANG: python
MONASCA_PERSISTER_IMPLEMENTATION_LANG: python
MONASCA_METRICS_DB: influxdb
TEMPEST_PLUGINS: /opt/stack/monasca-tempest-plugin
- project:
queue: monasca
templates:
- check-requirements
- openstack-cover-jobs
- openstack-python3-jobs
- publish-openstack-docs-pti
- release-notes-jobs-python3
check:
jobs:
- monasca-tempest-log-python3-influxdb
- monasca-tempest-python3-influxdb
- build-monasca-docker-image
gate:
jobs:
- monasca-tempest-python3-influxdb
- monasca-tempest-log-python3-influxdb
post:
jobs:
- publish-monasca-api-docker-image
periodic:
jobs:
- publish-monasca-api-docker-image
release:
jobs:
- publish-monasca-api-docker-image
- job:
name: publish-monasca-api-docker-image
parent: build-monasca-docker-image
post-run: playbooks/docker-publish.yml
required-projects:
- openstack/monasca-common
vars:
publisher: true
secrets:
- doker_hub_login_api
- secret:
name: doker_hub_login_api
data:
user: !encrypted/pkcs1-oaep
- JQCFFaHjbMstCHOxW9JxepuFbsdOKhs/swCkfbzgqiNDyL91e2AF6tazGf8EtMxX6brP4
vCGWFEkMUGxBxVbpwRMUf4mSCOzs2+3/4S1NVr5+ppQEgYVDON4S5BbC2jnwawuB4DKLa
tDYkmgTMIPqxK29giQN/W/wbo0uIAObpRJuCyHY/eNxfC4fzajpGisyu2D3b606Cw15uA
KRw5GexwxN/D0pPvAgT/lwlVrm8Lz9NUziQANL+55gjo9Xs0OIu+OXwiUhZE45TmfpBLF
VO9oOWT+Fhpv2LTA8M1m5vrDo5H03qbn/MNZaiqcPYnPJtnd4pQ0o7DewUk6OBZcPnnVB
RGJm3aO0cs19s0LEwbXxe9URzWeilp/IQdRY42FySmz/OcBqicie0FEr+W0vkq+6lvkmZ
Z9UTw7WDaF0kauhS/yy8wgcbdARmKemBQWWJLZg+2HuVLFqMLlo6bMMagtIN1x/bPj+SX
4VuPfqCJoynvroQTqY+QuDBJy9Q6IoRGlWUGyIW3kOskRZRsYpaAKZExgNkmkumJ7jJr9
vI9DOTYxQMBlRptEAExy5OOkIypmpYqoPEF9PnutjIGEHN4gy+ZPHMwD7ht3aG+riDhHl
P1BUBH4cRVOpkHcsqP46hw1uty3QEZMjlk2j8831bfr+opagsaGTqK1CVMM6zg=
password: !encrypted/pkcs1-oaep
- r5q4gVugtWsad/4/BeTmu6PFdlHkxe+q8R3TOnsitUrnnpQH4y0jq4edIgzQtfQUyk+bV
9Z4mr7UkI/Yd2Ia1IgzgyjSNLxABtm1JevzLD0XeQTtr/uurTXTMoQJqcveAWWfumrlVx
sIxlr9uujByrmS1OLhFc3S0TBcpwk5hg786RNC6MJVnrQJwKy8MVZaGvh95OoGXuEGkIg
z06afI+QGcJExV1n+zp1aCX1SKIOZlEG0Y70HJYUSfBjtXTCmpybsHk7exqL2Krwb/Oyo
fsWuQbjbN1kdBh7tVg/w0KR2jSvNnh9tLDX97b3qB0iN14cqD45kApF/LclDUy4xryj6+
ij6YbvBQLWDiMMy47FhVCZQ5sfM6MYvaDA3DpJe7DZXOQFxZp9KGB50zAlVm+PssCNY/g
kBqBJA0qd0Nwixkku8trokwShUzVFAaWfPr9zj0/lAk5jFDz42NK5pfM0o0M84Duof+7u
wxp5H4wnwPXauDbC+LhI12s3J0teDnaXNwCTTPd+NWi1w50N0JH8nDVkz+g3cZA7mAW83
cvrC3If9SyQZi/9GNphNzVPfG6llOeAkNno5f4CXoGxuoMgw17Px7HnCO50XPYLUfORzo
eLG2QHqbHIiMgIpy30YvVKRsvjLvKId6I2s51oj918U96mt/jef6Ct0Q5jybTs=

View File

@@ -1,19 +0,0 @@
The source repository for this project can be found at:
https://opendev.org/openstack/monasca-api.git
Pull requests submitted through GitHub are not monitored.
To start contributing to OpenStack, follow the steps in the contribution guide
to set up and use Gerrit:
https://docs.openstack.org/contributors/code-and-documentation/quick-start.html
Bugs should be filed on Storyboard:
https://storyboard.openstack.org/#!/project/863
For more specific information about contributing to this repository, see the
Monasca contributor guide:
https://docs.openstack.org/monasca-api/latest/contributor/contributing.html

View File

@@ -1,139 +1,9 @@
Team and repository tags
========================
This project is no longer maintained.
.. image:: https://governance.openstack.org/tc/badges/monasca-api.svg
:target: https://governance.openstack.org/tc/reference/tags/index.html
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
.. Change things from this point on
Overview
========
``monasca-api`` is a RESTful API server that is designed with a `layered
architecture`_.
Documentation
-------------
The full API Specification can be found in `docs/monasca-api-spec.md`_
Python Monasca API Implementation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To install the python api implementation, git clone the source and run
the following command:
::
$ sudo python setup.py install
If it installs successfully, you will need to make changes to the
following two files to reflect your system settings, especially where
kafka server is located:
::
/etc/monasca/api-config.ini
/etc/monasca/monasca-api.conf
/etc/monasca/api-logging.conf
Once the configuration files are modified to match your environment, you
can start up the server by following the following instructions.
To start the server, run the following command:
::
Running the server in foreground mode
$ gunicorn -k eventlet --worker-connections=2000 --backlog=1000 --paste /etc/monasca/api-config.ini
Running the server as daemons
$ gunicorn -k eventlet --worker-connections=2000 --backlog=1000 --paste /etc/monasca/api-config.ini -D
To check if the code follows python coding style, run the following
command from the root directory of this project
::
$ tox -e pep8
To run all the unit test cases, run the following command from the root
directory of this project
::
$ tox -e py36
Start the Server - for Apache
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To start the server using Apache: create a modwsgi file, create a
modwsgi configuration file, and enable the wsgi module in Apache.
The modwsgi configuration file may look something like this, and the
site will need to be enabled:
.. code:: apache
Listen 8070
<VirtualHost *:8070>
WSGIDaemonProcess monasca-api processes=4 threads=1 socket-timeout=120 user=mon-api group=monasca python-path=/usr/local/lib/python2.7/site-packages
WSGIProcessGroup monasca-api
WSGIApplicationGroup monasca-api
WSGIScriptAlias / /usr/local/lib/python2.7/site-packages/monasca_api/api/wsgi/monasca_api.py
WSGIPassAuthorization On
LogLevel info
ErrorLog /var/log/monasca-api/wsgi.log
CustomLog /var/log/monasca-api/wsgi-access.log combined
<Directory /usr/local/lib/python2.7/site-packages/monasca_api>
Require all granted
</Directory>
SetEnv no-gzip 1
</VirtualHost>
The wsgi file may look something like this:
.. code:: py
from monasca_api.api import server
application = server.get_wsgi_app(config_base_path='/etc/monasca')
Java Implementation
~~~~~~~~~~~~~~~~~~~
Details on usage can be found `here`_
WARNING: The Java implementation of Monasca API is DEPRECATED and will
be removed in future release.
License
=======
Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
::
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
.. _layered architecture: https://en.wikipedia.org/wiki/Multilayered_architecture
.. _docs/monasca-api-spec.md: docs/monasca-api-spec.md
.. _here: /docs/java.md
For any further questions, please email openstack-discuss@lists.openstack.org
or join #openstack-dev on OFTC.

View File

@@ -1,196 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Key Manager API documentation build configuration file
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.6'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'os_api_ref',
'openstackdocstheme'
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General details about project
openstackdocs_repo_name = u'openstack/monasca-api'
openstackdocs_use_storyboard = True
copyright = u'2014-present, OpenStack Foundation'
author = u'OpenStack Foundation'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
# today = ''
# Else, today_fmt is used as the format for a strftime call.
# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = []
# The reST default role (used for this markup: `text`) to use for all
# documents.
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'native'
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
# keep_warnings = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'openstackdocs'
# To use the API Reference sidebar dropdown menu,
# uncomment the html_theme_options parameter. The theme
# variable, sidebar_dropdown, should be set to `api_ref`.
# Otherwise, the list of links for the User and Ops docs
# appear in the sidebar dropdown menu.
html_theme_options = {"sidebar_dropdown": "api_ref",
"sidebar_mode": "toc"}
# A shorter title for the navigation bar. Default is the same as html_title.
html_short_title = 'API Ref'
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = []
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
# html_extra_path = []
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
# html_additional_pages = {}
# If false, no module index is generated.
# html_domain_indices = True
# If false, no index is generated.
html_use_index = True
# If true, the index is split into individual pages for each letter.
# html_split_index = False
# If true, links to the reST sources are added to the pages.
# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
# html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'MonitoringApiRefDoc'
# -- Options for LaTeX output ---------------------------------------------
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'MonitoringApiRef.tex', u'Monitoring Service API Reference',
[author], 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
# latex_use_parts = False
# If true, show page references after internal links.
# latex_show_pagerefs = False
# If true, show URL addresses after external links.
# latex_show_urls = False
# Documents to append as an appendix to all manuals.
# latex_appendices = []
# If false, no module index is generated.
# latex_domain_indices = True
# -- Options for Internationalization output ------------------------------
locale_dirs = ['locale/']

View File

@@ -1,22 +0,0 @@
:tocdepth: 2
..
Copyright 2017 Fujitsu LIMITED
Licensed under the Apache License, Version 2.0 (the "License"); you may
not use this file except in compliance with the License. You may obtain
a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
=======================
Monitoring Service APIs
=======================
.. rest_expand_all::

View File

@@ -1,2 +0,0 @@
[python: **.py]

View File

@@ -1,6 +0,0 @@
# This is a cross-platform list tracking distribution packages needed for install and tests;
# see http://docs.openstack.org/infra/bindep/ for additional information.
maven
openjdk-8-jdk
libssl-dev [platform:dpkg]

View File

@@ -1,30 +0,0 @@
#!/bin/sh
set -x
ME=`whoami`
echo "Running as user: $ME"
MVN=$1
VERSION=$2
BRANCH=$3
check_user() {
ME=$1
if [ "${ME}" != "zuul" ]; then
echo "\nERROR: Download monasca-common and do a mvn install to install the monasca-commom jars\n" 1>&2
exit 1
fi
}
BUILD_COMMON=false
POM_FILE=~/.m2/repository/monasca-common/monasca-common/${VERSION}/monasca-common-${VERSION}.pom
if [ ! -r "${POM_FILE}" ]; then
check_user "${ME}"
BUILD_COMMON=true
fi
# This should only be done on the stack forge system
if [ "${BUILD_COMMON}" = "true" ]; then
git clone -b ${BRANCH} https://git.openstack.org/openstack/monasca-common --depth 1
cd monasca-common
${MVN} clean
${MVN} install
fi

View File

@@ -1,19 +0,0 @@
================
config-generator
================
To generate sample configuration file execute::
tox -e genconfig
To generate the sample policies execute::
tox -e genpolicy
After generation you will have sample available in
``etc/api-policy.yaml.sample``. It contains default values for all policies.
After you change it to suit your needs you will need to change monasca-api
configuration to look for the new policy configuration with specific file name.
Head to ``monasca-api.conf`` file and then you will need to replace
in ``[oslo_policy]`` section ``policy_file`` to your desired file name
(like ``api-policy.yaml``).

View File

@@ -1,10 +0,0 @@
[DEFAULT]
output_file = etc/monasca-api.conf.sample
wrap_width = 79
format = ini
summarize = True
namespace = monasca_api
namespace = oslo.log
namespace = oslo.db
namespace = oslo.policy
namespace = keystonemiddleware.auth_token

View File

@@ -1,4 +0,0 @@
[DEFAULT]
output_file = etc/api-policy.yaml.sample
format = yaml
namespace = monasca_api

View File

@@ -1,94 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
# (C) Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
sleep 6
function load_devstack_utilities {
source $BASE/new/devstack/stackrc
source $BASE/new/devstack/functions
source $BASE/new/devstack/openrc admin admin
}
function setup_monasca_api {
local constraints="-c /opt/stack/new/requirements/upper-constraints.txt"
pushd $TEMPEST_DIR
sudo -EH pip install $constraints -r requirements.txt -r test-requirements.txt
popd;
pushd $MONASCA_API_DIR
sudo -EH pip install $constraints -r requirements.txt -r test-requirements.txt
sudo -EH python setup.py install
popd;
}
function set_tempest_conf {
local conf_file=$TEMPEST_DIR/etc/tempest.conf
pushd $TEMPEST_DIR
oslo-config-generator \
--config-file tempest/cmd/config-generator.tempest.conf \
--output-file $conf_file
popd
cp -f $DEST/tempest/etc/logging.conf.sample $DEST/tempest/etc/logging.conf
# set identity section
iniset $conf_file identity admin_domain_scope True
iniset $conf_file identity user_unique_last_password_count 2
iniset $conf_file identity user_locakout_duration 5
iniset $conf_file identity user_lockout_failure_attempts 2
iniset $conf_file identity uri $OS_AUTH_URL/v2.0
iniset $conf_file identity uri_v3 $OS_AUTH_URL/v3
iniset $conf_file identity auth_version v$OS_IDENTITY_API_VERSION
# set auth section
iniset $conf_file auth use_dynamic_credentials True
iniset $conf_file auth admin_username $OS_USERNAME
iniset $conf_file auth admin_password $OS_PASSWORD
iniset $conf_file auth admin_domain_name $OS_PROJECT_DOMAIN_ID
iniset $conf_file auth admin_project_name $OS_PROJECT_NAME
}
function function_exists {
declare -f -F $1 > /dev/null
}
if ! function_exists echo_summary; then
function echo_summary {
echo $@
}
fi
XTRACE=$(set +o | grep xtrace)
set -o xtrace
echo_summary "monasca's post_test_hook.sh was called..."
(set -o posix; set)
# save ref to monasca-api dir
export MONASCA_API_DIR="$BASE/new/monasca-api"
export TEMPEST_DIR="$BASE/new/tempest"
sudo chown -R $USER:stack $MONASCA_API_DIR
sudo chown -R $USER:stack $TEMPEST_DIR
load_devstack_utilities
setup_monasca_api
set_tempest_conf

View File

@@ -1,124 +0,0 @@
# Monasca DevStack Plugin
The Monasca DevStack plugin currently only works on Ubuntu 18.04 (Bionic).
More Linux Distributions will be supported in the future.
Running the Monasca DevStack plugin requires a machine with 10GB of RAM.
Directions for installing and running Devstack can be found here:
https://docs.openstack.org/devstack/latest/
To run Monasca in DevStack, do the following three steps.
1. Clone the DevStack repo.
```
git clone https://opendev.org/openstack/devstack
```
2. Add the following to the DevStack local.conf file in the root of the devstack directory. You may
need to create the local.conf if it does not already exist.
```
# BEGIN DEVSTACK LOCAL.CONF CONTENTS
[[local|localrc]]
DATABASE_PASSWORD=secretdatabase
RABBIT_PASSWORD=secretrabbit
ADMIN_PASSWORD=secretadmin
SERVICE_PASSWORD=secretservice
LOGFILE=$DEST/logs/stack.sh.log
LOGDIR=$DEST/logs
LOG_COLOR=False
# The following variable allow switching between Java and Python for
# the implementations of the Monasca Persister. If this variable is not set,
# then the default is to install the Python implementation of
# the Monasca Persister.
# Uncomment of the following two lines to choose Java or Python for
# the Monasca Pesister.
# MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-java}
MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}
# Uncomment one of the following two lines to choose either InfluxDB or
# Apache Cassandra.
# default "influxdb" is selected as metric DB.
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-cassandra}
# This line will enable all of Monasca.
enable_plugin monasca-api https://opendev.org/openstack/monasca-api
# END DEVSTACK LOCAL.CONF CONTENTS
```
3. Run './stack.sh' from the root of the devstack directory.
If you want to run Monasca with the bare mininum of OpenStack components
you can add the following two lines to the local.conf file.
```
disable_all_services
enable_service rabbit mysql key
```
If you also want the Tempest tests to be installed then add `tempest` and
`monasca-tempest-plugin`.
```
enable_service rabbit mysql key tempest
enable_plugin monasca-tempest-plugin https://opendev.org/openstack/monasca-tempest-plugin
```
To enable Horizon and the Monasca UI add `horizon`
```
enable_service rabbit mysql key horizon tempest
```
# Using Vagrant
Vagrant can be used to deploy a VM with Devstack and Monasca running in it using the Vagrantfile. After installing Vagrant, just run the command `vagrant up` as usual in the `../monasca-api/devstack` directory.
To use local repositories in the devstack install, commit your changes to the master branch of the local repo, then modify the `_REPO` variable in the settings file that corresponds to the local repo to use ```file://my/local/repo/location```.
To use a local instance of the monasca-api repo, change the ```enable_plugin monasca-api https://opendev.org/openstack/monasca-api``` to ```enable_plugin monasca-api file://my/repo/is/here```. Both of these settings will only take effect on a rebuild of the devstack VM.
## Enforcing Apache mirror
If, for any reason, ```APACHE_MIRROR``` that is picked is not working, you can
enforce it in following way:
```sh
APACHE_MIRROR=http://www-us.apache.org/dist/
```
## Using WSGI
Monasca-api can be deployed with Apache using uwsgi and gunicorn.
By default monasca-api runs under uwsgi.
If you wish to use gunicorn make sure that ```devstack/local.conf```
contains:
```sh
MONASCA_API_USE_MOD_WSGI=False
```
# License
(c) Copyright 2015-2016 Hewlett Packard Enterprise Development Company LP
Copyright Fujitsu LIMITED 2017
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
See the License for the specific language governing permissions and
limitations under the License.

207
devstack/Vagrantfile vendored
View File

@@ -1,207 +0,0 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
if Vagrant.has_plugin?("vagrant-cachier")
config.cache.scope = :box
end
# Handle local proxy settings
if Vagrant.has_plugin?("vagrant-proxyconf")
if ENV["http_proxy"]
config.proxy.http = ENV["http_proxy"]
end
if ENV["https_proxy"]
config.proxy.https = ENV["https_proxy"]
end
if ENV["no_proxy"]
config.proxy.no_proxy = ENV["no_proxy"] + ',192.168.10.6,10.0.2.15,127.0.0.1'
end
end
config.vm.hostname = "devstack"
config.vm.box = "bento/ubuntu-22.04"
config.vm.box_check_update = false
config.vm.network "private_network",ip:"192.168.10.6"
config.vm.synced_folder "~/", "/vagrant_home"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "12800"
vb.cpus = 4
# vb.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
config.vm.provision "shell", privileged: false, inline: <<-SHELL
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get -y install git lnav
if [ $http_proxy ]; then
git config --global url.https://git.openstack.org/.insteadOf https://git.openstack.org/
sudo git config --global url.https://git.openstack.org/.insteadOf https://git.openstack.org/
protocol=`echo $http_proxy | awk -F: '{print $1}'`
host=`echo $http_proxy | awk -F/ '{print $3}' | awk -F: '{print $1}'`
port=`echo $http_proxy | awk -F/ '{print $3}' | awk -F: '{print $2}'`
echo "<settings>
<proxies>
<proxy>
<id>$host</id>
<active>true</active>
<protocol>$protocol</protocol>
<host>$host</host>
<port>$port</port>
</proxy>
</proxies>
</settings>" > ./maven_proxy_settings.xml
mkdir -p ~/.m2
cp ./maven_proxy_settings.xml ~/.m2/settings.xml
sudo mkdir -p /root/.m2
sudo cp ./maven_proxy_settings.xml /root/.m2/settings.xml
fi
git clone https://opendev.org/openstack/devstack.git -b master --depth 1
# If using vagrant-cachier, restore cached downloads of 3rd-party dependencies
if [ -d "/tmp/vagrant-cache" ]; then
if [ -d "/tmp/vagrant-cache/downloads" ]; then
echo "Restoring downloads"
cp /tmp/vagrant-cache/downloads/* devstack/files
fi
if [ -f "/tmp/vagrant-cache/pip-cache.tar.gz" ]; then
echo "Restoring ~/.cache"
tar xzf /tmp/vagrant-cache/pip-cache.tar.gz -C ~
fi
if [ -f "/tmp/vagrant-cache/nvm-cache.tar.gz" ]; then
echo "Restoring ~/.nvm/.cache"
mkdir -p ~/.nvm
tar xzf /tmp/vagrant-cache/nvm-cache.tar.gz -C ~/.nvm
fi
if [ -f "/tmp/vagrant-cache/npm-pkgs.tar.gz" ]; then
echo "Restoring ~/.npm"
tar xzf /tmp/vagrant-cache/npm-pkgs.tar.gz -C ~
fi
if [ -f "/tmp/vagrant-cache/root-pip-cache.tar.gz" ]; then
echo "Restoring ~root/.cache"
sudo tar xzf /tmp/vagrant-cache/root-pip-cache.tar.gz -C ~root
fi
if [ -f "/tmp/vagrant-cache/root-m2-cache.tar.gz" ]; then
echo "Restoring ~root/.m2"
sudo tar xzf /tmp/vagrant-cache/root-m2-cache.tar.gz -C ~root
fi
fi
cd devstack
echo '[[local|localrc]]
GIT_DEPTH=1
SERVICE_HOST=192.168.10.6
HOST_IP=192.168.10.6
HOST_IP_IFACE=eth1
DATABASE_PASSWORD=secretdatabase
RABBIT_PASSWORD=secretrabbit
ADMIN_PASSWORD=secretadmin
SERVICE_PASSWORD=secretservice
LOGFILE=$DEST/logs/stack.sh.log
LOGDIR=$DEST/logs
LOG_COLOR=False
DEST=/opt/stack
disable_all_services
enable_service rabbit key tempest horizon
# Enable more OpenStack services if neccessary:
# https://opendev.org/openstack/devstack/src/branch/master/stackrc#L56-L81
# Nova - services to support libvirt based openstack clouds
# enable_service n-api n-cpu n-cond n-sch n-novnc n-cauth n-api-meta
# Placement and Glance services needed for Nova
# enable_service placement-api placement-client
# enable_service g-api g-reg
# Cinder, Neutron
# enable_service cinder c-api c-vol c-sch c-bak
# enable_service neutron q-svc q-agt q-dhcp q-meta q-l3
# Uncomment one of the following lines to use either MySQL or PostgreSQL
# as RDB (relational database) backend for monasca.
enable_service mysql
#enable_service postgresql
# Enable entire storm for the sake of local development mode
enable_service monasca-storm-nimbus
enable_service monasca-storm-supervisor
enable_service monasca-storm-ui
enable_service monasca-storm-logviewer
enable_service monasca-log
# Uncomment this line to disable log part
# disable_service monasca-log
# Enable/Disable ORM support for mysql/postgresql
# HINT: If postgresql service is enabled, ORM is enforced
MONASCA_DATABASE_USE_ORM=${MONASCA_DATABASE_USE_ORM:-false}
# The following two variables allow switching between Java and Python for the implementations
# of the Monasca API and the Monasca Persister. If these variables are not set, then the
# default is to install the Python implementations of both the Monasca API and the Monasca Persister.
# Uncomment one of the following two lines to choose Java or Python for the Monasca API.
# MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-java}
MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-python}
# Uncomment one of the following two lines to choose Java or Python for the Monasca Pesister.
# MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-java}
MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}
# Uncomment one of the following three lines to choose either InfluxDB, Vertica or Cassandra.
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-cassandra}
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}
MONASCA_API_USE_MOD_WSGI=${MONASCA_API_USE_MOD_WSGI:-True}
# Uncomment to stack devstack with old log-api
# USE_OLD_LOG_API=true
# enable_service monasca-log-api
# Start devstack with services running under Python 3
USE_PYTHON3=True
# Uncomment one of the following lines and modify accordingly to enable the Monasca DevStack Plugin
enable_plugin monasca-api https://opendev.org/openstack/monasca-api
# enable_plugin monasca-api file:///vagrant_home/Documents/repos/openstack/monasca-api.vertica
# Uncomment to install tempest tests
enable_plugin monasca-tempest-plugin https://opendev.org/openstack/monasca-tempest-plugin
' > local.conf
sudo apt purge -y python3-simplejson
./stack.sh
# Cache downloaded files for future runs
if [ -d "/tmp/vagrant-cache" ]; then
mkdir -p /tmp/vagrant-cache/downloads
cp files/*gz files/*.deb /tmp/vagrant-cache/downloads
tar czf /tmp/vagrant-cache/pip-cache.tar.gz -C ~ .cache
tar czf /tmp/vagrant-cache/nvm-cache.tar.gz -C ~/.nvm .cache
tar czf /tmp/vagrant-cache/npm-pkgs.tar.gz -C ~ .npm
sudo tar czf /tmp/vagrant-cache/root-pip-cache.tar.gz -C ~root .cache
sudo tar czf /tmp/vagrant-cache/root-m2-cache.tar.gz -C ~root .m2
fi
SHELL
end

View File

@@ -1,93 +0,0 @@
// (C) Copyright 2017 SUSE LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
// implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// version 1.0
drop schema if exists monasca;
// replication factor is set to 1 for devstack installation
create schema monasca with replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
create table monasca.measurements (
metric_id blob,
region text static,
tenant_id text static,
metric_name text static,
dimensions frozen<list<text>> static,
time_stamp timestamp,
value double,
value_meta text,
primary key (metric_id, time_stamp)
)
WITH CLUSTERING ORDER BY (time_stamp ASC);
create table monasca.metrics (
region text,
tenant_id text,
metric_name text,
dimensions frozen<list<text>>,
dimension_names frozen<list<text>>,
metric_id blob,
created_at timestamp,
updated_at timestamp,
primary key ((region, tenant_id, metric_name), dimensions, dimension_names)
);
CREATE CUSTOM INDEX metrics_created_at_index ON monasca.metrics (created_at)
USING 'org.apache.cassandra.index.sasi.SASIIndex';
CREATE CUSTOM INDEX metrics_updated_at_index ON monasca.metrics (updated_at)
USING 'org.apache.cassandra.index.sasi.SASIIndex';
create table monasca.dimensions (
region text,
tenant_id text,
name text,
value text,
primary key ((region, tenant_id, name), value)
);
create table monasca.dimensions_metrics (
region text,
tenant_id text,
dimension_name text,
dimension_value text,
metric_name text,
primary key ((region, tenant_id, dimension_name, dimension_value), metric_name)
);
create table monasca.metrics_dimensions (
region text,
tenant_id text,
dimension_name text,
dimension_value text,
metric_name text,
primary key ((region, tenant_id, metric_name), dimension_name, dimension_value)
);
create table monasca.alarm_state_history (
tenant_id text,
alarm_id text,
time_stamp timestamp,
metric text,
old_state text,
new_state text,
reason text,
reason_data text,
sub_alarms text,
primary key ((tenant_id, alarm_id), time_stamp)
);

View File

@@ -1,9 +0,0 @@
openjdk-8-jdk # dist:xenial,bionic,focal,jammy,noble
openjdk-8-jre-headless # dist:bionic,focal,jammy,noble
maven # dist:xenial,bionic,focal,jammy,noble
jq # dist:xenial,bionic,focal,jammy,noble
python-dev # dist:xenial,bionic,focal
python3-dev # dist:jammy,noble
build-essential # dist:xenial,bionic,focal,jammy,noble
mailutils # dist:xenial,bionic,focal,jammy,noble
python-is-python3 # dist:focal,jammy,noble

View File

@@ -1,88 +0,0 @@
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: monasca_elastic
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: %ES_DATA_DIR%
#
# Path to log files:
#
path.logs: %ES_LOG_DIR%
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: %ES_SERVICE_BIND_HOST%
#
# Set a custom port for HTTP:
#
http.port: %ES_SERVICE_BIND_PORT%
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]
#
# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["%ES_SERVICE_BIND_HOST%"]
#
# For more information, consult the discovery and cluster formation module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

View File

@@ -1,988 +0,0 @@
{
"id": null,
"title": "Openstack Dashboard",
"originalTitle": "Openstack Dashboard",
"tags": [],
"style": "light",
"timezone": "browser",
"time": {
"from": "now-1h",
"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"
]
},
"editable": true,
"hideControls": false,
"sharedCrosshair": false,
"rows": [
{
"title": "OpenStack Health",
"height": "100px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"title": "compute (Nova)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 1,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"condition_filter": true,
"dimensions": [{"key": "service", "value": "compute"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
},
{
"title": "networking (Neutron)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 4,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"condition_filter": true,
"dimensions": [{"key": "service", "value": "networking"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
},
{
"title": "image-service (Glance)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 5,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"condition_filter": true,
"dimensions": [{"key": "service", "value": "image-service"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
},
{
"title": "block-storage (Cinder)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 7,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"condition_filter": true,
"dimensions": [{"key": "service", "value": "block-storage"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
},
{
"title": "object-storage (Swift)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 8,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"dimensions": [{"key": "service", "value": "object-storage"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
},
{
"title": "identity-service (Keystone)",
"error": false,
"span": 2,
"editable": true,
"type": "singlestat",
"id": 12,
"links": [],
"maxDataPoints": 100,
"interval": null,
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "http_status",
"dimensions": [{"key": "service", "value": "identity-service"}]
}
],
"cacheTimeout": null,
"format": "none",
"prefix": "",
"postfix": "",
"nullText": null,
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"nullPointMode": "connected",
"valueName": "current",
"prefixFontSize": "50%",
"valueFontSize": "80%",
"postfixFontSize": "50%",
"thresholds": "-1.0,0.2,0.8",
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(71, 212, 59, 0.4)",
"rgba(245, 150, 40, 0.73)",
"rgba(225, 40, 40, 0.59)"
],
"sparkline": {
"show": false,
"full": false,
"lineColor": "rgb(31, 120, 193)",
"fillColor": "rgba(31, 118, 189, 0.18)"
},
"height": "100"
}
],
"notice": false,
"showTitle": true
},
{
"title": "System Resources",
"height": "250px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"span": 6,
"editable": true,
"type": "graph",
"loadingEditor": false,
"renderer": "flot",
"x-axis": true,
"y-axis": true,
"scale": 1,
"y_formats": [
"percent",
"none"
],
"grid": {
"max": null,
"min": null,
"threshold1": null,
"threshold2": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2Color": "rgba(234, 112, 112, 0.22)",
"leftMax": 100,
"rightMax": null,
"leftMin": 0,
"rightMin": null
},
"annotate": {
"enable": false
},
"resolution": 100,
"lines": true,
"fill": 0,
"linewidth": 1,
"points": false,
"pointradius": 5,
"bars": false,
"stack": false,
"legend": {
"show": true,
"values": false,
"min": false,
"max": false,
"current": false,
"total": false,
"avg": false,
"alignAsTable": true,
"rightSide": false
},
"percentage": false,
"zerofill": true,
"nullPointMode": "null",
"steppedLine": false,
"tooltip": {
"value_type": "cumulative",
"query_as_alias": true,
"shared": true
},
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "cpu.percent",
"condition_filter": false,
"alias": "cpu.percent (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "cpu.wait_perc",
"alias": "cpu.wait_perc (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "cpu.system_perc",
"alias": "cpu.system_perc (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "cpu.user_perc",
"alias": "cpu.user_perc (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
}
],
"aliasColors": {},
"title": "CPU usage",
"id": 2,
"seriesOverrides": [],
"links": [],
"leftYAxisLabel": ""
},
{
"title": "Memory usage",
"error": false,
"span": 6,
"editable": true,
"type": "graph",
"id": 13,
"renderer": "flot",
"x-axis": true,
"y-axis": true,
"y_formats": [
"none",
"none"
],
"grid": {
"leftMax": null,
"rightMax": null,
"leftMin": 0,
"rightMin": null,
"threshold1": null,
"threshold2": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2Color": "rgba(234, 112, 112, 0.22)",
"thresholdLine": false
},
"lines": true,
"fill": 0,
"linewidth": 1,
"points": false,
"pointradius": 5,
"bars": false,
"stack": false,
"percentage": false,
"legend": {
"show": true,
"values": false,
"min": false,
"max": false,
"current": false,
"total": false,
"avg": false,
"alignAsTable": true,
"rightSide": false
},
"nullPointMode": "null",
"steppedLine": false,
"tooltip": {
"value_type": "cumulative",
"shared": true
},
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "mem.total_mb",
"merge": false,
"alias": "mem.total_mb (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "mem.swap_used_mb",
"alias": "mem.swap_used_mb (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "mem.used_mb",
"alias": "mem.used_mb (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "mem.swap_total_mb",
"alias": "mem.swap_total_mb (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "mem.used_cache",
"alias": "mem.used_cache (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
}
],
"aliasColors": {},
"seriesOverrides": [],
"links": [],
"leftYAxisLabel": "MB"
},
{
"title": "Disk usage",
"error": false,
"span": 6,
"editable": true,
"type": "graph",
"id": 14,
"renderer": "flot",
"x-axis": true,
"y-axis": true,
"y_formats": [
"percent",
"short"
],
"grid": {
"leftMax": 100,
"rightMax": null,
"leftMin": 0,
"rightMin": null,
"threshold1": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2Color": "rgba(234, 112, 112, 0.22)"
},
"lines": true,
"fill": 0,
"linewidth": 1,
"points": false,
"pointradius": 5,
"bars": false,
"stack": false,
"percentage": false,
"legend": {
"show": true,
"values": false,
"min": false,
"max": false,
"current": false,
"total": false,
"avg": false,
"alignAsTable": true,
"rightSide": false,
"sortDesc": null,
"sort": null
},
"nullPointMode": "null",
"steppedLine": false,
"tooltip": {
"value_type": "cumulative",
"shared": true
},
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "disk.space_used_perc",
"merge": false,
"dimensions": [
{
"key": "hostname",
"value": "$all"
},
{
"key": "device",
"value": "rootfs"
}
],
"alias": "disk.space_used_perc (@hostname @device)"
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "disk.space_used_perc",
"dimensions": [
{
"key": "hostname",
"value": "$all"
},
{
"key": "mount_point",
"value": "/boot"
}
],
"alias": "disk.space_used_perc (@hostname @mount_point)"
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "disk.space_used_perc",
"dimensions": [
{
"key": "hostname",
"value": "$all"
},
{
"key": "mount_point",
"value": "/srv/node/swiftloopback"
}
],
"alias": "disk.space_used_perc (@hostname @mount_point)"
}
],
"aliasColors": {},
"seriesOverrides": [],
"links": []
},
{
"title": "System load",
"error": false,
"span": 6,
"editable": true,
"type": "graph",
"id": 15,
"renderer": "flot",
"x-axis": true,
"y-axis": true,
"y_formats": [
"none",
"short"
],
"grid": {
"leftMax": null,
"rightMax": null,
"leftMin": 0,
"rightMin": null,
"threshold1": null,
"threshold2": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2Color": "rgba(234, 112, 112, 0.22)"
},
"lines": true,
"fill": 0,
"linewidth": 1,
"points": false,
"pointradius": 5,
"bars": false,
"stack": false,
"percentage": false,
"legend": {
"show": true,
"values": false,
"min": false,
"max": false,
"current": false,
"total": false,
"avg": false,
"alignAsTable": true
},
"nullPointMode": "null",
"steppedLine": false,
"tooltip": {
"value_type": "cumulative",
"shared": true
},
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "load.avg_1_min",
"alias": "load.avg_1_min (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "load.avg_5_min",
"alias": "load.avg_5_min (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"metric": "load.avg_15_min",
"alias": "load.avg_15_min (@hostname)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
}
]
}
],
"aliasColors": {},
"seriesOverrides": [],
"links": []
}
],
"notice": false,
"showTitle": true
},
{
"title": "Network monitoring",
"height": "250px",
"editable": true,
"collapse": false,
"panels": [
{
"title": "Network usage",
"error": false,
"span": 6,
"editable": true,
"type": "graph",
"id": 16,
"renderer": "flot",
"x-axis": true,
"y-axis": true,
"y_formats": [
"bps",
"short"
],
"grid": {
"leftMax": null,
"rightMax": null,
"leftMin": 0,
"rightMin": null,
"threshold1": null,
"threshold2": null,
"threshold1Color": "rgba(216, 200, 27, 0.27)",
"threshold2Color": "rgba(234, 112, 112, 0.22)"
},
"lines": true,
"fill": 0,
"linewidth": 1,
"points": false,
"pointradius": 5,
"bars": false,
"stack": false,
"percentage": false,
"legend": {
"show": true,
"values": false,
"min": false,
"max": false,
"current": false,
"total": false,
"avg": false,
"alignAsTable": true
},
"nullPointMode": "connected",
"steppedLine": false,
"tooltip": {
"value_type": "cumulative",
"shared": true
},
"targets": [
{
"aggregator": "none",
"column": "value",
"metric": "net.in_bytes_sec",
"merge": true,
"alias": "net.in_bytes_sec (@hostname @device)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
},
{
"key": "device",
"value": "$all"
}
]
},
{
"target": "",
"aggregator": "none",
"column": "value",
"merge": true,
"metric": "net.out_bytes_sec",
"alias": "net.out_bytes_sec (@hostname @device)",
"dimensions": [
{
"key": "hostname",
"value": "$all"
},
{
"key": "device",
"value": "$all"
}
]
}
],
"aliasColors": {},
"seriesOverrides": [],
"links": []
}
],
"showTitle": true
}
],
"nav": [
{
"type": "timepicker",
"collapse": false,
"notice": false,
"enable": true,
"status": "Stable",
"time_options": [
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
],
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"now": true
}
],
"time": {
"from": "now-1h",
"to": "now"
},
"templating": {
"list": [],
"enable": false
},
"annotations": {
"enable": false,
"list": []
},
"refresh": "30s",
"version": 6,
"hideAllLegends": false
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,709 +0,0 @@
{
"id": null,
"title": "MariaDB",
"tags": [
"common"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 15,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"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)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "mysqld"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "MariaDB",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "mysqld"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "mysqld"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.data_reads",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.data_writes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Data Read/Write",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"fill": 1,
"id": 7,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "mysqld"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "mysqld"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.buffer_pool_free",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.buffer_pool_total",
"period": "300",
"refId": "B"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.buffer_pool_used",
"period": "300",
"refId": "C"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Buffer Pool Size",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.row_lock_time",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "mysql.innodb.row_lock_waits",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Lock",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "ms",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Monasca API",
"tags": [
"metrics"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "uwsgi"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Monasca API",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-api"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Storm",
"tags": [
"metrics"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "storm"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Storm",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "storm"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Persister",
"tags": [
"metrics"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "persister"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Persister",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "persister"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,564 +0,0 @@
{
"id": null,
"title": "Metrics DB",
"tags": [
"metrics"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"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)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [{"key": "service", "value": "influxdb"}],
"error": "",
"metric": "http_status",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "InfluxDB",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "UP"
},
{
"value": "1",
"op": "=",
"text": "DOWN"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "influxd"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,760 +0,0 @@
{
"id": null,
"title": "Zookeper",
"tags": [
"common"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 15,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"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": null,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 2,
"interval": null,
"links": [],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Zookeper",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "UP",
"value": "1"
},
{
"op": "=",
"text": "UP",
"value": "2"
},
{
"op": "=",
"text": "UP",
"value": "3"
},
{
"op": "=",
"text": "UP",
"value": "4"
},
{
"op": "=",
"text": "UP",
"value": "5"
},
{
"op": "=",
"text": "DOWN",
"value": "0"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "mbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 7,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "zookeeper"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 8,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "zookeeper.avg_latency_sec",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "zookeeper.max_latency_sec",
"period": "300",
"refId": "B"
},
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "zookeeper.min_latency_sec",
"period": "300",
"refId": "C"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Latency",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"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,
"datasource": null,
"fill": 1,
"id": 9,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [],
"error": "",
"metric": "zookeeper.connections_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Conections count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Notification Engine",
"tags": [
"metrics"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Notification",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-notification"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Kafka",
"tags": [
"common"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "kafka"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Kafka",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kafka"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Monasca statsd",
"tags": [
"common"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Monasca statsd",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "monasca-statsd"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Kibana",
"tags": [
"logs"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "kibana"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Kibana",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "kibana"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Log Transformer",
"tags": [
"logs"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Log Transformer",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-transformer"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Log Metrics",
"tags": [
"logs"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Log Metrics",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-metrics"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,624 +0,0 @@
{
"id": null,
"title": "Log Persister",
"tags": [
"logs"
],
"style": "dark",
"timezone": "browser",
"editable": true,
"sharedCrosshair": false,
"hideControls": false,
"time": {
"from": "now-1h",
"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"
]
},
"templating": {
"list": []
},
"annotations": {
"list": []
},
"schemaVersion": 13,
"version": 7,
"links": [],
"gnetId": null,
"rows": [
{
"title": "Dashboard Row",
"panels": [
{
"cacheTimeout": null,
"colorBackground": true,
"colorValue": false,
"colors": [
"rgba(225, 40, 40, 0.59)",
"rgba(245, 150, 40, 0.73)",
"rgba(71, 212, 59, 0.4)"
],
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"id": 1,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"postfix": "",
"postfixFontSize": "50%",
"prefix": "",
"prefixFontSize": "50%",
"span": 4,
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": false,
"lineColor": "rgb(31, 120, 193)",
"show": false
},
"targets": [
{
"aggregator": "none",
"dimensions": [
{
"key": "service",
"value": "log-persister"
}
],
"error": "",
"metric": "process.pid_count",
"period": "300",
"refId": "A"
}
],
"thresholds": "0.2,0.8",
"title": "Log Persister",
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"value": "0",
"op": "=",
"text": "DOWN"
},
{
"value": "1",
"op": "=",
"text": "UP"
},
{
"value": "2",
"op": "=",
"text": "UP"
},
{
"value": "3",
"op": "=",
"text": "UP"
},
{
"value": "4",
"op": "=",
"text": "UP"
},
{
"value": "5",
"op": "=",
"text": "UP"
},
{
"value": "6",
"op": "=",
"text": "UP"
},
{
"value": "7",
"op": "=",
"text": "UP"
},
{
"value": "8",
"op": "=",
"text": "UP"
},
{
"value": "9",
"op": "=",
"text": "UP"
},
{
"value": "10",
"op": "=",
"text": "UP"
},
{
"value": "11",
"op": "=",
"text": "UP"
},
{
"value": "12",
"op": "=",
"text": "UP"
}
],
"valueName": "current"
},
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.cpu_perc",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "CPU",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"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,
"datasource": null,
"fill": 1,
"id": 3,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 4,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.mem.rss_mbytes",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Memory",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"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": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": "250px",
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.io.read_count",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.io.write_count",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Count",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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,
"datasource": null,
"fill": 1,
"id": 5,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 6,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.io.read_kbytes",
"period": "300",
"refId": "A"
},
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.io.write_kbytes",
"period": "300",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "IO Read/Write [kB]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "kbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
},
{
"title": "Dashboard Row",
"panels": [
{
"aliasColors": {},
"bars": false,
"datasource": null,
"fill": 1,
"id": 6,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"percentage": false,
"pointradius": 5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"aggregator": "avg",
"dimensions": [
{
"key": "process_name",
"value": "log-persister"
}
],
"error": "",
"metric": "process.open_file_descriptors",
"period": "300",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Open File Descriptors",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"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
}
]
}
],
"showTitle": false,
"titleSize": "h6",
"height": 250,
"repeat": null,
"repeatRowId": null,
"repeatIteration": null,
"collapse": false
}
]
}

View File

@@ -1,176 +0,0 @@
# coding=utf-8
# (C) Copyright 2017 Hewlett Packard Enterprise Development LP
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import glob
import json
import logging
import os
import sys
import time
from requests import RequestException
from requests import Session
LOG_LEVEL = logging.getLevelName(os.environ.get('LOG_LEVEL', 'INFO'))
logging.basicConfig(level=LOG_LEVEL)
logger = logging.getLogger(__name__)
GRAFANA_URL = os.environ.get('GRAFANA_URL', 'http://localhost:3000')
GRAFANA_USERNAME = os.environ.get('GRAFANA_USERNAME', 'mini-mon')
GRAFANA_PASSWORD = os.environ.get('GRAFANA_PASSWORD', 'password')
GRAFANA_USERS = [{'user': GRAFANA_USERNAME, 'password': GRAFANA_PASSWORD, 'email': ''}]
DATASOURCE_NAME = os.environ.get('DATASOURCE_NAME', 'monasca')
DATASOURCE_URL = os.environ.get('DATASOURCE_URL', 'http://localhost/metrics')
DATASOURCE_ACCESS_MODE = os.environ.get('DATASOURCE_ACCESS_MODE', 'proxy')
DATASOURCE_AUTH = os.environ.get('DATASOURCE_AUTH', 'Keystone').capitalize()
DATASOURCE_AUTH_TOKEN = os.environ.get('DATASOURCE_AUTH_TOKEN', '')
DASHBOARDS_DIR = os.environ.get('DASHBOARDS_DIR', '/dashboards.d')
def retry(retries=5, delay=2.0, exc_types=(RequestException,)):
def decorator(func):
def f_retry(*args, **kwargs):
for i in range(retries):
try:
return func(*args, **kwargs)
except exc_types as exc:
if i < retries - 1:
logger.debug('Caught exception, retrying...',
exc_info=True)
time.sleep(delay)
else:
logger.exception('Failed after %d attempts', retries)
if isinstance(exc, RequestException):
logger.debug('Response was: %r', exc.response.text)
raise
return f_retry
return decorator
def create_login_payload():
if os.environ.get('GRAFANA_USERS'):
try:
json.loads(os.environ.get('GRAFANA_USERS'))
except ValueError:
print("Invalid type GRAFANA_USERS")
raise
grafana_users = json.loads(os.environ.get('GRAFANA_USERS'))
else:
grafana_users = GRAFANA_USERS
return grafana_users
@retry(retries=24, delay=5.0)
def login(session, user):
r = session.post('{url}/login'.format(url=GRAFANA_URL),
json=user,
timeout=5)
r.raise_for_status()
@retry(retries=12, delay=5.0)
def check_initialized(session):
r = session.get('{url}/api/datasources'.format(url=GRAFANA_URL), timeout=5)
r.raise_for_status()
logging.debug('existing datasources = %r', r.json())
for datasource in r.json():
if datasource['name'] == DATASOURCE_NAME:
return True
return False
def create_datasource_payload():
payload = {
'name': DATASOURCE_NAME,
'url': DATASOURCE_URL,
'access': DATASOURCE_ACCESS_MODE,
'isDefault': True,
}
if DATASOURCE_AUTH not in ['Keystone', 'Horizon', 'Token']:
logger.error('Unknown Keystone authentication option: %s',
DATASOURCE_AUTH)
sys.exit(1)
keystone_auth = False
if DATASOURCE_AUTH in ['Keystone']:
keystone_auth = True
payload.update({
'monasca': {
'type': 'monasca-datasource',
'jsonData': {
'authMode': DATASOURCE_AUTH,
'keystoneAuth': keystone_auth,
'token': DATASOURCE_AUTH_TOKEN,
}
}
}.get(DATASOURCE_NAME, {}))
logging.debug('payload = %r', payload)
return payload
def create_dashboard_payload(json_path):
with open(json_path, 'r') as f:
dashboard = json.load(f)
dashboard['id'] = None
return {
'dashboard': dashboard,
'overwrite': False
}
def main():
for user in create_login_payload():
logging.info('Opening a Grafana session...')
session = Session()
login(session, user)
if check_initialized(session):
logging.info('Grafana has already been initialized, skipping!')
return
logging.info('Attempting to add configured datasource...')
r = session.post('{url}/api/datasources'.format(url=GRAFANA_URL),
json=create_datasource_payload())
logging.debug('Response: %r', r.json())
r.raise_for_status()
for path in sorted(glob.glob('{dir}/*.json'.format(dir=DASHBOARDS_DIR))):
logging.info('Creating dashboard from file: {path}'.format(path=path))
r = session.post('{url}/api/dashboards/db'.format(url=GRAFANA_URL),
json=create_dashboard_payload(path))
logging.debug('Response: %r', r.json())
r.raise_for_status()
logging.info('Ending %r session...', user.get('user'))
session.get('{url}/logout'.format(url=GRAFANA_URL))
logging.info('Finished successfully.')
if __name__ == '__main__':
main()

View File

@@ -1,146 +0,0 @@
#! /usr/bin/env bash
# chkconfig: 2345 80 05
# description: Grafana web server & backend
# processname: grafana-server
# config: /etc/grafana/grafana.ini
# pidfile: /var/run/grafana-server.pid
### BEGIN INIT INFO
# Provides: grafana-server
# Required-Start: $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start grafana at boot time
### END INIT INFO
# tested on
# 1. New lsb that define start-stop-daemon
# 3. Centos with initscripts package installed
PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=grafana-server
DESC="Grafana Server"
DEFAULT=/etc/default/$NAME
GRAFANA_USER=grafana
GRAFANA_GROUP=grafana
GRAFANA_HOME=/usr/share/grafana
CONF_DIR=/etc/grafana
WORK_DIR=$GRAFANA_HOME
DATA_DIR=/var/lib/grafana
LOG_DIR=/var/log/grafana
CONF_FILE=$CONF_DIR/grafana.ini
MAX_OPEN_FILES=10000
PID_FILE=/var/run/$NAME.pid
DAEMON=/usr/sbin/$NAME
umask 0027
if [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"
exit 4
fi
if [ ! -x $DAEMON ]; then
echo "Program not installed or not executable"
exit 5
fi
. /lib/lsb/init-functions
if [ -r /etc/default/rcS ]; then
. /etc/default/rcS
fi
# overwrite settings from default file
if [ -f "$DEFAULT" ]; then
. "$DEFAULT"
fi
DAEMON_OPTS="--pidfile=${PID_FILE} --config=${CONF_FILE} cfg:default.paths.data=${DATA_DIR} cfg:default.paths.logs=${LOG_DIR}"
case "$1" in
start)
log_daemon_msg "Starting $DESC"
pid=`pidofproc -p $PID_FILE grafana`
if [ -n "$pid" ] ; then
log_begin_msg "Already running."
log_end_msg 0
exit 0
fi
# Prepare environment
mkdir -p "$LOG_DIR" "$DATA_DIR" && chown "$GRAFANA_USER":"$GRAFANA_GROUP" "$LOG_DIR" "$DATA_DIR"
touch "$PID_FILE" && chown "$GRAFANA_USER":"$GRAFANA_GROUP" "$PID_FILE"
if [ -n "$MAX_OPEN_FILES" ]; then
ulimit -n $MAX_OPEN_FILES
fi
# Start Daemon
start-stop-daemon --start -b --chdir "$WORK_DIR" --user "$GRAFANA_USER" -c "$GRAFANA_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
return=$?
if [ $return -eq 0 ]
then
sleep 1
# check if pid file has been written two
if ! [[ -s $PID_FILE ]]; then
log_end_msg 1
exit 1
fi
i=0
timeout=10
# Wait for the process to be properly started before exiting
until { cat "$PID_FILE" | xargs kill -0; } >/dev/null 2>&1
do
sleep 1
i=$(($i + 1))
if [ $i -gt $timeout ]; then
log_end_msg 1
exit 1
fi
done
fi
log_end_msg $return
;;
stop)
log_daemon_msg "Stopping $DESC"
if [ -f "$PID_FILE" ]; then
start-stop-daemon --stop --pidfile "$PID_FILE" \
--user "$GRAFANA_USER" \
--retry=TERM/20/KILL/5 >/dev/null
if [ $? -eq 1 ]; then
log_progress_msg "$DESC is not running but pid file exists, cleaning up"
elif [ $? -eq 3 ]; then
PID="`cat $PID_FILE`"
log_failure_msg "Failed to stop $DESC (pid $PID)"
exit 1
fi
rm -f "$PID_FILE"
else
log_progress_msg "(not running)"
fi
log_end_msg 0
;;
status)
status_of_proc -p $PID_FILE grafana grafana && exit 0 || exit $?
;;
restart|force-reload)
if [ -f "$PID_FILE" ]; then
$0 stop
sleep 1
fi
$0 start
;;
*)
log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}"
exit 3
;;
esac

View File

@@ -1,13 +0,0 @@
[auth.keystone]
enabled = true
auth_url = '%KEYSTONE_AUTH_URI%'
[paths]
plugins = /var/lib/grafana/plugins
[session]
session_life_time = 1800
gc_interval_time = 1800
[security]
login_remember_days = 0

View File

@@ -1,19 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Logging
STDERR="/var/log/influxdb/influxd.log"

View File

@@ -1,579 +0,0 @@
### Welcome to the InfluxDB configuration file.
# The values in this file override the default values used by the system if
# a config option is not specified. The commented out lines are the configuration
# field and the default value used. Uncommenting a line and changing the value
# will change the value used at runtime when the process is restarted.
# Once every 24 hours InfluxDB will report usage data to usage.influxdata.com
# The data includes a random ID, os, arch, version, the number of series and other
# usage data. No data from user databases is ever transmitted.
# Change this option to true to disable reporting.
# reporting-disabled = false
# Bind address to use for the RPC service for backup and restore.
# bind-address = "127.0.0.1:8088"
###
### [meta]
###
### Controls the parameters for the Raft consensus group that stores metadata
### about the InfluxDB cluster.
###
[meta]
# Where the metadata/raft database is stored
dir = "/var/lib/influxdb/meta"
# Automatically create a default retention policy when creating a database.
# retention-autocreate = true
# If log messages are printed for the meta service
# logging-enabled = true
###
### [data]
###
### Controls where the actual shard data for InfluxDB lives and how it is
### flushed from the WAL. "dir" may need to be changed to a suitable place
### for your system, but the WAL settings are an advanced configuration. The
### defaults should work for most systems.
###
[data]
# The directory where the TSM storage engine stores TSM files.
dir = "/var/lib/influxdb/data"
# The directory where the TSM storage engine stores WAL files.
wal-dir = "/var/lib/influxdb/wal"
# The amount of time that a write will wait before fsyncing. A duration
# greater than 0 can be used to batch up multiple fsync calls. This is useful for slower
# disks or when WAL write contention is seen. A value of 0s fsyncs every write to the WAL.
# Values in the range of 0-100ms are recommended for non-SSD disks.
# wal-fsync-delay = "0s"
# The type of shard index to use for new shards. The default is an in-memory index that is
# recreated at startup. A value of "tsi1" will use a disk based index that supports higher
# cardinality datasets.
# index-version = "inmem"
index-version = "tsi1"
# Trace logging provides more verbose output around the tsm engine. Turning
# this on can provide more useful output for debugging tsm engine issues.
# trace-logging-enabled = false
# Whether queries should be logged before execution. Very useful for troubleshooting, but will
# log any sensitive data contained within a query.
# query-log-enabled = true
# Validates incoming writes to ensure keys only have valid unicode characters.
# This setting will incur a small overhead because every key must be checked.
# validate-keys = false
# Settings for the TSM engine
# CacheMaxMemorySize is the maximum size a shard's cache can
# reach before it starts rejecting writes.
# Valid size suffixes are k, m, or g (case insensitive, 1024 = 1k).
# Values without a size suffix are in bytes.
# cache-max-memory-size = "1g"
# CacheSnapshotMemorySize is the size at which the engine will
# snapshot the cache and write it to a TSM file, freeing up memory
# Valid size suffixes are k, m, or g (case insensitive, 1024 = 1k).
# Values without a size suffix are in bytes.
# cache-snapshot-memory-size = "25m"
# CacheSnapshotWriteColdDuration is the length of time at
# which the engine will snapshot the cache and write it to
# a new TSM file if the shard hasn't received writes or deletes
# cache-snapshot-write-cold-duration = "10m"
# CompactFullWriteColdDuration is the duration at which the engine
# will compact all TSM files in a shard if it hasn't received a
# write or delete
# compact-full-write-cold-duration = "4h"
# The maximum number of concurrent full and level compactions that can run at one time. A
# value of 0 results in 50% of runtime.GOMAXPROCS(0) used at runtime. Any number greater
# than 0 limits compactions to that value. This setting does not apply
# to cache snapshotting.
# max-concurrent-compactions = 0
# CompactThroughput is the rate limit in bytes per second that we
# will allow TSM compactions to write to disk. Note that short bursts are allowed
# to happen at a possibly larger value, set by CompactThroughputBurst
# compact-throughput = "48m"
# CompactThroughputBurst is the rate limit in bytes per second that we
# will allow TSM compactions to write to disk.
# compact-throughput-burst = "48m"
# If true, then the mmap advise value MADV_WILLNEED will be provided to the kernel with respect to
# TSM files. This setting has been found to be problematic on some kernels, and defaults to off.
# It might help users who have slow disks in some cases.
# tsm-use-madv-willneed = false
# Settings for the inmem index
# The maximum series allowed per database before writes are dropped. This limit can prevent
# high cardinality issues at the database level. This limit can be disabled by setting it to
# 0.
# max-series-per-database = 1000000
# The maximum number of tag values per tag that are allowed before writes are dropped. This limit
# can prevent high cardinality tag values from being written to a measurement. This limit can be
# disabled by setting it to 0.
# max-values-per-tag = 100000
# Settings for the tsi1 index
# The threshold, in bytes, when an index write-ahead log file will compact
# into an index file. Lower sizes will cause log files to be compacted more
# quickly and result in lower heap usage at the expense of write throughput.
# Higher sizes will be compacted less frequently, store more series in-memory,
# and provide higher write throughput.
# Valid size suffixes are k, m, or g (case insensitive, 1024 = 1k).
# Values without a size suffix are in bytes.
# max-index-log-file-size = "1m"
# The size of the internal cache used in the TSI index to store previously
# calculated series results. Cached results will be returned quickly from the cache rather
# than needing to be recalculated when a subsequent query with a matching tag key/value
# predicate is executed. Setting this value to 0 will disable the cache, which may
# lead to query performance issues.
# This value should only be increased if it is known that the set of regularly used
# tag key/value predicates across all measurements for a database is larger than 100. An
# increase in cache size may lead to an increase in heap usage.
series-id-set-cache-size = 100
###
### [coordinator]
###
### Controls the clustering service configuration.
###
[coordinator]
# The default time a write request will wait until a "timeout" error is returned to the caller.
# write-timeout = "10s"
# The maximum number of concurrent queries allowed to be executing at one time. If a query is
# executed and exceeds this limit, an error is returned to the caller. This limit can be disabled
# by setting it to 0.
# max-concurrent-queries = 0
# The maximum time a query will is allowed to execute before being killed by the system. This limit
# can help prevent run away queries. Setting the value to 0 disables the limit.
# query-timeout = "0s"
# The time threshold when a query will be logged as a slow query. This limit can be set to help
# discover slow or resource intensive queries. Setting the value to 0 disables the slow query logging.
# log-queries-after = "0s"
# The maximum number of points a SELECT can process. A value of 0 will make
# the maximum point count unlimited. This will only be checked every second so queries will not
# be aborted immediately when hitting the limit.
# max-select-point = 0
# The maximum number of series a SELECT can run. A value of 0 will make the maximum series
# count unlimited.
# max-select-series = 0
# The maximum number of group by time bucket a SELECT can create. A value of zero will max the maximum
# number of buckets unlimited.
# max-select-buckets = 0
###
### [retention]
###
### Controls the enforcement of retention policies for evicting old data.
###
[retention]
# Determines whether retention policy enforcement enabled.
# enabled = true
# The interval of time when retention policy enforcement checks run.
# check-interval = "30m"
###
### [shard-precreation]
###
### Controls the precreation of shards, so they are available before data arrives.
### Only shards that, after creation, will have both a start- and end-time in the
### future, will ever be created. Shards are never precreated that would be wholly
### or partially in the past.
[shard-precreation]
# Determines whether shard pre-creation service is enabled.
# enabled = true
# The interval of time when the check to pre-create new shards runs.
# check-interval = "10m"
# The default period ahead of the endtime of a shard group that its successor
# group is created.
# advance-period = "30m"
###
### Controls the system self-monitoring, statistics and diagnostics.
###
### The internal database for monitoring data is created automatically if
### if it does not already exist. The target retention within this database
### is called 'monitor' and is also created with a retention period of 7 days
### and a replication factor of 1, if it does not exist. In all cases the
### this retention policy is configured as the default for the database.
[monitor]
# Whether to record statistics internally.
# store-enabled = true
# The destination database for recorded statistics
# store-database = "_internal"
# The interval at which to record statistics
# store-interval = "10s"
###
### [http]
###
### Controls how the HTTP endpoints are configured. These are the primary
### mechanism for getting data into and out of InfluxDB.
###
[http]
# Determines whether HTTP endpoint is enabled.
# enabled = true
# Determines whether the Flux query endpoint is enabled.
# flux-enabled = false
# Determines whether the Flux query logging is enabled.
# flux-log-enabled = false
# The bind address used by the HTTP service.
# bind-address = ":8086"
# Determines whether user authentication is enabled over HTTP/HTTPS.
# auth-enabled = false
# The default realm sent back when issuing a basic auth challenge.
# realm = "InfluxDB"
# Determines whether HTTP request logging is enabled.
# log-enabled = true
# Determines whether the HTTP write request logs should be suppressed when the log is enabled.
# suppress-write-log = false
# When HTTP request logging is enabled, this option specifies the path where
# log entries should be written. If unspecified, the default is to write to stderr, which
# intermingles HTTP logs with internal InfluxDB logging.
#
# If influxd is unable to access the specified path, it will log an error and fall back to writing
# the request log to stderr.
# access-log-path = ""
# Filters which requests should be logged. Each filter is of the pattern NNN, NNX, or NXX where N is
# a number and X is a wildcard for any number. To filter all 5xx responses, use the string 5xx.
# If multiple filters are used, then only one has to match. The default is to have no filters which
# will cause every request to be printed.
# access-log-status-filters = []
# Determines whether detailed write logging is enabled.
# write-tracing = false
# Determines whether the pprof endpoint is enabled. This endpoint is used for
# troubleshooting and monitoring.
# pprof-enabled = true
pprof-enabled = false
# Enables a pprof endpoint that binds to localhost:6060 immediately on startup.
# This is only needed to debug startup issues.
# debug-pprof-enabled = false
# Determines whether HTTPS is enabled.
# https-enabled = false
# The SSL certificate to use when HTTPS is enabled.
# https-certificate = "/etc/ssl/influxdb.pem"
# Use a separate private key location.
# https-private-key = ""
# The JWT auth shared secret to validate requests using JSON web tokens.
# shared-secret = ""
# The default chunk size for result sets that should be chunked.
# max-row-limit = 0
# The maximum number of HTTP connections that may be open at once. New connections that
# would exceed this limit are dropped. Setting this value to 0 disables the limit.
# max-connection-limit = 0
# Enable http service over unix domain socket
# unix-socket-enabled = false
# The path of the unix domain socket.
# bind-socket = "/var/run/influxdb.sock"
# The maximum size of a client request body, in bytes. Setting this value to 0 disables the limit.
# max-body-size = 25000000
# The maximum number of writes processed concurrently.
# Setting this to 0 disables the limit.
# max-concurrent-write-limit = 0
# The maximum number of writes queued for processing.
# Setting this to 0 disables the limit.
# max-enqueued-write-limit = 0
# The maximum duration for a write to wait in the queue to be processed.
# Setting this to 0 or setting max-concurrent-write-limit to 0 disables the limit.
# enqueued-write-timeout = 0
###
### [logging]
###
### Controls how the logger emits logs to the output.
###
[logging]
# Determines which log encoder to use for logs. Available options
# are auto, logfmt, and json. auto will use a more a more user-friendly
# output format if the output terminal is a TTY, but the format is not as
# easily machine-readable. When the output is a non-TTY, auto will use
# logfmt.
# format = "auto"
# Determines which level of logs will be emitted. The available levels
# are error, warn, info, and debug. Logs that are equal to or above the
# specified level will be emitted.
# level = "info"
# Suppresses the logo output that is printed when the program is started.
# The logo is always suppressed if STDOUT is not a TTY.
# suppress-logo = false
###
### [subscriber]
###
### Controls the subscriptions, which can be used to fork a copy of all data
### received by the InfluxDB host.
###
[subscriber]
# Determines whether the subscriber service is enabled.
# enabled = true
# The default timeout for HTTP writes to subscribers.
# http-timeout = "30s"
# Allows insecure HTTPS connections to subscribers. This is useful when testing with self-
# signed certificates.
# insecure-skip-verify = false
# The path to the PEM encoded CA certs file. If the empty string, the default system certs will be used
# ca-certs = ""
# The number of writer goroutines processing the write channel.
# write-concurrency = 40
# The number of in-flight writes buffered in the write channel.
# write-buffer-size = 1000
###
### [[graphite]]
###
### Controls one or many listeners for Graphite data.
###
[[graphite]]
# Determines whether the graphite endpoint is enabled.
# enabled = false
# database = "graphite"
# retention-policy = ""
# bind-address = ":2003"
# protocol = "tcp"
# consistency-level = "one"
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.
# Flush if this many points get buffered
# batch-size = 5000
# number of batches that may be pending in memory
# batch-pending = 10
# Flush at least this often even if we haven't hit buffer limit
# batch-timeout = "1s"
# UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
# udp-read-buffer = 0
### This string joins multiple matching 'measurement' values providing more control over the final measurement name.
# separator = "."
### Default tags that will be added to all metrics. These can be overridden at the template level
### or by tags extracted from metric
# tags = ["region=us-east", "zone=1c"]
### Each template line requires a template pattern. It can have an optional
### filter before the template and separated by spaces. It can also have optional extra
### tags following the template. Multiple tags should be separated by commas and no spaces
### similar to the line protocol format. There can be only one default template.
# templates = [
# "*.app env.service.resource.measurement",
# # Default template
# "server.*",
# ]
###
### [collectd]
###
### Controls one or many listeners for collectd data.
###
[[collectd]]
# enabled = false
# bind-address = ":25826"
# database = "collectd"
# retention-policy = ""
#
# The collectd service supports either scanning a directory for multiple types
# db files, or specifying a single db file.
# typesdb = "/usr/local/share/collectd"
#
# security-level = "none"
# auth-file = "/etc/collectd/auth_file"
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.
# Flush if this many points get buffered
# batch-size = 5000
# Number of batches that may be pending in memory
# batch-pending = 10
# Flush at least this often even if we haven't hit buffer limit
# batch-timeout = "10s"
# UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
# read-buffer = 0
# Multi-value plugins can be handled two ways.
# "split" will parse and store the multi-value plugin data into separate measurements
# "join" will parse and store the multi-value plugin as a single multi-value measurement.
# "split" is the default behavior for backward compatibility with previous versions of influxdb.
# parse-multivalue-plugin = "split"
###
### [opentsdb]
###
### Controls one or many listeners for OpenTSDB data.
###
[[opentsdb]]
# enabled = false
# bind-address = ":4242"
# database = "opentsdb"
# retention-policy = ""
# consistency-level = "one"
# tls-enabled = false
# certificate= "/etc/ssl/influxdb.pem"
# Log an error for every malformed point.
# log-point-errors = true
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Only points
# metrics received over the telnet protocol undergo batching.
# Flush if this many points get buffered
# batch-size = 1000
# Number of batches that may be pending in memory
# batch-pending = 5
# Flush at least this often even if we haven't hit buffer limit
# batch-timeout = "1s"
###
### [[udp]]
###
### Controls the listeners for InfluxDB line protocol data via UDP.
###
[[udp]]
# enabled = false
# bind-address = ":8089"
# database = "udp"
# retention-policy = ""
# InfluxDB precision for timestamps on received points ("" or "n", "u", "ms", "s", "m", "h")
# precision = ""
# These next lines control how batching works. You should have this enabled
# otherwise you could get dropped metrics or poor performance. Batching
# will buffer points in memory if you have many coming in.
# Flush if this many points get buffered
# batch-size = 5000
# Number of batches that may be pending in memory
# batch-pending = 10
# Will flush at least this often even if we haven't hit buffer limit
# batch-timeout = "1s"
# UDP Read buffer size, 0 means OS default. UDP listener will fail if set above OS max.
# read-buffer = 0
###
### [continuous_queries]
###
### Controls how continuous queries are run within InfluxDB.
###
[continuous_queries]
# Determines whether the continuous query service is enabled.
# enabled = true
# Controls whether queries are logged when executed by the CQ service.
# log-enabled = true
# Controls whether queries are logged to the self-monitoring data store.
# query-stats-enabled = false
# interval for how often continuous queries will be checked if they need to run
# run-interval = "1s"
###
### [tls]
###
### Global configuration settings for TLS in InfluxDB.
###
[tls]
# Determines the available set of cipher suites. See https://golang.org/pkg/crypto/tls/#pkg-constants
# for a list of available ciphers, which depends on the version of Go (use the query
# SHOW DIAGNOSTICS to see the version of Go used to build InfluxDB). If not specified, uses
# the default settings from Go's crypto/tls package.
# ciphers = [
# "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
# "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
# ]
# Minimum version of the tls protocol that will be negotiated. If not specified, uses the
# default settings from Go's crypto/tls package.
# min-version = "tls1.2"
# Maximum version of the tls protocol that will be negotiated. If not specified, uses the
# default settings from Go's crypto/tls package.
# max-version = "tls1.2"

View File

@@ -1,38 +0,0 @@
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
if [ $# -lt 1 ];
then
echo "USAGE: $0 [-daemon] server.properties"
exit 1
fi
base_dir=$(dirname $0)
export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"
export KAFKA_HEAP_OPTS="-Xms256m -Xmx256m"
EXTRA_ARGS="-name kafkaServer -loggc"
COMMAND=$1
case $COMMAND in
-daemon)
EXTRA_ARGS="-daemon "$EXTRA_ARGS
shift
;;
*)
;;
esac
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka $@

View File

@@ -1,30 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
[Unit]
Description=Kafka
Requires=network.target
After=network.target zookeeper.service
[Service]
User=kafka
Group=kafka
LimitNOFILE=32768:32768
Environment="LOG_DIR=/var/log/kafka"
Environment="KAFKA_HEAP_OPTS=-Xmx128m"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -1,146 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# see kafka.server.KafkaConfig for additional details and defaults
############################# Server Basics #############################
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
############################# Socket Server Settings #############################
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092
# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
#listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
# The number of threads that the server uses for receiving requests from the network and sending responses to the network
num.network.threads=3
# The number of threads that the server uses for processing requests, which may include disk I/O
num.io.threads=2
# The send buffer (SO_SNDBUF) used by the socket server
socket.send.buffer.bytes=102400
# The receive buffer (SO_RCVBUF) used by the socket server
socket.receive.buffer.bytes=102400
# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
log.dirs=/var/kafka
auto.create.topics.enable=false
# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=1
# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.
# This value is recommended to be increased for installations with data dirs located in RAID array.
num.recovery.threads.per.data.dir=1
# Specify the message format version the broker will use to append messages to
# the logs. Once consumers are upgraded, one can change the message format and
# enjoy the new message format that includes new timestamp and improved
# compression.
# (TODO) Use new message format after updating consumers
log.message.format.version=0.9.0.0
############################# Internal Topic Settings #############################
# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state"
# For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3.
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
############################# Log Flush Policy #############################
# Messages are immediately written to the filesystem but by default we only fsync() to sync
# the OS cache lazily. The following configurations control the flush of data to disk.
# There are a few important trade-offs here:
# 1. Durability: Unflushed data may be lost if you are not using replication.
# 2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush.
# 3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks.
# The settings below allow one to configure the flush policy to flush data after a period of time or
# every N messages (or both). This can be done globally and overridden on a per-topic basis.
# The number of messages to accept before forcing a flush of data to disk
log.flush.interval.messages=10000
# The maximum amount of time a message can sit in a log before we force a flush
log.flush.interval.ms=1000
############################# Log Retention Policy #############################
# The following configurations control the disposal of log segments. The policy can
# be set to delete segments after a period of time, or after a given size has accumulated.
# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
# from the end of the log.
# The minimum age of a log file to be eligible for deletion due to age
log.retention.hours=24
# A size-based retention policy for logs. Segments are pruned from the log unless the remaining
# segments drop below log.retention.bytes. Functions independently of log.retention.hours.
log.retention.bytes=104857600
# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=104857600
# The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000
############################# Zookeeper #############################
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=127.0.0.1:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=6000
############################# Group Coordinator Settings #############################
# The following configuration specifies the time, in milliseconds, that the GroupCoordinator will delay the initial consumer rebalance.
# The rebalance will be further delayed by the value of group.initial.rebalance.delay.ms as new members join the group, up to a maximum of max.poll.interval.ms.
# The default value for this is 3 seconds.
# We override this to 0 here as it makes for a better out-of-the-box experience for development and testing.
# However, in production environments the default value of 3 seconds is more suitable as this will help to avoid unnecessary, and potentially expensive, rebalances during application startup.
group.initial.rebalance.delay.ms=0

View File

@@ -1,122 +0,0 @@
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: %KIBANA_SERVICE_PORT%
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: %KIBANA_SERVICE_HOST%
# Enables you to specify a path to mount Kibana at if you are running behind a proxy.
# Use the `server.rewriteBasePath` setting to tell Kibana if it should remove the basePath
# from requests it receives, and to prevent a deprecation warning at startup.
# This setting cannot end in a slash.
server.basePath: %KIBANA_SERVER_BASE_PATH%
# Specifies whether Kibana should rewrite requests that are prefixed with
# `server.basePath` or require that they are rewritten by your reverse proxy.
# This setting was effectively always `false` before Kibana 6.3 and will
# default to `true` starting in Kibana 7.0.
server.rewriteBasePath: false
# The maximum payload size in bytes for incoming server requests.
#server.maxPayloadBytes: 1048576
# The Kibana server's name. This is used for display purposes.
#server.name: "your-hostname"
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://%ES_SERVICE_BIND_HOST%:%ES_SERVICE_BIND_PORT%"]
# When this setting's value is true Kibana uses the hostname specified in the server.host
# setting. When the value of this setting is false, Kibana uses the hostname of the host
# that connects to this Kibana instance.
#elasticsearch.preserveHost: true
# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"
# The default application to load.
kibana.defaultAppId: "discover"
# If your Elasticsearch is protected with basic authentication, these settings provide
# the username and password that the Kibana server uses to perform maintenance on the Kibana
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
# is proxied through the Kibana server.
#elasticsearch.username: "kibana"
#elasticsearch.password: "pass"
# Enables SSL and paths to the PEM-format SSL certificate and SSL key files, respectively.
# These settings enable SSL for outgoing requests from the Kibana server to the browser.
#server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key
# Optional settings that provide the paths to the PEM-format SSL certificate and key files.
# These files validate that your Elasticsearch backend uses the same key files.
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key
# Optional setting that enables you to specify a path to the PEM file for the certificate
# authority for your Elasticsearch instance.
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]
# To disregard the validity of SSL certificates, change this setting's value to 'none'.
#elasticsearch.ssl.verificationMode: full
# Time in milliseconds to wait for Elasticsearch to respond to pings. Defaults to the value of
# the elasticsearch.requestTimeout setting.
elasticsearch.pingTimeout: 1500
# Time in milliseconds to wait for responses from the back end or Elasticsearch. This value
# must be a positive integer.
elasticsearch.requestTimeout: 300000
# List of Kibana client-side headers to send to Elasticsearch. To send *no* client-side
# headers, set this value to [] (an empty list).
#elasticsearch.requestHeadersWhitelist: [ authorization ]
# Header names and values that are sent to Elasticsearch. Any custom headers cannot be overwritten
# by client-side headers, regardless of the elasticsearch.requestHeadersWhitelist configuration.
#elasticsearch.customHeaders: {}
# Time in milliseconds for Elasticsearch to wait for responses from shards. Set to 0 to disable.
elasticsearch.shardTimeout: 0
# Time in milliseconds to wait for Elasticsearch at Kibana startup before retrying.
elasticsearch.startupTimeout: 5000
# Logs queries sent to Elasticsearch. Requires logging.verbose set to true.
#elasticsearch.logQueries: false
# Specifies the path where Kibana creates the process ID file.
#pid.file: /var/run/kibana.pid
# Enables you specify a file where Kibana stores log output.
#logging.dest: stdout
# Set the value of this setting to true to suppress all logging output.
logging.silent: false
# Set the value of this setting to true to suppress all logging output other than error messages.
logging.quiet: false
# Set the value of this setting to true to log all events, including system usage information
# and all requests.
logging.verbose: true
# Set the interval in milliseconds to sample system and process performance
# metrics. Minimum is 100ms. Defaults to 5000.
#ops.interval: 5000
# Specifies locale to be used for all localizable strings, dates and number formats.
# Supported languages are the following: English - en , by default , Chinese - zh-CN .
#i18n.locale: "en"
optimize.useBundleCache: False
console.enabled: False
monasca-kibana-plugin.enabled: True
monasca-kibana-plugin.auth_uri: %KEYSTONE_AUTH_URI%
monasca-kibana-plugin.elasticsearch.url: "http://%ES_SERVICE_BIND_HOST%:%ES_SERVICE_BIND_PORT%"
monasca-kibana-plugin.cookie.isSecure: False

View File

@@ -1,7 +0,0 @@
init_config:
instances:
- url: http://{{IP}}:9200
cluster_stats: true
pshard_stats: true
index_stats: true
pending_task_stats: true

View File

@@ -1,8 +0,0 @@
init_config:
ping_timeout: 1
ssh_port: 22
ssh_timeout: 0.5
instances:
- alive_test: ssh
host_name: 127.0.0.1
name: 127.0.0.1

View File

@@ -1,27 +0,0 @@
init_config: null
instances:
- name: keystone
dimensions:
service: keystone
timeout: 3
url: http://127.0.0.1/identity
- name: mysql
dimensions:
service: mysql
timeout: 3
url: http://127.0.0.1:3306
- name: influxdb
dimensions:
service: influxdb
timeout: 3
url: http://127.0.0.1:8086/ping
- name: elasticsearch
dimensions:
service: elasticsearch
timeout: 3
url: http://{{IP}}:9200/_cat/health
- name: kibana
dimensions:
service: kibana
timeout: 3
url: http://{{IP}}:5601/api/status

View File

@@ -1,14 +0,0 @@
init_config:
instances:
- built_by: Kafka
consumer_groups:
1_metrics:
metrics: []
thresh-event:
events: []
thresh-metric:
metrics: []
kafka_connect_str: 127.0.0.1:9092
name: 127.0.0.1:9092
per_partition: false

View File

@@ -1,20 +0,0 @@
#!/bin/sh
'/opt/monasca-agent/bin/monasca-setup' \
-u 'monasca-agent' \
-p 'password' \
-s '%MONASCA_SERVICE_TYPE%' \
\
--keystone_url '%KEYSTONE_AUTH_URI%' \
--project_name 'mini-mon' \
--project_domain_name '%SERVICE_DOMAIN_NAME%' \
--user_domain_name '%SERVICE_DOMAIN_NAME%' \
\
--service_type '%MONASCA_SERVICE_TYPE%' \
--endpoint_type 'public' \
--region_name '%REGION_NAME%' \
\
--check_frequency '15' \
--log_level 'DEBUG' \
--overwrite \
--system_only \
--monasca_statsd_port %MONASCA_STATSD_PORT%

View File

@@ -1,8 +0,0 @@
init_config:
instances:
- built_by: MySQL
name: mysql
server: 127.0.0.1
port: 3306
user: root
pass: secretdatabase

View File

@@ -1,87 +0,0 @@
init_config:
instances:
- name: influxd
detailed: true
dimensions:
service: influxd
exact_match: false
search_string:
- influxd
- name: monasca-statsd
detailed: true
dimensions:
service: monasca-statsd
exact_match: false
search_string:
- monasca-statsd
- name: monasca-notification
detailed: true
dimensions:
service: monasca-notification
exact_match: false
search_string:
- monasca-notification
- name: persister
detailed: true
dimensions:
service: persister
exact_match: false
search_string:
- persister
- name: storm
detailed: true
dimensions:
service: storm
exact_match: false
search_string:
- storm
- name: monasca-api
detailed: true
dimensions:
service: uwsgi
exact_match: false
search_string:
- uwsgi
- name: monasca-collector
detailed: true
dimensions:
service: monasca-collector
exact_match: false
search_string:
- monasca-collector
- name: memcached
detailed: true
dimensions:
service: memcached
exact_match: false
search_string:
- memcached
- name: monasca-forwarder
detailed: true
dimensions:
service: monasca-forwarder
exact_match: false
search_string:
- monasca-forwarder
- name: zookeeper
detailed: true
dimensions:
service: zookeeper
exact_match: false
search_string:
- zookeeper
- name: kafka
detailed: true
dimensions:
service: kafka
exact_match: false
search_string:
- kafka
- name: mysqld
detailed: true
dimensions:
service: mysqld
exact_match: false
search_string:
- mysqld

View File

@@ -1,6 +0,0 @@
init_config:
instances:
- host: 127.0.0.1
port: 2181
timeout: 3

View File

@@ -1,18 +0,0 @@
Listen %PUBLICPORT%
<VirtualHost *:%PUBLICPORT%>
WSGIDaemonProcess monasca-api user=%USER% processes=%APIWORKERS% threads=1 display-name=%{GROUP} %VIRTUALENV%
WSGIProcessGroup monasca-api
WSGIScriptAlias / %PUBLICWSGI%/wsgi.py
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLog /var/log/%APACHE_NAME%/monasca-api.log
CustomLog /var/log/%APACHE_NAME%/monasca-api_access.log combined
SetEnv no-gzip 1
AddDefaultCharset utf-8
</VirtualHost>

View File

@@ -1,186 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
# Copyright 2017 Fujitsu LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# The region for which all metrics passing through this server will be persisted
region: "useast"
maxQueryLimit: 10000
# Whether this server is running on a secure port
accessedViaHttps: false
# Topic for publishing metrics to
metricsTopic: metrics
# Topic for publishing domain events to
eventsTopic: events
validNotificationPeriods:
- 60
kafka:
brokerUris:
- "%KAFKA_HOST%:9092"
zookeeperUris:
- "127.0.0.1:2181"
healthCheckTopic: healthcheck
mysql:
driverClass: com.mysql.jdbc.Driver
url: "jdbc:mysql://%DATABASE_HOST%:%DATABASE_PORT%/mon?connectTimeout=5000&autoReconnect=true&useSSL=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=utf8"
user: "%DATABASE_USER%"
password: "%DATABASE_PASSWORD%"
maxWaitForConnection: 1s
validationQuery: "/* MyService Health Check */ SELECT 1"
minSize: 8
maxSize: 32
checkConnectionWhileIdle: false
checkConnectionOnBorrow: true
# Possible options for dataSourceClassName are:
# - com.mysql.jdbc.jdbc2.optional.MysqlDataSource
# - org.postgresql.ds.PGPoolingDataSource
# HINT: dataSourceUrl is relevant only for mysql
hibernate:
supportEnabled: %MONASCA_DATABASE_USE_ORM%
providerClass: com.zaxxer.hikari.hibernate.HikariConnectionProvider
dataSourceClassName: %MONASCA_API_DATABASE_ENGINE%
dataSourceUrl: jdbc:mysql://%MYSQL_HOST%:%MYSQL_PORT%/mon
serverName: %DATABASE_HOST%
portNumber: %DATABASE_PORT%
databaseName: mon
user: %DATABASE_USER%
password: %DATABASE_PASSWORD%
initialConnections: 25
maxConnections: 100
autoConfig: validate
databaseConfiguration:
databaseType: "%MONASCA_METRICS_DB%"
# Uncomment if databaseType is influxDB
influxDB:
# Retention policy may be left blank to indicate default policy.
retentionPolicy:
maxHttpConnections: 100
gzip: true
name: "mon"
url: "http://%INFLUXDB_HOST%:%INFLUXDB_PORT%"
user: "mon_api"
password: "password"
# Uncomment if databaseType is vertica
# As of 7/10 there is a bug in the monasca-api that requires this section even if databaseType is set to influxdb
vertica:
driverClass: com.vertica.jdbc.Driver
url: "jdbc:vertica://%VERTICA_HOST%:5433/mon"
user: "mon_api"
password: "password"
maxWaitForConnection: 1s
validationQuery: "/* MyService Health Check */ SELECT 1"
minSize: 4
maxSize: 32
checkConnectionWhileIdle: true
#
# vertica database hint to be added to SELECT
# statements. For example, the hint below is used
# to tell vertica that the query can be satisfied
# locally (replicated projection).
#
# dbHint: "/*+KV(01)*/"
dbHint: ""
middleware:
enabled: true
serverVIP: "%KEYSTONE_SERVICE_HOST%"
serverPort: %KEYSTONE_SERVICE_PORT%
useHttps: False
truststore: "None"
truststorePassword: "None"
connTimeout: 5000
connSSLClientAuth: False
keystore: "None"
keystorePassword: "None"
connPoolMaxActive: 3
connPoolMaxIdle: 3
connPoolEvictPeriod: 600000
connPoolMinIdleTime: 600000
connRetryTimes: 2
connRetryInterval: 50
defaultAuthorizedRoles: [monasca-user]
readOnlyAuthorizedRoles: [monasca-read-only-user]
agentAuthorizedRoles: [monasca-agent]
delegateAuthorizedRole: admin
adminRole: admin
adminAuthMethod: password
adminUser: "admin"
adminPassword: "%ADMIN_PASSWORD%"
adminProjectId:
adminProjectName: "admin"
adminToken:
timeToCacheToken: 600
maxTokenCacheSize: 1048576
server:
applicationConnectors:
- type: http
port: %MONASCA_API_SERVICE_PORT%
bindHost: %MONASCA_API_SERVICE_HOST%
maxRequestHeaderSize: 16KiB # Allow large headers used by keystone tokens
adminConnectors:
- type: http
port: %MONASCA_API_ADMIN_PORT%
bindHost: %MONASCA_API_SERVICE_HOST%
requestLog:
timeZone: UTC
appenders:
- type: file
currentLogFilename: "/var/log/monasca/api/request.log"
threshold: ALL
archive: true
archivedLogFilenamePattern: "/var/log/monasca/api/request-%d.log.gz"
archivedFileCount: 5
# Logging settings.
logging:
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
level: WARN
# Logger-specific levels.
loggers:
# Sets the level for 'com.example.app' to DEBUG.
com.example.app: DEBUG
appenders:
- type: console
threshold: ALL
timeZone: UTC
target: stdout
logFormat: # TODO
- type: file
currentLogFilename: "/var/log/monasca/api/monasca-api.log"
threshold: ALL
archive: true
archivedLogFilenamePattern: "/var/log/monasca/api/monasca-api-%d.log.gz"
archivedFileCount: 5
timeZone: UTC
logFormat: # TODO

View File

@@ -1,29 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Startup script for the Monasca API
[Unit]
Description=Monasca API Java app
Requires=network.target
After=network.target kafka.service influxdb.service mysql.service
[Service]
User=mon-api
Group=monasca
ExecStart=/usr/bin/java -Dfile.encoding=UTF-8 -Xmx128m -cp /opt/monasca/monasca-api.jar monasca.api.MonApiApplication server /etc/monasca/api-config.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -1,41 +0,0 @@
#
# Copyright 2016 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
input {
file {
add_field => { "dimensions" => { "service" => "system" }}
path => "/var/log/syslog"
tags => ["syslog"]
codec => multiline {
negate => "true"
pattern => "^%{SYSLOGTIMESTAMP}"
what => "previous"
}
}
}
output {
monasca_log_api {
monasca_log_api_url => "%MONASCA_API_URI_V2%"
keystone_api_url => "%KEYSTONE_AUTH_URI%"
project_name => "mini-mon"
username => "monasca-agent"
password => "password"
user_domain_name => "default"
project_domain_name => "default"
dimensions => [ "hostname:devstack" ]
}
}

View File

@@ -1,83 +0,0 @@
# Copyright 2016 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
input {
kafka {
bootstrap_servers => "%KAFKA_SERVICE_HOST%:%KAFKA_SERVICE_PORT%"
topics => ["transformed-log"]
group_id => "log-metric"
client_id => "monasca_log_metrics"
consumer_threads => 4
codec => json
}
}
filter {
# drop logs that have not set log level
if ![log][level] {
drop { periodic_flush => true }
} else {
ruby {
code => "
log_level = event.get('[log][level]').downcase
event.set('[log][level]', log_level)
"
}
}
# drop logs with log level not in warning,error
if [log][level] not in [warning,error] {
drop { periodic_flush => true }
}
ruby {
code => "
log_level = event.get('[log][level]').downcase
log_ts = Time.now.to_f * 1000.0
# metric name
metric_name = 'log.%s' % log_level
# build metric
metric = {}
metric['name'] = metric_name
metric['timestamp'] = log_ts
metric['value'] = 1
metric['dimensions'] = event.get('[log][dimensions]')
metric['value_meta'] = {}
event.set('[metric]',metric.to_hash)
"
}
mutate {
remove_field => ["log", "@version", "@timestamp", "log_level_original", "tags"]
}
}
output {
kafka {
bootstrap_servers => "%KAFKA_SERVICE_HOST%:%KAFKA_SERVICE_PORT%"
topic_id => "metrics"
client_id => "monasca_log_metrics"
compression_type => "none"
codec => json
}
}

View File

@@ -1,71 +0,0 @@
#
# Copyright 2016 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
input {
kafka {
bootstrap_servers => "%KAFKA_SERVICE_HOST%:%KAFKA_SERVICE_PORT%"
codec => json
topics => ["transformed-log"]
group_id => "logstash-persister"
}
}
filter {
date {
match => ["[log][timestamp]", "UNIX"]
target => "@timestamp"
}
date {
match => ["creation_time", "UNIX"]
target => "creation_time"
}
grok {
match => {
"[@timestamp]" => "^(?<index_date>\d{4}-\d{2}-\d{2})"
}
}
if "dimensions" in [log] {
ruby {
code => "
fieldHash = event.get('[log][dimensions]')
fieldHash.each do |key, value|
event.set(key,value)
end
"
}
}
mutate {
add_field => {
"message" => "%{[log][message]}"
"log_level" => "%{[log][level]}"
"tenant" => "%{[meta][tenantId]}"
"region" => "%{[meta][region]}"
}
remove_field => ["@version", "host", "type", "tags" ,"_index_date", "meta", "log"]
}
}
output {
elasticsearch {
index => "logs-%{tenant}-%{index_date}"
document_type => "log"
hosts => ["%ES_SERVICE_BIND_HOST%"]
}
}

View File

@@ -1,88 +0,0 @@
#
# Copyright 2016 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
input {
kafka {
bootstrap_servers => "%KAFKA_SERVICE_HOST%:%KAFKA_SERVICE_PORT%"
topics => ["log"]
group_id => "transformer-logstash-consumer"
codec => json
}
}
filter {
ruby {
code => 'event.set("message_tmp", event.get("[log][message]")[0..49])'
}
grok {
match => {
"message_tmp" => "(?i)(?<log_level>AUDIT|CRITICAL|DEBUG|INFO|TRACE|ERR(OR)?|WARN(ING)?)|\"level\":\s?(?<log_level>\d{2})"
}
}
if ! [log_level] {
grok {
match => {
"[log][message]" => "(?i)(?<log_level>AUDIT|CRITICAL|DEBUG|INFO|TRACE|ERR(OR)?|WARN(ING)?)|\"level\":\s?(?<log_level>\d{2})"
}
}
}
ruby {
init => '
LOG_LEVELS_MAP = {
# SYSLOG
"warn" => "Warning",
"err" => "Error",
# Bunyan errcodes
"10" => "Trace",
"20" => "Debug",
"30" => "Info",
"40" => "Warning",
"50" => "Error",
"60" => "Fatal"
}
'
code => '
if event.get("log_level")
# keep original value
log_level = event.get("log_level").downcase
if LOG_LEVELS_MAP.has_key?(log_level)
event.set("log_level_original",event.get("log_level"))
event.set("log_level",LOG_LEVELS_MAP[log_level])
else
event.set("log_level",log_level.capitalize)
end
else
event.set("log_level","Unknown")
end
'
}
mutate {
add_field => {
"[log][level]" => "%{log_level}"
}
# remove temporary fields
remove_field => ["message","log_level", "message_tmp"]
}
}
output {
kafka {
codec => json
bootstrap_servers => "%KAFKA_SERVICE_HOST%:%KAFKA_SERVICE_PORT%"
topic_id => "transformed-log"
}
}

View File

@@ -1,176 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
# Copyright (c) 2017 SUSE LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
name: monasca-persister
alarmHistoryConfiguration:
batchSize: %MONASCA_PERSISTER_BATCH_SIZE%
numThreads: 1
maxBatchTime: %MONASCA_PERSISTER_MAX_BATCH_TIME%
commitBatchTime: %MONASCA_PERSISTER_COMMIT_BATCH_TIME%
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
topic: alarm-state-transitions
groupId: 1_alarm-state-transitions
consumerId: "mini-mon"
clientId: 1
metricConfiguration:
batchSize: %MONASCA_PERSISTER_BATCH_SIZE%
numThreads: %MONASCA_PERSISTER_METRIC_THREADS%
maxBatchTime: %MONASCA_PERSISTER_MAX_BATCH_TIME%
commitBatchTime: %MONASCA_PERSISTER_COMMIT_BATCH_TIME%
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
topic: metrics
groupId: 1_metrics
consumerId: "mini-mon"
clientId: 1
#Kafka settings.
kafkaConfig:
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
zookeeperConnect: "%ZOOKEEPER_HOST%:2181"
socketTimeoutMs: 30000
socketReceiveBufferBytes : 65536
fetchMessageMaxBytes: 1048576
queuedMaxMessageChunks: 10
rebalanceMaxRetries: 4
fetchMinBytes: 1
fetchWaitMaxMs: 100
rebalanceBackoffMs: 2000
refreshLeaderBackoffMs: 200
autoOffsetReset: largest
consumerTimeoutMs: 1000
zookeeperSessionTimeoutMs : 60000
zookeeperConnectionTimeoutMs : 60000
zookeeperSyncTimeMs: 2000
# uncomment if database type is cassandra
cassandraDbConfiguration:
contactPoints:
- %CASSANDRADB_HOST%
port: 9042
user: cassandra
password: cassandra
keyspace: monasca
localDataCenter: datacenter1
maxConnections: 5
maxRequests: 2048
# socket time out in milliseconds when creating a new connection
connectionTimeout: 5000
# how long the driver waits for a response from server. Must be
# longer than the server side timeouts in the cassandra.yaml
readTimeout: 60000
# number of retries in upsert query. The retry interval is exponential,
# i.e., 1, 2, 4, 8 ... seconds. Retry is blocking.
maxWriteRetries: 5
maxBatches: 250
maxDefinitionCacheSize: 2000000
# ANY(0),
# ONE(1),
# TWO(2),
# THREE(3),
# QUORUM(4),
# ALL(5),
# LOCAL_QUORUM(6),
# EACH_QUORUM(7),
# SERIAL(8),
# LOCAL_SERIAL(9),
# LOCAL_ONE(10);
consistencyLevel: ONE
# number of days metric retention
retentionPolicy: 45
verticaMetricRepoConfig:
maxCacheSize: 2000000
databaseConfiguration:
databaseType: %MONASCA_PERSISTER_DB_TYPE%
# Uncomment if databaseType is influxdb
influxDbConfiguration:
# Retention policy may be left blank to indicate default policy.
retentionPolicy:
maxHttpConnections: 100
gzip: true
name: "mon"
url: "http://%INFLUXDB_HOST%:8086"
user: "mon_persister"
password: "password"
# Uncomment if databaseType is vertica
dataSourceFactory:
driverClass: com.vertica.jdbc.Driver
url: "jdbc:vertica://%VERTICA_HOST%:5433/mon"
user: "mon_persister"
password: "password"
properties:
ssl: false
# the maximum amount of time to wait on an empty pool before throwing an exception
maxWaitForConnection: 1s
# the SQL query to run when validating a connection's liveness
validationQuery: "/* MyService Health Check */ SELECT 1"
# the minimum number of connections to keep open
minSize: 8
# the maximum number of connections to keep open
maxSize: 41
# whether or not idle connections should be validated
checkConnectionWhileIdle: false
# the maximum lifetime of an idle connection
maxConnectionAge: 1 minute
metrics:
frequency: 1 second
# Logging settings.
logging:
# The default level of all loggers. Can be OFF, ERROR, WARN, INFO,
# DEBUG, TRACE, or ALL.
level: WARN
# Logger-specific levels.
loggers:
# Sets the level for 'com.example.app' to DEBUG.
com.example.app: DEBUG
# com.hpcloud: debug
# com.hpcloud.mon.persister.repository: DEBUG
appenders:
- type: file
threshold: INFO
archive: true
currentLogFilename: "%MONASCA_PERSISTER_LOG_DIR%/monasca-persister.log"
archivedLogFilenamePattern: "%MONASCA_PERSISTER_LOG_DIR%/monasca-persister.log-%d.log.gz"
archivedFileCount: 5
# The timezone used to format dates. HINT: USE THE DEFAULT, UTC.
timeZone: UTC
server:
applicationConnectors:
- type: http
port: %MONASCA_PERSISTER_APP_PORT%
bindHost: %MONASCA_PERSISTER_BIND_HOST%
adminConnectors:
- type: http
port: %MONASCA_PERSISTER_ADMIN_PORT%
bindHost: %MONASCA_PERSISTER_BIND_HOST%

View File

@@ -1,67 +0,0 @@
#!/bin/bash
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
### BEGIN INIT INFO
# Provides: monasca-thresh
# Required-Start: $nimbus
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Monitoring threshold engine running under storm
# Description:
### END INIT INFO
case "$1" in
start)
$0 status
if [ $? -ne 0 ]; then
sudo -Hu mon-thresh /opt/storm/current/bin/storm jar /opt/monasca/monasca-thresh.jar monasca.thresh.ThresholdingEngine /etc/monasca/thresh-config.yml thresh-cluster
exit $?
else
echo "monasca-thresh is already running"
exit 0
fi
;;
stop)
# On system shutdown storm is being shutdown also and this will hang so skip shutting down thresh in that case
if [ -e '/sbin/runlevel' ]; then # upstart/sysV case
if [ $(runlevel | cut -d\ -f 2) == 0 ]; then
exit 0
fi
else # systemd case
systemctl list-units --type=target |grep shutdown.target
if [ $? -eq 0 ]; then
exit 0
fi
fi
sudo -Hu mon-thresh /opt/storm/current/bin/storm kill thresh-cluster
# The above command returns but actually takes awhile loop watching status
while true; do
sudo -Hu mon-thresh /opt/storm/current/bin/storm list |grep thresh-cluster
if [ $? -ne 0 ]; then break; fi
sleep 1
done
;;
status)
sudo -Hu mon-thresh /opt/storm/current/bin/storm list |grep thresh-cluster
;;
restart)
$0 stop
$0 start
;;
esac

View File

@@ -1,145 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
# Copyright 2017 Fujitsu LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
metricSpoutThreads: 2
metricSpoutTasks: 2
statsdConfig:
host: "127.0.0.1"
port: %MONASCA_STATSD_PORT%
prefix: monasca.storm.
dimensions: !!map
service : monitoring
component : storm
metricSpoutConfig:
kafkaConsumerConfiguration:
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
topic: "metrics"
numThreads: 1
groupId: "thresh-metric"
zookeeperConnect: "127.0.0.1:2181"
consumerId: 1
socketTimeoutMs: 30000
socketReceiveBufferBytes : 65536
fetchMessageMaxBytes: 1048576
autoCommitEnable: true
autoCommitIntervalMs: 60000
queuedMaxMessageChunks: 10
rebalanceMaxRetries: 4
fetchMinBytes: 1
fetchWaitMaxMs: 100
rebalanceBackoffMs: 2000
refreshLeaderBackoffMs: 200
autoOffsetReset: largest
consumerTimeoutMs: -1
clientId : 1
zookeeperSessionTimeoutMs : 60000
zookeeperConnectionTimeoutMs : 60000
zookeeperSyncTimeMs: 2000
eventSpoutConfig:
kafkaConsumerConfiguration:
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
topic: "events"
numThreads: 1
groupId: "thresh-event"
zookeeperConnect: "127.0.0.1:2181"
consumerId: 1
socketTimeoutMs: 30000
socketReceiveBufferBytes : 65536
fetchMessageMaxBytes: 1048576
autoCommitEnable: true
autoCommitIntervalMs: 60000
queuedMaxMessageChunks: 10
rebalanceMaxRetries: 4
fetchMinBytes: 1
fetchWaitMaxMs: 100
rebalanceBackoffMs: 2000
refreshLeaderBackoffMs: 200
autoOffsetReset: largest
consumerTimeoutMs: -1
clientId : 1
zookeeperSessionTimeoutMs : 60000
zookeeperConnectionTimeoutMs : 60000
zookeeperSyncTimeMs: 2000
kafkaProducerConfig:
# See http://kafka.apache.org/documentation.html#api for semantics and defaults.
topic: "alarm-state-transitions"
metadataBrokerList: "%KAFKA_HOST%:9092"
serializerClass: kafka.serializer.StringEncoder
partitionerClass:
requestRequiredAcks: 1
requestTimeoutMs: 10000
producerType: sync
keySerializerClass:
compressionCodec: none
compressedTopics:
messageSendMaxRetries: 3
retryBackoffMs: 100
topicMetadataRefreshIntervalMs: 600000
queueBufferingMaxMs: 5000
queueBufferingMaxMessages: 10000
queueEnqueueTimeoutMs: -1
batchNumMessages: 200
sendBufferBytes: 102400
clientId : Threshold_Engine
sporadicMetricNamespaces:
- foo
database:
driverClass: %MONASCA_THRESH_DATABASE_ENGINE%
url: "jdbc:mariadb://%DATABASE_HOST%:%DATABASE_PORT%/mon"
user: "%DATABASE_USER%"
password: "%DATABASE_PASSWORD%"
properties:
ssl: false
# the maximum amount of time to wait on an empty pool before throwing an exception
maxWaitForConnection: 1s
# the SQL query to run when validating a connection's liveness
validationQuery: "/* %DATABASE_TYPE% Health Check */ SELECT 1"
# the minimum number of connections to keep open
minSize: 8
# the maximum number of connections to keep open
maxSize: 41
# flag indicates if Hibernate support enabled
hibernateSupport: %MONASCA_DATABASE_USE_ORM%
# hibernate provider class
providerClass: com.zaxxer.hikari.hibernate.HikariConnectionProvider
# database name
databaseName: mon
# server name/address
serverName: %DATABASE_HOST%
# server port number
portNumber: %DATABASE_PORT%
# hibernate auto configuretion parameter
autoConfig: validate

View File

@@ -1,138 +0,0 @@
#
# (C) Copyright 2015,2016 Hewlett Packard Enterprise Development LP
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""A simple script to setup influxdb user and roles. At some point this should
become a more full featured module. Also this assumes that none of the
python based influxdb clients are available on this system.
"""
import json
import sys
from oslo_utils.encodeutils import safe_decode
from oslo_utils.encodeutils import safe_encode
from six.moves import urllib
import six.moves.urllib.parse as urlparse
ADMIN = 'root'
ADMIN_PASS = 'root'
DBNAME = 'mon'
USERS = {}
USERS['mon_api'] = 'password'
USERS['mon_persister'] = 'password'
URL = 'http://127.0.0.1:8086'
SHARDSPACE_NAME = 'persister_all'
REPLICATION = 1
RETENTION = '90d'
def format_response(req):
try:
json_value = json.loads(req.read())
if (len(json_value['results'][0]) > 0 and
'series' in json_value['results'][0] and
'values' in json_value['results'][0]['series'][0]):
return json_value['results'][0]['series'][0]['values']
else:
return []
except KeyError:
print("Query returned a non-successful result: {0}".format(json_value['results']))
raise
def influxdb_get(uri, query, db=None):
"""Runs a query via HTTP GET and returns the response as a Python list."""
getparams = {"q": query}
if db:
getparams['db'] = db
try:
params = urlparse.urlencode(getparams)
uri = "{}&{}".format(uri, params)
req = urllib.request.urlopen(uri)
return format_response(req)
except KeyError:
sys.exit(1)
def influxdb_get_post(uri, query, db=None):
"""Runs a query using HTTP GET or POST and returns the response as a Python list.
At some InfluxDB release several ops changed from using GET to POST. For example,
CREATE DATABASE. To maintain backward compatibility, this function first trys the
query using POST and if that fails it retries again using GET.
"""
query_params = {"q": query}
if db:
query_params['db'] = db
try:
encoded_params = safe_encode(urlparse.urlencode(query_params))
try:
req = urllib.request.urlopen(uri, encoded_params)
return format_response(req)
except urllib.error.HTTPError:
uri = "{}&{}".format(uri, encoded_params)
req = urllib.request.urlopen(uri)
return format_response(req)
except KeyError:
sys.exit(1)
def main(argv=None):
"""If necessary, create the database, retention policy, and users"""
auth_str = '?u=%s&p=%s' % (ADMIN, ADMIN_PASS)
api_uri = "{0}/query{1}".format(URL, auth_str)
# List current databases
dbs = influxdb_get(uri=api_uri, query="SHOW DATABASES")
if [DBNAME] not in dbs:
print("Creating database '{}'".format(DBNAME))
influxdb_get_post(uri=api_uri, query="CREATE DATABASE {0}".format(DBNAME))
print("...created!")
# Check retention policy
policies = influxdb_get(uri=api_uri,
query="SHOW RETENTION POLICIES ON {0}".format(DBNAME))
if not any(pol[0] == SHARDSPACE_NAME for pol in policies):
# Set retention policy
policy = ("CREATE RETENTION POLICY {0} ON {1} DURATION {2} "
"REPLICATION {3} DEFAULT".format(SHARDSPACE_NAME,
DBNAME,
RETENTION,
REPLICATION)
)
influxdb_get_post(uri=api_uri, db=DBNAME, query=policy)
# Create the users
users = influxdb_get(uri=api_uri, query="SHOW USERS", db=DBNAME)
for name, password in USERS.items():
if not any(user[0] == name for user in users):
influxdb_get_post(uri=api_uri,
query=safe_decode("CREATE USER {0} WITH PASSWORD '{1}'"
.format(name, password)),
db=DBNAME)
if __name__ == "__main__":
sys.exit(main())

View File

@@ -1,63 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
### base
java.library.path: "/usr/local/lib:/opt/local/lib:/usr/lib"
storm.local.dir: "/var/storm"
### zookeeper.*
storm.zookeeper.servers:
- "127.0.0.1"
storm.zookeeper.port: 2181
storm.zookeeper.retry.interval: 5000
storm.zookeeper.retry.times: 60
storm.zookeeper.root: /storm
storm.zookeeper.session.timeout: 3000
### supervisor.* configs are for node supervisors
supervisor.slots.ports:
- 6701
- 6702
supervisor.childopts: -Xmx256m
### worker.* configs are for task workers
worker.childopts: -Xmx1280m -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote
### nimbus.* configs are for the master
nimbus.seeds: ["127.0.0.1"]
nimbus.thrift.port: 6627
nimbus.childopts: -Xmx256m
### ui.* configs are for the master
ui.host: %STORM_UI_HOST%
ui.port: %STORM_UI_PORT%
ui.childopts: -Xmx768m
### logviewer.* configs are for the master
logviewer.port: %STORM_LOGVIEWER_PORT%
logviewer.childopts: -Xmx128m
### drpc.* configs
### transactional.* configs
transactional.zookeeper.servers:
- "127.0.0.1"
transactional.zookeeper.port: 2181
transactional.zookeeper.root: /storm-transactional
### topology.* configs are for specific executing storms
topology.acker.executors: 1
topology.debug: False

View File

@@ -1,14 +0,0 @@
CREATE SCHEMA MonAlarms;
CREATE TABLE MonAlarms.StateHistory(
id AUTO_INCREMENT,
tenant_id VARCHAR,
alarm_id VARCHAR,
metrics VARCHAR (65000),
old_state VARCHAR,
new_state VARCHAR,
sub_alarms VARCHAR (65000),
reason VARCHAR(65000),
reason_data VARCHAR(65000),
time_stamp TIMESTAMP NOT NULL
) PARTITION BY EXTRACT('year' FROM time_stamp)*10000 + EXTRACT('month' FROM time_stamp)*100 + EXTRACT('day' FROM time_stamp);

View File

@@ -1,105 +0,0 @@
DROP SCHEMA MonMetrics CASCADE;
CREATE SCHEMA MonMetrics;
CREATE TABLE MonMetrics.Measurements (
definition_dimensions_id BINARY(20) NOT NULL,
time_stamp TIMESTAMP NOT NULL,
value FLOAT NOT NULL,
value_meta VARCHAR(2048)
) PARTITION BY EXTRACT('year' FROM time_stamp)*10000 + EXTRACT('month' FROM time_stamp)*100 + EXTRACT('day' FROM time_stamp);
CREATE TABLE MonMetrics.Definitions(
id BINARY(20) NOT NULL,
name VARCHAR(255) NOT NULL,
tenant_id VARCHAR(255) NOT NULL,
region VARCHAR(255) NOT NULL,
PRIMARY KEY(id),
CONSTRAINT MetricsDefinitionsConstraint UNIQUE(name, tenant_id, region)
);
CREATE TABLE MonMetrics.Dimensions (
dimension_set_id BINARY(20) NOT NULL,
name VARCHAR(255) NOT NULL,
value VARCHAR(255) NOT NULL,
CONSTRAINT MetricsDimensionsConstraint UNIQUE(dimension_set_id, name, value)
);
CREATE TABLE MonMetrics.DefinitionDimensions (
id BINARY(20) NOT NULL,
definition_id BINARY(20) NOT NULL,
dimension_set_id BINARY(20) NOT NULL,
CONSTRAINT MetricsDefinitionDimensionsConstraint UNIQUE(definition_id, dimension_set_id)
);
-- Projections
-- ** These are for a single node system with no k safety
CREATE PROJECTION Measurements_DBD_1_rep_MonMetrics /*+createtype(D)*/
(
definition_dimensions_id ENCODING RLE,
time_stamp ENCODING DELTAVAL,
value ENCODING AUTO,
value_meta ENCODING RLE
)
AS
SELECT definition_dimensions_id,
time_stamp,
value,
value_meta
FROM MonMetrics.Measurements
ORDER BY definition_dimensions_id,
time_stamp,
value_meta
UNSEGMENTED ALL NODES;
CREATE PROJECTION Definitions_DBD_2_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING AUTO,
name ENCODING AUTO,
tenant_id ENCODING RLE,
region ENCODING RLE
)
AS
SELECT id,
name,
tenant_id,
region
FROM MonMetrics.Definitions
ORDER BY region,
tenant_id,
name
UNSEGMENTED ALL NODES;
CREATE PROJECTION Dimensions_DBD_3_rep_MonMetrics /*+createtype(D)*/
(
dimension_set_id ENCODING AUTO,
name ENCODING RLE,
value ENCODING AUTO
)
AS
SELECT dimension_set_id,
name,
value
FROM MonMetrics.Dimensions
ORDER BY name,
value,
dimension_set_id
UNSEGMENTED ALL NODES;
CREATE PROJECTION DefinitionDimensions_DBD_4_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING AUTO,
definition_id ENCODING RLE,
dimension_set_id ENCODING AUTO
)
AS
SELECT id,
definition_id,
dimension_set_id
FROM MonMetrics.DefinitionDimensions
ORDER BY definition_id,
dimension_set_id
UNSEGMENTED ALL NODES;
select refresh('MonMetrics.Measurements, MonMetrics.Definitions, MonMetrics.Dimensions, MonMetrics.DefinitionDimensions');

View File

@@ -1,18 +0,0 @@
CREATE ROLE monasca_persister;
CREATE ROLE monasca_api;
GRANT USAGE ON SCHEMA MonMetrics TO monasca_persister;
GRANT USAGE ON SCHEMA MonAlarms TO monasca_persister;
GRANT ALL ON TABLE MonMetrics.Measurements TO monasca_persister;
GRANT ALL ON TABLE MonMetrics.Definitions TO monasca_persister;
GRANT ALL ON TABLE MonMetrics.Dimensions TO monasca_persister;
GRANT ALL ON TABLE MonMetrics.DefinitionDimensions TO monasca_persister;
GRANT ALL ON TABLE MonAlarms.StateHistory TO monasca_persister;
GRANT USAGE ON SCHEMA MonMetrics TO monasca_api;
GRANT USAGE ON SCHEMA MonAlarms TO monasca_api;
GRANT SELECT ON TABLE MonMetrics.Measurements TO monasca_api;
GRANT SELECT ON TABLE MonMetrics.Definitions TO monasca_api;
GRANT SELECT ON TABLE MonMetrics.Dimensions TO monasca_api;
GRANT SELECT ON TABLE MonMetrics.DefinitionDimensions TO monasca_api;
GRANT ALL ON TABLE MonAlarms.StateHistory TO monasca_api;

View File

@@ -1,7 +0,0 @@
CREATE USER mon_api IDENTIFIED BY 'password';
GRANT monasca_api TO mon_api;
ALTER USER mon_api DEFAULT ROLE monasca_api;
CREATE USER mon_persister IDENTIFIED BY 'password';
GRANT monasca_persister TO mon_persister;
ALTER USER mon_persister DEFAULT ROLE monasca_persister;

View File

@@ -1,68 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
# Copyright 2020 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ZooKeeper Logging Configuration
#
# Format is "<default threshold> (, <appender>)+
log4j.rootLogger=INFO, CONSOLE, ROLLINGFILE, TRACEFILE
# Example: console appender only
# log4j.rootLogger=INFO, CONSOLE
# Example with rolling log file
#log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE
# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE
#
# Log INFO level and above messages to the console
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
#
# Add ROLLINGFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=WARN
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/zookeeper.log
# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
#
# Add TRACEFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.log.dir}/zookeeper_trace.log
log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L][%x] - %m%n

View File

@@ -1,74 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development Company LP
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# http://hadoop.apache.org/zookeeper/docs/current/zookeeperAdmin.html
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/var/lib/zookeeper
# Place the dataLogDir to a separate physical disc for better performance
# dataLogDir=/disk2/zookeeper
# the port at which the clients will connect
clientPort=2181
# Maximum number of clients that can connect from one client
maxClientCnxns=60
# specify all zookeeper servers
# The fist port is used by followers to connect to the leader
# The second one is used for leader election
server.0=127.0.0.1:2888:3888
# To avoid seeks ZooKeeper allocates space in the transaction log file in
# blocks of preAllocSize kilobytes. The default block size is 64M. One reason
# for changing the size of the blocks is to reduce the block size if snapshots
# are taken more often. (Also, see snapCount).
#preAllocSize=65536
# Clients can submit requests faster than ZooKeeper can process them,
# especially if there are a lot of clients. To prevent ZooKeeper from running
# out of memory due to queued requests, ZooKeeper will throttle clients so that
# there is no more than globalOutstandingLimit outstanding requests in the
# system. The default limit is 1,000.ZooKeeper logs transactions to a
# transaction log. After snapCount transactions are written to a log file a
# snapshot is started and a new transaction log file is started. The default
# snapCount is 10,000.
#snapCount=1000
# If this option is defined, requests will be will logged to a trace file named
# traceFile.year.month.day.
#traceFile=
# Leader accepts client connections. Default value is "yes". The leader machine
# coordinates updates. For higher update throughput at thes slight expense of
# read throughput the leader can be configured to not accept clients and focus
# on coordination.
#leaderServes=yes
# Autopurge every hour to avoid using lots of disk in bursts
# Order of the next 2 properties matters.
# autopurge.snapRetainCount must be before autopurge.purgeInterval.
autopurge.snapRetainCount=3
autopurge.purgeInterval=1

View File

@@ -1,20 +0,0 @@
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
Environment=ZOO_LOG_DIR=/var/log/zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop /opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
[Install]
WantedBy=default.target

View File

@@ -1,37 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_MON_CLIENT=$(set +o | grep xtrace)
set +o xtrace
install_monascaclient() {
if python3_enabled; then
enable_python3_package python-monascaclient
fi
git_clone $MONASCA_CLIENT_REPO $MONASCA_CLIENT_DIR $MONASCA_CLIENT_BRANCH
setup_dev_lib "python-monascaclient"
# install completion file
monasca complete > /tmp/monasca.bash_completion
sudo install -D -m 0644 -o $STACK_USER /tmp/monasca.bash_completion $MONASCA_COMPLETION_FILE
rm -rf /tmp/monasca.bash_completion
}
clean_monascaclient() {
sudo rm -rf $MONASCA_COMPLETION_FILE
}
${_XTRACE_MON_CLIENT}

View File

@@ -1,31 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_MON_CONST=$(set +o | grep xtrace)
set +o xtrace
# Location of python-monascaclient completion file
MONASCA_COMPLETION_FILE=/etc/bash_completion.d/monasca.bash_completion
# Location of monasca-profile
MONASCA_PROFILE_FILE=/etc/profile.d/monasca.sh
# monasca_service_type, used in:
# keystone endpoint creation
# configuration files
MONASCA_SERVICE_TYPE=monitoring
${_XTRACE_MON_CONST}

View File

@@ -1,804 +0,0 @@
#!/bin/bash
#
# Copyright 2016-2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
_XTRACE_MON_LOG=$(set +o | grep xtrace)
set +o xtrace
_ERREXIT_MON_LOG=$(set +o | grep errexit)
set -o errexit
# configuration bits of various services
LOG_PERSISTER_DIR=$DEST/monasca-log-persister
LOG_TRANSFORMER_DIR=$DEST/monasca-log-transformer
LOG_METRICS_DIR=$DEST/monasca-log-metrics
LOG_AGENT_DIR=$DEST/monasca-log-agent
ELASTICSEARCH_DIR=$DEST/elasticsearch
ELASTICSEARCH_CFG_DIR=$ELASTICSEARCH_DIR/config
ELASTICSEARCH_LOG_DIR=$LOGDIR/elasticsearch
ELASTICSEARCH_DATA_DIR=$DATA_DIR/elasticsearch
KIBANA_DIR=$DEST/kibana
KIBANA_CFG_DIR=$KIBANA_DIR/config
KIBANA_DEV_DIR=$DEST/kibana_dev
KIBANA_DEV_NODE_JS_VERSION=${KIBANA_DEV_NODE_JS_VERSION:-"10.15.2"}
LOGSTASH_DIR=$DEST/logstash
LOGSTASH_DATA_DIR=$DEST/logstash-data
ES_SERVICE_BIND_HOST=${ES_SERVICE_BIND_HOST:-${SERVICE_HOST}}
ES_SERVICE_BIND_PORT=${ES_SERVICE_BIND_PORT:-9200}
ES_SERVICE_PUBLISH_HOST=${ES_SERVICE_PUBLISH_HOST:-${SERVICE_HOST}}
ES_SERVICE_PUBLISH_PORT=${ES_SERVICE_PUBLISH_PORT:-9300}
KIBANA_SERVICE_HOST=${KIBANA_SERVICE_HOST:-${SERVICE_HOST}}
KIBANA_SERVICE_PORT=${KIBANA_SERVICE_PORT:-5601}
KIBANA_SERVER_BASE_PATH=${KIBANA_SERVER_BASE_PATH:-"/dashboard/monitoring/logs_proxy"}
# Settings needed for Elasticsearch
# Elasticsearch uses a lot of file descriptors or file handles.
# Increase the limit on the number of open files descriptors for the user running Elasticsearch to 65,536 or higher.
LIMIT_NOFILE=${LIMIT_NOFILE:-65535}
# Elasticsearch uses a mmapfs directory by default to store its indices.
# The default operating system limits on mmap counts is likely to be too low,
# which may result in out of memory exceptions, increase to at least 262144.
VM_MAX_MAP_COUNT=${VM_MAX_MAP_COUNT:-262144}
MONASCA_LOG_API_BASE_URI=https://${MONASCA_API_BASE_URI}/logs
run_process_sleep() {
local name=$1
local cmd=$2
local sleepTime=${3:-1}
run_process "$name" "$cmd"
sleep ${sleepTime}
}
is_logstash_required() {
is_service_enabled monasca-log-persister \
|| is_service_enabled monasca-log-transformer \
|| is_service_enabled monasca-log-metrics \
|| is_service_enabled monasca-log-agent \
&& return 0
}
# TOP_LEVEL functions called from devstack coordinator
###############################################################################
function pre_install_logs_services {
install_elk
install_nodejs
install_gate_config_holder
}
function install_monasca_log {
configure_nvm
configure_yarn
build_kibana_plugin
install_log_agent
if $USE_OLD_LOG_API = true; then
install_old_log_api
fi
}
function install_elk {
install_logstash
install_elasticsearch
install_kibana
}
function install_gate_config_holder {
sudo install -d -o $STACK_USER $GATE_CONFIGURATION_DIR
}
function install_monasca_statsd {
if use_library_from_git "monasca-statsd"; then
git_clone_by_name "monasca-statsd"
setup_dev_lib "monasca-statsd"
fi
}
function configure_monasca_log {
configure_kafka
configure_elasticsearch
configure_kibana
install_kibana_plugin
if $USE_OLD_LOG_API = true; then
configure_old_monasca_log_api
fi
configure_monasca_log_api
configure_monasca_log_transformer
configure_monasca_log_metrics
configure_monasca_log_persister
configure_monasca_log_agent
}
function init_monasca_log {
enable_log_management
}
function init_monasca_grafana_dashboards {
if is_service_enabled horizon; then
echo_summary "Init Grafana dashboards"
sudo python "${PLUGIN_FILES}"/grafana/grafana.py "${PLUGIN_FILES}"/grafana/dashboards.d
fi
}
function install_old_log_api {
if python3_enabled; then
enable_python3_package monasca-log-api
fi
echo_summary "Installing monasca-log-api"
git_clone $MONASCA_LOG_API_REPO $MONASCA_LOG_API_DIR $MONASCA_LOG_API_BRANCH
setup_develop $MONASCA_LOG_API_DIR
install_keystonemiddleware
install_monasca_statsd
if [ "$MONASCA_LOG_API_DEPLOY" == "mod_wsgi" ]; then
install_apache_wsgi
elif [ "$MONASCA_LOG_API_DEPLOY" == "uwsgi" ]; then
pip_install uwsgi
else
pip_install gunicorn
fi
if [ "$MONASCA_LOG_API_DEPLOY" != "gunicorn" ]; then
if is_ssl_enabled_service "monasca-log-api"; then
enable_mod_ssl
fi
fi
}
function configure_old_monasca_log_api {
MONASCA_LOG_API_BIN_DIR=$(get_python_exec_prefix)
MONASCA_LOG_API_WSGI=$MONASCA_LOG_API_BIN_DIR/monasca-log-api-wsgi
if is_service_enabled monasca-log-api; then
echo_summary "Configuring monasca-log-api"
rm -rf $MONASCA_LOG_API_UWSGI_CONF
install -m 600 $MONASCA_LOG_API_DIR/etc/monasca/log-api-uwsgi.ini $MONASCA_LOG_API_UWSGI_CONF
write_uwsgi_config "$MONASCA_LOG_API_UWSGI_CONF" "$MONASCA_LOG_API_WSGI" "/logs"
fi
}
function configure_old_monasca_log_api_core {
# Put config files in ``$MONASCA_LOG_API_CONF_DIR`` for everyone to find
sudo install -d -o $STACK_USER $MONASCA_LOG_API_CONF_DIR
sudo install -m 700 -d -o $STACK_USER $MONASCA_LOG_API_CACHE_DIR
sudo install -d -o $STACK_USER $MONASCA_LOG_API_LOG_DIR
# ensure fresh installation of configuration files
rm -rf $MONASCA_LOG_API_CONF $MONASCA_LOG_API_PASTE $MONASCA_LOG_API_LOGGING_CONF
$MONASCA_LOG_API_BIN_DIR/oslo-config-generator \
--config-file $MONASCA_LOG_API_DIR/config-generator/monasca-log-api.conf \
--output-file /tmp/monasca-log-api.conf
install -m 600 /tmp/monasca-log-api.conf $MONASCA_LOG_API_CONF && rm -rf /tmp/monasca-log-api.conf
install -m 600 $MONASCA_LOG_API_DIR/etc/monasca/log-api-paste.ini $MONASCA_LOG_API_PASTE
install -m 600 $MONASCA_LOG_API_DIR/etc/monasca/log-api-logging.conf $MONASCA_LOG_API_LOGGING_CONF
# configure monasca-log-api.conf
iniset "$MONASCA_LOG_API_CONF" DEFAULT log_config_append $MONASCA_LOG_API_LOGGING_CONF
iniset "$MONASCA_LOG_API_CONF" service region $REGION_NAME
iniset "$MONASCA_LOG_API_CONF" log_publisher kafka_url $KAFKA_SERVICE_HOST:$KAFKA_SERVICE_PORT
iniset "$MONASCA_LOG_API_CONF" log_publisher topics log
iniset "$MONASCA_LOG_API_CONF" kafka_healthcheck kafka_url $KAFKA_SERVICE_HOST:$KAFKA_SERVICE_PORT
iniset "$MONASCA_LOG_API_CONF" kafka_healthcheck kafka_topics log
iniset "$MONASCA_LOG_API_CONF" roles_middleware path "/v2.0/log"
iniset "$MONASCA_LOG_API_CONF" roles_middleware default_roles monasca-user
iniset "$MONASCA_LOG_API_CONF" roles_middleware agent_roles monasca-agent
iniset "$MONASCA_LOG_API_CONF" roles_middleware delegate_roles admin
# configure keystone middleware
configure_auth_token_middleware "$MONASCA_LOG_API_CONF" "admin" $MONASCA_LOG_API_CACHE_DIR
iniset "$MONASCA_LOG_API_CONF" keystone_authtoken region_name $REGION_NAME
iniset "$MONASCA_LOG_API_CONF" keystone_authtoken project_name "admin"
iniset "$MONASCA_LOG_API_CONF" keystone_authtoken password $ADMIN_PASSWORD
# insecure
if is_service_enabled tls-proxy; then
iniset "$MONASCA_LOG_API_CONF" keystone_authtoken insecure False
fi
# configure log-api-paste.ini
iniset "$MONASCA_LOG_API_PASTE" server:main bind $MONASCA_LOG_API_SERVICE_HOST:$MONASCA_LOG_API_SERVICE_PORT
iniset "$MONASCA_LOG_API_PASTE" server:main chdir $MONASCA_LOG_API_DIR
iniset "$MONASCA_LOG_API_PASTE" server:main workers $API_WORKERS
}
function init_agent {
echo_summary "Init Monasca agent"
sudo cp -f "${PLUGIN_FILES}"/monasca-agent/http_check.yaml /etc/monasca/agent/conf.d/http_check.yaml
sudo cp -f "${PLUGIN_FILES}"/monasca-agent/process.yaml /etc/monasca/agent/conf.d/process.yaml
sudo cp -f "${PLUGIN_FILES}"/monasca-agent/elastic.yaml /etc/monasca/agent/conf.d/elastic.yaml
sudo sed -i "s/{{IP}}/$(ip -o -4 addr list eth1 | awk '{print $4}' | cut -d/ -f1 | head -1)/" /etc/monasca/agent/conf.d/*.yaml
sudo sed -i "s/127\.0\.0\.1/$(hostname)/" /etc/monasca/agent/conf.d/*.yaml
sudo systemctl restart monasca-collector
}
function stop_monasca_log {
stop_process "monasca-log-agent" || true
stop_monasca_log_api
stop_process "monasca-log-metrics" || true
stop_process "monasca-log-persister" || true
stop_process "monasca-log-transformer" || true
stop_process "kibana" || true
stop_process "elasticsearch" || true
}
function start_monasca_log {
start_elasticsearch
start_kibana
start_monasca_log_transformer
start_monasca_log_metrics
start_monasca_log_persister
if $USE_OLD_LOG_API = true; then
start_monasca_log_api
fi
start_monasca_log_agent
}
function clean_monasca_log {
clean_monasca_log_agent
clean_monasca_log_api
clean_monasca_log_persister
clean_monasca_log_transformer
clean_kibana
clean_elasticsearch
clean_logstash
clean_nodejs
clean_nvm
clean_yarn
clean_gate_config_holder
}
###############################################################################
function configure_monasca_log_api {
if is_service_enabled monasca-log; then
echo_summary "Configuring monasca-api"
iniset "$MONASCA_API_CONF" DEFAULT enable_logs_api "true"
iniset "$MONASCA_API_CONF" kafka logs_topics "log"
create_log_management_accounts
fi
}
function install_logstash {
if is_logstash_required; then
echo_summary "Installing Logstash ${LOGSTASH_VERSION}"
local logstash_tarball=logstash-oss-${LOGSTASH_VERSION}.tar.gz
local logstash_url=https://artifacts.elastic.co/downloads/logstash/${logstash_tarball}
local logstash_dest
logstash_dest=`get_extra_file ${logstash_url}`
tar xzf ${logstash_dest} -C $DEST
sudo chown -R $STACK_USER $DEST/logstash-${LOGSTASH_VERSION}
sudo ln -sf $DEST/logstash-${LOGSTASH_VERSION} $LOGSTASH_DIR
sudo mkdir -p $LOGSTASH_DATA_DIR
sudo chown $STACK_USER:monasca $LOGSTASH_DATA_DIR
fi
}
function clean_logstash {
if is_logstash_required; then
echo_summary "Cleaning Logstash ${LOGSTASH_VERSION}"
sudo rm -rf $LOGSTASH_DIR || true
sudo rm -rf $FILES/logstash-${LOGSTASH_VERSION}.tar.gz || true
sudo rm -rf $DEST/logstash-${LOGSTASH_VERSION} || true
fi
}
function install_elasticsearch {
if is_service_enabled elasticsearch; then
echo_summary "Installing ElasticSearch ${ELASTICSEARCH_VERSION}"
local es_tarball=elasticsearch-oss-${ELASTICSEARCH_VERSION}-linux-x86_64.tar.gz
local es_url=https://artifacts.elastic.co/downloads/elasticsearch/${es_tarball}
local es_dest
es_dest=`get_extra_file ${es_url}`
tar xzf ${es_dest} -C $DEST
sudo chown -R $STACK_USER $DEST/elasticsearch-${ELASTICSEARCH_VERSION}
sudo ln -sf $DEST/elasticsearch-${ELASTICSEARCH_VERSION} $ELASTICSEARCH_DIR
fi
}
function configure_elasticsearch {
if is_service_enabled elasticsearch; then
echo_summary "Configuring ElasticSearch ${ELASTICSEARCH_VERSION}"
local templateDir=$ELASTICSEARCH_CFG_DIR/templates
for dir in $ELASTICSEARCH_LOG_DIR $templateDir $ELASTICSEARCH_DATA_DIR; do
sudo install -m 755 -d -o $STACK_USER $dir
done
sudo cp -f "${PLUGIN_FILES}"/elasticsearch/elasticsearch.yml $ELASTICSEARCH_CFG_DIR/elasticsearch.yml
sudo chown -R $STACK_USER $ELASTICSEARCH_CFG_DIR/elasticsearch.yml
sudo chmod 0644 $ELASTICSEARCH_CFG_DIR/elasticsearch.yml
sudo sed -e "
s|%ES_SERVICE_BIND_HOST%|$ES_SERVICE_BIND_HOST|g;
s|%ES_SERVICE_BIND_PORT%|$ES_SERVICE_BIND_PORT|g;
s|%ES_DATA_DIR%|$ELASTICSEARCH_DATA_DIR|g;
s|%ES_LOG_DIR%|$ELASTICSEARCH_LOG_DIR|g;
" -i $ELASTICSEARCH_CFG_DIR/elasticsearch.yml
sudo ln -sf $ELASTICSEARCH_CFG_DIR/elasticsearch.yml $GATE_CONFIGURATION_DIR/elasticsearch.yml
echo "[Service]" | sudo tee --append /etc/systemd/system/devstack\@elasticsearch.service > /dev/null
echo "LimitNOFILE=$LIMIT_NOFILE" | sudo tee --append /etc/systemd/system/devstack\@elasticsearch.service > /dev/null
echo "vm.max_map_count=$VM_MAX_MAP_COUNT" | sudo tee --append /etc/sysctl.conf > /dev/null
sudo sysctl -w vm.max_map_count=$VM_MAX_MAP_COUNT
fi
}
function clean_elasticsearch {
if is_service_enabled elasticsearch; then
echo_summary "Cleaning Elasticsearch ${ELASTICSEARCH_VERSION}"
sudo rm -rf ELASTICSEARCH_DIR || true
sudo rm -rf ELASTICSEARCH_CFG_DIR || true
sudo rm -rf ELASTICSEARCH_LOG_DIR || true
sudo rm -rf ELASTICSEARCH_DATA_DIR || true
sudo rm -rf $FILES/elasticsearch-${ELASTICSEARCH_VERSION}.tar.gz || true
sudo rm -rf $DEST/elasticsearch-${ELASTICSEARCH_VERSION} || true
fi
}
function start_elasticsearch {
if is_service_enabled elasticsearch; then
echo_summary "Starting ElasticSearch ${ELASTICSEARCH_VERSION}"
# 5 extra seconds to ensure that ES started properly
local esSleepTime=${ELASTICSEARCH_SLEEP_TIME:-5}
run_process_sleep "elasticsearch" "$ELASTICSEARCH_DIR/bin/elasticsearch -E logger.org.elasticsearch=DEBUG" $esSleepTime
fi
}
function _get_kibana_version_name {
echo "kibana-${KIBANA_VERSION}-linux-x86_64"
}
function _get_kibana_oss_version_name {
echo "kibana-oss-${KIBANA_VERSION}-linux-x86_64"
}
function install_kibana {
if is_service_enabled kibana; then
echo_summary "Installing Kibana ${KIBANA_VERSION}"
local kibana_oss_version_name
kibana_oss_version_name=`_get_kibana_oss_version_name`
local kibana_tarball=${kibana_oss_version_name}.tar.gz
local kibana_tarball_url=https://artifacts.elastic.co/downloads/kibana/${kibana_tarball}
local kibana_tarball_dest
kibana_tarball_dest=`get_extra_file ${kibana_tarball_url}`
tar xzf ${kibana_tarball_dest} -C $DEST
local kibana_version_name
kibana_version_name=`_get_kibana_version_name`
sudo chown -R $STACK_USER $DEST/${kibana_version_name}
sudo ln -sf $DEST/${kibana_version_name} $KIBANA_DIR
fi
}
function configure_kibana {
if is_service_enabled kibana; then
echo_summary "Configuring Kibana ${KIBANA_VERSION}"
sudo install -m 755 -d -o $STACK_USER $KIBANA_CFG_DIR
sudo cp -f "${PLUGIN_FILES}"/kibana/kibana.yml $KIBANA_CFG_DIR/kibana.yml
sudo chown -R $STACK_USER $KIBANA_CFG_DIR/kibana.yml
sudo chmod 0644 $KIBANA_CFG_DIR/kibana.yml
sudo sed -e "
s|%KIBANA_SERVICE_HOST%|$KIBANA_SERVICE_HOST|g;
s|%KIBANA_SERVICE_PORT%|$KIBANA_SERVICE_PORT|g;
s|%ES_SERVICE_BIND_HOST%|$ES_SERVICE_BIND_HOST|g;
s|%ES_SERVICE_BIND_PORT%|$ES_SERVICE_BIND_PORT|g;
s|%KIBANA_SERVER_BASE_PATH%|$KIBANA_SERVER_BASE_PATH|g;
s|%KEYSTONE_AUTH_URI%|$KEYSTONE_AUTH_URI|g;
" -i $KIBANA_CFG_DIR/kibana.yml
sudo ln -sf $KIBANA_CFG_DIR/kibana.yml $GATE_CONFIGURATION_DIR/kibana.yml
fi
}
function clean_kibana {
if is_service_enabled kibana; then
echo_summary "Cleaning Kibana ${KIBANA_VERSION}"
local kibana_tarball
kibana_tarball=`_get_kibana_oss_version_name`.tar.gz
sudo rm -rf $KIBANA_DIR || true
sudo rm -rf $FILES/${kibana_tarball} || true
sudo rm -rf $KIBANA_CFG_DIR || true
fi
}
function start_kibana {
if is_service_enabled kibana; then
echo_summary "Starting Kibana ${KIBANA_VERSION}"
local kibanaSleepTime=${KIBANA_SLEEP_TIME:-120} # kibana takes some time to load up
local kibanaCFG="$KIBANA_CFG_DIR/kibana.yml"
run_process_sleep "kibana" "$KIBANA_DIR/bin/kibana --config $kibanaCFG" $kibanaSleepTime
fi
}
function configure_nvm {
if is_service_enabled kibana; then
echo_summary "Configuring NVM"
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
source ~/.nvm/nvm.sh
nvm install $KIBANA_DEV_NODE_JS_VERSION
nvm use $KIBANA_DEV_NODE_JS_VERSION
fi
}
function configure_yarn {
if is_service_enabled kibana; then
echo_summary "Configuring Yarn"
REPOS_UPDATED=False
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | \
sudo tee /etc/apt/sources.list.d/yarn.list
apt_get_update
apt_get install yarn
fi
}
function clean_nvm {
if is_service_enabled kibana; then
echo_summary "Cleaning NVM"
rm -rf ~/.nvm
rm -rf ~/.bower
fi
}
function clean_yarn {
if is_service_enabled kibana; then
echo_summary "Cleaning Yarn"
apt_get purge yarn
fi
}
function build_kibana_plugin {
if is_service_enabled kibana; then
echo "Building Kibana plugin"
echo_summary "Cloning and initializing Kibana development environment"
git clone $KIBANA_DEV_REPO $KIBANA_DEV_DIR --branch $KIBANA_DEV_BRANCH --depth 1
git_clone $MONASCA_KIBANA_PLUGIN_REPO $MONASCA_KIBANA_PLUGIN_DIR $MONASCA_KIBANA_PLUGIN_BRANCH
cd $MONASCA_KIBANA_PLUGIN_DIR
git_update_branch $MONASCA_KIBANA_PLUGIN_BRANCH
cp -r $MONASCA_KIBANA_PLUGIN_DIR "$KIBANA_DEV_DIR/plugins"
local plugin_dir="$KIBANA_DEV_DIR/plugins/monasca-kibana-plugin"
yarn --cwd $KIBANA_DEV_DIR kbn bootstrap
yarn --cwd $plugin_dir build
local get_version_script="import json; obj = json.load(open('$plugin_dir/package.json')); print(obj['version'])"
local monasca_kibana_plugin_version
monasca_kibana_plugin_version=$(python -c "$get_version_script")
local pkg="$plugin_dir/build/monasca-kibana-plugin-$monasca_kibana_plugin_version.zip"
local easyPkg=$DEST/monasca-kibana-plugin.zip
ln $pkg $easyPkg
rm -rf $KIBANA_DEV_DIR
fi
}
function install_kibana_plugin {
if is_service_enabled kibana; then
echo_summary "Install Kibana plugin"
# note(trebskit) that needs to happen after kibana received
# its configuration otherwise the plugin fails to be installed
local pkg=file://$DEST/monasca-kibana-plugin.zip
$KIBANA_DIR/bin/kibana-plugin install $pkg
fi
}
function configure_monasca_log_persister {
if is_service_enabled monasca-log-persister; then
echo_summary "Configuring monasca-log-persister"
sudo install -m 755 -d -o $STACK_USER $LOG_PERSISTER_DIR
sudo cp -f "${PLUGIN_FILES}"/monasca-log-persister/persister.conf $LOG_PERSISTER_DIR/persister.conf
sudo chown $STACK_USER $LOG_PERSISTER_DIR/persister.conf
sudo chmod 0640 $LOG_PERSISTER_DIR/persister.conf
sudo sed -e "
s|%ES_SERVICE_BIND_HOST%|$ES_SERVICE_BIND_HOST|g;
s|%KAFKA_SERVICE_HOST%|$KAFKA_SERVICE_HOST|g;
s|%KAFKA_SERVICE_PORT%|$KAFKA_SERVICE_PORT|g;
" -i $LOG_PERSISTER_DIR/persister.conf
ln -sf $LOG_PERSISTER_DIR/persister.conf $GATE_CONFIGURATION_DIR/log-persister.conf
fi
}
function clean_monasca_log_persister {
if is_service_enabled monasca-log-persister; then
echo_summary "Cleaning monasca-log-persister"
sudo rm -rf $LOG_PERSISTER_DIR || true
fi
}
function start_monasca_log_persister {
if is_service_enabled monasca-log-persister; then
echo_summary "Starting monasca-log-persister"
local logstash="$LOGSTASH_DIR/bin/logstash"
run_process "monasca-log-persister" "$logstash -f $LOG_PERSISTER_DIR/persister.conf --path.data $LOGSTASH_DATA_DIR/monasca-log-persister"
fi
}
function configure_monasca_log_transformer {
if is_service_enabled monasca-log-transformer; then
echo_summary "Configuring monasca-log-transformer"
sudo install -m 755 -d -o $STACK_USER $LOG_TRANSFORMER_DIR
sudo cp -f "${PLUGIN_FILES}"/monasca-log-transformer/transformer.conf $LOG_TRANSFORMER_DIR/transformer.conf
sudo chown $STACK_USER $LOG_TRANSFORMER_DIR/transformer.conf
sudo chmod 0640 $LOG_TRANSFORMER_DIR/transformer.conf
sudo sed -e "
s|%KAFKA_SERVICE_HOST%|$KAFKA_SERVICE_HOST|g;
s|%KAFKA_SERVICE_PORT%|$KAFKA_SERVICE_PORT|g;
" -i $LOG_TRANSFORMER_DIR/transformer.conf
ln -sf $LOG_TRANSFORMER_DIR/transformer.conf $GATE_CONFIGURATION_DIR/log-transformer.conf
fi
}
function clean_monasca_log_transformer {
if is_service_enabled monasca-log-transformer; then
echo_summary "Cleaning monasca-log-transformer"
sudo rm -rf $LOG_TRANSFORMER_DIR || true
fi
}
function start_monasca_log_transformer {
if is_service_enabled monasca-log-transformer; then
echo_summary "Starting monasca-log-transformer"
local logstash="$LOGSTASH_DIR/bin/logstash"
run_process "monasca-log-transformer" "$logstash -f $LOG_TRANSFORMER_DIR/transformer.conf --path.data $LOGSTASH_DATA_DIR/monasca-log-transformer"
fi
}
function configure_monasca_log_metrics {
if is_service_enabled monasca-log-metrics; then
echo_summary "Configuring monasca-log-metrics"
sudo install -m 755 -d -o $STACK_USER $LOG_METRICS_DIR
sudo cp -f "${PLUGIN_FILES}"/monasca-log-metrics/log-metrics.conf $LOG_METRICS_DIR/log-metrics.conf
sudo chown $STACK_USER $LOG_METRICS_DIR/log-metrics.conf
sudo chmod 0640 $LOG_METRICS_DIR/log-metrics.conf
sudo sed -e "
s|%KAFKA_SERVICE_HOST%|$KAFKA_SERVICE_HOST|g;
s|%KAFKA_SERVICE_PORT%|$KAFKA_SERVICE_PORT|g;
" -i $LOG_METRICS_DIR/log-metrics.conf
ln -sf $LOG_METRICS_DIR/log-metrics.conf $GATE_CONFIGURATION_DIR/log-metrics.conf
fi
}
function clean_monasca_log_metrics {
if is_service_enabled monasca-log-metrics; then
echo_summary "Cleaning monasca-log-metrics"
sudo rm -rf $LOG_METRICS_DIR || true
fi
}
function start_monasca_log_metrics {
if is_service_enabled monasca-log-metrics; then
echo_summary "Starting monasca-log-metrics"
local logstash="$LOGSTASH_DIR/bin/logstash"
run_process "monasca-log-metrics" "$logstash -f $LOG_METRICS_DIR/log-metrics.conf --path.data $LOGSTASH_DATA_DIR/monasca-log-metrics"
fi
}
function install_log_agent {
if is_service_enabled monasca-log-agent; then
echo_summary "Installing monasca-log-agent [logstash-output-monasca-plugin]"
$LOGSTASH_DIR/bin/logstash-plugin install --version \
"${LOGSTASH_OUTPUT_MONASCA_VERSION}" logstash-output-monasca_log_api
fi
}
function configure_monasca_log_agent {
if is_service_enabled monasca-log-agent; then
echo_summary "Configuring monasca-log-agent"
sudo install -m 755 -d -o $STACK_USER $LOG_AGENT_DIR
sudo cp -f "${PLUGIN_FILES}"/monasca-log-agent/agent.conf $LOG_AGENT_DIR/agent.conf
sudo chown $STACK_USER $LOG_AGENT_DIR/agent.conf
sudo chmod 0640 $LOG_AGENT_DIR/agent.conf
sudo sed -e "
s|%MONASCA_API_URI_V2%|$MONASCA_API_URI_V2|g;
s|%KEYSTONE_AUTH_URI%|$KEYSTONE_AUTH_URI_V3|g;
" -i $LOG_AGENT_DIR/agent.conf
ln -sf $LOG_AGENT_DIR/agent.conf $GATE_CONFIGURATION_DIR/log-agent.conf
fi
}
function clean_monasca_log_agent {
if is_service_enabled monasca-log-agent; then
echo_summary "Cleaning monasca-log-agent"
sudo rm -rf $LOG_AGENT_DIR || true
fi
}
function start_monasca_log_api {
if is_service_enabled monasca-log-api; then
echo_summary "Starting monasca-log-api"
local service_port=$MONASCA_LOG_API_SERVICE_PORT
local service_protocol=$MONASCA_LOG_API_SERVICE_PROTOCOL
if is_service_enabled tls-proxy; then
service_port=$MONASCA_LOG_API_SERVICE_PORT_INT
service_protocol="http"
fi
local service_uri
if [ "$MONASCA_LOG_API_DEPLOY" == "mod_wsgi" ]; then
local enabled_site_file
enabled_site_file=$(apache_site_config_for monasca-log-api)
service_uri=$service_protocol://$MONASCA_LOG_API_SERVICE_HOST/logs/v3.0
if [ -f ${enabled_site_file} ]; then
enable_apache_site monasca-log-api
restart_apache_server
tail_log monasca-log-api /var/log/$APACHE_NAME/monasca-log-api.log
fi
elif [ "$MONASCA_LOG_API_DEPLOY" == "uwsgi" ]; then
service_uri=$service_protocol://$MONASCA_LOG_API_SERVICE_HOST/logs/v3.0
run_process "monasca-log-api" "$MONASCA_LOG_API_BIN_DIR/uwsgi --ini $MONASCA_LOG_API_UWSGI_CONF" ""
else
service_uri=$service_protocol://$MONASCA_LOG_API_SERVICE_HOST:$service_port
run_process "monasca-log-api" "$MONASCA_LOG_API_BIN_DIR/gunicorn --paste $MONASCA_LOG_API_PASTE" ""
fi
echo "Waiting for monasca-log-api to start..."
if ! wait_for_service $SERVICE_TIMEOUT $service_uri; then
die $LINENO "monasca-log-api did not start"
fi
if is_service_enabled tls-proxy; then
start_tls_proxy monasca-log-api '*' $MONASCA_LOG_API_SERVICE_PORT $MONASCA_LOG_API_SERVICE_HOST $MONASCA_LOG_API_SERVICE_PORT_INT
fi
restart_service memcached
fi
}
function start_monasca_log_agent {
if is_service_enabled monasca-log-agent; then
echo_summary "Starting monasca-log-agent"
local logstash="$LOGSTASH_DIR/bin/logstash"
run_process "monasca-log-agent" "$logstash -f $LOG_AGENT_DIR/agent.conf --path.data $LOGSTASH_DATA_DIR/monasca-log-agent" "root" "root"
fi
}
function clean_gate_config_holder {
sudo rm -rf $GATE_CONFIGURATION_DIR || true
}
function configure_kafka {
echo_summary "Configuring Kafka topics"
for topic in ${KAFKA_SERVICE_LOG_TOPICS//,/ }; do
/opt/kafka/bin/kafka-topics.sh --create \
--bootstrap-server $KAFKA_SERVICE_HOST:$KAFKA_SERVICE_PORT \
--replication-factor 1 \
--partitions 4 \
--topic $topic
done
}
function delete_kafka_topics {
echo_summary "Deleting Kafka topics"
for topic in ${KAFKA_SERVICE_LOG_TOPICS//,/ }; do
/opt/kafka/bin/kafka-topics.sh --delete \
--bootstrap-server $KAFKA_SERVICE_HOST:$KAFKA_SERVICE_PORT \
--replication-factor 1 \
--partitions 4 \
--topic $topic || true
done
}
function create_log_management_accounts {
if is_service_enabled monasca-log; then
echo_summary "Enable Log Management in Keystone"
# note(trebskit) following points to Kibana which is bad,
# but we do not have search-api in monasca-log-api now
# this code will be removed in future
local log_search_url="http://$KIBANA_SERVICE_HOST:$KIBANA_SERVICE_PORT/"
get_or_create_service "logs" "logs" "Monasca Log service"
if $USE_OLD_LOG_API = true; then
get_or_create_endpoint \
"logs" \
"$REGION_NAME" \
"$MONASCA_LOG_API_BASE_URI" \
"$MONASCA_LOG_API_BASE_URI" \
"$MONASCA_LOG_API_BASE_URI"
else
get_or_create_endpoint \
"logs" \
"$REGION_NAME" \
"$MONASCA_API_URI_V2" \
"$MONASCA_API_URI_V2" \
"$MONASCA_API_URI_V2"
fi
get_or_create_service "logs-search" "logs-search" "Monasca Log search service"
get_or_create_endpoint \
"logs-search" \
"$REGION_NAME" \
"$log_search_url" \
"$log_search_url" \
"$log_search_url"
fi
}
#Restore errexit
${_ERREXIT_MON_LOG}
# Restore xtrace
${_XTRACE_MON_LOG}

View File

@@ -1,155 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless reqmonasca_notificationred by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_MON_NOTIFICATION=$(set +o | grep xtrace)
set +o xtrace
MONASCA_NOTIFICATION_CONF_DIR=${MONASCA_NOTIFICATION_CONF_DIR:-/etc/monasca}
MONASCA_NOTIFICATION_LOG_DIR=${MONASCA_NOTIFICATION_LOG_DIR:-/var/log/monasca/notification}
MONASCA_NOTIFICATION_CONF=${MONASCA_NOTIFICATION_CONF:-$MONASCA_NOTIFICATION_CONF_DIR/monasca-notification.conf}
MONASCA_NOTIFICATION_GATE_CFG_LINK=/etc/monasca-notification
if [[ ${USE_VENV} = True ]]; then
PROJECT_VENV["monasca-notification"]=${MONASCA_NOTIFICATION_DIR}.venv
MONASCA_NOTIFICATION_BIN_DIR=${PROJECT_VENV["monasca-notification"]}/bin
else
MONASCA_NOTIFICATION_BIN_DIR=$(get_python_exec_prefix)
fi
is_monasca_notification_enabled() {
is_service_enabled monasca-notification && return 0
return 1
}
# NOTE(trebskit) ref: stack_install_service from devstack
install_monasca-notification() {
if ! is_monasca_notification_enabled; then
return
fi
echo_summary "Installing monasca-notification"
git_clone ${MONASCA_NOTIFICATION_REPO} ${MONASCA_NOTIFICATION_DIR} \
${MONASCA_NOTIFICATION_BRANCH}
if python3_enabled; then
enable_python3_package monasca-notification
fi
setup_develop ${MONASCA_NOTIFICATION_DIR} jira_plugin
# see devstack/plugin.sh
install_monasca_common
install_monasca_statsd
# see devstack/plugin.sh
if is_service_enabled postgresql; then
apt_get -y install libpq-dev
pip_install_gr psycopg2
elif is_service_enabled mysql; then
apt_get -y install python-mysqldb libmysqlclient-dev
pip_install_gr PyMySQL
fi
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
pip_install_gr sqlalchemy
fi
}
configure_monasca-notification() {
if ! is_monasca_notification_enabled; then
return
fi
echo_summary "Configuring monasca-notification"
sudo install -d -o $STACK_USER ${MONASCA_NOTIFICATION_CONF_DIR}
sudo install -d -o $STACK_USER ${MONASCA_NOTIFICATION_LOG_DIR}
local dbDriver
local dbEngine
local dbPort
if is_service_enabled postgresql; then
dbDriver="monasca_notification.common.repositories.postgres.pgsql_repo:PostgresqlRepo"
dbEngine="postgres"
dbPort=5432
else
dbDriver="monasca_notification.common.repositories.mysql.mysql_repo:MysqlRepo"
dbEngine="mysql"
dbPort=3306
fi
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
dbDriver="monasca_notification.common.repositories.orm.orm_repo:OrmRepo"
fi
iniset "${MONASCA_NOTIFICATION_CONF}" kafka url ${SERVICE_HOST}:9092
iniset "${MONASCA_NOTIFICATION_CONF}" database repo_driver ${dbDriver}
iniset "${MONASCA_NOTIFICATION_CONF}" email_notifier grafana_url ${SERVICE_HOST}:3000
iniset "${MONASCA_NOTIFICATION_CONF}" keystone auth_url ${SERVICE_HOST}/identity/v3
if is_service_enabled postgresql; then
iniset "${MONASCA_NOTIFICATION_CONF}" postgresql host ${DATABASE_HOST}
iniset "${MONASCA_NOTIFICATION_CONF}" postgresql port ${dbPort}
iniset "${MONASCA_NOTIFICATION_CONF}" postgresql user ${DATABASE_USER}
iniset "${MONASCA_NOTIFICATION_CONF}" postgresql passwd ${DATABASE_PASSWORD}
iniset "${MONASCA_NOTIFICATION_CONF}" postgresql db mon
else
iniset "${MONASCA_NOTIFICATION_CONF}" mysql host ${DATABASE_HOST}
iniset "${MONASCA_NOTIFICATION_CONF}" mysql user ${DATABASE_USER}
iniset "${MONASCA_NOTIFICATION_CONF}" mysql passwd ${DATABASE_PASSWORD}
iniset "${MONASCA_NOTIFICATION_CONF}" mysql db mon
fi
if [[ ${MONASCA_DATABASE_USE_ORM} == "True" ]]; then
iniset "${MONASCA_NOTIFICATION_CONF}" orm url ${dbEngine}://${DATABASE_USER}:${DATABASE_PASSWORD}%${DATABASE_HOST}:${dbPort}/mon
fi
sudo install -d -o ${STACK_USER} ${MONASCA_NOTIFICATION_GATE_CFG_LINK}
ln -sf ${MONASCA_NOTIFICATION_CONF} ${MONASCA_NOTIFICATION_GATE_CFG_LINK}
echo "postfix postfix/mailname string localhost" | sudo debconf-set-selections -v
echo "postfix postfix/main_mailer_type string 'Local only'" | sudo debconf-set-selections -v
}
start_monasca-notification(){
if is_monasca_notification_enabled; then
echo_summary "Starting monasca-notification"
run_process "monasca-notification" "$MONASCA_NOTIFICATION_BIN_DIR/monasca-notification"
fi
}
stop_monasca-notification(){
if is_monasca_notification_enabled; then
echo_summary "Stopping monasca-notification"
stop_process "monasca-notification" || true
fi
}
clean_monasca-notification() {
if ! is_monasca_notification_enabled; then
return
fi
echo_summary "Configuring monasca-notification"
sudo rm -rf ${MONASCA_NOTIFICATION_CONF} ${MONASCA_NOTIFICATION_CONF_DIR} \
${MONASCA_NOTIFICATION_LOG_DIR} \
${MONASCA_NOTIFICATION_GATE_CFG_LINK}
if is_service_enabled postgresql; then
apt_get -y purge libpq-dev
elif is_service_enabled mysql; then
apt_get -y purge libmysqlclient-dev
apt_get -y purge python-mysqldb
fi
}
${_XTRACE_MON_NOTIFICATION}

View File

@@ -1,273 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
# (C) Copyright 2017 SUSE LLC
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless reqmonasca_PERSISTERred by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_MON_PERSISTER=$(set +o | grep xtrace)
set +o xtrace
MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}
MONASCA_PERSISTER_CONF_DIR=${MONASCA_PERSISTER_CONF_DIR:-/etc/monasca}
MONASCA_PERSISTER_LOG_DIR=${MONASCA_PERSISTER_LOG_DIR:-/var/log/monasca/persister}
MONASCA_PERSISTER_GATE_CONFIG=/etc/monasca-persister
if [ "$MONASCA_PERSISTER_IMPLEMENTATION_LANG" == "python" ]; then
if [[ ${USE_VENV} = True ]]; then
PROJECT_VENV["monasca-persister"]=${MONASCA_PERSISTER_DIR}.venv
MONASCA_PERSISTER_BIN_DIR=${PROJECT_VENV["monasca-persister"]}/bin
else
MONASCA_PERSISTER_BIN_DIR=$(get_python_exec_prefix)
fi
MONASCA_PERSISTER_CONF=${MONASCA_PERSISTER_CONF:-$MONASCA_PERSISTER_CONF_DIR/monasca-persister.conf}
MONASCA_PERSISTER_LOGGING_CONF=${MONASCA_PERSISTER_LOGGING_CONF:-$MONASCA_PERSISTER_CONF_DIR/persister-logging.conf}
M_REPO_DRIVER_BASE=monasca_persister.repositories.${MONASCA_METRICS_DB}.metrics_repository
M_REPO_DRIVER_INFLUX=$M_REPO_DRIVER_BASE:MetricInfluxdbRepository
M_REPO_DRIVER_CASSANDRA=$M_REPO_DRIVER_BASE:MetricCassandraRepository
AH_REPO_DRIVER_BASE=monasca_persister.repositories.${MONASCA_METRICS_DB}.alarm_state_history_repository
AH_REPO_DRIVER_INFLUX=$AH_REPO_DRIVER_BASE:AlarmStateHistInfluxdbRepository
AH_REPO_DRIVER_CASSANDRA=$AH_REPO_DRIVER_BASE:AlarmStateHistCassandraRepository
MONASCA_PERSISTER_CMD="$MONASCA_PERSISTER_BIN_DIR/monasca-persister --config-file=$MONASCA_PERSISTER_CONF"
else
MONASCA_PERSISTER_APP_PORT=${MONASCA_PERSISTER_APP_PORT:-8090}
MONASCA_PERSISTER_ADMIN_PORT=${MONASCA_PERSISTER_ADMIN_PORT:-8091}
MONASCA_PERSISTER_BIND_HOST=${MONASCA_PERSISTER_BIND_HOST:-$SERVICE_HOST}
MONASCA_PERSISTER_CONF=${MONASCA_PERSISTER_CONF:-$MONASCA_PERSISTER_CONF_DIR/persister.yml}
MONASCA_PERSISTER_JAVA_OPTS="-Dfile.encoding=UTF-8 -Xmx128m"
MONASCA_PERSISTER_JAR="/opt/monasca/monasca-persister.jar"
MONASCA_PERSISTER_CMD="/usr/bin/java ${MONASCA_PERSISTER_JAVA_OPTS} -cp ${MONASCA_PERSISTER_JAR} monasca.persister.PersisterApplication server ${MONASCA_PERSISTER_CONF}"
fi
if [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then
MONASCA_PERSISTER_BATCH_SIZE=100
MONASCA_PERSISTER_MAX_BATCH_TIME=10
MONASCA_PERSISTER_METRIC_THREADS=2
MONASCA_PERSISTER_COMMIT_BATCH_TIME=10000
else
MONASCA_PERSISTER_BATCH_SIZE=100
MONASCA_PERSISTER_MAX_BATCH_TIME=15
MONASCA_PERSISTER_METRIC_THREADS=10
MONASCA_PERSISTER_COMMIT_BATCH_TIME=0
fi
is_monasca_persister_enabled() {
is_service_enabled monasca-persister && return 0
return 1
}
# common
pre_monasca-persister() {
if ! is_monasca_persister_enabled; then
return
fi
sudo install -d -o ${STACK_USER} ${MONASCA_PERSISTER_GATE_CONFIG}
}
install_monasca-persister() {
echo_summary "Installing monasca-persister"
git_clone ${MONASCA_PERSISTER_REPO} ${MONASCA_PERSISTER_DIR} \
${MONASCA_PERSISTER_BRANCH}
install_monasca_persister_$MONASCA_PERSISTER_IMPLEMENTATION_LANG
}
configure_monasca-persister() {
if ! is_monasca_persister_enabled; then
return
fi
echo_summary "Configuring monasca-persister"
sudo install -d -o $STACK_USER ${MONASCA_PERSISTER_CONF_DIR}
sudo install -d -o $STACK_USER ${MONASCA_PERSISTER_LOG_DIR}
configure_monasca_persister_$MONASCA_PERSISTER_IMPLEMENTATION_LANG
}
start_monasca-persister() {
if ! is_monasca_persister_enabled; then
return
fi
local cmd=${MONASCA_PERSISTER_CMD}
local systemd_service="devstack@monasca-persister.service"
local unitfile="$SYSTEMD_DIR/$systemd_service"
# sanity check the command
_common_systemd_pitfalls "$cmd"
# Restart monasca-persister when exited with error code
iniset -sudo $unitfile "Service" "Restart" "on-failure"
write_user_unit_file $systemd_service "$cmd" "" "$STACK_USER"
echo_summary "Starting monasca-persister"
$SYSTEMCTL enable $systemd_service
$SYSTEMCTL start $systemd_service
}
stop_monasca-persister() {
if ! is_monasca_persister_enabled; then
return
fi
echo_summary "Stopping monasca-persister"
stop_process "monasca-persister"
}
clean_monasca-persister() {
if ! is_monasca_persister_enabled; then
return
fi
echo_summary "Cleaning monasca-persister"
clean_monasca_persister_$MONASCA_PERSISTER_IMPLEMENTATION_LANG
rm -rf ${MONASCA_PERSISTER_GATE_CONFIG}
}
# common
# python
install_monasca_persister_python() {
echo_summary "Installing monasca-persister"
if python3_enabled; then
enable_python3_package monasca-persister
fi
setup_develop ${MONASCA_PERSISTER_DIR}
install_monasca_common
if [[ "${MONASCA_METRICS_DB,,}" == 'influxdb' ]]; then
pip_install_gr influxdb
elif [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then
pip_install_gr cassandra-driver
fi
}
configure_monasca_persister_python() {
# ensure fresh installation of configuration files
rm -rf ${MONASCA_PERSISTER_CONF} ${MONASCA_PERSISTER_LOGGING_CONF}
$MONASCA_PERSISTER_BIN_DIR/oslo-config-generator \
--config-file $MONASCA_PERSISTER_DIR/config-generator/persister.conf \
--output-file /tmp/monasca-persister.conf
install -m 600 /tmp/monasca-persister.conf ${MONASCA_PERSISTER_CONF} && rm -rf /tmp/monasca-persister.conf
# Set up logging
iniset $MONASCA_PERSISTER_CONF DEFAULT use_syslog $SYSLOG
# Format logging
setup_logging $MONASCA_PERSISTER_CONF
iniset $MONASCA_PERSISTER_CONF DEFAULT default_log_levels \
"monasca_common.kafka_lib.client=INFO"
iniset $MONASCA_PERSISTER_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
iniset "$MONASCA_PERSISTER_CONF" kafka num_processors 1
iniset "$MONASCA_PERSISTER_CONF" kafka_metrics uri $SERVICE_HOST:9092
iniset "$MONASCA_PERSISTER_CONF" kafka_metrics group_id 1_metrics
iniset "$MONASCA_PERSISTER_CONF" kafka_metrics topic metrics
iniset "$MONASCA_PERSISTER_CONF" kafka_metrics batch_size 30
iniset "$MONASCA_PERSISTER_CONF" kafka_alarm_history uri $SERVICE_HOST:9092
iniset "$MONASCA_PERSISTER_CONF" kafka_alarm_history group_id 1_alarm-state-transitions
iniset "$MONASCA_PERSISTER_CONF" kafka_alarm_history topic alarm-state-transitions
iniset "$MONASCA_PERSISTER_CONF" kafka_alarm_history batch_size 1
iniset "$MONASCA_PERSISTER_CONF" zookeeper uri $SERVICE_HOST:2181
if [[ "${MONASCA_METRICS_DB,,}" == 'influxdb' ]]; then
iniset "$MONASCA_PERSISTER_CONF" influxdb database_name mon
iniset "$MONASCA_PERSISTER_CONF" influxdb ip_address ${SERVICE_HOST}
iniset "$MONASCA_PERSISTER_CONF" influxdb port 8086
iniset "$MONASCA_PERSISTER_CONF" influxdb password password
iniset "$MONASCA_PERSISTER_CONF" repositories metrics_driver ${M_REPO_DRIVER_INFLUX}
iniset "$MONASCA_PERSISTER_CONF" repositories alarm_state_history_driver ${AH_REPO_DRIVER_INFLUX}
elif [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then
iniset "$MONASCA_PERSISTER_CONF" cassandra contact_points ${SERVICE_HOST}
iniset "$MONASCA_PERSISTER_CONF" cassandra port 9042
# iniset "$MONASCA_PERSISTER_CONF" cassandra user monasca
# iniset "$MONASCA_PERSISTER_CONF" cassandra password password
iniset "$MONASCA_PERSISTER_CONF" cassandra keyspace monasca
iniset "$MONASCA_PERSISTER_CONF" cassandra local_data_center datacenter1
iniset "$MONASCA_PERSISTER_CONF" cassandra connection_timeout 5
iniset "$MONASCA_PERSISTER_CONF" cassandra read_timeout 60
iniset "$MONASCA_PERSISTER_CONF" cassandra max_write_retries 5
iniset "$MONASCA_PERSISTER_CONF" cassandra max_batches 250
iniset "$MONASCA_PERSISTER_CONF" cassandra max_definition_cache_size 1000000
# consistency level names:
# ANY(0),
# ONE(1),
# TWO(2),
# THREE(3),
# QUORUM(4),
# ALL(5),
# LOCAL_QUORUM(6),
# EACH_QUORUM(7),
# SERIAL(8),
# LOCAL_SERIAL(9),
# LOCAL_ONE(10);
iniset "$MONASCA_PERSISTER_CONF" cassandra consistency_level ONE
iniset "$MONASCA_PERSISTER_CONF" cassandra retention_policy 45
iniset "$MONASCA_PERSISTER_CONF" repositories metrics_driver ${M_REPO_DRIVER_CASSANDRA}
iniset "$MONASCA_PERSISTER_CONF" repositories alarm_state_history_driver ${AH_REPO_DRIVER_CASSANDRA}
fi
ln -sf ${MONASCA_PERSISTER_CONF} ${MONASCA_PERSISTER_GATE_CONFIG}
}
clean_monasca_persister_python() {
rm -rf ${MONASCA_PERSISTER_CONF} ${MONASCA_PERSISTER_LOGGING_CONF}
}
# python
# java
install_monasca_persister_java() {
(cd "${MONASCA_PERSISTER_DIR}"/java ; sudo mvn clean package -DskipTests)
local version=""
version="$(get_version_from_pom "${MONASCA_PERSISTER_DIR}"/java)"
sudo cp -f "${MONASCA_PERSISTER_DIR}"/java/target/monasca-persister-${version}-shaded.jar \
${MONASCA_PERSISTER_JAR}
}
configure_monasca_persister_java() {
# ensure fresh installation of configuration file
rm -rf $MONASCA_PERSISTER_CONF
install -m 600 "${MONASCA_API_DIR}"/devstack/files/monasca-persister/persister.yml ${MONASCA_PERSISTER_CONF}
sudo sed -e "
s|%ZOOKEEPER_HOST%|${SERVICE_HOST}|g;
s|%VERTICA_HOST%|${SERVICE_HOST}|g;
s|%INFLUXDB_HOST%|${SERVICE_HOST}|g;
s|%CASSANDRADB_HOST%|${SERVICE_HOST}|g;
s|%MONASCA_PERSISTER_DB_TYPE%|${MONASCA_METRICS_DB}|g;
s|%MONASCA_PERSISTER_BIND_HOST%|${MONASCA_PERSISTER_BIND_HOST}|g;
s|%MONASCA_PERSISTER_APP_PORT%|${MONASCA_PERSISTER_APP_PORT}|g;
s|%MONASCA_PERSISTER_ADMIN_PORT%|${MONASCA_PERSISTER_ADMIN_PORT}|g;
s|%MONASCA_PERSISTER_LOG_DIR%|${MONASCA_PERSISTER_LOG_DIR}|g;
s|%MONASCA_PERSISTER_BATCH_SIZE%|${MONASCA_PERSISTER_BATCH_SIZE}|g;
s|%MONASCA_PERSISTER_MAX_BATCH_TIME%|${MONASCA_PERSISTER_MAX_BATCH_TIME}|g;
s|%MONASCA_PERSISTER_COMMIT_BATCH_TIME%|${MONASCA_PERSISTER_COMMIT_BATCH_TIME}|g;
s|%MONASCA_PERSISTER_METRIC_THREADS%|${MONASCA_PERSISTER_METRIC_THREADS}|g;
" -i ${MONASCA_PERSISTER_CONF}
ln -sf ${MONASCA_PERSISTER_CONF} ${MONASCA_PERSISTER_GATE_CONFIG}
}
clean_monasca_persister_java() {
rm -rf ${MONASCA_PERSISTER_CONF} ${MONASCA_PERSISTER_LOGGING_CONF} \
${MONASCA_PERSISTER_JAR}
}
# java
${_XTRACE_MON_PERSISTER}

View File

@@ -1,54 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_MON_PROFILE=$(set +o | grep xtrace)
set +o xtrace
function install_monasca_profile {
echo_summary "Install Monasca Bash Profile"
touch /tmp/monasca_cli.sh
cat > /tmp/monasca_cli.sh << EOF
# signalize we're in shape to use monasca here
export PS1='[\u@\h \W(monasca)]\$ '
# set monasca client bash_completion
source ${MONASCA_COMPLETION_FILE}
# set OS_* variables
source $TOP_DIR/openrc mini-mon mini-mon
# override password for mini-mon (guy is not using SERVICE_PASSWORD)
export OS_PASSWORD=password
EOF
if [[ "${MONASCA_METRICS_DB,,}" == 'cassandra' ]]; then
cat >> /tmp/monasca_cli.sh << EOF
# allow to use cassandra cli
export CQLSH_NO_BUNDLED=true
export CQLSH_HOST=${SERVICE_HOST}
EOF
fi
sudo install -D -m 0644 -o ${STACK_USER} \
/tmp/monasca_cli.sh ${MONASCA_PROFILE_FILE}
rm /tmp/monasca_cli.sh
}
function clean_monasca_profile {
echo_summary "Clean Monasca CLI Creds"
sudo rm -f ${MONASCA_PROFILE_FILE}
}
${_XTRACE_DASHBOARD}

View File

@@ -1,166 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# call_order:
# - is_storm_enabled
# - install_storm
# - configure_storm
# - clean_storm
_XTRACE_STORM=$(set +o | grep xtrace)
set +o xtrace
STORM_USER="storm"
STORM_GROUP="storm"
STORM_DIR="/opt/storm"
STORM_CURRENT_DIR="${STORM_DIR}/current"
STORM_BIN="${STORM_CURRENT_DIR}/bin/storm"
STORM_WORK_DIR="/var/storm"
STORM_LOG_DIR="/var/log/storm"
STORM_TARBALL="apache-storm-${STORM_VERSION}.tar.gz"
STORM_TARBALL_DEST="${FILES}/${STORM_TARBALL}"
STORM_NIMBUS_CMD="${STORM_BIN} nimbus"
STORM_SUPERVISOR_CMD="${STORM_BIN} supervisor"
STORM_UI_CMD="${STORM_BIN} ui"
STORM_LOGVIEWER_CMD="${STORM_BIN} logviewer"
function is_storm_enabled {
[[ ,${ENABLED_SERVICES} =~ ,"monasca-storm" ]] && return 0
return 1
}
function start_storm {
if is_storm_enabled; then
echo_summary "Starting storm"
run_process "monasca-storm-nimbus" "${STORM_NIMBUS_CMD}" "${STORM_GROUP}" "${STORM_USER}"
run_process "monasca-storm-supervisor" "${STORM_SUPERVISOR_CMD}" "${STORM_GROUP}" "${STORM_USER}"
run_process "monasca-storm-ui" "${STORM_UI_CMD}" "${STORM_GROUP}" "${STORM_USER}"
run_process "monasca-storm-logviewer" "${STORM_LOGVIEWER_CMD}" "${STORM_GROUP}" "${STORM_USER}"
fi
}
function stop_storm {
if is_storm_enabled; then
echo_summary "Stopping storm"
stop_process "monasca-storm-nimbus"
stop_process "monasca-storm-supervisor"
stop_process "monasca-storm-ui"
stop_process "monasca-storm-logviewer"
fi
}
function clean_storm {
if is_storm_enabled; then
echo_summary "Cleaning storm"
sudo unlink "${DEST}/logs/storm-workers" || true
sudo unlink "${STORM_CURRENT_DIR}/logs"|| true
sudo unlink "${STORM_CURRENT_DIR}"|| true
sudo rm -rf "${DEST}/logs/storm-workers" || true
sudo rm -rf "${STORM_CURRENT_DIR}"|| true
sudo rm -rf "${STORM_DIR}" || true
sudo rm -rf "${STORM_WORK_DIR}" || true
sudo rm -rf "${STORM_LOG_DIR}" || true
sudo userdel "${STORM_USER}" || true
sudo groupdel "${STORM_GROUP}" || true
fi
}
function configure_storm {
if is_storm_enabled; then
echo_summary "Configuring storm"
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/storm.yaml "${STORM_CURRENT_DIR}/conf/storm.yaml"
sudo chown "${STORM_USER}":"${STORM_GROUP}" "${STORM_CURRENT_DIR}/conf/storm.yaml"
sudo chmod 0644 "${STORM_CURRENT_DIR}/conf/storm.yaml"
sudo sed -e "
s|%STORM_UI_HOST%|${STORM_UI_HOST}|g;
s|%STORM_UI_PORT%|${STORM_UI_PORT}|g;
s|%STORM_LOGVIEWER_PORT%|${STORM_LOGVIEWER_PORT}|g;
" -i "${STORM_CURRENT_DIR}/conf/storm.yaml"
fi
}
function install_storm {
if is_storm_enabled; then
echo_summary "Installing storm"
_download_storm
_setup_user_group
_create_directories
_install_storm
fi
}
function post_storm {
if is_storm_enabled; then
echo "Post configuring storm"
# if inside the gate, make the visible there too
if [ -n "${LOGDIR}" ]; then
sudo ln -sfd "${STORM_LOG_DIR}/workers-artifacts" "${LOGDIR}/storm-workers"
fi
fi
}
# helpers
function _download_storm {
local storm_tarball_url="${APACHE_ARCHIVES}storm/apache-storm-${STORM_VERSION}/${STORM_TARBALL}"
local storm_dest
storm_dest=`get_extra_file ${storm_tarball_url}`
if [ "${storm_dest}" != "${STORM_TARBALL_DEST}" ]; then
mv -f "${storm_dest}" "${STORM_TARBALL_DEST}"
fi
}
function _setup_user_group {
sudo groupadd --system "${STORM_GROUP}" || true
sudo useradd --system -g "${STORM_GROUP}" "${STORM_USER}" || true
}
function _install_storm {
# unpack (i.e. install) downloaded tarball
sudo tar -xzf ${STORM_TARBALL_DEST} -C "${STORM_DIR}"
# link the versioned folder to more suitable one
sudo ln -sfd "${STORM_DIR}/apache-storm-${STORM_VERSION}" "${STORM_CURRENT_DIR}"
# make them visible in standard location
sudo ln -sfd "${STORM_LOG_DIR}" "${STORM_CURRENT_DIR}/logs"
}
function _create_directories {
for dir in "${STORM_DIR}" "${STORM_WORK_DIR}" "${STORM_LOG_DIR}"; do
if [ ! -d "${dir}" ]; then
sudo mkdir -p "${dir}" || true
fi
sudo chown "${STORM_USER}":"${STORM_GROUP}" "${dir}"
sudo chmod 0775 "${dir}"
done
}
# helpers
$_XTRACE_STORM

View File

@@ -1,89 +0,0 @@
#!/bin/bash
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_DASHBOARD=$(set +o | grep xtrace)
set +o xtrace
function is_ui_enabled {
is_service_enabled horizon && return 0
return 1
}
function clean_ui {
if is_ui_enabled; then
rm -rf "${HORIZON_DIR}/monitoring" \
"${HORIZON_DIR}/openstack_dashboard/local/enabled/_50_admin_add_monitoring_panel.py" \
"${HORIZON_DIR}/openstack_dashboard/conf/monitoring_policy.json"
fi
}
function configure_ui {
if is_ui_enabled; then
_link_ui_files
cp $MONASCA_UI_DIR/monitoring/config/local_settings.py \
$HORIZON_DIR/openstack_dashboard/local/local_settings.d/_50_monasca_ui_settings.py
local localSettings=$HORIZON_DIR/openstack_dashboard/local/local_settings.d/_50_monasca_ui_settings.py
sed -e "
s#getattr(settings, 'GRAFANA_URL', None)#{'RegionOne': \"http:\/\/${SERVICE_HOST}:3000\", }#g;
" -i ${localSettings}
if is_service_enabled horizon && is_service_enabled kibana && is_service_enabled monasca-log; then
echo_summary "Configure Horizon with Kibana access"
sudo sed -e "
s|KIBANA_HOST = getattr(settings, 'KIBANA_HOST', 'http://192.168.10.6:5601/')|KIBANA_HOST = getattr(settings, 'KIBANA_HOST', 'http://${KIBANA_SERVICE_HOST}:${KIBANA_SERVICE_PORT}/')|g;
" -i ${localSettings}
sudo sed -e "
s|'ENABLE_LOG_MANAGEMENT_BUTTON', False|'ENABLE_LOG_MANAGEMENT_BUTTON', True|g;
" -i ${localSettings}
fi
if python3_enabled; then
DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python3 "${MONASCA_BASE}"/horizon/manage.py collectstatic --noinput
DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python3 "${MONASCA_BASE}"/horizon/manage.py compress --force
else
DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python "${MONASCA_BASE}"/horizon/manage.py collectstatic --noinput
DJANGO_SETTINGS_MODULE=openstack_dashboard.settings python "${MONASCA_BASE}"/horizon/manage.py compress --force
fi
restart_service apache2 || true
fi
}
function install_ui {
if is_ui_enabled; then
git_clone $MONASCA_UI_REPO $MONASCA_UI_DIR $MONASCA_UI_BRANCH
git_clone $MONASCA_CLIENT_REPO $MONASCA_CLIENT_DIR $MONASCA_CLIENT_BRANCH
if python3_enabled; then
enable_python3_package monasca-ui
fi
setup_develop $MONASCA_UI_DIR
setup_dev_lib "python-monascaclient"
fi
}
function _link_ui_files {
ln -f "${MONASCA_UI_DIR}/monitoring/enabled/_50_admin_add_monitoring_panel.py" \
"${HORIZON_DIR}/openstack_dashboard/local/enabled/_50_admin_add_monitoring_panel.py"
ln -f "${MONASCA_UI_DIR}/monitoring/conf/monitoring_policy.json" \
"${HORIZON_DIR}/openstack_dashboard/conf/monitoring_policy.json"
ln -sfF "${MONASCA_UI_DIR}"/monitoring "${HORIZON_DIR}/monitoring"
}
$_XTRACE_DASHBOARD

View File

@@ -1,73 +0,0 @@
#!/bin/bash
# Copyright 2020 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
_XTRACE_ZOOKEEPER=$(set +o | grep xtrace)
set +o xtrace
function is_zookeeper_enabled {
is_service_enabled monasca-zookeeper && return 0
return 1
}
function clean_zookeeper {
if is_zookeeper_enabled; then
echo_summary "Cleaning Monasca Zookeeper"
sudo systemctl disable zookeeper
sudo systemctl stop zookeeper
sudo rm -rf /var/log/zookeeper
sudo rm -rf /var/lib/zookeeper
sudo rm -rf /opt/zookeeper
sudo rm -rf /opt/apache-zookeeper-${ZOOKEEPER_VERSION}-bin
sudo rm -rf /etc/systemd/system/zookeeper.service
sudo systemctl daemon-reload
fi
}
function install_zookeeper {
if is_zookeeper_enabled; then
echo_summary "Install Monasca Zookeeper"
local zookeeper_tarball=apache-zookeeper-${ZOOKEEPER_VERSION}-bin.tar.gz
local zookeeper_tarball_url=${APACHE_ARCHIVES}zookeeper/zookeeper-${ZOOKEEPER_VERSION}/${zookeeper_tarball}
local zookeeper_tarball_dest
zookeeper_tarball_dest=`get_extra_file ${zookeeper_tarball_url}`
sudo groupadd --system zookeeper || true
sudo useradd --system -g zookeeper zookeeper || true
sudo tar -xzf ${zookeeper_tarball_dest} -C /opt
sudo ln -sf /opt/apache-zookeeper-${ZOOKEEPER_VERSION}-bin /opt/zookeeper
sudo cp $PLUGIN_FILES/zookeeper/* /opt/zookeeper/conf
sudo chown -R zookeeper:zookeeper /opt/zookeeper/
sudo mkdir /var/log/zookeeper
sudo chown -R zookeeper:zookeeper /var/log/zookeeper
sudo mkdir /var/lib/zookeeper
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
sudo cp -f "${MONASCA_API_DIR}"/devstack/files/zookeeper/zookeeper.service /etc/systemd/system/zookeeper.service
sudo chmod 644 /etc/systemd/system/zookeeper.service
sudo systemctl daemon-reload
sudo systemctl enable zookeeper
sudo systemctl start zookeeper || sudo systemctl restart zookeeper
fi
}
$_XTRACE_ZOOKEEPER

View File

@@ -1,3 +0,0 @@
if [[ "${MONASCA_API_IMPLEMENTATION_LANG,,}" == 'java' ]]; then
WSGI_MODE=mod_wsgi
fi

File diff suppressed because it is too large Load Diff

View File

@@ -1,259 +0,0 @@
#
# (C) Copyright 2015 Hewlett Packard Enterprise Development LP
# Copyright 2017 FUJITSU LIMITED
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# The following two variables allow switching between java and python for the implementations
# of the Monasca API and the Monasca Persister. These variables can be set here
# or in the DevStack local.conf file.
# MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-java}
MONASCA_API_IMPLEMENTATION_LANG=${MONASCA_API_IMPLEMENTATION_LANG:-python}
# MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-java}
MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-python}
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-vertica}
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-cassandra}
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}
# Turn on all the Monasca services by default. Currently enabling specific services
# has no effect. All services are enabled by default. There is currently no mechanism
# implemented to turn off specific Monasca services.
#
# Monasca top level service that enables all other services
#
enable_service monasca
#
# Monasca infrastructure services
#
# devstack zookeeper
enable_service monasca-zookeeper
# Monasca databases
# MySQL is already enabled in devstack
enable_service monasca-influxdb
# Apache Storm
enable_service monasca-storm
enable_service monasca-storm-nimbus
enable_service monasca-storm-supervisor
disable_service monasca-storm-ui
disable_service monasca-storm-logviewer
# monasca-kafka depends on monasca-zookeeper
enable_service monasca-kafka
#
# Monasca core services
#
# monasca-api depends on monasca-influxdb, MySQL, monasca-kafka
enable_service monasca-api
# monasca-persister depends on monasca-influxdb, monasca-kafka
enable_service monasca-persister
# monasca-notification depends on MySQL, monasca-kafka
enable_service monasca-notification
# monasca-thresh depends on MySQL, monasca-kafka, monasca-storm
enable_service monasca-thresh
# monasca-agent depends on monasca-api
enable_service monasca-agent
# monasca-cli depends on monasca-api
enable_service monasca-cli
#
# Monasca logs services
#
enable_service kibana
enable_service elasticsearch
enable_service monasca-log
enable_service monasca-log-persister
enable_service monasca-log-transformer
enable_service monasca-log-metrics
enable_service monasca-log-agent
#
# Dependent Software Versions
#
# Set the InfluxDB version to use for the Java and Python API
# InfluxDB has modified the result sets for SHOW SERIES. The
# Python API has been modified to support those changes, but the
# Java API hasn't yet. These two environment variables allow you
# to deploy either the Java or Python API without having to
# also set the INFLUXDB_VERSION when switching between the two.
INFLUXDB_JAVA_VERSION=${INFLUXDB_JAVA_VERSION:-0.9.5}
INFLUXDB_PYTHON_VERSION=${INFLUXDB_PYTHON_VERSION:-1.7.6}
# To set the same version of InfluxDB for both languages use the
# following variable. This will override both the Java and Python
# specific variables above.
# INFLUXDB_VERSION=${INFLUXDB_VERSION:-0.9.5}
INFLUXDB_DEB_URL=${INFLUXDB_DEB_URL:-https://dl.influxdata.com/influxdb/releases/}
VERTICA_VERSION=${VERTICA_VERSION:-8.0.0-0}
CASSANDRA_VERSION=${CASSANDRA_VERSION:-311x}
ZOOKEEPER_VERSION=${ZOOKEEPER_VERSION:-3.8.4} # 3.4.13 default in Focal; 3.4.10 default in Bionic
# Kafka deb consists of the version of scala plus the version of kafka
BASE_KAFKA_VERSION=${BASE_KAFKA_VERSION:-3.7.2}
SCALA_VERSION=${SCALA_VERSION:-2.13}
KAFKA_VERSION=${KAFKA_VERSION:-${SCALA_VERSION}-${BASE_KAFKA_VERSION}}
STORM_VERSION=${STORM_VERSION:-1.2.2}
GO_VERSION=${GO_VERSION:-"1.7.1"}
NODE_JS_VERSION=${NODE_JS_VERSION:-"4.0.0"}
NVM_VERSION=${NVM_VERSION:-"0.32.1"}
KIBANA_VERSION=${KIBANA_VERSION:-7.3.0}
LOGSTASH_VERSION=${LOGSTASH_VERSION:-7.3.0}
ELASTICSEARCH_VERSION=${ELASTICSEARCH_VERSION:-7.3.0}
LOGSTASH_OUTPUT_MONASCA_VERSION=${LOGSTASH_OUTPUT_MONASCA_VERSION:-2.0.0}
# Needed for plugin build environment initialization
KIBANA_DEV_BRANCH=${KIBANA_DEV_BRANCH:-7.3}
KIBANA_DEV_REPO="https://github.com/elastic/kibana"
MONASCA_KIBANA_PLUGIN_REPO=${MONASCA_KIBANA_PLUGIN_REPO:-${GIT_BASE}/openstack/monasca-kibana-plugin.git}
MONASCA_KIBANA_PLUGIN_BRANCH=${MONASCA_KIBANA_PLUGIN_BRANCH:-master}
MONASCA_KIBANA_PLUGIN_DIR=${DEST}/monasca-kibana-plugin
# Path settings
MONASCA_BASE=${DEST}
MONASCA_SCHEMA_DIR=${DEST}/monasca/schema
# Repository settings
MONASCA_API_REPO=${MONASCA_API_REPO:-${GIT_BASE}/openstack/monasca-api.git}
MONASCA_API_BRANCH=${MONASCA_API_BRANCH:-master}
MONASCA_API_DIR=${MONASCA_BASE}/monasca-api
MONASCA_PERSISTER_REPO=${MONASCA_PERSISTER_REPO:-${GIT_BASE}/openstack/monasca-persister.git}
MONASCA_PERSISTER_BRANCH=${MONASCA_PERSISTER_BRANCH:-master}
MONASCA_PERSISTER_DIR=${MONASCA_BASE}/monasca-persister
MONASCA_NOTIFICATION_REPO=${MONASCA_NOTIFICATION_REPO:-${GIT_BASE}/openstack/monasca-notification.git}
MONASCA_NOTIFICATION_BRANCH=${MONASCA_NOTIFICATION_BRANCH:-master}
MONASCA_NOTIFICATION_DIR=${MONASCA_BASE}/monasca-notification
MONASCA_THRESH_REPO=${MONASCA_THRESH_REPO:-${GIT_BASE}/openstack/monasca-thresh.git}
MONASCA_THRESH_BRANCH=${MONASCA_THRESH_BRANCH:-master}
MONASCA_THRESH_DIR=${MONASCA_BASE}/monasca-thresh
MONASCA_CLIENT_REPO=${MONASCA_CLIENT_REPO:-${GIT_BASE}/openstack/python-monascaclient.git}
MONASCA_CLIENT_BRANCH=${MONASCA_CLIENT_BRANCH:-master}
MONASCA_CLIENT_DIR=${MONASCA_BASE}/python-monascaclient
MONASCA_AGENT_REPO=${MONASCA_AGENT_REPO:-${GIT_BASE}/openstack/monasca-agent.git}
MONASCA_AGENT_BRANCH=${MONASCA_AGENT_BRANCH:-master}
MONASCA_AGENT_DIR=${MONASCA_BASE}/monasca-agent
MONASCA_UI_REPO=${MONASCA_UI_REPO:-${GIT_BASE}/openstack/monasca-ui.git}
MONASCA_UI_BRANCH=${MONASCA_UI_BRANCH:-master}
MONASCA_UI_DIR=${MONASCA_BASE}/monasca-ui
MONASCA_COMMON_REPO=${MONASCA_COMMON_REPO:-${GIT_BASE}/openstack/monasca-common.git}
MONASCA_COMMON_BRANCH=${MONASCA_COMMON_BRANCH:-master}
MONASCA_COMMON_DIR=${MONASCA_BASE}/monasca-common
MONASCA_STATSD_REPO=${MONASCA_STATSD_REPO:-${GIT_BASE}/openstack/monasca-statsd.git}
MONASCA_STATSD_BRANCH=${MONASCA_STATSD_BRANCH:-master}
MONASCA_STATSD_DIR=${MONASCA_BASE}/monasca-statsd
MONASCA_GRAFANA_DATASOURCE_REPO=${MONASCA_GRAFANA_DATASOURCE_REPO:-${GIT_BASE}/openstack/monasca-grafana-datasource.git}
MONASCA_GRAFANA_DATASOURCE_BRANCH=${MONASCA_GRAFANA_DATASOURCE_BRANCH:-master}
MONASCA_GRAFANA_DATASOURCE_DIR=${MONASCA_BASE}/monasca-grafana-datasource
GRAFANA_REPO=${GRAFANA_REPO:-"https://github.com/monasca/grafana.git"}
GRAFANA_BRANCH=${GRAFANA_BRANCH:-"grafana4"}
GRAFANA_DIR=${MONASCA_BASE}/grafana
GRAFANA_INIT_LOG_LEVEL=DEBUG
GRAFANA_URL=http://localhost:3000
GRAFANA_USERNAME=mini-mon
GRAFANA_PASSWORD=password
DATASOURCE_TYPE=monasca
DATASOURCE_URL=http://localhost/metrics
DATASOURCE_ACCESS_MODE=proxy
DATASOURCE_AUTH=Keystone
DASHBOARDS_DIR=/dashboards.d
GITDIR["python-monascaclient"]=${MONASCA_CLIENT_DIR}
GITDIR["monasca-common"]=${MONASCA_COMMON_DIR}
GITDIR["monasca-statsd"]=${MONASCA_STATSD_DIR}
# Database settings
MONASCA_DATABASE_USE_ORM=false
# Other settings
DOWNLOAD_FILE_TIMEOUT=${DOWNLOAD_FILE_TIMEOUT:-30}
PLUGIN_FILES=$MONASCA_API_DIR/devstack/files
# APACHE_MIRROR= # force specific APACHE_MIRROR if the one that got picked fails
# Apache Kafka 0.9.0.1 is only available in Apache Archives
APACHE_ARCHIVES=${APACHE_ARCHIVES:-"https://archive.apache.org/dist/"}
# Public configuration
## monasca-statsd
MONASCA_STATSD_PORT=${MONASCA_STATSD_PORT:-8125}
## monasca-api
MONASCA_API_SERVICE_HOST=${MONASCA_API_SERVICE_HOST:-${SERVICE_HOST}}
MONASCA_API_SERVICE_PORT=${MONASCA_API_SERVICE_PORT:-8070}
MONASCA_API_ADMIN_PORT=${MONASCA_API_ADMIN_PORT:-8081} # for java
MONASCA_API_SERVICE_PROTOCOL=${MONASCA_API_SERVICE_PROTOCOL:-${SERVICE_PROTOCOL}}
MONASCA_API_SERVICE_TIMEOUT=${MONASCA_API_SERVICE_TIMEOUT:-${SERVICE_TIMEOUT}}
MONASCA_API_CONF_DIR=${MONASCA_API_CONF_DIR:-/etc/monasca}
MONASCA_API_CONF=${MONASCA_API_CONF:-$MONASCA_API_CONF_DIR/monasca-api.conf}
MONASCA_API_PASTE_INI=${MONASCA_API_PASTE_INI:-$MONASCA_API_CONF_DIR/api-config.ini}
MONASCA_API_LOGGING_CONF=${MONASCA_API_LOGGING_CONF:-$MONASCA_API_CONF_DIR/api-logging.conf}
MONASCA_API_LOG_DIR=${MONASCA_API_LOG_DIR:-/var/log/monasca/api}
MONASCA_API_USE_MOD_WSGI=${MONASCA_API_USE_MOD_WSGI:-$ENABLE_HTTPD_MOD_WSGI_SERVICES}
MONASCA_API_UWSGI_CONF=${MONASCA_API_UWSGI_CONF:-$MONASCA_API_CONF_DIR/api-uwsgi.ini}
# OLD LOG-API CONFIGURATION
MONASCA_LOG_API_SERVICE_HOST=${MONASCA_LOG_API_SERVICE_HOST:-${SERVICE_HOST}}
MONASCA_LOG_API_SERVICE_PORT=${MONASCA_LOG_API_SERVICE_PORT:-5607}
MONASCA_LOG_API_REPO=${MONASCA_LOG_API_REPO:-${GIT_BASE}/openstack/monasca-log-api.git}
MONASCA_LOG_API_BRANCH=${MONASCA_LOG_API_BRANCH:-master}
MONASCA_LOG_API_DIR=${DEST}/monasca-log-api
MONASCA_LOG_API_DEPLOY=uwsgi
MONASCA_LOG_API_CONF_DIR=${MONASCA_LOG_API_CONF_DIR:-/etc/monasca}
MONASCA_LOG_API_LOG_DIR=${MONASCA_LOG_API_LOG_DIR:-/var/log/monasca}
MONASCA_LOG_API_CACHE_DIR=${MONASCA_LOG_API_CACHE_DIR:-/var/cache/monasca-log-api}
MONASCA_LOG_API_WSGI_DIR=${MONASCA_LOG_API_WSGI_DIR:-/var/www/monasca-log-api}
MONASCA_LOG_API_CONF=${MONASCA_LOG_API_CONF:-$MONASCA_LOG_API_CONF_DIR/monasca-log-api.conf}
MONASCA_LOG_API_PASTE=${MONASCA_LOG_API_PASTE:-$MONASCA_LOG_API_CONF_DIR/log-api-paste.ini}
MONASCA_LOG_API_LOGGING_CONF=${MONASCA_LOG_API_LOGGING_CONF:-$MONASCA_LOG_API_CONF_DIR/log-api-logging.conf}
MONASCA_LOG_API_UWSGI_CONF=${MONASCA_LOG_API_UWSGI_CONF:-$MONASCA_LOG_API_CONF_DIR/log-api-uwsgi.ini}
USE_PYTHON3=${USE_PYTHON3:-true}
USE_OLD_LOG_API=${USE_OLD_LOG_API:-false}
## storm settings
STORM_UI_HOST=${STORM_UI_HOST:-${SERVICE_HOST}}
STORM_UI_PORT=${STORM_UI_PORT:-8089}
STORM_LOGVIEWER_PORT=${STORM_LOGVIEWER_PORT:-8090}
KAFKA_SERVICE_HOST=${KAFKA_SERVICE_HOST:-${SERVICE_HOST}}
KAFKA_SERVICE_PORT=${KAFKA_SERVICE_PORT:-9092}
KAFKA_SERVICE_TOPICS=${KAFKA_SERVICE_TOPICS:-metrics,events,alarm-state-transitions,alarm-notifications,retry-notifications,60-seconds-notifications}
KAFKA_SERVICE_LOG_TOPICS=${KAFKA_SERVICE_LOG_TOPICS:-log,transformed-log}

View File

@@ -1,3 +0,0 @@
{
"test": {}
}

View File

@@ -1,7 +0,0 @@
# documentation
sphinx>=2.0.0,!=2.1.0 # BSD
os-api-ref>=1.4.0 # Apache-2.0
reno>=3.1.0 # Apache-2.0
openstackdocstheme>=2.2.1 # Apache-2.0
SQLAlchemy>=1.3.0 # MIT
oslo.config>=6.8.0 # Apache-2.0

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -1,89 +0,0 @@
====================
Administration guide
====================
.. toctree::
:maxdepth: 2
Schema Setup
~~~~~~~~~~~~
For setting up the Monasca configuration database, we provide ``monasca_db``,
an Alembic based database migration tool. Historically, the schema for the
configuration database was created by a SQL script. This SQL was changed a
couple of times, so ``monasca_db`` comes with a mechanism to detect the SQL
script revision being used to create it and stamp the database with the
matching Alembic revision.
Setting up a new database
-------------------------
If you are deploying Monasca from scratch, database setup is quite
straightforward:
1. Create a database and configure access credentials with ``ALL PRIVILEGES``
permission level on it in the Monasca API configuration file's
``[database]`` section.
2. Run schema migrations: ``monasca_db upgrade``. It will run all migrations up
to and including the most recent one (``head``) unless a revision to migrate
to is explicitly specified.
Upgrading Existing Database from Legacy Schema
----------------------------------------------
If you have been running an older version of Monasca, you can attempt to
identify and stamp its database schema:
::
monasca_db stamp --from-fingerprint
This command will generate a unique fingerprint for the database schema in
question and match that fingerprint with an in-code map of fingerprints to
database schema revisions. This should work for all official (shipped as part
of the ``monasca-api`` repository) schema scripts. If you used a custom
third-party schema script to set up the database, it may not be listed and
you'll get an error message similar to this one (the fingerprint hash will
vary):
::
Schema fingerprint 3d45493070e3b8e6fc492d2369e51423ca4cc1ac does not match any known legacy revision.
If this happens to you, please create a Storyboard story against the
`openstack/monasca-api project <https://storyboard.openstack.org/#!/project/863>`_.
Provide the following alongside the story:
1. A copy of or pointer to the schema SQL script being used to set up the
database.
2. The fingerprint shown in the error message.
3. The output of ``monasca_db fingerprint --raw``.
Time Series Databases Setup
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enabling InfluxDB Time Series Index in existing deployments
-----------------------------------------------------------
If enabling TSI on an existing InfluxDB install please follow the instructions
for migrating existing data here:
https://docs.influxdata.com/influxdb/v1.7/administration/upgrading/#upgrading-influxdb-1-3-1-4-no-tsi-preview-to-1-7-x-tsi-enabled
Database Per Tenant
-------------------
It is envisaged that separate database per tenant will be the default
behaviour in a future release of Monasca. Not only would it make queries
faster for tenants, it would also allow administrators to define
retention policy per tenancy. To enable this, set
`influxdb.db_per_tenant` to `True` in `monasca-{api,persister}` config
(it defaults to `False` at the moment if not set).
To migrate existing data to database per tenant, refer to README.rst
under the following URL which also contains the Python script to
facilitate migration:
https://opendev.org/openstack/monasca-persister/src/branch/master/monasca_persister/tools/db-per-tenant/

View File

@@ -1,53 +0,0 @@
======================
Command Line Interface
======================
monasca (python-monascaclient)
==============================
This is the main command line interface for working with the
Monasca services, including retrieving metrics from storage.
See the https://docs.openstack.org/python-monascaclient/latest/ for details.
monasca_db
==========
CLI for Monasca database management.
::
usage: api [-h] [--config-dir DIR] [--config-file PATH] [--version]
{fingerprint,detect-revision,stamp,upgrade,version} ...
monasca-status
==============
CLI for checking the status of Monasca.
Use the command `monasca-status upgrade check` to check
the readiness of the system for an upgrade.
**Return Codes**
.. list-table::
:widths: 20 80
:header-rows: 1
* - Return code
- Description
* - 0
- All upgrade readiness checks passed successfully and there is nothing
to do.
* - 1
- At least one check encountered an issue and requires further
investigation. This is considered a warning but the upgrade may be OK.
* - 2
- There was an upgrade status check failure that needs to be
investigated. This should be considered something that stops an
upgrade.
* - 255
- An unexpected error occurred.
**History**
Introduced in the Stein cycle as part of the OpenStack Community wide goal.
https://governance.openstack.org/tc/goals/stein/upgrade-checkers.html

View File

@@ -1,242 +0,0 @@
# -*- coding: utf-8 -*-
#
# monasca-api documentation build configuration file, created by
# sphinx-quickstart on Wed Nov 18 12:02:03 2015.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import os
import sys
sys.path = [
os.path.abspath('../..'),
os.path.abspath('../../bin')
] + sys.path
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.6'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.coverage',
'sphinx.ext.ifconfig',
'sphinx.ext.graphviz',
'sphinx.ext.autodoc',
'sphinx.ext.viewcode',
'oslo_config.sphinxconfiggen',
'oslo_config.sphinxext',
'openstackdocstheme',
]
# geeneral information about project
openstackdocs_repo_name = u'openstack/monasca-api'
openstackdocs_pdf_link = True
openstackdocs_use_storyboard = True
copyright = u'2014-present, OpenStack Foundation'
author = u'OpenStack Foundation'
# sample config
config_generator_config_file = [
('config-generator/monasca-api.conf', '_static/monasca-api')
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
source_suffix = '.rst'
# The encoding of source files.
source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = [
'common',
'doc',
'documentation',
'etc',
'java'
]
# If true, '()' will be appended to :func: etc. cross-reference text.
add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
show_authors = True
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'native'
# A list of ignored prefixes for module index sorting.
modindex_common_prefix = ['monasca_api.', 'monasca']
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'openstackdocs'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# doc. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
# html_extra_path = []
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
html_use_index = True
# If false, no module index is generated.
html_use_modindex = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
#html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
#html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'MonitoringApiDoc'
# -- Options for LaTeX output ---------------------------------------------
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'doc-monasca-api.tex', u'Monasca Documentation',
[author], 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
latex_domain_indices = False
latex_elements = {
'makeindex': '',
'printindex': '',
'preamble': r'\setcounter{tocdepth}{3}',
}
# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
latex_use_xindy = False
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'monitoringapi', u'Monasca Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#man_show_urls = False
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'https://doc.python.org/': None}

View File

@@ -1,40 +0,0 @@
.. _sample-configuration:
-------
Samples
-------
The following sections show sample configuration files for monasca-api and
related utilities. These are generated from the code
(apart from the samples for logging and paster) and reflect the current state
of code in the monasca-api repository.
.. _sample-configuration-api:
Sample Configuration For Application
------------------------------------
This sample configuration can also be viewed in `monasca-api.conf.sample
<../_static/monasca-api.conf.sample>`_.
.. literalinclude:: ../_static/monasca-api.conf.sample
.. _sample-configuration-logging:
Sample Configuration For Logging
--------------------------------
This sample configuration can also be viewed in `api-logging.conf
<https://git.openstack.org/cgit/openstack/monasca-api/plain/etc/api-logging.conf>`_.
.. literalinclude:: ../../../etc/api-logging.conf
Sample Configuration For Paster
-------------------------------
This sample configuration can also be viewed in `api-config.ini
<https://git.openstack.org/cgit/openstack/monasca-api/plain/etc/api-config.ini>`_.
.. literalinclude:: ../../../etc/api-config.ini

View File

@@ -1,3 +0,0 @@
# codebase documentation is autogenerated
# do not track it
api/

View File

@@ -1,16 +0,0 @@
.. _codedocs:
======================
Codebase documentation
======================
Following section contains codebase documenation generated with, a little
bit of assistance, `sphinx.ext.autodoc`_.
.. _`sphinx.ext.autodoc`: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
Modules
=======
.. toctree::
:maxdepth: 2

View File

@@ -1,188 +0,0 @@
============================
So You Want to Contribute...
============================
For general information on contributing to OpenStack, please check out the
`contributor guide <https://docs.openstack.org/contributors/>`_ to get started.
It covers all the basics that are common to all OpenStack projects: the
accounts you need, the basics of interacting with our Gerrit review system,
how we communicate as a community, etc.
Below will cover the more project specific information you need to get started
with Monasca.
Communication
~~~~~~~~~~~~~
.. This would be a good place to put the channel you chat in as a project; when/
where your meeting is, the tags you prepend to your ML threads, etc.
For communicating with Monasca Team, you can reach out to us on
*#openstack-monasca* IRC channel at OFTC.
We hold weekly `team meetings`_ in our IRC channel which is a good opportunity
to ask questions, propose new features or just get in touch with the team.
You can also send us an email to the mailing list
`openstack-discuss@lists.openstack.org`_. Please use *[Monasca]* tag for
easier thread filtering.
.. _team meetings: http://eavesdrop.openstack.org/#Monasca_Team_Meeting
.. _openstack-discuss@lists.openstack.org: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss
Contacting the Core Team
~~~~~~~~~~~~~~~~~~~~~~~~
.. This section should list the core team, their irc nicks, emails, timezones
etc. If all this info is maintained elsewhere (i.e. a wiki), you can link to
that instead of enumerating everyone here.
================== ========== =====
Name IRC nick Email
================== ========== =====
Martin Chacon Piza chaconpiza MartinDavid.ChaconPiza1@est.fujitsu.com
Witek Bedyk witek witold.bedyk@suse.com
Doug Szumski dougsz doug@stackhpc.com
Adrian Czarnecki adriancz adrian.czarnecki@ts.fujitsu.com
Joseph Davis joadavis joseph.davis@suse.com
================== ========== =====
New Feature Planning
~~~~~~~~~~~~~~~~~~~~
.. This section is for talking about the process to get a new feature in. Some
projects use blueprints, some want specs, some want both! Some projects
stick to a strict schedule when selecting what new features will be reviewed
for a release.
Our process is meant to allow users, developers, and operators to express their
desires for new features using Storyboard stories. The workflow is very simple:
* If something is clearly broken, submit a `bug report`_ in Storyboard.
* If you want to change or add a feature, submit a `story`_ in Storyboard.
* Monasca core reviewers may request that you submit a `specification`_ to
gerrit to elaborate on the feature request.
* Significant features require `release notes`_ to be included when the code is
merged.
.. _story:
Stories
-------
New features can be proposed in `Storyboard
<https://storyboard.openstack.org/#!/project_group/59>`_ as new Story.
The initial story primarily needs to express the intent of the idea with
enough details that it can be evaluated for compatibility with the project
mission and whether or not the change requires a `specification`_. It is *not*
expected to contain all of the implementation details. If the feature is very
simple and well understood by the team, then describe it simply. The story is
then used to track all the related code reviews. Team members will
request more information as needed.
.. _specification:
Specifications
--------------
We use the `monasca-specs <https://github.com/openstack/monasca-specs>`_
repository for specification reviews. Specifications:
* Provide a review tool for collaborating on feedback and reviews for complex
features.
* Collect team priorities.
* Serve as the basis for documenting the feature once implemented.
* Ensure that the overall impact on the system is considered.
.. _release notes:
Release Notes
-------------
The release notes for a patch should be included in the patch. If not, the
release notes should be in a follow-on review.
If any of the following applies to the patch, a release note is required:
* The deployer needs to take an action when upgrading
* A new feature is implemented
* Plugin API function was removed or changed
* Current behavior is changed
* A new config option is added that the deployer should consider changing from
the default
* A security bug is fixed
* Change may break previous versions of the client library(ies)
* Requirement changes are introduced for important libraries like oslo, six
requests, etc.
* Deprecation period starts or code is purged
A release note is suggested if a long-standing or important bug is fixed.
Otherwise, a release note is not required.
Task Tracking
~~~~~~~~~~~~~
.. This section is about where you track tasks- launchpad? storyboard? is there
more than one launchpad project? what's the name of the project group in
storyboard?
We track our tasks in Storyboard
https://storyboard.openstack.org/#!/project_group/monasca
If you're looking for some smaller, easier work item to pick up and get started
on, search for the *'low-hanging-fruit'* tag.
Kanban Board
------------
Progress on implementation of important stories in Ussuri release is tracked in
`Monasca Board on StoryBoard <https://storyboard.openstack.org/#!/board/190>`_.
.. _bug report:
Reporting a Bug
~~~~~~~~~~~~~~~
.. Pretty self explanatory section, link directly to where people should report
bugs for your project.
You found an issue and want to make sure we are aware of it? You can `report
them on Storyboard <https://storyboard.openstack.org/#!/project_group/monasca>`_.
When filing a bug please remember to add the *bug* tag to the story. Please
provide information on what the problem is, how to replicate it, any
suggestions for fixing it, and a recommendation of the priority.
All open bugs can be found in this `Worklist
<https://storyboard.openstack.org/#!/worklist/213>`_.
Getting Your Patch Merged
~~~~~~~~~~~~~~~~~~~~~~~~~
.. This section should have info about what it takes to get something merged. Do
you require one or two +2's before +W? Do some of your repos require unit
test changes with all patches? etc.
All changes proposed to Monasca requires at least one ``Code-Review +2`` votes
from Monasca core reviewers before one of the core reviewers can approve
patch by giving ``Workflow +1`` vote.
Reviews Prioritisation
----------------------
Monasca project uses *Review-Priority* field in Gerrit to emphasize
prioritized code changes.
Every developer can propose the changes which should be prioritized
in `weekly team meeting <http://eavesdrop.openstack.org/#Monasca_Team_Meeting>`_
or in the mailing list. Any core reviewer,
preferably from a different company, can confirm such proposed change
by setting *Review-Priority* +1.
Prioritized changes can be listed in this
`dashboard <http://www.tinyurl.com/monasca>`_.
Project Team Lead Duties
~~~~~~~~~~~~~~~~~~~~~~~~
.. this section is where you can put PTL specific duties not already listed in
the common PTL guide (linked below), or if you already have them written
up elsewhere you can link to that doc here.
All common PTL duties are enumerated in the `PTL guide
<https://docs.openstack.org/project-team-guide/ptl.html>`_.

View File

@@ -1,17 +0,0 @@
Database Migrations
-------------------
Monasca uses `Alembic <http://alembic.zzzcomputing.com/en/latest/>`_
migrations to set up its configuration database. If you need to change the
configuration database's schema, you need to create a migration to adjust the
database accordingly, as follows::
cd monasca_api/db/
alembic revision
This will create a new skeleton revision for you to edit. You will find
existing revisions to use for inspiration in the
``/monasca_api/db/alembic/versions/`` directory.
Measurement data stored in a Time Series database (such as InfluxDB) would
be migrated to a new version using standard practice for a given TSDB.

View File

@@ -1,10 +0,0 @@
==========================
Contribution documentation
==========================
.. toctree::
:maxdepth: 1
contributing.rst
db_migrations.rst
code.rst

View File

@@ -1,3 +0,0 @@
========
Glossary
========

Some files were not shown because too many files have changed in this diff Show More