Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

27 Feb 2012

[Graylog2] Installer Graylog2 sur Debian

Graylog2 est un ensemble de deux produit permettant de centraliser des journaux système. Plutôt que d’aller sur tout vos serveurs voir si aucune erreur ne s’est produite graylog2 permet d’utiliser un jolie interface web pour appliquer des filtres sur vos logs par exemple.

Nous allons voir ici comment installer graylog2-server et comment centraliser vos logs sur ce serveur. Nous verrons ensuite comment installer le client Web.

Installation de graylog2-server

MongoDB

Une des dépendance de graylog2-server est mongodb. Mongodb est une base de données nosql assez performante qui permet à graylog de garder les traces de vos logs. Nous allons donc installer MongoDB

# aptitude install mongodb mongodb-server

L’installation de base de MongoDB est configurée pour fonctionner et nous n’avons pas besoin de modifier cette configuration.

Deux ports sont ouverts pour MongoDB le 27017 et le 28017

# netstat -patue | grep mongodb
 tcp        0      0 localhost:28017         *:*                     LISTEN      mongodb    16843       4384/mongod
 tcp        0      0 localhost:27017         *:*                     LISTEN      mongodb    16841       4384/mongod

Le port 27017 est le port d'écoute de MongoDB où sont envoyer les données. Le port 28017 est quant à lui le port d’administration. Vous pouvez y accéder via le protocole HTTP. La page rendu peut être comparé à celle du mod_status de apache pour le service MongoDB.

Nous allons ensuite créer un utilisateur dans MongoDB pour permettre à Graylog2 de se connecter. MongoDB propose pour cela une invite de commande.

$ mongo
 MongoDB shell version: 1.4.4
 url: test
 connecting to: test
 type "help" for help
 > use graylog2
 switched to db graylog2
 > db.addUser('graylog', 'mystrongpassword')
 {
"user" : "graylog",
"readOnly" : false,
"pwd" : "3a645a39bef99c8bba9c805e06536240"
 }
 > db.auth('graylog', 'mystrongpassword')
 1

Nous démarrons dans un premier temps le shell mongodb et nous connectons à la base graylog2. Nous créons un utilisateur graylog avec comme  mot de passe mystrongpassword. Nous testons ensuite la connexion.

Il n’est pas nécessaire de créer de base de données (collection) ou de table, MongoDB les créera à la demande.

Il vous faudra aussi démarrer le service

# /etc/init.d/mongodb start

OpenJDK

Graylog2 est un produit développé en JAVA. Il nous faut donc une machine virtuelle JAVA. Graylog2 conseil l’utilisation de OpenJDK nous allons donc installer le JRE d’OpenJDK.

# aptitude install openjdk-6-jre

L’installation ne demande pas plus de configuration.

ElasticSearch

Pour des raisons de performance Graylog2 utilise un système d’indexation de données via le produit elasticsearch. ElasticSearch est un produit JAVA lui aussi. Nous allons ici installer la version0.18.7 qui est la dernière version en date à l’heure d’aujourd’hui. Vous pouvez vérifier qu’elle est la version stable actuelle ici .

# cd /opt

# wget https://github.com/elasticsearch/elasticsearch/archive/v0.18.7.tar.gz

# tar xvf elasticsearch-0.18.7.tar.gz

# ln -s elasticsearch-0.18.7 elasticsearch

Nous créons ensuite un script LSB de démarrage dans init.d et le rendons exécutable. Le script original est disponible ici .

# vim /etc/init.d/elasticsearch

...

#! /bin/sh
 ### BEGIN INIT INFO
 # Provides:          elasticsearch
 # Required-Start:    $all
 # Required-Stop:     $all
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Starts elasticsearch
 # Description:       Starts elasticsearch using start-stop-daemon
 ### END INIT INFO

ES_HOME=/opt/elasticsearch
 export ES_MIN_MEM=256m
 export ES_MAX_MEM=2g
 DAEMON=$ES_HOME/bin/elasticsearch
 NAME=elasticsearch
 DESC=elasticsearch
 PID_FILE=/var/run/$NAME.pid
 LOG_DIR=/var/log/$NAME
 DATA_DIR=/var/lib/$NAME
 WORK_DIR=/tmp/$NAME
 CONFIG_FILE=/etc/$NAME/elasticsearch.yml
 DAEMON_OPTS="-p $PID_FILE -Des.config=$CONFIG_FILE -Des.path.home=$ES_HOME -Des.path.logs=$LOG_DIR -Des.path.data=$DATA_DIR -Des.path.work=$WORK_DIR"

test -x $DAEMON || exit 0

set -e

case "$1" in
 start)
 echo -n "Starting $DESC: "
 mkdir -p $LOG_DIR $DATA_DIR $WORK_DIR
 if start-stop-daemon --start --pidfile $PID_FILE --startas $DAEMON -- $DAEMON_OPTS
 then
 echo "started."
 else
 echo "failed."
 fi
 ;;
 stop)
 echo -n "Stopping $DESC: "
 if start-stop-daemon --stop --pidfile $PID_FILE
 then
 echo "stopped."
 else
 echo "failed."
 fi
 ;;
 restart|force-reload)
 ${0} stop
 sleep 0.5
 ${0} start
 ;;
 *)
 N=/etc/init.d/$NAME
 echo "Usage: $N {start|stop|restart|force-reload}" >&2
 exit 1
 ;;
 esac

exit 0

...

# chmod +x /etc/init.d/elasticsearch

Il est à noter que les variables ES_MIN_MEM et ES_MAX_MEM sont des variables d’environnements interprété par Graylog2-server pour la configuration de la JVM. Elles correspondent respectivement à la mémoire minimale et mmaximale allouée à la JVM. Vous pouvez donc les modifier suivant vos besoins.

Nous démarrons aussi elasticsearch au démarrage du système.

# update-rc.d elasticsearch defaults

La configuration est disponible dans le fichier /etc/elasticsearch/elasticsearch.yml. Créons ce fichier

# mkdir -p /etc/elasticsearch

# vim /etc/elasticsearch/elasticsearch.yml

...

cluster:
 name:  graylog2

network:
 host:   _eth0_
 ...

Nous déclarons un simple cluster nommé graylog2 et spécifions à elasticsearch d’utiliser l’interface eth0 pour l'écoute. Vous pouvez alternativement spécifier une adresse ip ou enlever cette directive pour écouter sur toutes les interfaces. ElasticSearch écoute par défaut sur le port 9200.

Démarrons maintenant elasticsearch.

# /etc/init.d/elasticsearch start

Graylog2

Nous allons maintenant installer graylog2-server. Graylog2 propose une archive compilée de projet, celle-ci est disponible sur github. Nous allons donc télécharger cette archive dans le dossier /opt/graylog2. La dernière version du projet est la 0.9.6, vous pouvez vérifier si une nouvelle version stable n’est pas disponible ici .

# cd /opt

# wget https://github.com/downloads/Graylog2/graylog2-server/graylog2-server-0.9.6.tar.gz

# tar xvf graylog2-server-0.9.6.tar.gz

# ln -s graylog2-server-0.9.6 graylog2-server

L’archive contient aussi un fichier de configuration de base que vous pouvez copier dans /etc/graylog2.conf

# cp graylog2-server/graylog2.conf.example /etc/graylog2.conf

Nous modifions ensuite ce fichier pour respecter notre configuration de MongoDB et ElasticSearch.

# vim /etc/graylog2.conf

...

# ElasticSearch URL (default: http://localhost:9200/)
 elasticsearch_url = http://localhost:9200/
 elasticsearch_index_name = graylog2

...

# MongoDB Configuration
 mongodb_useauth = true
 mongodb_user = graylog
 mongodb_password = mystrongpassword
 mongodb_host = localhost
 #mongodb_replica_set = localhost:27017,localhost:27018,localhost:27019
 mongodb_database = graylog2
 mongodb_port = 27017

...

Ici nous n’avons modifier que le nom d’utilisateur et le mot de passe mais adapter donc les différentes options à vos besoins.

Nous pouvons maintenant tester notre installation en mode debug pour vérifier qu’aucune erreur n’est arrivée.

# cd /opt/graylog2-server
 # java -jar graylog2-server.jar --debug

Si aucune erreur ne survient vous pouvez arreter le service via un [CTRL]+[C].

Comme pour elasticsearch, nous allons créer un script LSB de démarrage. Le script utilisé est disponible ici .

# vim /etc/init.d/graylog2-server

...

#! /bin/sh
 ### BEGIN INIT INFO
 # Provides:          Graylog2
 # Required-Start:    $all
 # Required-Stop:     $all
 # Default-Start:     2 3 4 5
 # Default-Stop:      0 1 6
 # Short-Description: Starts Graylog2
 # Description:       Starts Graylog2 using start-stop-daemon
 ### END INIT INFO

GL_HOME=/opt/graylog2-server
 GL_JAR=$GL_HOME/graylog2-server.jar
 NAME=graylog2
 DESC=graylog2
 PID_FILE=/var/run/graylog2.pid
 CONFIG_FILE=/etc/graylog2.conf

test -f $GL_JAR || exit 0

set -e

case "$1" in
 start)
 echo -n "Starting $DESC... "
 /usr/bin/java -jar "$GL_JAR" -f "$CONFIG_FILE" &
 echo "started (`cat "$PID_FILE"`)."
 ;;
 stop)
 PID=`cat "$PID_FILE"`
 echo -n "Stopping $DESC ($PID)..."
 kill $PID
 echo stopped.
 ;;
 restart|force-reload)
 ${0} stop
 sleep 0.5
 ${0} start
 ;;
 *)
 N=/etc/init.d/$NAME
 echo "Usage: $N {start|stop|restart|force-reload}" >&2
 exit 1
 ;;
 esac

exit 0
 ...

# chmod +x /etc/init.d/graylog2-server

# update-rc.d graylog2-server defaults

Nous pouvons maintenant démarrer graylog2-server

# /etc/init.d/graylog2-server start

Installation d’un client RSyslog

Nous allons maintenant configurer RSyslog sur un des serveurs dont nous souhaitons centraliser les logs.

Tout d’abord installons RSyslog, si ce n’est déjà fait !

# aptitude install rsyslog

Nous souhaitons centraliser tout les logs de notre serveur nous allons donc tous les rediriger vers notre serveur graylog2. Pour cela éditer le fichier /etc/rsyslog.conf et ajouter la ligne suivante

# vim /etc/rsyslog.conf

...

*.* @<ip-server-graylog2>:514

...

Redémarrer rsyslog

# /etc/init.d/rsyslog restart

Et c’est tout ! Tout les logs du serveurs serons maintenant envoyés chez graylog2 !

Attention néanmoins. Les applications n’utilisant pas le protocole syslog pour journaliser leurs informations ne sont pas pris en compte par RSyslog.

Graylog2-web-interface

C’est bien beau me direz vous, mais on en fait quoi de nos logs ? Et bien on les lit !! Pour cela graylog2 propose un service web développé en ruby. Nous allons voir son installation.

Tout d’abord installons les outils de base de ruby, à savoir l’interpréteur ruby lui-même mais aussi l’installeur gem et le “constructeur” rake.

# aptitude install ruby rubygems rake

Puis installons le gestionnaire de dépendance bundler via gem

# gem install bundler --no-ri --no-rdoc

Sous Debian les binaires sont disponibles dans le dossier /var/lib/gems/**version**/bin. Nous allons ajouter ce chemin dans notre variable PATH

# vim /etc/profile.d/gems_bin.sh

...

#!/bin/bash

export PATH=$PATH:/var/lib/gems/1.8/bin

...

# chmod +x /etc/profile.d/gems_bin.sh

# source /etc/profile.d/gems_bin.sh

Nous pouvons maintenant télécharger et installer les (nombreuses) dépendances de graylog2-web-interface. La version ici installée est la 0.9.6, vérifier si une nouvelle version n’est pas disponible.

# cd /opt

# wget https://github.com/downloads/Graylog2/graylog2-web-interface/graylog2-web-interface-0.9.6.tar.gz

# ln -s graylog2-web-interface-0.9.6 graylog2-web-interface

# cd /opt/graylog-web-interface

#  bundle install

Les fichiers de configuration du serveurs sont disponibles dans le dossier config/*.yml. Editons indexer.yml et mongoid.yml pour les adapter à nos besoins.

# vim config/mongoid.yml

...

production:
 host: localhost
 port: 27017
 username: graylog
 password: mystrongpassword
 database: graylog2

...

Nous pouvons maintenant tester notre serveur en l’exécutant dans le shell courant.

# <code>script/rails server -e production

… Will continue …