9 octobre 2015

Installation du logiciel de gestion de log Graylog

Présentation du logiciel Graylog

Graylog est un logiciel de stockage, de recherche et d’analyse de log.
Ce logiciel est open source et simple à installer et à utiliser.

Graylog utilise la base de donnée Elasticsearch, qui est également open source, pour stocker les logs. Elasticsearch peut facilement être configuré en cluster pour améliorer l’efficacité.

Il est possible d’installer le logiciel graylog de différentes façons: sous la forme d’un paquet pour des distributions linux, d’une image virtuelle ou encore de script à destination de plusieurs plateformes.

Dans l’article qui suit, nous allons installer Graylog à partir des archives tar.gz disponibles sur le site.
Graylog se décompose dans ce cas en deux parties: le serveur qui reçoit les logs et la partie web qui permet l’affichage des informations.

Pré-requis pour l’installation de Graylog

Dans notre cas, on installera tous les éléments sur un seul serveur.

Pré-requis:

  • java pour graylog et elasticsearch (version 7 minimum)
  • mongodb (au moins en version 2.0)
  • elasticsearch (version 1.7 ou supérieure)

La distribution linux utilisée ici pour l’installation est debian.

Installation de java

root@debian:~# apt-get install openjdk-7-jre

Installation de la base de donnée MongoDB

Pour debian, on installe le paquet à partir des dépôts. Le numéro de version est vérifié avant l’installation (commande apt-cache show). Si la version de mongodb présent dans les dépots est inférieure à 2.0, il sera préférable d’installer le logiciel à partir du site MongoDB.

root@debian:~# apt-cache show mongodb
 Package: mongodb
 Version: 1:2.4.10-5
 root@debian:~# apt-get install mongodb
root@debian:~# systemctl enable mongodb
Synchronizing state for mongodb.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d mongodb defaults
Executing /usr/sbin/update-rc.d mongodb enable
root@debian:~#
root@debian:~# systemctl start mongodb

Installation de la base de donnée elasticsearch

La version de la base de donnée elasticsearch présente dans les dépôts de la distribution debian utilisée est ancienne: on télécharge donc le paquet directement à partir du site elasticsearch.

root@debian:~# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.deb
root@debian:~# dpkg -i elasticsearch-1.7.2.deb
root@debian:~# apt-get -f install 
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances 
Lecture des informations d'état... Fait
0 mis à jour, 0 nouvellement installés, 0 à enlever et 1 non mis à jour.
root@debian:~# 

Configuration de la base elasticsearch

Le fichier de configuration est /etc/elasticsearch/elasticsearch.yml.

Dans ce fichier, un paramètre important est le nom de cluster elasticsearch puisqu’il faudra définir le même nom dans la configuration de graylog.

root@debian:~# vi /etc/elasticsearch/elasticsearch.yml
cluster.name: graylog-production

Le mode de découverte des autres noeuds (serveurs) elasticsearch est le multicast. Si nous avons plusieurs serveurs elasticsearch, on va commenter l’option multicast et indiquer les IP et les ports des autres noeuds dans les options de découverte unicast.

Dans notre cas, nous avons un seul serveur, on désactive donc la recherche multicast.

discovery.zen.ping.multicast.enabled: false
#
# 2. Configure an initial list of master nodes in the cluster
# to perform discovery when new nodes (master or data) are started:
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

On peut également modifier la valeur des ports d’écoute par défaut.

#transport.tcp.port: 9300
#http.port: 9200

Il est préférable de restreindre l’accès à ces ports uniquement aux machines autorisées avec une règle de pare-feu.

On peut alors enregistrer les modifications et fermer le fichier elasticsearch.yml.
Terminons la configuration avec deux autres paramètres.

On augmente le nombre de fichier ouvert pour elasticsearch:

root@debian:~# vi /etc/security/limits.conf
elasticsearch soft nofile 64000
elasticsearch hard nofile 64000

Enfin, il est recommandé dans la documentation de graylog d’augmenter la valeur du paramètre ES_HEAP_SIZE du fichier /etc/sysconfig/elasticsearch. on pourra fixer cette valeur à la moitié de la mémoire disponible sur le serveur.

root@debian:~# vi /etc/default/elasticsearch
# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
ES_HEAP_SIZE=2g

La configuration pour la base de donnée elasticsearch est terminée.

Démarrons le service:

root@debian:~# systemctl enable elasticsearch
Synchronizing state for elasticsearch.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d elasticsearch defaults
Executing /usr/sbin/update-rc.d elasticsearch enable
root@debian:~#
root@debian:~# systemctl start elasticsearch
root@debian:~# systemctl status elasticsearch
elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled)
Active: active (running) since jeu. 2015-09-24 21:52:02 CEST; 9s ago
Docs: http://www.elastic.co
Main PID: 9562 (java)
CGroup: /system.slice/elasticsearch.service
└─9562 /usr/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:...
root@debian:~#

Installation de graylog-server

Dans cet article, nous installons graylog à partir d’une archive. On télécharge l’archive à partir du site graylog, puis on décompresse.

root@debian:/opt# wget https://packages.graylog2.org/releases/graylog2-server/graylog-1.2.1.tgz
root@debian:/opt# tar -xzvf graylog-1.2.1.tgz

Ensuite le fichier de configuration de graylog est copié dans /etc/graylog/server.

root@debian:/opt# cd graylog-1.2.1/
root@debian:/opt# mkdir -p /etc/graylog/server
root@debian:/opt/graylog-1.2.1# cp -p graylog.conf.example /etc/graylog/server/server.conf

On prépare le hash du mot de passe pour la connexion à l’interface web (utilitaire shasum) et on prépare également une séquence de caractère aléatoire (utilitaire pwgen).

root@debian:/opt# echo -n password | shasum -a 256
5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 -
root@debian:/opt#
root@debian:/opt# apt-get install pwgen
root@debian:/opt# pwgen -N 1 -s 96
6N7IkKVlrqOvnjn8N9mvTRiWAemqkblnl6PcROG44o4si3zpGLXqynxiB7Z264gzUxVbJJ87WwYmHiQT2NlIZhQqjZGcRfys
root@debian:/opt#

Nous ouvrons le fichier de configuration pour y coller les chaines de caractère au bon endroit (option password secret et root_password_sha2).

Nous indiquons aussi dans le fichier de conf quelques valeurs pour la gestion de la base elasticsearch. Notons le nom du cluster qui doit être le même que celui indiqué dans la configuration d’elasticsearch.

Il est aussi possible d’ajouter un utilisateur et un mot de passe pour la connexion à la base Mongodb.

 root@debian:/opt/graylog-1.2.1# vi /etc/graylog/server/server.conf
 # Generate one by using for example: pwgen -N 1 -s 96
 password_secret = 6N7IkKVlrqOvnjn8N9mvTRiWAemqk
 root_password_sha2 = 5e884898da28047151d0e56f8
 elasticsearch_max_docs_per_index = 20000000
 elasticsearch_max_number_of_indices = 20
 elasticsearch_shards = 1
 elasticsearch_replicas = 0 
 elasticsearch_cluster_name = graylog-production
 elasticsearch_discovery_zen_ping_unicast_hosts = 127.0.0.1:9300
 allow_highlighting = true


Et voilà, la configuration de graylog-server est terminée. Démarrons le serveur.

root@debian:/opt# graylog-1.2.1/bin/graylogctl start
Starting graylog-server ...
root@debian:/opt# ps ax | grep graylog
10014 pts/0    Sl     0:28 /usr/bin/java -Djava.library.path=graylog-1.2.1/

OK, le serveur a démarré.

Installons maintenant la partie web du logiciel.

Installation de graylog-web

On télécharge l’archive, puis on la décompresse.

root@debian:/opt# wget https://packages.graylog2.org/releases/graylog2-web-interface/graylog-web-interface-1.2.1.tgz
root@debian:/opt# tar xzvf graylog-web-interface-1.2.1.tgz

Et c’est parti pour la configuration du fichier graylog-web-interface.conf.
Nous avons à nouveau besoin d’une chaine de caractère aléatoire créée avec l’utilitaire pwgen.

root@debian:/opt# pwgen -N 1 -s 96
IjPbYC4wmQ3iXDn3zvsuGP1heKnK7bDj1yAQ

On ouvre le fichier de configuration et on indique l’adresse des serveurs graylog (dans notre cas, graylog-server et graylog-web sont sur le même serveur), puis on colle la chaine de caractère que nous venons de créer (directive application.secret).

root@debian:/opt# vi /opt/graylog-web-interface-1.2.1/conf/graylog-web-interface.conf
graylog2-server.uris="http://127.0.0.1:12900"
application.secret="IjPbYC4wmQ3iXDn3zvsuGP1heKnK"

La configuration est terminée, il est temps de lancer le serveur web:

root@debian:~# /opt/graylog-web-interface-1.2.1/bin/graylog-web-interface
 Play server process ID is 1076
 [info] play - Application started (Prod)
 [info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

Le port d’écoute par défaut de graylog est le 9000. Il est possible de modifier le port et l’interface d’écoute avec la commande suivante:

root@debian:~#graylog-web-interface -Dhttp.port=1234 -Dhttp.address=127.0.0.1

Pour activer l’interface sécurisée, on entre la commande :

root@debian:~#graylog-web-interface -Dhttp.port=443

Je vous renvoie vers la documentation pour configurer votre propre certificat.

Nous avons donc maintenant la page de connexion qui s’affiche.

Le mot de passe du compte de l’utilisateur admin pour la connexion à graylog est celui qui a été entré dans la configuration de graylog-serveur vu un peu plus haut.

graylog-connexion

Pour que graylog soit fonctionnel, il faut configurer un service d’écoute pour recevoir les logs.

Ce sera justement l’objet de l’article suivant.

Les commentaires sont fermés.