Instal·lant graphite 0.9.10 a debian squeeze

El sistema de gràfiques que més m’agrada es el graphite. És molt útil per molts motius (és agil, es senzill, es escalable, consumeix molt pocs recursos, etc, etc). Avui parlaré de com s’instal·la el graphite 0.9.10 en Debian squeeze.

Primer de tot instal·lem els requisits:

apt-get install python apache2 python-twisted python-memcache libapache2-mod-python python-django libpixman-1-0 python-cairo python-django-tagging

I ens assegurem que no tenim instal·lat el whisper del repositori de debian, que és antic i pot tenir incompatibilitats amb la ultima versió de graphite:

apt-get remove python-whisper

Després instal·lem l’aplicació. Jo he fet uns .deb que poden fer-se servir directament:

wget http://www.tomas.cat/blog/sites/default/files/python-carbon_0.9.10_all.deb
wget http://www.tomas.cat/blog/sites/default/files/python-graphite-web_0.9.10_all.deb
wget http://www.tomas.cat/blog/sites/default/files/python-whisper_0.9.10_all.deb
dpkg -i python-carbon_0.9.10_all.deb python-graphite-web_0.9.10_all.deb python-whisper_0.9.10_all.deb

Però si no t’agrada fer servir els meus, es fàcil fer-los tu mateix amb el fpm (Effing package managers), una aplicació ruby que permet fer paquets per diferents gestors de paquets. Primer instal·lem ruby i fpm:

apt-get install ruby rubygems
gem install fpm

Després baixem el graphite i el descomprimim:

wget http://pypi.python.org/packages/source/c/carbon/carbon-0.9.10.tar.gz#md5=1d85d91fe220ec69c0db3037359b691a
wget http://pypi.python.org/packages/source/w/whisper/whisper-0.9.10.tar.gz#md5=218aadafcc0a606f269b1b91b42bde3f
wget http://pypi.python.org/packages/source/g/graphite-web/graphite-web-0.9.10.tar.gz#md5=b6d743a254d208874ceeff0a53e825c1
tar zxf graphite-web-0.9.10.tar.gz
tar zxf carbon-0.9.10.tar.gz
tar zxf whisper-0.9.10.tar.gz

I finalment creem els paquets i els instal·lem:

/var/lib/gems/1.8/gems/fpm-0.4.22/bin/fpm --python-install-bin /opt/graphite/bin -s python -t deb carbon-0.9.10/setup.py
/var/lib/gems/1.8/gems/fpm-0.4.22/bin/fpm --python-install-bin /opt/graphite/bin -s python -t deb whisper-0.9.10/setup.py
/var/lib/gems/1.8/gems/fpm-0.4.22/bin/fpm --python-install-lib /opt/graphite/webapp -s python -t deb graphite-web-0.9.10/setup.py
dpkg -i python-carbon_0.9.10_all.deb python-graphite-web_0.9.10_all.deb python-whisper_0.9.10_all.deb

Ja tenim l’aplicació instal·lada. El whisper no necessita cap configuració. El carbon si, però amb els fitxers que venen per defecte ja fem:

cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

Aquest storache-schemas.conf fa que es guardin les dades cada minut només durant un dia. Com que segurament voldrem dades de mes temps (un mes, un any…), el que poso jo al storache-schemas.conf és el següent:

[default_1min_for_1month_15min_for_2years]
pattern = .*
retentions = 60s:30d,15m:2y

D’aquesta manera es guarden les dades cada minut durant 30 dies, i cada 15 minuts durant 2 anys. Això fa que les dades per cada gràfica ocupin en disc 1’4MB, un tamany raonable. Pots jugar amb aquests números si necessites més temps o vols ocupar menys espai en disc, és força intuitiu.

Despres s’ha d’inicialitzar la base de dades perquè es puguin començar a guardar les dades:

cd /opt/graphite/webapp/graphite
sudo python manage.py syncdb

I ara podriem engegar el carbon per començar a recollir dades executant el següent:

cd /opt/graphite/
./bin/carbon-cache.py start

Però també voldrem que s’engegi quan s’engega la màquina, per tant ho haurem d’afegir al init.d. Com que no ve cap script d’engegada amb l’aplicació, jo vaig baixar un init.d de graphite per RedHat i vaig fer quatre modificacions perque funcionés a debian:

#!/bin/bash
#
# Carbon (part of Graphite)
#
# chkconfig: 3 50 50
# description: Carbon init.d

. /lib/lsb/init-functions
prog=carbon
RETVAL=0

start() {
log_progress_msg "Starting $prog: "

PYTHONPATH=/usr/local/lib/python2.6/dist-packages/ /opt/graphite/bin/carbon-cache.py start
status=$?
log_end_msg $status
}

stop() {
log_progress_msg "Stopping $prog: "

PYTHONPATH=/usr/local/lib/python2.6/dist-packages/ /opt/graphite/bin/carbon-cache.py stop > /dev/null 2>&1
status=$?
log_end_msg $status
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
PYTHONPATH=/usr/local/lib/python2.6/dist-packages/ /opt/graphite/bin/carbon-cache.py status
RETVAL=$?
;;
restart)
stop
start
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
exit 1
esac

exit $RETVAL

Per instal·lar-ho només ho hem de baixar i posar-ho on toca:

wget http://www.tomas.cat/blog/sites/default/files/carbon.initd -O /etc/init.d/carbon
chmod 0755 /etc/init.d/carbon
chkconfig --add carbon

Ara ja podem engegar-ho des del initd (service carbon start o també /etc/init.d/carbon start). Finalment, configurem la webapp que permet accedir a les dades. Hem de crear un virtualhost al apache amb el següent contingut:


ServerName YOUR_SERVERNAME_HERE
DocumentRoot "/opt/graphite/webapp"
ErrorLog /opt/graphite/storage/log/webapp/error.log
CustomLog /opt/graphite/storage/log/webapp/access.log common


SetHandler python-program
PythonPath "['/opt/graphite/webapp'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE graphite.settings
PythonDebug Off
PythonAutoReload Off

Alias /content/ /opt/graphite/webapp/content/

SetHandler None


Configurem el virtualhost i li donem accés a les dades del whisper:

wget http://www.tomas.cat/blog/sites/default/files/graphite-vhost.txt -O /etc/apache2/sites-available/graphite
a2ensite graphite
chown -R www-data:www-data /opt/graphite/storage/
/etc/init.d/apache reload

I ja ho tenim! Un últim detall… El graphite ve configurat amb el fus horari de Los Angeles. Per canviar-ho, s’ha d’assignar la variable “TIME_ZONE” al fitxer /opt/graphite/webapp/graphite/local_settings.py. Tens un fitxer amb un munt de variables que es poden tocar a /opt/graphite/webapp/graphite/local_settings.py.example, però com que l’únic que jo necessito canviar és el fus horari, executo la comanda:

echo "TIME_ZONE = 'Europe/Madrid'" > /opt/graphite/webapp/graphite/local_settings.py

I amb aixo ja ho tenim tot. Ara només ens caldrà enviar dades al carbon (port 2003) perquè s’emmagatzemin al whisper i la webapp del graphite les pugui mostrar. A gaudir!

Bibliografia: He seguit la documentació oficial http://graphite.wikidot.com/installation i http://graphite.wikidot.com/quickstart-guide, pero el mes específic relatiu a Debian ho he tret de http://slacklabs.be/2012/04/05/Installing-graphite-on-debian/

Tomàs

Tomàs

Ja posaré alguna cosa