[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 …