Files
monasca-api/devstack/lib/persister.sh
James Gu ba43f07726 Add cassandra support
Support Cassandra db installation and Cassandra related
configurations for Monasca api and persister services
in devstack. Add Monasca rest API Cassandra plugin for
retrieving metric, dimension, measurement, statistics
and alarms.

Change-Id: Ie60d668692e1f25f555dda2355f4e513d582736c
story: 2001231
task: 5759
2017-12-15 19:11:00 +00:00

253 lines
10 KiB
Bash

#!/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/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
echo_summary "Starting monasca-persister"
run_process "monasca-persister" "${MONASCA_PERSISTER_CMD}"
}
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() {
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/persister.conf
install -m 600 ${MONASCA_PERSISTER_DIR}/etc/monasca/persister-logging.conf ${MONASCA_PERSISTER_LOGGING_CONF}
install -m 600 /tmp/persister.conf ${MONASCA_PERSISTER_CONF} && rm -rf /tmp/persister.conf
iniset "$MONASCA_PERSISTER_CONF" DEFAULT log_config_append ${MONASCA_PERSISTER_LOGGING_CONF}
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}
ln -sf ${MONASCA_PERSISTER_LOGGING_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}