Analyser les logs en temps réel avec ELK

Tout bon admin système le sait, les logs d’un serveur sont critiques. ELK est une suite logicielle qui permet d’analyser ses logs en temps réel, mais aussi de faire des recherches poussées, et générer des dahsboards.

elastic-logo

ELK c’est quoi ?

C’est une suite logicielle formée de 3 composants :

  • Elasticsearch
  • Logstash
  • Kibana

Elasticsearch

icon-elasticsearch-bbElasticsearch est une base de données full text. Son but est d’encaisser de très gros volumes de données en texte, et de pouvoir faire des recherches rapides sur ces données.

En plus de ça, c’est un outil capable de fonctionner en cluster de façon très simple, et d’assurer ainsi une haute disponibilité.

Logstash

icon-logstash-bbLogstash prend en entrée des logs de plusieurs sources (fichiers existant, réseau, syslog, …), va les analyser, les découper, avant de les renvoyer à Elasticsearch. Par exemple, si on prend un ligne de log apache :

On va déterminer que l’adresse ip du client est 1.2.3.4, que l’utilisateur identifié est myuser, qu’il a fait une requête de type GET, que la requête est /apache_pb.gif, que le retour de la requête est 200 et que l’on a transféré 2326 octets.

Une fois qu’il a fait tout ce découpage, il envoie les données à Elasticsearch. Il nous sera donc possible par la suite de faire des recherches sur tous les champs indexés.

Kibana

icon-kibana-bbKibana est un front-end web pour Elasticsearch. Il va permettre d’afficher les données sous plusieurs formats : brut, graphiques, dashboards. Il va permettre aussi de fournir une interface de recherche avancée.

 

Installation

Avant d’aller plus loin, vous devez installer une couche java sur la machine. Je conseille la version 8 de openjdk (la version 9 sur Ubuntu 16.04 a provoqué un plantage de logstash).

Pour la suite ELK, plusieurs méthodes d’installation : depuis les sources, utiliser un paquet (.deb ou .rpm), docker, ou bien installer un dépôt. Pour des raisons de facilité et de mises à jour, choisissons cette dernière. La documentation pour Debian se trouve ici : www.elastic.co/guide/en/kibana/5.0/deb.html

Une fois le dépôt installé, la syntaxe est très simple :

Un minimum de sécurité

Par défaut, Elasticsearch écoute sur le port 9200 sur toutes les interfaces. Si vous n’utilisez pas le mode cluster, il est préférable d’éditer le fichier /etc/elasticsearch/elasticsearch.yml pour mettre

puis de redémarrer elasticsearch

Si vous utilisez le mode cluster, vous devez laisser cette valeur par défaut, mais il faut gérer avec votre firewall le fait que seules les machines habilitées puissent communiquer sur le port 9200. Cela évitera de vous faire pourrir avec les logs de n’importe qui…

Parser son premier log

On va commencer simple, par les logs apache. Supposons que vous utilisez les logs de type « combined », et que le fichier log est /var/log/apache2/acces.log

Il faut créer un fichier /etc/logstash/conf.d/apache.cfg

Voyons ce que ça dit :

  • en input, j’ai un type file. Cela veut dire que je vais lire un fichier
    • Le path de ce fichier est « /var/log/apache2/access.log »
    • Le type est « apache » (c’est une valeur totalement arbitraire, je peux mettre ici ce que je veux)
    • start_position => end, cela veut dire que je ne vais analyser que les nouvelles lignes de ce fichier, et je ne vais pas relancer l’analyse depuis le débu

Maintenant qu’on a une entrée, il faut voir comment on va la travailler :

Nous allons filtrer les lignes dont le type est égal à « apache ». Cela correspond à ce que l’on a mis dans le type du input.

La méthode de parsing par défaut de logstash est grok, et on lui demande de faire matcher le « message » (c’est à dire le contenu de la ligne) au pattern COMBINEDAPACHELOG. C’est un cas très simple, le pattern est déjà écrit…

Maintenant qu’on a tout parsé, il faut l’envoyer à elasticsearch :

On renvoie les données à u moteur « elasticsearch », sur le localhost, sur le port 9200.

Une fois que ce fichier est créé dans sa totalité, il faut relancer logstash :

 Voir les résultats dans Kibana

Pour voir Kibana en action, lancez un navigateur et pointez sur votre serveur, sur le port 5601. Si rien ne se passe, regardez au niveau de votre firewall si rien ne bloque…

Un peu de configuration

Par défaut, aucun index n’est créé. Si Kibana ne vous le propose pas, cliquez sur « Management » puis « index pattern ». En bas, cliquez sur « create ».

Cliquez sur « discover », et si tout va bien, au bout de quelques minutes, vous devrez voir des données apparaître.

 

One thought on “Analyser les logs en temps réel avec ELK

Laisser un commentaire