SCOP d'ingénieurs experts du logiciel libre depuis 2004
+33 1 70 61 60 16

Installer Graphite

Installer Graphite, un outil python pour faire des graphiques

Notre prochain webinar

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.


Mathieu Lecarme

Inscrivez-vous à notre newsletter

Mieux comprendre le monde du DevOps et de l'administration système.

Abonnez-vous à notre newsletter

Hébergement & Infogérance

  • ✓ Service Astreinte 24h/7j/365
  • ✓ Supervision, monitoring & Alertes
  • ✓ Mises à jour en continu
  • ✓ Certificat SSL letsencrypt
  • ✓ Hébergement dédié sécurisé en France
  • ✓ Backup vers datacenter distant
Découvrir notre offre

Expertise Technologique

Notre équipe possède une vaste expertise technologique.