Monitoring avec ELK – Elasticsearch/Logstash/Kibana

Bonsoir à tous!

On va tenter dans cette série d’articles de mettre en place un système de centralisation de logs autour de la stak ELK de chez ElasticSearch, c’est une suite de produits de zinzin avec de grosses possibilités et une facilité de mise en oeuvre qui semble assez déconcertante, elle est composé de trois produits :

1/ Elasticsearch : Pour le stockage et le requêtage des infos (noSQL et Lucene) plus d’infos ici.
2/ Logstash : Pour la reception, le transport et le parsing des logs, plus d’info ici (anglais).
3/ Kibana : Interface web de très haute qualité qui permet le requêtage d’Elasticsearch via les webservices le traitement et la mise en forme des informations, je vous laisse taper « kibana dashboard » dans google images pour vous faire une idée…

kibana

Mais bon…

Avant d’en arriver là, on va commencer par mettre en place la partie système, l’idée derrière tout ça pour l’instant, c’est de monitorer un firewall linux via syslog (ipfire), puis, dans un deuxième temps, de déverser des logs systèmes windows & linux et voir ce qu’on peut faire de tout ça.

Je précise également que je découvre aussi le sujet, si y’a des connaisseurs je suis preneur de tout conseil et commentaires sur le sujet.

Installation de la stack ELK :

On va commencer par récupérer les sources puis installer les paquets nécessaires a tout ce beau monde, (Java et Apache).

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.deb
wget https://download.elasticsearch.org/logstash/logstash/packages/debian/logstash_1.4.2-1-2c0f5a1_all.deb
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.zip
apt-get install openjdk-7-jre-headless apache2 unzip

On installe le .deb d’ElasticSearch

dpkg -i elasticsearch-1.4.2.deb

On va ensuite démarrer le service

service elasticsearch start

Je bosse avec des conteneurs OpenVZ, lors du démarrage du service j’ai le message d’erreur suivant qui s’affiche :

sysctl: permission denied on key 'vm.max_map_count'

Il s’agit d’un bug connu le service tourne bien en arrière plan on peut vérifier en faisant un « service elasticsearch status » pour ne plus avoir le message d’erreur il faut modifier le fichier /etc/default/elasticsearch et définir la ligne « MAX_MAP_COUNT= » sans valeur. Plus d’info ici.

Il faut maintenant définir les chemins d’Elasticsearch pour les data et les logs dans le fichier /etc/elasticsearch/elasticsearch.yml

#################################### Paths ####################################

# Path to directory containing configuration (this file and logging.yml):
#
#path.conf: /path/to/conf

# Path to directory where to store index data allocated for this node.
#
path.data: /path/to/data
#
# Can optionally include more than one location, causing data to be striped across
# the locations (a la RAID 0) on a file level, favouring locations with most free
# space on creation. For example:
#
#path.data: /path/to/data1,/path/to/data2

# Path to temporary files:
#
#path.work: /path/to/work

# Path to log files:
#
path.logs: /path/to/logs

# Path to where plugins are installed:
#
#path.plugins: /path/to/plugins

On va également ajouter ces paramètres au fichier, afin d’autoriser la connexion au webservices depuis n’importe ou (environnement de test, on sécurisera tout ça plus tard).

http.cors.enabled: true
http.cors.allow-origin: "/.*/"

On passe maintenant à l’installation de logstash même combat qu’Elasticsearch

dpkg -i logstash_1.4.2-1-2c0f5a1_all.deb

Par défaut logstash ne bosse qu’en mono core, pour utiliser pleinement les ressources de la machine il faut éditer le fichier /etc/default/logstash et définir la variable LS_OPTS pour passer les arguments « -w n° core », ne pas oublier de redémarrer le service.

# Arguments to pass to logstash agent
LS_OPTS="-w 4"

On va maintenant installer Kibana (l’interface web)

On va décompresser l’archive dans le répertoire du serveur web (vérifier les paramètre d’apache, par défaut il pointe dans le répertoire /var/www/html) :

unzip kibana-3.1.2.zip
mv kibana-3.1.2 /var/www/kibana

On peut maintenant accéder Kibana via l’interface web :

kibana

 Le socle est prêt, on verra dans un prochain article comment faire mumuse avec logstash pour récupérer des logs via syslog et parser ces derniers afin de pouvoir les mettre en forme dans Kibana.

EDIT 18.01.2015 :

Après observations, j’ai constaté que mon proc était utilisé à 100% après investigations j’ai pu constater que c’est logstash qui bouffe tout, en fait il y a un service logstash web qui se lance en même temps que logstash et ce dernier essaie d’écouter sur le port 80, qui lui est déjà utilisé par notre serveur web, le service plante et redémarre.. et ça en boucle.

Pour désactiver le lancement du service j’ai édité le fichier suivant : /etc/init/logstash-web.conf

# logstash-web - web instance
#

description     "logstash-web agent"

#start on virtual-filesystems
start on never
stop on runlevel [06]

# Respawn it if the process exits
respawn

# We're setting high here, we'll re-limit below.
limit nofile 65550 65550

setuid logstash

Voilà! C’est mieux comme ça…

5 commentaires

  1. ayant suivi ce tuto les options
    path.
    et
    http.cors.
    à ajouter ou modifier ne servent à rien. Les paramètres par défaut d’elasticsearch suffisent. L’accès à Kibana se faire comme l’a dit Yanims via l’adresse http://@IP:5601/

  2. Bonjour,

    En ayant suivi votre tutoriel, et ayant ajouter les lignes :

    http.cors.enabled: true
    http.cors.allow-origin: « /.*/ »

    dans le fichier /etc/elasticsearch/elasticsearch.yml

    J’ai ce message d’erreur sur l’interface web de kibana :

    Connection Failed
    Possibility #1: Your elasticsearch server is down or unreachable
    This can be caused by a network outage, or a failure of the Elasticsearch process. If you have recently run a query that required a terms facet to be executed it is possible the process has run out of memory and stopped. Be sure to check your Elasticsearch logs for any sign of memory pressure.
    Possibility #2: You are running Elasticsearch 1.4 or higher
    Elasticsearch 1.4 ships with a security setting that prevents Kibana from connecting. You will need to set the following in your elasticsearch.yml:

    http.cors.enabled: true
    http.cors.allow-origin to the correct protocol, hostname, and port (if not 80) that your access Kibana from. Note that if you are running Kibana in a sub-url, you should exclude the sub-url path and only include the protocol, hostname and port. For example, http://mycompany.com:8080, not http://mycompany.com:8080/kibana.

    Click back, or the home button, when you have resolved the connection issue

    Pouvez-vous m’éclaircir svp ?

    Je vous en remercie.

    Cordialement.

  3. bonsoir
    Merci pour le tuto mais je voudrais savoir comment accéder a l’interface de kibana via le web car pas expliqué dans le tuto.

    Merci d’avance.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.