VT2015 Kibana Logstash

Présentation
Enseignants : D. Donsez, GP. Bonneau

Sujet : Visualisation de Journaux : Démonstration de Logstash et Kibana

Auteur : Vivien Michel

Date : 09/10/15

Abstract
Server applications generate operation logs. They can count on, per dayor even hourly thousands of reporting lines. In order to use them to monitor the system or make improvements, in order their existence provides information that man can handle, it is necessary to sort and edit visualization techniques. Indeed, a search information, to get the evolution of a given function of timecan not be done efficiently by reading raw logs, especially cause the large amount of it. So tools such as Logstash and Kibana have been developed. Thereof through the Elastic Search Database, provide a graphic display system of the information contained in the logs. With these tools, any user is able to analyze these logs and so debug / improve server application.

Résumé
Les applications serveurs génèrent des journaux de fonctionnement. Ceux-ci peuvent compter, par jour, voir par heure des milliers de lignes de compte rendu. Afin de les utiliser pour surveiller le système ou apporter des améliorations, afin que leur existence apporte des informations que l'homme peut traiter, il est nécessaire de les trier et de modifier les techniques de visualisation. En effet, chercher une information, avoir l'évolution d'une donnée en fonction du temps, ne peut être fait efficacement par la lecture des logs bruts, notamment par la grande quantité de celle-ci. Ainsi, des outils tels que Logstash et Kibana ont été développés. Ceux-ci, à travers la base de données Elastic Search, offrent un système de visualisation graphique des informations contenues dans les logs. Grâce à ces outils, tout utilisateur est en mesure d'analyser ces journaux et ainsi déboguer/améliorer l'application serveur.

Journaux Bruts
Exemple de "Raw Log". Journaux Apache sur une journée : Il est facile de voir sur l'image ci-dessus, que le trie et l'interprétation des données demandent un effort particulier au lecteur. Même avec un certain degré d'expertise, la durée des deux étapes préalablement citées n'est pas négligeables. Dès lors, il faut automatiser le traitement si l'on multiplie les logs et les applications serveurs. De plus, croiser des données entre différents serveurs devient impossible si l'on doit chercher dans de multiples types de journaux possédant une syntaxe différente.

Logstash : Formatage et Filtrage


Logstash permet de lire, récupérer et traiter des données en entrée afin de les stocker sous une forme formatée pour une utilisation ultérieure. Il peut être utilisé seul à des fins de débogage, en cherchant, par exemple, les exceptions au sein d'un fichier. Dès lors, l'information est récupérée et peut être traitée par le développeur.

Définition des Input
Les points d’entrée (input) utilisés pour aller chercher l’information sont définis via un fichier de configuration. Plusieurs types de point d’entrée peuvent être choisis, et notamment les fichiers : dans ce cas, on indique à Logstash l’emplacement où aller lire les fichiers de log. A travers un langage propre aux fichiers conf de Logstash, il est aussi possible de définir un port d'écoute sur lequel le système va aller lire les informations. Ainsi il est possible de récupérer en temps réel les journaux générés par des serveurs. Logstash lit ensuite ces fichiers, ces entrées ligne par ligne.

Création de filtres
Il est possible d’appliquer certains “filtres” sur ces lignes : il ne s’agit pas seulement de sélectionner certains informations et d’en écarter d’autres, mais également de faire des opérations plus complexes, comme du mapping. Par exemple dans le cas d’un log avec UID, il est possible de résoudre l’ID en “Nom, Prénom” en faisant un appel externe. Il est également possible d’extraire des informations spécifiques et les stocker dans des champs spécifiques, ou encore d’exécuter du code Ruby. L'utilisation du parseur GROK permet d’extraire des informations à l’aide de RegEx (expressions régulières) pour matcher certains patterns, comme un numéro de version.

Les parseurs fournit avec le programme reconnaissent 120 modèles de logs différents.

Cependant, il est difficile de mettre en place des filtres multi-lignes (par exemple une stack Trace java). En effet, la lecture ligne par ligne demande de faire des modifications au niveau des filtres, de préciser le type de lecture ou encore de changer de parseur (Utilisation de Milestone au lieu de Grok). Ensuite, de façon technique et implémentale, le logiciel utilise un buffer de récupération. Hors il est possible que lors de la lecture d'un log, le buffer soit plein, envoyé à la sortie alors que le log multiligne n'est pas complet. Dès lors, le système peut bloquer car ne pas reconnaître le type de log suivant qui n'est qu'une partie de log.

Définition des Output
Une fois que les points d’entrée et les filtres sont définis, on indique à Logstash où envoyer les résultats : plusieurs points de sortie, ou adapteurs, peuvent être définis. Le plus utilisé est Elasticsearch, mais il pourrait s’agir d’une BDD, ou d’un fichier ou encore d'un programme existant parsant une certaine forme de sortie (exemple : Json). L'output peut inclure, tout comme l'input ou les filtres, des options internes spécifiques à chaque sortie. Ainsi, le "codec", le format dans lequel sera donné la sortie peut être défini pour chaque adaptateur.

Elastic Search : Base de Données


Ce programme est un outil de stockage où les données sont indexées pour être retrouvée facilement. Il utilise une base de données NoSQL. Le système est construit selon une architecture REST et permet d'obtenir des informations sur celui-ci suivant une API. Elle est particulièrement adaptée aux cloud et aux systèmes Big Data. En effet, cette base fonctionne selon un principe de cluster. Elle a la capacité de répartir les données indexés sur différents nœuds de façon totalement transparentes pour l'utilisateur. Chaque nœud possède une instance d'Elastic Search qui communique avec les autres et contient des fragments de données indexées. Ainsi, cela permet d'utiliser la puissance des différentes machines du cluster (stockage, mémoire vive ou processeur), et donc de répartir la charge (load balancing). Le système a la propriété d'être scalable. On peut donc ajouter des instances de façon dynamiques. La robustesse est assurée par un système de réplica. Chaque machine (noeuds) possède une image et l'état dans lequel se trouve le système mise à jour à chaque modification. Ainsi, si un nœud du cluster tombe et qu'il contient une partie de l'index, Elastic Search ira chercher dans le réplica. Lorsqu'un noeud est en charge, Elasticsearch fait automatiquement suivre les requêtes vers le nœud contenant le réplica correspondant. Elasticsearch intervient après Logstash, et stocke les données envoyées de la meilleure manière possible pour qu’elles soient exploitables.

Kibana : Tableau de Bord


Ce logiciel est le dernier de la chaine. Il sert de tableau de bord à Elastic Search qui stocke les données. C'est une interface web qui se connecte au cluster Elastic Search.

Choix des index à traiter
Dans un premier temps il est nécessaire de donner à Kibana les index à récupérer et à traiter. Ceci permet, de faire plusieurs requêtes dans la base.

De plus, une barre de recherche, supportant des expressions régulières ou des opérations mathématiques (par exemple comparaison d'entier) permet de trier les données récupérées.

Création de Visualisation
Cette partie de l'application propose de multiples types de graphiques : Area Chart, Pie chart, Table, Histogram, Geopositioning... Elle offre à l'utilisateur la capacité de paramétrer les graphiques. Cependant, le logiciel n'est qu'un outil de création en fonction des données. S'il propose effectivement quelques analyses par défauts, la pertinence du graphique est laissée au soin de l'utilisateur.

La visualisation des modifications apportées sans changer de page permet de mieux appréhender si le type de graphique donne une réelle information. En effet, comme dit précédemment, l'utilisateur est maître de ces créations, l'outil ne fournit pas de correction même s'il peut, pour certaines données, proposés une méthode de représentation.

Insertion des Graphiques dans le tableau de bord
Après la création des différents graphiques, l'onglet DashBoard permet de réunir ceux-ci, changer leur taille et choisir leur emplacement sur la page. C'est à la charge de l'utilisateur de correctement placer les graphiques, afin d'obtenir une visualisation pertinente des données. Tout comme pour la création de graphiques, il n'y a pas d'outil de correction, ni de conseil pour le placement des "visualisations" dans le tableau de bord.

L'interface ne demande pas de coder. En effet l'outil est un WYSIWYG (what you see is what you get). Dès lors, un développeur comme un manager peut manipuler Kibana. Le déplacement se fait simplement par glisser déposer, tandis que le redimensionnement se fait de même que sur les systèmes de fenêtre.

Conclusion
La chaine de ces trois logiciels offre un outil de visualisation puissant et flexible. De part son aspect open source, un développeur peut modifier chacun des trois programmes selon ses besoins. La communauté autour de ce projet est conséquente, il est donc facile de trouver des tutoriels ou des plugins associés à chacun d'eux. De plus, Logstash et la base de donnée Elastic Search sont indépendants même s'ils sont optimisés pour travailler ensemble. Les systèmes originaux connaissent aussi un développement actif. En effet, les mises à jour du dépôt git sont journalières. Les logiciels Logstash et Elastic Search peuvent être temps réel, propriété que n'a pas (encore) le tableau de bord Kibana.

Ainsi lorsque de grandes quantités de données sont à traiter, un système tel que Logstash/Elastic Search/Kibana devient essentiel pour le développement et l'amélioration du service.

Bibliographie

 * http://matthiasnehlsen.com/images/kibana.png
 * http://siren.solutions/siren-1-3-now-open-source-and-it-does-elasticsearch-too/
 * http://blog.d2-si.fr/2015/05/20/analyse-des-logs-applicatifs-avec-logstash-kibana-et-elasticsearch/
 * https://www.elastic.co/guide/en/kibana/current/index.html
 * https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
 * https://www.elastic.co/guide/en/logstash/current/index.html
 * http://logstash.net/docs/1.1.12/tutorials/10-minute-walkthrough/