Adding WSGI support
Following commits adds possiblity to run monasca-log-api
with Apache2 (mod_wsgi) in devstack environment.
Change-Id: I4aca9bebacb4799a0e45b785ba1997003c6b7165
(cherry picked from commit 4ae270263d
)
This commit is contained in:
parent
57e44c3052
commit
9bc6c9c768
|
@ -74,6 +74,19 @@ Or you can use "\*" as a wild card, like below.
|
|||
|
||||
Select @timestamp as time-field name.
|
||||
|
||||
4. Extra settings
|
||||
|
||||
## Using WSGI
|
||||
|
||||
monasca-log-api can be deployed with Apache using mod_uwsgi.
|
||||
By default monasca-log-api by default runs under gunicorn.
|
||||
If you wish to use Apache make sure that ```devstack/local.conf```
|
||||
contains:
|
||||
|
||||
```sh
|
||||
MONASCA_LOG_API_USE_MOD_WSGI=True
|
||||
```
|
||||
|
||||
# Using Vagrant
|
||||
|
||||
Vagrant can be used to deploy a VM with Devstack and Monasca Logging
|
||||
|
|
|
@ -98,6 +98,9 @@ MONASCA_PERSISTER_IMPLEMENTATION_LANG=${MONASCA_PERSISTER_IMPLEMENTATION_LANG:-p
|
|||
# MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-cassandra}
|
||||
MONASCA_METRICS_DB=${MONASCA_METRICS_DB:-influxdb}
|
||||
|
||||
# Uncomment following line to deploy monasca-log-api with Apache
|
||||
# MONASCA_LOG_API_USE_MOD_WSGI=True
|
||||
|
||||
# Uncomment one of the following lines and modify accordingly to enable the Monasca DevStack Plugin
|
||||
enable_plugin monasca-api https://git.openstack.org/openstack/monasca-api
|
||||
enable_plugin monasca-log-api https://git.openstack.org/openstack/monasca-log-api.git
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
Listen %PUBLICPORT%
|
||||
|
||||
<VirtualHost *:%PUBLICPORT%>
|
||||
WSGIDaemonProcess monasca-log-api processes=%APIWORKERS% threads=1 user=%USER% display-name=%{GROUP} %VIRTUALENV%
|
||||
WSGIProcessGroup monasca-log-api
|
||||
WSGIScriptAlias / %PUBLICWSGI%
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
WSGIPassAuthorization On
|
||||
<IfVersion >= 2.4>
|
||||
ErrorLogFormat "%M"
|
||||
</IfVersion>
|
||||
ErrorLog /var/log/%APACHE_NAME%/monasca-log-api.log
|
||||
%SSLENGINE%
|
||||
%SSLCERTFILE%
|
||||
%SSLKEYFILE%
|
||||
</VirtualHost>
|
||||
|
||||
Alias /logs %PUBLICWSGI%
|
||||
<Location /logs>
|
||||
SetHandler wsgi-script
|
||||
Options +ExecCGI
|
||||
WSGIProcessGroup monasca-log-api
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
WSGIPassAuthorization On
|
||||
</Location>
|
|
@ -34,6 +34,9 @@ MONASCA_LOG_API_BASE_URI=${MONASCA_LOG_API_SERVICE_PROTOCOL}://${MONASCA_LOG_API
|
|||
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
|
||||
|
@ -95,7 +98,7 @@ function init_monasca_log {
|
|||
|
||||
function stop_monasca_log {
|
||||
stop_process "monasca-log-agent" || true
|
||||
stop_process "monasca-log-api" || true
|
||||
stop_monasca_log_api
|
||||
stop_process "monasca-log-metrics" || true
|
||||
stop_process "monasca-log-persister" || true
|
||||
stop_process "monasca-log-transformer" || true
|
||||
|
@ -131,7 +134,9 @@ 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
|
||||
|
||||
pip_install gunicorn
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "False" ]; then
|
||||
pip_install gunicorn
|
||||
fi
|
||||
pip_install_gr python-memcached
|
||||
|
||||
if use_library_from_git "monasca-common"; then
|
||||
|
@ -142,6 +147,13 @@ function install_monasca-log-api {
|
|||
git_clone_by_name "monasca-statsd"
|
||||
setup_dev_lib "monasca-statsd"
|
||||
fi
|
||||
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
install_apache_wsgi
|
||||
if is_ssl_enabled_service "monasca-log-api"; then
|
||||
enable_mod_ssl
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function configure_monasca_log_api {
|
||||
|
@ -188,9 +200,53 @@ function configure_monasca_log_api {
|
|||
iniset "$MONASCA_LOG_API_PASTE_INI" server:main host $MONASCA_LOG_API_SERVICE_HOST
|
||||
iniset "$MONASCA_LOG_API_PASTE_INI" server:main port $MONASCA_LOG_API_SERVICE_PORT
|
||||
iniset "$MONASCA_LOG_API_PASTE_INI" server:main chdir $MONASCA_LOG_API_DIR
|
||||
iniset "$MONASCA_LOG_API_PASTE_INI" server:main workers $API_WORKERS
|
||||
|
||||
# WSGI
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
configure_monasca_log_api_wsgi
|
||||
fi
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
function configure_monasca_log_api_wsgi {
|
||||
sudo install -d $MONASCA_LOG_API_WSGI_DIR
|
||||
|
||||
local monasca_log_api_apache_conf
|
||||
monasca_log_api_apache_conf=$(apache_site_config_for monasca-log-api)
|
||||
|
||||
local monasca_log_api_ssl=""
|
||||
local monasca_log_api_certfile=""
|
||||
local monasca_log_api_keyfile=""
|
||||
local monasca_log_api_api_port=$MONASCA_LOG_API_SERVICE_PORT
|
||||
local venv_path=""
|
||||
|
||||
if is_ssl_enabled_service monasca_log_api; then
|
||||
monasca_log_api_ssl="SSLEngine On"
|
||||
monasca_log_api_certfile="SSLCertificateFile $MONASCA_LOG_API_SSL_CERT"
|
||||
monasca_log_api_keyfile="SSLCertificateKeyFile $MONASCA_LOG_API_SSL_KEY"
|
||||
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_DIR/monasca_log_api/wsgi/monasca_log_api.py $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|%SSLENGINE%|$monasca_log_api_ssl|g;
|
||||
s|%SSLCERTFILE%|$monasca_log_api_certfile|g;
|
||||
s|%SSLKEYFILE%|$monasca_log_api_keyfile|g;
|
||||
s|%USER%|$STACK_USER|g;
|
||||
s|%VIRTUALENV%|$venv_path|g
|
||||
s|%APIWORKERS%|$API_WORKERS|g
|
||||
" -i $monasca_log_api_apache_conf
|
||||
}
|
||||
|
||||
function create_log_api_cache_dir {
|
||||
sudo install -m 700 -d -o $STACK_USER $MONASCA_LOG_API_CACHE_DIR
|
||||
}
|
||||
|
@ -206,15 +262,61 @@ function clean_monasca_log_api {
|
|||
sudo rm -rf $MONASCA_LOG_API_CONF_DIR || true
|
||||
|
||||
sudo rm -rf $MONASCA_LOG_API_DIR || true
|
||||
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
clean_monasca_log_api_wsgi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function clean_monasca_log_api_wsgi {
|
||||
sudo rm -f $MONASCA_LOG_API_WSGI_DIR/*
|
||||
sudo rm -f $(apache_site_config_for monasca-log-api)
|
||||
}
|
||||
|
||||
function start_monasca_log_api {
|
||||
if is_service_enabled monasca-log-api; then
|
||||
echo_summary "Starting monasca-log-api"
|
||||
local gunicorn="$MONASCA_LOG_API_BIN_DIR/gunicorn"
|
||||
|
||||
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
|
||||
|
||||
restart_service memcached
|
||||
run_process "monasca-log-api" "$gunicorn -n monasca-log-api -k eventlet --paste $MONASCA_LOG_API_PASTE_INI"
|
||||
|
||||
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
|
||||
else
|
||||
local gunicorn="$MONASCA_LOG_API_BIN_DIR/gunicorn"
|
||||
run_process "monasca-log-api" "$gunicorn -n monasca-log-api -k eventlet --paste $MONASCA_LOG_API_PASTE_INI"
|
||||
fi
|
||||
|
||||
echo "Waiting for monasca-log-api to start..."
|
||||
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$SERVICE_HOST:$service_port; 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
|
||||
fi
|
||||
}
|
||||
|
||||
function stop_monasca_log_api {
|
||||
if is_service_enabled monasca-log-api; then
|
||||
if [ "$MONASCA_LOG_API_USE_MOD_WSGI" == "True" ]; then
|
||||
disable_apache_site monasca-log-api
|
||||
restart_apache_server
|
||||
else
|
||||
stop_process "monasca-log-api" || true
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
|
@ -67,10 +67,15 @@ MONASCA_LOG_API_PASTE_INI=${MONASCA_LOG_API_PASTE_INI:-$MONASCA_LOG_API_CONF_DIR
|
|||
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_PROTOCOL="http" # right now we do not have SSL support here
|
||||
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}
|
||||
|
@ -85,3 +90,4 @@ KAFKA_SERVICE_HOST=${KAFKA_SERVICE_HOST:-${SERVICE_HOST}}
|
|||
KAFKA_SERVICE_PORT=${KAFKA_SERVICE_PORT:-9092}
|
||||
|
||||
DOWNLOAD_FILE_TIMEOUT=${DOWNLOAD_FILE_TIMEOUT:-300}
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# 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.
|
||||
|
||||
# extremely simple way to setup of monasca-log-api
|
||||
# with wsgi
|
||||
|
||||
from monasca_log_api import server
|
||||
|
||||
application = server.get_wsgi_app(config_base_path='/etc/monasca')
|
Loading…
Reference in New Issue