elasticsearch event support in ceilometer

add support to store events in elasticsearch in ceilometer.

Change-Id: I9c9801d2b83af8332df21f221c2ac8579898d56b
This commit is contained in:
gordon chung 2015-02-11 18:28:37 -05:00
parent db56ee8ef2
commit 76e724b9f7
2 changed files with 31 additions and 9 deletions

View File

@ -13,21 +13,16 @@
# #
# enable_service ceilometer-alarm-notifier ceilometer-alarm-evaluator # enable_service ceilometer-alarm-notifier ceilometer-alarm-evaluator
# #
# To ensure events are stored, add the following section to local.conf:
#
# [[post-config|$CEILOMETER_CONF]]
# [notification]
# store_events=True
#
# Several variables set in the localrc section adjust common behaviors # Several variables set in the localrc section adjust common behaviors
# of Ceilometer (see within for additional settings): # of Ceilometer (see within for additional settings):
# #
# CEILOMETER_USE_MOD_WSGI: When True, run the api under mod_wsgi. # CEILOMETER_USE_MOD_WSGI: When True, run the api under mod_wsgi.
# CEILOMETER_PIPELINE_INTERVAL: The number of seconds between pipeline processing # CEILOMETER_PIPELINE_INTERVAL: The number of seconds between pipeline processing
# runs. Default 600. # runs. Default 600.
# CEILOMETER_BACKEND: The database backend (e.g. 'mysql', 'mongodb') # CEILOMETER_BACKEND: The database backend (e.g. 'mysql', 'mongodb', 'es')
# CEILOMETER_COORDINATION_URL: The URL for a group membership service provided # CEILOMETER_COORDINATION_URL: The URL for a group membership service provided
# by tooz. # by tooz.
# CEILOMETER_EVENTS: Enable event collection
# Dependencies: # Dependencies:
@ -80,6 +75,7 @@ CEILOMETER_USE_MOD_WSGI=$(trueorfalse False CEILOMETER_USE_MOD_WSGI)
# To enable OSprofiler change value of this variable to "notifications,profiler" # To enable OSprofiler change value of this variable to "notifications,profiler"
CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications} CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications}
CEILOMETER_EVENTS=${CEILOMETER_EVENTS:-True}
CEILOMETER_COORDINATION_URL=${CEILOMETER_COORDINATION_URL:-} CEILOMETER_COORDINATION_URL=${CEILOMETER_COORDINATION_URL:-}
CEILOMETER_PIPELINE_INTERVAL=${CEILOMETER_PIPELINE_INTERVAL:-} CEILOMETER_PIPELINE_INTERVAL=${CEILOMETER_PIPELINE_INTERVAL:-}
@ -137,8 +133,10 @@ function _cleanup_ceilometer_apache_wsgi {
# cleanup_ceilometer() - Remove residual data files, anything left over from previous # cleanup_ceilometer() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up # runs that a clean run would need to clean up
function cleanup_ceilometer { function cleanup_ceilometer {
if [ "$CEILOMETER_BACKEND" != 'mysql' ] && [ "$CEILOMETER_BACKEND" != 'postgresql' ] ; then if [ "$CEILOMETER_BACKEND" = 'mongodb' ] ; then
mongo ceilometer --eval "db.dropDatabase();" mongo ceilometer --eval "db.dropDatabase();"
elif [ "$CEILOMETER_BACKEND" = 'es' ] ; then
curl -XDELETE "localhost:9200/events_*"
fi fi
if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
_cleanup_ceilometer_apache_wsgi _cleanup_ceilometer_apache_wsgi
@ -206,11 +204,21 @@ function configure_ceilometer {
configure_auth_token_middleware $CEILOMETER_CONF ceilometer $CEILOMETER_AUTH_CACHE_DIR configure_auth_token_middleware $CEILOMETER_CONF ceilometer $CEILOMETER_AUTH_CACHE_DIR
iniset $CEILOMETER_CONF notification store_events $CEILOMETER_EVENTS
if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
iniset $CEILOMETER_CONF database alarm_connection $(database_connection_url ceilometer) iniset $CEILOMETER_CONF database alarm_connection $(database_connection_url ceilometer)
iniset $CEILOMETER_CONF database event_connection $(database_connection_url ceilometer) iniset $CEILOMETER_CONF database event_connection $(database_connection_url ceilometer)
iniset $CEILOMETER_CONF database metering_connection $(database_connection_url ceilometer) iniset $CEILOMETER_CONF database metering_connection $(database_connection_url ceilometer)
iniset $CEILOMETER_CONF DEFAULT collector_workers $API_WORKERS iniset $CEILOMETER_CONF DEFAULT collector_workers $API_WORKERS
elif [ "$CEILOMETER_BACKEND" = 'es' ] ; then
# es is only supported for events. we will use sql for alarming/metering.
iniset $CEILOMETER_CONF database alarm_connection $(database_connection_url ceilometer)
iniset $CEILOMETER_CONF database event_connection es://localhost:9200
iniset $CEILOMETER_CONF database metering_connection $(database_connection_url ceilometer)
iniset $CEILOMETER_CONF DEFAULT collector_workers $API_WORKERS
${TOP_DIR}/pkg/elasticsearch.sh start
cleanup_ceilometer
else else
iniset $CEILOMETER_CONF database alarm_connection mongodb://localhost:27017/ceilometer iniset $CEILOMETER_CONF database alarm_connection mongodb://localhost:27017/ceilometer
iniset $CEILOMETER_CONF database event_connection mongodb://localhost:27017/ceilometer iniset $CEILOMETER_CONF database event_connection mongodb://localhost:27017/ceilometer
@ -264,7 +272,7 @@ function init_ceilometer {
rm -f $CEILOMETER_AUTH_CACHE_DIR/* rm -f $CEILOMETER_AUTH_CACHE_DIR/*
if is_service_enabled mysql postgresql; then if is_service_enabled mysql postgresql; then
if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] || [ "$CEILOMETER_BACKEND" = 'es' ] ; then
recreate_database ceilometer recreate_database ceilometer
$CEILOMETER_BIN_DIR/ceilometer-dbsync $CEILOMETER_BIN_DIR/ceilometer-dbsync
fi fi
@ -293,6 +301,11 @@ function install_ceilometer {
elif echo $CEILOMETER_COORDINATION_URL | grep -q '^redis:'; then elif echo $CEILOMETER_COORDINATION_URL | grep -q '^redis:'; then
install_redis install_redis
fi fi
if [ "$CEILOMETER_BACKEND" = 'es' ] ; then
${TOP_DIR}/pkg/elasticsearch.sh download
${TOP_DIR}/pkg/elasticsearch.sh install
fi
} }
# install_ceilometerclient() - Collect source and prepare # install_ceilometerclient() - Collect source and prepare

View File

@ -47,11 +47,20 @@ function configure_elasticsearch {
: :
} }
function _check_elasticsearch_ready {
# poll elasticsearch to see if it's started
if ! wait_for_service 30 http://localhost:9200; then
die $LINENO "Maximum timeout reached. Could not connect to ElasticSearch"
fi
}
function start_elasticsearch { function start_elasticsearch {
if is_ubuntu; then if is_ubuntu; then
sudo /etc/init.d/elasticsearch start sudo /etc/init.d/elasticsearch start
_check_elasticsearch_ready
elif is_fedora; then elif is_fedora; then
sudo /bin/systemctl start elasticsearch.service sudo /bin/systemctl start elasticsearch.service
_check_elasticsearch_ready
else else
echo "Unsupported architecture...can not start elasticsearch." echo "Unsupported architecture...can not start elasticsearch."
fi fi