Merge "Enable UWSGI support in monasca-log-api"

This commit is contained in:
Zuul 2018-01-25 11:04:15 +00:00 committed by Gerrit Code Review
commit 18321cd6ee
9 changed files with 320 additions and 167 deletions

View File

@ -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

107
devstack/lib/config.sh Normal file
View File

@ -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}

56
devstack/lib/util.sh Normal file
View File

@ -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}

View File

@ -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
}
@ -792,22 +790,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

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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')

View File

@ -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.