La stack Elastic (formerly known as ELK)

L’indexation de contenu et leur recherche sont des besoins grandissant dans un environnement qui produit de plus en plus de données à structure variable dans leur nature, et dans le temps.

agile-partner_rdvtechL’indexation de contenu et leur recherche sont des besoins grandissant dans un environnement qui produit de plus en plus de données à structure variable dans leur nature, et dans le temps. La recherche structurée ou libre au sein de ces données a aussi une grande importance, et la volumétrie sans cesse grandissante nécessite la mise en place de système dont la mise à l’échelle est garantie par des mécanismes robustes. Les solutions de la stack Elastic, historiquement désignée par l’acronyme ELK (ElasticSearch, Logstash, Kibana) fournissent des réponses à ces besoins sur base de solutions Open Source et hautement distribuables.

Analyse par Pierre-Antoine Grégoire  – IT Architect & Agilist chez Agile Partner  et Hassen Khail  – Senior Java Developer chez Agile Partner

Carte d’identité

Nom Elastic stack (a.k.a. ELK)
Genre Indexation et recherche de données
Fondateur Shay Bannon
Date clés 2012: Création de Elastic.co par les contributeurs de Elasticsearch
Particularités Scalable Distributed Indexation/Search engine

Indexation et recherche distribuées

La mise en place d’infrastructure d’indexation et de recherche est un besoin grandissant. Effet d’une accoutumance des utilisateurs à un accès aux données par recherche textuel (Google, Bing…), ce besoin s’étend constamment pour les applications récentes en entreprise ou sur le Web.

Afin de répondre à ce besoin une infrastructure doit être mise en place, correspondant aux types de composants suivants:

  • un système d’indexation: analyse des données soumises, pour produire un format qui facilite une recherche rapide, comme l’index d’un livre permet de retrouver du contenu sur base d’un mot clé.
  • un moteur de recherche: pour rechercher des données dans l’index sur base de requêtes plus ou moins structurées
  • une interface de visualisation: pour donner du sens à des données, une utilisation brute des résultats est fastidieuse, surtout si le volume est important. L’outil de visualisation permet de produire des graphiques dynamiques, des visualisations ou des rapports sur base des données retournées par le moteur de recherche.
  • des collecteurs de données: un collecteur est un composant qui va recueillir les données à indexer à leur source (un fichier, une arborescence de fichier, une base de données, un flux réseau…)
  • un distributeur (dispatcher): le distributeur va envoyer les données collectées au système d’indexation.

rdv-tech-agile-partner-nov2016

Ces différents composants peuvent être fournis par une solution unique, ou par la composition de plusieurs solutions complémentaires.

D’autres composants peuvent être adjoints à cette infrastructure pour garantir la mise à l’échelle et la haute disponibilité, comme par exemple:

  • un message broker qui peut servir de tampon entre le(s) distributeur(s) et le système d’indexation. Ce broker devrait aussi être distribué et compatible avec la mise à l’échelle de l’infrastructure.
  • un filtre qui s’interpose entre le(s) distributeur(s) et le système d’indexation et permet de supprimer ou enrichir en amont les données

La stack Elastic (a.k.a. ELK) conceptuellement

rdv-tech-agile-partner-nov2016_02

La stack Elastic, est composée de plusieurs solutions. Les plus connues forment l’acronyme ELK (populaire dans la communauté):

  • ElasticSearch: la solution centrale. Il joue le rôle de système d’indexation, de moteur de recherche, et peut aussi jouer le rôle de collecteur de données et de filtre grâce aux “Ingest Nodes”. NB.: la possibilité de collecter et filtrer directement les données avec ElasticSearch le rend suffisant pour des besoins de petites tailles ou pour des environnements de labo/développement.
  • Logstash: le couteau suisse. Son objectif est essentiellement la collecte et la distribution des données vers les systèmes d’indexation (vers ElasticSearch par exemple). Il prend de très nombreux types de données en entrée, et peut les distribuer à de très nombreux systèmes (en plus d’Elasticsearch). Par ailleurs, il fournit aussi de très puissantes capacités de filtrage des données NB.: son côté couteau suisse lui permet d’être utilisé avec ou sans Elasticsearch. Il est souvent mis en place comme agent sur des systèmes ayant accès aux données que l’on souhaite soumettre à l’indexation.
  • Kibana: Application de visualisation qui accède aux APIs d’un noeud ou d’un cluster Elasticsearch et permet de créer des visualisations riches.

S’y ajoutent des composants de collecte plus spécialisés que Logstash: les Beats. Ce sont des composants optimisés pour avoir une empreinte très faible sur les systèmes sur lesquels ils réalisent la collecte, et qui fournissent des données prêtes à consommer pour Logstash ou directement par un cluster Elasticsearch.

ElasticSearch, Logstash, Kibana et Beats constituent donc la stack Elastic, qui (au moment de rédaction de cet article) vient de sortir dans une version 5.0 cohérente qui permet d’aligner la version de toutes ces solutions.

Il existe des stacks équivalentes fournies par d’autres éditeurs comme par exemple celle d’InfluxData qui est cependant plus axée sur des données de type time-series.

L’aspect composable de la solution d’Elastic lui permet d’être mariée avec de nombreux autres outils compatibles.

La stack Elastic (a.k.a. ELK) techniquement

Techniquement la stack Elastic est composée de solutions distinctes, mais cohérentes entre elles du point de vue des APIs et des échanges de données.

Cependant elles utilisent des stack techniques différentes.

Elasticsearch et Logstash sont basés sur Java (au moins en version 8) et nécessite donc a minima la mise en place d’une JVM pour fonctionner.

Kibana embarque une version de NodeJS pour fournir l’interface de visualisation.

Les Beats sont codés en Go pour fournir des exécutables à l’empreinte la plus faible possible.

Ces contraintes techniques sont à prendre en compte pour installer ces outils dans des environnements très contrôlés.

Les outils utilisent la plupart du temps la lingua franca JSON pour l’échange des données (même si l’on peut choisir d’envoyer les données non-transformées, ou dans d’autres formats), et des APIs REST pour fournir les fonctionnalités distribuées du cluster de recherche/indexation/monitoring.

On peut y adjoindre un broker de messages distribué tel que RabbitMQ ou Kafka pour servir de tampon entre les systèmes collectés et l’infrastructure d’indexation/recherche. Ceci est souvent nécessaire à la fois pour assurer une haute disponibilité et faciliter les opérations de maintenance du cluster Elasticsearch.

On vous le dit !

La stack Elastic a atteint une étape importante avec la nouvelle version 5.0.

La solution complète est plus cohérente, très bien documentée (une des grandes qualités du projet) et fournit une expérience d’installation un peu moins morcelée.

Si vous ne vous y êtes pas encore intéressé, c’est un bon moment pour commencer.

Une bonne première approche consiste à l’utiliser dans un premier temps dans le cadre des outils de diagnostic sur des logs applicatifs ou des métriques systèmes par exemple.

Il est à noter d’une part que la société Elastic.co fournit aussi du support sur cette stack, ainsi qu’un composant propriétaire et payant: XPack qui fournit des composants supplémentaires de sécurisation, d’alerte, de surveillance, de reporting ainsi que la possibilité de structurer les données en graphes et les requêter sur base de ces graphes.

Par ailleurs l’acquisition récente de la société Prelert laisse entendre que la stack va fournir de plus en plus de possibilités d’analyses prédictives (basées sur du Machine Learning).

A surveiller de très près!

Bien entendu, si vous aussi avez fait l’expérience de la stack Elastic (ELK) ou de systèmes équivalents, n’hésitez pas à venir échanger avec nous sur notre blog !