Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 145 lines (124 sloc) 5.59 KB
#!/bin/bash -ex
# Graphite installation script for Ubuntu 14.04
# Jason Dixon <jason@dixongroup.net>
SYNTHESIZE_HOME=$( cd "$( dirname "$0" )" && pwd )
UBUNTU_RELEASE=`lsb_release -a 2>/dev/null | grep '^Descrip' | cut -s -f 2`
GRAPHITE_HOME='/opt/graphite'
GRAPHITE_CONF="${GRAPHITE_HOME}/conf"
GRAPHITE_STORAGE="${GRAPHITE_HOME}/storage"
# Check to see if python-openssl is installed first
set +e
PYTHON_OPENSSL_INSTALLED=`dpkg -s python-openssl 2>/dev/null | grep '^Status'`
set -e
# This can break Carbon's python-twisted, exit with explanation
if [[ ! $PYTHON_OPENSSL_INSTALLED == '' ]]; then
set +x
clear
echo
echo
echo
echo "##########################################################"
echo
echo "It appears that you have python-openssl installed."
echo "There are known issues with this package that can cause"
echo "the Carbon service to fail to start. If you don't need"
echo "the python-openssl library, it's recommended that you"
echo "uninstall this package before continuing."
echo
echo " $ sudo apt-get remove python-openssl"
echo
echo "More information is provided at the link below."
echo
echo "https://github.com/graphite-project/graphite-web/issues/1721#issuecomment-253279181"
echo
echo "##########################################################"
echo
echo
echo
exit 1
fi
if [ -z $GRAPHITE_RELEASE ]; then
GRAPHITE_RELEASE='1.0.2'
fi
if [[ ! $UBUNTU_RELEASE =~ 'Ubuntu 14.04' ]]; then
echo "Sorry, this is only supported for Ubuntu Linux 14.04."
exit 1
fi
if [[ -d $GRAPHITE_HOME ]]; then
echo "Looks like you already have a Graphite installation in ${GRAPHITE_HOME}, aborting."
exit 1
fi
# Update apt since the vagrant image might be old
apt-get update -y
# Install package dependencies from apt
RUNLEVEL=1 apt-get install -y libcairo2-dev libffi-dev pkg-config python-dev python-pip fontconfig apache2 libapache2-mod-wsgi git-core collectd memcached gcc g++ make libtool automake
# Download source repositories for Graphite/Carbon/Whisper and Statsite
cd /usr/local/src
git clone https://github.com/graphite-project/graphite-web.git
git clone https://github.com/graphite-project/carbon.git
git clone https://github.com/graphite-project/whisper.git
git clone https://github.com/armon/statsite.git
# Build and install Graphite/Carbon/Whisper and Statsite
cd whisper; git checkout ${GRAPHITE_RELEASE}; python setup.py install
cd ../carbon; git checkout ${GRAPHITE_RELEASE}; pip install -r requirements.txt; python setup.py install
cd ../graphite-web; git checkout ${GRAPHITE_RELEASE}; pip install -r requirements.txt; python check-dependencies.py; python setup.py install
cd ../statsite; ./autogen.sh; ./configure; make; cp statsite /usr/local/sbin/; cp sinks/graphite.py /usr/local/sbin/statsite-sink-graphite.py
# Update txamqp to support RabbitMQ 2.4+
pip install txamqp==0.6.2 --upgrade
# Install configuration files for Graphite/Carbon and Apache
cp ${SYNTHESIZE_HOME}/templates/statsite/statsite.conf /etc/statsite.conf
mkdir ${GRAPHITE_CONF}/examples
mv ${GRAPHITE_CONF}/*.example ${GRAPHITE_CONF}/examples/
cp ${SYNTHESIZE_HOME}/templates/graphite/conf/* ${GRAPHITE_CONF}/
cp ${SYNTHESIZE_HOME}/templates/collectd/collectd.conf /etc/collectd/
cp ${SYNTHESIZE_HOME}/templates/apache/graphite.conf /etc/apache2/sites-available/
cp ${SYNTHESIZE_HOME}/templates/init/* /etc/init/
cp ${SYNTHESIZE_HOME}/templates/init.d/* /etc/init.d/
# Setup the correct Apache site and modules
a2dissite 000-default
a2ensite graphite
a2enmod ssl
a2enmod socache_shmcb
a2enmod rewrite
# Install configuration files for Django
cd ${GRAPHITE_HOME}/webapp/graphite
cp ${SYNTHESIZE_HOME}/templates/graphite/webapp/* .
sed -i -e "s/UNSAFE_DEFAULT/`date | md5sum | cut -d ' ' -f 1`/" local_settings.py
# Setup the Django database
PYTHONPATH=${GRAPHITE_HOME}/webapp django-admin.py migrate --noinput --settings=graphite.settings --run-syncdb
PYTHONPATH=${GRAPHITE_HOME}/webapp django-admin.py loaddata --settings=graphite.settings initial_data.json
# Add carbon system user and set permissions
groupadd -g 998 carbon
useradd -c "carbon user" -g 998 -u 998 -s /bin/false carbon
chmod 775 ${GRAPHITE_STORAGE}
chown www-data:carbon ${GRAPHITE_STORAGE}
chown www-data:www-data ${GRAPHITE_STORAGE}/graphite.db
chown -R carbon ${GRAPHITE_STORAGE}/whisper
mkdir ${GRAPHITE_STORAGE}/log/apache2
chown -R www-data ${GRAPHITE_STORAGE}/log/webapp
chmod +x /etc/init.d/carbon-cache
# Setup hourly cron to rebuild Graphite index
cp ${SYNTHESIZE_HOME}/templates/graphite/cron/build-index /etc/cron.hourly/graphite-build-index
chmod 755 /etc/cron.hourly/graphite-build-index
sudo -u www-data /opt/graphite/bin/build-index.sh
# Install Grafana
echo 'deb https://packagecloud.io/grafana/stable/debian/ wheezy main' > /etc/apt/sources.list.d/grafana.list
curl https://packagecloud.io/gpg.key | apt-key add -
apt-get update -y
DEBIAN_FRONTEND=noninteractive apt-get install -y grafana
service grafana-server start
sleep 5
curl -X POST -H 'Content-Type: application/json' -u 'admin:admin' \
-d '{ "name": "graphite", "type": "graphite", "url": "https://127.0.0.1:443", "access": "proxy", "basicAuth": false }' \
"http://127.0.0.1:3000/api/datasources"
curl -X POST -H 'Content-Type: application/json' -u 'admin:admin' \
-d '{ "inputs": [{"name": "*", "pluginId": "graphite", "type": "datasource", "value": "graphite"}], "overwrite": true, "path": "dashboards/carbon_metrics.json", "pluginId": "graphite" }' \
"http://127.0.0.1:3000/api/dashboards/import"
# Start our processes
update-rc.d carbon-cache defaults
service carbon-cache start
service memcached start
service collectd start
service apache2 start
service statsite start
service apache2 restart