Enable UWSGI support in monasca-log-api
Community has set a community wide goal in Pike cycle: "Control Plane API endpoints deployment via WSGI" [1]. monasca-log-api is already capable of being deployed under mod-wsgi but not under uwsgi. This commits enables that feature. Until Queens release API will hence support: * gunicorn * mod_wsgi (remove in Queens) * uwsgi (preffered) Refs: [1]: https://governance.openstack.org/tc/goals/pike/deploy-api-in-wsgi.html Story: 2001464 Task: 6180 Change-Id: Ie4a94c9c2e166915c3f4a1783dc3527f4eb62f29
This commit is contained in:
parent
b8d7b60781
commit
71f0bdfb8c
|
@ -87,6 +87,14 @@ contains:
|
|||
MONASCA_LOG_API_USE_MOD_WSGI=True
|
||||
```
|
||||
|
||||
Actual ```MONASCA_LOG_API_DEPLOY``` value is determined using devstack`s
|
||||
```WSGI_MODE``` variable. Nevertheless there are only three possible values,
|
||||
that ```MONASCA_LOG_API_DEPLOY``` can take:
|
||||
|
||||
* ```gunicorn``` if ```MONASCA_LOG_API_USE_MOD_WSGI=False```
|
||||
* ```mod_wsgi``` if ```MONASCA_LOG_API_USE_MOD_WSGI=True && WSGI_MODE="mod_wsgi""```
|
||||
* ```uwsgi``` if ```MONASCA_LOG_API_USE_MOD_WSGI=True && WSGI_MODE="uwsgi""```
|
||||
|
||||
# Using Vagrant
|
||||
|
||||
Vagrant can be used to deploy a VM with Devstack and Monasca Logging
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
#!/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.
|
||||
|
||||
# Non configurable settings or settings derived from another settings
|
||||
|
||||
_XTRACE_LOG_API_CONFIG=$(set +o | grep xtrace)
|
||||
set +o xtrace
|
||||
|
||||
if [[ ${USE_VENV} = True ]]; then
|
||||
PROJECT_VENV["monasca-log-api"]=${MONASCA_LOG_API_DIR}.venv
|
||||
MONASCA_LOG_API_BIN_DIR=${PROJECT_VENV["monasca-log-api"]}/bin
|
||||
else
|
||||
MONASCA_LOG_API_BIN_DIR=$(get_python_exec_prefix)
|
||||
fi
|
||||
|
||||
MONASCA_LOG_API_WSGI=$MONASCA_LOG_API_BIN_DIR/monasca-log-api-wsgi
|
||||
MONASCA_LOG_API_DEPLOY=`determine_log_api_deploy_mode`
|
||||
if is_service_enabled tls-proxy; then
|
||||
MONASCA_LOG_API_SERVICE_PROTOCOL="https"
|
||||
fi
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
MONASCA_LOG_API_BASE_URI=${MONASCA_LOG_API_SERVICE_PROTOCOL}://${MONASCA_LOG_API_SERVICE_HOST}/logs
|
||||
else
|
||||
MONASCA_LOG_API_BASE_URI=${MONASCA_LOG_API_SERVICE_PROTOCOL}://${MONASCA_LOG_API_SERVICE_HOST}:${MONASCA_LOG_API_SERVICE_PORT}
|
||||
fi
|
||||
MONASCA_LOG_API_URI_V2=${MONASCA_LOG_API_BASE_URI}/v2.0
|
||||
MONASCA_LOG_API_URI_V3=${MONASCA_LOG_API_BASE_URI}/v3.0
|
||||
|
||||
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/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}
|
||||
|
||||
MONASCA_LOG_API_USE_MOD_WSGI=${MONASCA_LOG_API_USE_MOD_WSGI:-$ENABLE_HTTPD_MOD_WSGI_SERVICES}
|
||||
|
||||
# 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
|
||||
|
||||
LOGSTASH_DIR=$DEST/logstash
|
||||
|
||||
PLUGIN_FILES=$MONASCA_LOG_API_DIR/devstack/files
|
||||
# configuration bits of various services
|
||||
|
||||
# Files inside this directory will be visible in gates log
|
||||
GATE_CONFIGURATION_DIR=/etc/monasca-log-api
|
||||
|
||||
# clone monasca-{common,statsd} directly from repo
|
||||
GITREPO["monasca-common"]=${MONASCA_COMMON_REPO}
|
||||
GITBRANCH["monasca-common"]=${MONASCA_COMMON_BRANCH}
|
||||
GITDIR["monasca-common"]=${MONASCA_COMMON_DIR}
|
||||
|
||||
GITREPO["monasca-statsd"]=${MONASCA_STATSD_REPO}
|
||||
GITBRANCH["monasca-statsd"]=${MONASCA_STATSD_BRANCH}
|
||||
GITDIR["monasca-statsd"]=${MONASCA_STATSD_DIR}
|
||||
|
||||
LIBS_FROM_GIT="${LIBS_FROM_GIT:-""},monasca-common,monasca-statsd"
|
||||
# clone monasca-{common,statsd} directly from repo
|
||||
|
||||
# public facing bits
|
||||
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_SERVICE_PORT_INT=${MONASCA_LOG_API_SERVICE_PORT:-15607}
|
||||
MONASCA_LOG_API_SERVICE_PROTOCOL=${MONASCA_LOG_API_SERVICE_PROTOCOL:-${SERVICE_PROTOCOL}}
|
||||
|
||||
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"}
|
||||
|
||||
KAFKA_SERVICE_HOST=${KAFKA_SERVICE_HOST:-${SERVICE_HOST}}
|
||||
KAFKA_SERVICE_PORT=${KAFKA_SERVICE_PORT:-9092}
|
||||
# public facing bits
|
||||
|
||||
${_XTRACE_LOG_API_CONFIG}
|
|
@ -0,0 +1,56 @@
|
|||
#!/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.
|
||||
|
||||
# Set of utility-like methods that are not bound to any particular
|
||||
# service
|
||||
|
||||
_XTRACE_LOG_API_UTILS=$(set +o | grep xtrace)
|
||||
set +o xtrace
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
# MONASCA_LOG_API_DEPLOY defines how monasca-log-api is deployed, allowed values:
|
||||
# - mod_wsgi : Run monasca-log-api under Apache HTTPd mod_wsgi
|
||||
# - uwsgi : Run monasca-log-api under uwsgi
|
||||
# - gunicorn: Run monasca-log-api under gunicorn
|
||||
determine_log_api_deploy_mode() {
|
||||
MONASCA_LOG_API_USE_MOD_WSGI=$(trueorfalse False MONASCA_LOG_API_USE_MOD_WSGI)
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
||||
echo "uwsgi"
|
||||
else
|
||||
echo "mod_wsgi"
|
||||
fi
|
||||
else
|
||||
echo "gunicorn"
|
||||
fi
|
||||
}
|
||||
|
||||
${_XTRACE_LOG_API_UTILS}
|
|
@ -1,5 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
#
|
||||
# Copyright 2016 FUJITSU LIMITED
|
||||
# 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.
|
||||
|
@ -22,41 +24,10 @@ set -o xtrace
|
|||
_ERREXIT_LOG_API=$(set +o | grep errexit)
|
||||
set -o errexit
|
||||
|
||||
# monasca-log-api settings
|
||||
if [[ ${USE_VENV} = True ]]; then
|
||||
PROJECT_VENV["monasca-log-api"]=${MONASCA_LOG_API_DIR}.venv
|
||||
MONASCA_LOG_API_BIN_DIR=${PROJECT_VENV["monasca-log-api"]}/bin
|
||||
else
|
||||
MONASCA_LOG_API_BIN_DIR=$(get_python_exec_prefix)
|
||||
fi
|
||||
|
||||
MONASCA_LOG_API_BASE_URI=${MONASCA_LOG_API_SERVICE_PROTOCOL}://${MONASCA_LOG_API_SERVICE_HOST}:${MONASCA_LOG_API_SERVICE_PORT}
|
||||
MONASCA_LOG_API_URI_V2=${MONASCA_LOG_API_BASE_URI}/v2.0
|
||||
MONASCA_LOG_API_URI_V3=${MONASCA_LOG_API_BASE_URI}/v3.0
|
||||
|
||||
# wsgit bits
|
||||
MONASCA_LOG_API_USE_MOD_WSGI=$(trueorfalse False MONASCA_LOG_API_USE_MOD_WSGI)
|
||||
|
||||
# configuration bits
|
||||
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
|
||||
|
||||
LOGSTASH_DIR=$DEST/logstash
|
||||
|
||||
PLUGIN_FILES=$MONASCA_LOG_API_DIR/devstack/files
|
||||
|
||||
# Files inside this directory will be visible in gates log
|
||||
GATE_CONFIGURATION_DIR=/etc/monasca-log-api
|
||||
# source lib/*
|
||||
source ${MONASCA_LOG_API_DIR}/devstack/lib/util.sh
|
||||
source ${MONASCA_LOG_API_DIR}/devstack/lib/config.sh
|
||||
# source lib/*
|
||||
|
||||
# TOP_LEVEL functions called from devstack coordinator
|
||||
###############################################################################
|
||||
|
@ -157,16 +128,19 @@ function install_monasca-log-api {
|
|||
git_clone $MONASCA_LOG_API_REPO $MONASCA_LOG_API_DIR $MONASCA_LOG_API_BRANCH
|
||||
setup_develop $MONASCA_LOG_API_DIR
|
||||
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "False" ]; then
|
||||
pip_install gunicorn
|
||||
fi
|
||||
|
||||
install_keystonemiddleware
|
||||
install_monasca_common
|
||||
install_monasca_statsd
|
||||
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
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
|
||||
|
@ -177,55 +151,11 @@ function configure_monasca_log_api {
|
|||
if is_service_enabled monasca-log-api; then
|
||||
echo_summary "Configuring monasca-log-api"
|
||||
|
||||
# Put config files in ``$MONASCA_LOG_API_CONF_DIR`` for everyone to find
|
||||
sudo install -d -o $STACK_USER $MONASCA_LOG_API_CONF_DIR
|
||||
create_log_api_cache_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/log-api.conf
|
||||
|
||||
install -m 600 /tmp/log-api.conf $MONASCA_LOG_API_CONF && rm -rf /tmp/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 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,/v3.0/logs"
|
||||
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
|
||||
|
||||
# WSGI
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
configure_monasca_log_api_wsgi
|
||||
configure_monasca_log_api_core
|
||||
if [ "$MONASCA_LOG_API_DEPLOY" == "mod_wsgi" ]; then
|
||||
configure_monasca_log_api_mod_wsgi
|
||||
elif [ "$MONASCA_LOG_API_DEPLOY" == "uwsgi" ]; then
|
||||
configure_monasca_log_api_uwsgi
|
||||
fi
|
||||
|
||||
# link configuration for the gate
|
||||
|
@ -236,7 +166,63 @@ function configure_monasca_log_api {
|
|||
fi
|
||||
}
|
||||
|
||||
function configure_monasca_log_api_wsgi {
|
||||
function configure_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/log-api.conf
|
||||
|
||||
install -m 600 /tmp/log-api.conf $MONASCA_LOG_API_CONF && rm -rf /tmp/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 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,/v3.0/logs"
|
||||
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 configure_monasca_log_api_uwsgi {
|
||||
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"
|
||||
}
|
||||
|
||||
function configure_monasca_log_api_mod_wsgi {
|
||||
sudo install -d $MONASCA_LOG_API_WSGI_DIR
|
||||
|
||||
local monasca_log_api_apache_conf
|
||||
|
@ -253,17 +239,19 @@ function configure_monasca_log_api_wsgi {
|
|||
monasca_log_api_certfile="SSLCertificateFile $MONASCA_LOG_API_SSL_CERT"
|
||||
monasca_log_api_keyfile="SSLCertificateKeyFile $MONASCA_LOG_API_SSL_KEY"
|
||||
fi
|
||||
if is_service_enabled tls-proxy; then
|
||||
monasca_log_api_api_port=$MONASCA_LOG_API_SERVICE_PORT_INT
|
||||
fi
|
||||
if [[ ${USE_VENV} = True ]]; then
|
||||
venv_path="python-path=${PROJECT_VENV["monasca_log_api"]}/lib/$(python_version)/site-packages"
|
||||
fi
|
||||
|
||||
# copy proxy vhost and wsgi helper files
|
||||
sudo cp $MONASCA_LOG_API_BIN_DIR/monasca-log-api-wsgi $MONASCA_LOG_API_WSGI_DIR/monasca_log_api
|
||||
sudo cp $PLUGIN_FILES/apache-log-api.template $monasca_log_api_apache_conf
|
||||
sudo sed -e "
|
||||
s|%PUBLICPORT%|$monasca_log_api_api_port|g;
|
||||
s|%APACHE_NAME%|$APACHE_NAME|g;
|
||||
s|%PUBLICWSGI%|$MONASCA_LOG_API_WSGI_DIR/monasca_log_api|g;
|
||||
s|%PUBLICWSGI%|$MONASCA_LOG_API_BIN_DIR/monasca-log-api-wsgi|g;
|
||||
s|%SSLENGINE%|$monasca_log_api_ssl|g;
|
||||
s|%SSLCERTFILE%|$monasca_log_api_certfile|g;
|
||||
s|%SSLKEYFILE%|$monasca_log_api_keyfile|g;
|
||||
|
@ -310,38 +298,48 @@ function start_monasca_log_api {
|
|||
service_port=$MONASCA_LOG_API_SERVICE_PORT_INT
|
||||
service_protocol="http"
|
||||
fi
|
||||
local service_uri
|
||||
|
||||
restart_service memcached
|
||||
|
||||
local enabled_site_file
|
||||
enabled_site_file=$(apache_site_config_for monasca-log-api)
|
||||
if [ -f ${enabled_site_file} ] && [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
enable_apache_site monasca-log-api
|
||||
restart_apache_server
|
||||
tail_log monasca-log-api /var/log/$APACHE_NAME/monasca-log-api.log
|
||||
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
|
||||
local gunicorn="$MONASCA_LOG_API_BIN_DIR/gunicorn"
|
||||
run_process "monasca-log-api" "$gunicorn --paste $MONASCA_LOG_API_PASTE"
|
||||
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_protocol://$SERVICE_HOST:$service_port; then
|
||||
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 stop_monasca_log_api {
|
||||
if is_service_enabled monasca-log-api; then
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
if [ "$MONASCA_LOG_API_DEPLOY" == "mod_wsgi" ]; then
|
||||
disable_apache_site monasca-log-api
|
||||
restart_apache_server
|
||||
else
|
||||
stop_process "monasca-log-api" || true
|
||||
stop_process "monasca-log-api"
|
||||
if [ "$MONASCA_LOG_API_DEPLOY" == "uwsgi" ]; then
|
||||
remove_uwsgi_config "$MONASCA_LOG_API_UWSGI_CONF" "$MONASCA_LOG_API_WSGI"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
@ -435,7 +433,7 @@ function start_elasticsearch {
|
|||
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" $esSleepTime
|
||||
run_process_sleep "elasticsearch" "$ELASTICSEARCH_DIR/bin/elasticsearch" $esSleepTime
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -508,7 +506,7 @@ function start_kibana {
|
|||
echo_summary "Starting Kibana ${KIBANA_VERSION}"
|
||||
local kibanaSleepTime=${KIBANA_SLEEP_TIME:-90} # 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
|
||||
run_process_sleep "kibana" "$KIBANA_DIR/bin/kibana --config $kibanaCFG" $kibanaSleepTime
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -782,22 +780,6 @@ function enable_log_management {
|
|||
fi
|
||||
}
|
||||
|
||||
function _run_process_sleep {
|
||||
local name=$1
|
||||
local cmd=$2
|
||||
local sleepTime=${3:-1}
|
||||
run_process "$name" "$cmd"
|
||||
sleep ${sleepTime}
|
||||
}
|
||||
|
||||
function 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
|
||||
}
|
||||
|
||||
# check for service enabled
|
||||
if is_service_enabled monasca-log; then
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#
|
||||
|
||||
# services
|
||||
enable_service zookeeper # devstack/lib/dlm
|
||||
enable_service zookeeper # devstack/monasca-api/zookeeper
|
||||
enable_service kibana # devstack/monasca-api/kafka
|
||||
enable_service elasticsearch
|
||||
enable_service monasca-log
|
||||
|
@ -50,44 +50,5 @@ MONASCA_KIBANA_PLUGIN_REPO=${MONASCA_KIBANA_PLUGIN_REPO:-${GIT_BASE}/openstack/m
|
|||
MONASCA_KIBANA_PLUGIN_BRANCH=${MONASCA_KIBANA_PLUGIN_BRANCH:-master}
|
||||
MONASCA_KIBANA_PLUGIN_DIR=${DEST}/monasca-kibana-plugin
|
||||
|
||||
GITREPO["monasca-common"]=${MONASCA_COMMON_REPO}
|
||||
GITBRANCH["monasca-common"]=${MONASCA_COMMON_BRANCH}
|
||||
GITDIR["monasca-common"]=${MONASCA_COMMON_DIR}
|
||||
|
||||
GITREPO["monasca-statsd"]=${MONASCA_STATSD_REPO}
|
||||
GITBRANCH["monasca-statsd"]=${MONASCA_STATSD_BRANCH}
|
||||
GITDIR["monasca-statsd"]=${MONASCA_STATSD_DIR}
|
||||
|
||||
LIBS_FROM_GIT="${LIBS_FROM_GIT:-""},monasca-common,monasca-statsd"
|
||||
|
||||
# configuration bits
|
||||
MONASCA_LOG_API_CONF_DIR=${MONASCA_LOG_API_CONF_DIR:-/etc/monasca}
|
||||
MONASCA_LOG_API_CONF=${MONASCA_LOG_API_CONF:-$MONASCA_LOG_API_CONF_DIR/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_CACHE_DIR=${MONASCA_LOG_API_CACHE_DIR:-/var/cache/monasca-log-api}
|
||||
|
||||
## WSGI
|
||||
MONASCA_LOG_API_WSGI_DIR=${MONASCA_LOG_API_WSGI_DIR:-/var/www/monasca-log-api}
|
||||
MONASCA_LOG_API_USE_MOD_WSGI=${MONASCA_LOG_API_USE_MOD_WSGI:-False}
|
||||
|
||||
# public facing bits
|
||||
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_SERVICE_PORT_INT=${MONASCA_LOG_API_SERVICE_PORT:-15607}
|
||||
MONASCA_LOG_API_SERVICE_PROTOCOL=${MONASCA_LOG_API_SERVICE_PROTOCOL:-${SERVICE_PROTOCOL}}
|
||||
|
||||
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"}
|
||||
|
||||
KAFKA_SERVICE_HOST=${KAFKA_SERVICE_HOST:-${SERVICE_HOST}}
|
||||
KAFKA_SERVICE_PORT=${KAFKA_SERVICE_PORT:-9092}
|
||||
|
||||
DOWNLOAD_FILE_TIMEOUT=${DOWNLOAD_FILE_TIMEOUT:-300}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ class = logging.handlers.RotatingFileHandler
|
|||
level = DEBUG
|
||||
formatter = context
|
||||
# store up to 5*100MB of logs
|
||||
args = ('monasca-log-api.log', 'a', 104857600, 5)
|
||||
args = ('/var/log/monasca/log-api.log', 'a', 104857600, 5)
|
||||
|
||||
[formatter_context]
|
||||
class = oslo_log.formatters.ContextFormatter
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
[uwsgi]
|
||||
wsgi-file = /usr/local/bin/monasca-log-api-wsgi
|
||||
|
||||
# Versions of mod_proxy_uwsgi>=2.0.6 should use a UNIX socket, see
|
||||
# http://uwsgi-docs.readthedocs.org/en/latest/Apache.html#mod-proxy-uwsgi
|
||||
uwsgi-socket = 127.0.0.1:5607
|
||||
|
||||
# Override the default size for headers from the 4k default.
|
||||
buffer-size = 65535
|
||||
|
||||
# This is running standalone
|
||||
master = true
|
||||
|
||||
enable-threads = true
|
||||
|
||||
# Tune this to your environment.
|
||||
processes = 4
|
||||
|
||||
# uwsgi recommends this to prevent thundering herd on accept.
|
||||
thunder-lock = true
|
||||
|
||||
plugins = python
|
||||
|
||||
# This ensures that file descriptors aren't shared between keystone processes.
|
||||
lazy-apps = true
|
|
@ -75,8 +75,11 @@ class TestLogApiConstraints(base.BaseLogsTestCase):
|
|||
except exceptions.OverLimit as urc:
|
||||
self.assertEqual(413, urc.resp.status)
|
||||
return
|
||||
except exceptions.UnexpectedContentType as uct:
|
||||
self.assertEqual(503, uct.resp.status)
|
||||
return
|
||||
|
||||
self.assertTrue(False, 'API should respond with 413')
|
||||
self.assertTrue(False, 'API should respond with 413 or 503')
|
||||
|
||||
@decorators.attr(type='gate')
|
||||
def test_should_reject_too_big_message_multiline(self):
|
||||
|
@ -97,5 +100,8 @@ class TestLogApiConstraints(base.BaseLogsTestCase):
|
|||
except exceptions.OverLimit as urc:
|
||||
self.assertEqual(413, urc.resp.status)
|
||||
return
|
||||
except exceptions.UnexpectedContentType as uct:
|
||||
self.assertEqual(503, uct.resp.status)
|
||||
return
|
||||
|
||||
self.assertTrue(False, 'API should respond with 413')
|
||||
self.assertTrue(False, 'API should respond with 413 or 503')
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
prelude: >
|
||||
https://governance.openstack.org/tc/goals/pike/deploy-api-in-wsgi.html
|
||||
features:
|
||||
- |
|
||||
According to Pike release goals, all APIs should have the possibility
|
||||
to be deployed under WSGI. With this change, monasca-log-api is capable
|
||||
of running on either of following: gunicorn, uwsgi or mod_wsgi.
|
Loading…
Reference in New Issue