1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
#!/bin/bash
# lib/osprofiler
# Functions to control the configuration and operation of the **OSProfiler**
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
CONF_FILES=(
$CINDER_CONF
$HEAT_CONF
$KEYSTONE_CONF
$NOVA_CONF
$NEUTRON_CONF
$GLANCE_API_CONF
$GLANCE_REGISTRY_CONF
$TROVE_CONF
$TROVE_CONDUCTOR_CONF
$TROVE_GUESTAGENT_CONF
$TROVE_TASKMANAGER_CONF
$SENLIN_CONF
$MAGNUM_CONF
$MANILA_CONF
$ZUN_CONF
$PLACEMENT_CONF
)
# Add config files of Nova Cells
NOVA_NUM_CELLS=${NOVA_NUM_CELLS:-1}
for i in $(seq 1 ${NOVA_NUM_CELLS}); do
# call function `conductor_conf` defined in lib/nova to get file name
conf=$(conductor_conf $i)
CONF_FILES+=(${conf})
done
# Functions
# ---------
function install_redis() {
if is_fedora; then
install_package redis
elif is_ubuntu; then
install_package redis-server
elif is_suse; then
install_package redis
else
exit_distro_not_supported "redis installation"
fi
start_service redis
pip_install_gr redis
}
function install_jaeger_backend() {
if is_ubuntu; then
install_package docker.io
start_service docker
add_user_to_group $STACK_USER docker
sg docker -c "docker run -d --name jaeger -e COLLECTOR_OTLP_ENABLED=true -p 6831:6831/udp -p 16686:16686 -p 4318:4318 jaegertracing/all-in-one:1.42"
else
exit_distro_not_supported "docker.io installation"
fi
}
function install_jaeger() {
install_jaeger_backend
pip_install jaeger-client
}
function install_otlp() {
# For OTLP we use Jaeger backend but any OTLP compatible backend
# can be used.
install_jaeger_backend
pip_install opentelemetry-sdk opentelemetry-exporter-otlp
}
function drop_jaeger() {
sg docker -c 'docker rm jaeger --force'
}
function install_elasticsearch() {
if is_ubuntu; then
install_package docker.io
start_service docker
add_user_to_group $STACK_USER docker
# https://www.elastic.co/guide/en/elasticsearch/reference/5.6/docker.html#docker-cli-run-dev-mode
sg docker -c 'docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:5.6.14'
else
exit_distro_not_supported "docker.io installation"
fi
pip_install elasticsearch
}
function install_mongodb {
pip_install pymongo
if is_ubuntu; then
install_package mongodb-server
start_service mongodb
elif is_fedora; then
install_package mongodb
install_package mongodb-server
start_service mongod
else
exit_distro_not_supported "mongodb installation"
fi
}
function install_osprofiler_collector() {
if [ -z "$OSPROFILER_COLLECTOR" ]; then
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"messaging://"}
elif [ "$OSPROFILER_COLLECTOR" == "redis" ]; then
install_redis
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"redis://localhost:6379"}
elif [ "$OSPROFILER_COLLECTOR" == "jaeger" ]; then
install_jaeger
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"jaeger://localhost:6831"}
elif [ "$OSPROFILER_COLLECTOR" == "otlp" ]; then
install_otlp
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"otlp://localhost:4318"}
elif [ "$OSPROFILER_COLLECTOR" == "elasticsearch" ]; then
install_elasticsearch
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"elasticsearch://elastic:changeme@localhost:9200"}
elif [ "$OSPROFILER_COLLECTOR" == "mongodb" ]; then
install_mongodb
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-"mongodb://localhost:27017"}
elif [ "$OSPROFILER_COLLECTOR" == "sqlalchemy" ]; then
local db=`database_connection_url osprofiler`
OSPROFILER_CONNECTION_STRING=${OSPROFILER_CONNECTION_STRING:-${db}}
recreate_database osprofiler
else
die $LINENO "OSProfiler collector $OSPROFILER_COLLECTOR is not supported"
fi
echo ${OSPROFILER_CONNECTION_STRING} > $HOME/.osprofiler_connection_string
}
function configure_osprofiler() {
for conf in ${CONF_FILES[@]}; do
if [ -f $conf ]
then
iniset $conf profiler enabled True
iniset $conf profiler trace_sqlalchemy $OSPROFILER_TRACE_SQLALCHEMY
iniset $conf profiler hmac_keys $OSPROFILER_HMAC_KEYS
iniset $conf profiler connection_string $OSPROFILER_CONNECTION_STRING
fi
done
# Keystone is already running, should be reloaded to apply osprofiler config
reload_service devstack@keystone
}
function configure_osprofiler_in_tempest() {
iniset $TEMPEST_CONFIG profiler key $OSPROFILER_HMAC_KEYS
}
# Restore xtrace
$XTRACE
|