Installer Graphite

le

Graphite

Graphite est un outil de graphique, comme son nom le laisse supposer. C'est un projet Python composé de trois parties.

Whisper, une base en roundrobin, qui permet d'envoyer des éléments antidatés, à la différence des RRDTools, facilitant ainsi la création de moulinette lisant des logs.

Carbon, un frontend serveur, qui s'occupe de gérer les accés concurrents, ou de faire relais/routeur. Trois protocoles sont proposés, un format texte avec un retour à la ligne, un autre avec la serialisation pcickle, spécifique à Python, et un AMQP, pour faire pro.

Graphite, le frontend web, une application Django, avec un moteur de graphique basé sur Cairo, rapide, mais un peu pénible comme dépendance. Il est possible de bypasser le frontend et d'utiliser le quasi DSL mis à disposition qui créer ses propres graphiques.

Techniquement, c'est une application python traditionnaliste, peu documenté, avec du Twisted et d'autres dépendances plus ou moins folklorique. La documentation caché propose enfin de faire des installations autrement que tout en dur, obligeant de dédier une VM rien que pour ça. Debian refuse de packager l'ensemble, et seul whisper est disponible. Ce n'est pas de la mauvaise volonté, mais l'application est pas conçu de manière orthodhoxe.

Installation

Le plus sage est de passer par un virtualenv et de conserver la préconisation de tout mettre le bazar dans /opt/graphite. Comme il faut freezer certains paquets, il est plus sage d'éviter les paquets systèmes.

Debian:

apt-get install python-virtualenv gcc python-dev

Tous:

mkdir -p /opt/graphite
virtualenv --no-site-packages /opt/graphite
source /opt/graphite/bin/activate
pip install whisper
pip install carbon
pip install graphite-web

Il faut ensuite créer des fichiers de conf. Le dossier /opt/graphite/conf/ est bien pourvu en exemple. Puis lancer le service carbon. Il faut lire les fichiers de conf largement commentés, pour éviter d'avoir ensuite des surprises, comme le temps de retention qui est super court, par défaut.

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

Debian :

adduser --disabled-password --quiet --system --home /opt/graphite graphite
chown -R graphite /opt/graphite

Il faut préciser l'utilisateur dans /opt/graphite/conf/carbon.conf ligne 36

USER = graphite

Il faut emballer le script de boot fourni pour gérer le virtualenv : /etc/init.d/carbon

#!/bin/sh
### BEGIN INIT INFO
# Provides:          carbon
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Carbon
# Description:       Carbon interface for Whisper storage.
### END INIT INFO

# Author: Mathieu Lecarme <mlecarme@bearstech.com> 

/opt/graphite/bin/carbon-cache.py $1

Puis l'installer

chmod +x /etc/init.d/carbon
update-rc.d carbon defaults

et le lancer

/etc/init.d/carbon start

OSX:

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

Normalement, à ce moment, on peut lui causer avec netcat.

echo "local.random.diceroll 4 `date +%s`" | nc localhost 2003

Maintenant, c'est le tour de l'application web, ce qui nécessite un peu plus de sport.

pip install django
pip install django-tagging
cd /opt/graphite/webapp/graphite
cp local_settings.py.example local_settings.py

Il faut éditer le fichier de conf pour paramétrer la base de donnée. Un bon sqlite devrait suffire pour commencer, ligne 141 à 150.

python manage.py syncdb

Les utilisateurs logués pourront faire plus d'actions sur le site, comme enregistrer des vues (un ensemble de graphiques).

Tout marche sauf l'affichage des graphiques. pycairo snobe pip, et de toutes façons, il a des dépendances, il est plus simple de passer par son gestionnaire de package.

Pour OSX:

brew install py2cairo
ln -s /usr/local/Cellar/py2cairo/1.10.0/lib/python2.7/site-packages/cairo /opt/graphite/lib/python2.7/site-packages

Pour Debian:

apt-get install python-cairo
ln -s /usr/lib/pymodules/python2.6/cairo /opt/graphite/lib/python2.6/site-packages

Il faut ensuite lancer le site web (sur le port 8000, par défaut).

Pour OSX:

python manage.py runserver

Pour Debian:

pip install gunicorn

Un petit script de boot :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          graphite
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Graphite
# Description:       Graphite web frontend.
### END INIT INFO

# Author: Mathieu Lecarme <mlecarme@bearstech.com>

PIDFILE=/opt/graphite/storage/graphite.pid
DAEMON=/opt/graphite/bin/gunicorn_django
HOST=0.0.0.0
PORT=8000
USER=graphite
HOME=/opt/graphite/webapp/graphite
WORKERS=4

case "$1" in
    start)
        cd $HOME && $DAEMON --pid $PIDFILE -b $HOST:$PORT --daemon --user $USER --workers $WORKERS
        ;;
    stop)
        kill -9 `cat $PID`
        ;;
    *)
        echo "Usage: graphite {start|stop}" >&2
        exit 3
        ;;
esac

Il faut ensuite l'installer

chmod +x /etc/init.d/graphite
update-rc.d graphite defaults
/etc/init.d/graphite start

Pour être complet, il faut un démon statsd, qui va de manière non intrusive gérer des flots de compteurs, en UDP.

Pour Debian:

apt-get install libevent-1.4-2 libevent-dev

Pour OSX:

brew install libevent

Il existe une version packagé dans Debian, mais sans script de boot, je viens de proposer un patch pour ça.

pip install -e git+https://github.com/bearstech/gstatsd.git#egg=gstatsd
pip install gevent

Debian :

Un script de boot est proposé, mais il faut changer le chemin du daemon : /opt/graphite/bin/gstatsd

wget https://raw.github.com/bearstech/gstatsd/master/init.d/gstatsd
mv gstatsd /etc/init.d
chmod +x /etc/init.d/gstatsd
update-rc.d gstatsd defaults
/etc/init.d/gstatsd start

Il est maintenant possible d'utiliser un des multiples clients statsd pour commencer à publier des statistiques.

Attention, ce produit est conçu pour être utilisé sur un LAN, Carbon ne gère des mots de passe qu'avec son interface AMQP, et Statsd n'en a pas. Graphite fait de trés beau graphique mais son interface est un peu rude, tôt ou tard, il faudra tater de son DSL et de ses règles de consolidation. Il faut jeter un oeil sur les frontaux alternatifs, qui ont souvent plus une approche plus tableau de bord.


Partager cet article :