Introduction à la pile ELK

Atelier de 14h dispensé pour le Master Information et Communication (Data Analytics et Stratégie de l’Information) à l’Université de Toulon.

Les objectifs de cet atelier sont :

Au sommaire :

Préambule

Vous pouvez vous appuyer sur les outils ChatGPT et consorts, il faut savoir vivre avec son temps. Essayez juste de comprendre les réponses qu’il donne.

La pile ELK

L’acronyme « ELK » désigne une suite comprenant 3 projets open source : Elasticsearch, Logstash et Kibana. Au travers de ces trois outils, elle permet de rechercher, analyser et visualiser, en temps réel, des données issues de n’importe quelle source et sous n’importe quel format.

Les outils de la pile ELK utilisent un vocabulaire spécifique dont quelques mots sont définis ci-après :

La pile ELK est, à la base, très populaire dans le milieu de l’infogérance (analyse de logs) mais peut voir son usage être détourné pour, par exemple, servir de support pour de l’intelligence des données ou encore de l’informatique décisionnelle.

Cet atelier de narration des données portera principalement sur ces derniers aspects et traitera principalement de l’outil Kibana. Au cours des différents exercices, vous serez en mesure d’apprécier la valeur ajoutée que cet outil peut apporter.

Docker

Docker est une plateforme de conteneurs très populaire qui permet de concevoir, tester et déployer des applications rapidement. Les conteneurs s’apparentent à des machines virtuelles : c’est une « enveloppe virtuelle » qui contient l’application et tout ce dont elle a besoin pour fonctionner (fichiers, librairies, etc.).

Préparation

Pour installer ElasticSearch et Kibana, vous pouvez choisir d’utiliser une méthode utilisant les conteneurs ou une méthode « nature ». Il est préférable d’utiliser la méthode des conteneurs sauf si vous rencontrez des problèmes avec Docker.

Installation via Docker

Installation de Git

Sous Windows

Rendez-vous sur Git, téléchargez l’éxécutable puis suivez les instructions

Sous Mac OS

Ouvrez le terminal, puis, installez Homebrew à l’aide de la commande ci-après :

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew est un gestionnaire de paquets, il permet d’installer énormément de logiciels en une ligne de commande.

Une fois Homebrew installé, installez Git à l’aide de la commande ci-après :

$ brew install git

Installer Docker

Rendez-vous sur Docker et télechargez le fichier approprié selon votre système d’exploitation.

Lancez l’installateur et suivez les instructions pour installer Docker.

Installation des instances ElasticSearch et Kibana

Attention, les commandes sont à rentrer ligne par ligne et non par bloc entier !

Ouvrez votre terminal et clonez le répertoire GitHub docker-elk :

git clone https://github.com/deviantony/docker-elk

Rendez-vous dans le répertoire cloné à l’aide de la commande cd, puis ordonnez à Docker de créer un groupe d’instance à partir des fichiers de configurations télechargés :

cd docker-elk docker-compose up

Une fois la commande terminée, vous pouvez accédez à Kibana en vous rendant à l’adresse suivante : http://localhost:5601. L’identifiant par défaut est elastic et le mot de passe changeme.

Notez que vous pouvez éteindre le conteneur « logstash-1 » étant donné que nous n’utiliserons pas cet outil lors de ce TP. Lorsque vous éteignez un conteneur, les opérations effectuées sur ce dernier sont sauvegardées donc n’ayez pas peur de quitter Docker, ou, d’éteindre votre ordinateur.

Pour la suite, rendez-vous directement à la section découverte de l’interface Kibana.


Installation « nature »

Installation des instances ElasticSearch et Kibana

Dans un premier temps, rendez-vous sur Elastic et télechargez les archives appropriées selon votre système d’exploitation :

Une fois le télechargement terminé, décompressez les archives.

Pour ElasticSearch puis Kibana :

Une fois les deux instances lancées, vous pouvez accédez à Kibana en vous rendant à l’adresse suivante : http://localhost:5601.

Aide pour lancer les instances depuis un terminal
Sous Windows :

Ouvrez un terminal PowerShell puis naviguez vers le dossier à l’aide de la commande cd (ligne 1, il faut adapter cette ligne à votre situation). Exécutez le binaire en précédant le nom du fichier à exécuter par .\ (ligne 2)

Pour rappel, la comibaison de touches SHIFT+clic droit permet d’afficher un menu permettant d’ouvrir terminal directement dans le dossier courant sous Windows (« Ouvrir la fenêtre PowerShell ici »).

cd Downloads/elasticsearch-X.XX.X/bin .\elasticsearch.bat
Sous Mac OS :

Ouvrez l’application Terminal puis naviguez vers le dossier à l’aide de la commande cd (ligne 1, il faut adapter cette ligne à votre situation). Exécutez le binaire en précédant le nom du fichier à exécuter par ./ (ligne 2).

cd Downloads/elasticsearch-X.XX.X/bin ./elasticsearch

Attention, pour arrêter les instances, entrez la combinaison de touches CTRL+c dans la fenêtre de terminal, ne vous contentez pas de fermer cette dernière !

Découverte de l’interface Kibana

Pour découvrir l’interface Kibana, commencez par importer des données d’exemple fournies par l’outil. Pour ce faire, depuis la page d’accueil, cliquez sur le lien « Try sample data » (cf. image ci-dessous).

Puis, déroulez le menu « Other sample data sets » en gris, en bas de la page.

Ajoutez ensuite les données « Sample eCommerce orders » à votre instance en cliquant sur le bouton « Add data ».

Tour d’horizon de l’outil

Exploration des données

Commencez à vous familiariser avec le jeu de données précédemment importé en vous rendant sur l’onglet « Discover » du menu sur la gauche.

Sur cette interface, vous retrouverez deux éléments importants et communs à toutes les pages (cf. image ci-dessous) présentant des données : le filtre « manuel » et le sélecteur de dates qui permettent de filtrer les données utilisées dans l’affichage de la page.

Visualisations

Rendez-vous sur l’onglet « Visualize Library » pour accéder à une liste de visualisations. Explorez les différentes visualisations basées sur les données d’exemple.

Tableaux de bords

Rendez-vous sur l’onglet « Dashboard » pour accéder à une liste de tableaux de bords. Sélectionnez le tableau de bord « [eCommerce] Revenue Dashboard ».

Les tableaux de bords permettent d’aggréger plusieurs visualisations et de filtrer de données (contrôles) sur lesquelles les visualisations vont se baser.

Canvas

Rendez-vous sur l’onglet « Canvas » pour accéder à une infographie présentant les données d’exemple de manière dynamique.

Console « Dev Tools »

Rendez-vous sur l’onglet « Dev Tools » pour accéder à une console permettant des opérations plus techniques comme la recherche d’un document en particulier, la gestion des index, mappings, etc.

Vous trouverez ci-dessous un exemple à copier coller pour rechercher tous les documents correspondants au critère explicité.

GET kibana_sample_data_ecommerce/_search
{
  "query": {
    "match": {
      "customer_gender": "MALE"
    }
  }
}

Elasticsearch permet d’effectuer plusieurs types de requêtes :

Un exemple d’aggrégation pour obtenir le nombre de commandes par jour.

GET kibana_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
        "ip_over_time": {
          "date_histogram": {
            "field": "order_date",
            "calendar_interval": "day"
      }
    }
  }
}

Exploration d’un jeu de données scientifiques

Données issues de HAL

HAL est la principale archive ouverte scientifique française. La plateforme est destinée au dépôt et à la diffusion d’articles scientifiques.

Le jeu de données à télecharger comprend l’intégralité des notices liées à l’Université de Toulon et déposées depuis la création de la plateforme. Les champs décrivant un document (fields) sont décrits sur la documentation de l’API HAL.

Import du jeu de données

Pour importer un jeu de données conséquent, il faut utiliser des librairies tierces, pour ce faire, suivez ces 8 étapes :

cd Downloads/ npm install elasticdump -g elasticdump --input=./hal-utln_mapping.json --output=http://elastic:changeme@localhost:9200/hal-utln --type=mapping elasticdump --input=./hal-utln.json --output=http://elastic:changeme@localhost:9200/hal-utln --type=data

Le jeu de données est prêt à être exploité, passez aux exercices.

Erreurs possibles

Sous Windows
Erreur « […] execution of running scripts is disabled on this system »

Si vous obtenez l’erreur contenant le message « […] execution of running scripts is disabled on this system », exécutez la commande ci-dessous avant de reprendre la procédure :

Set-ExecutionPolicy unrestricted
Sous Mac OS
Erreur avec la commande npm install elasticdump -g

Si vous avez une erreur lorsque vous essayez d’exécuter la commande npm install elasticdump -g, précédez cette commande par sudo pour exécuter cette commande avec les droits d’administrateur.

sudo npm install elasticdump -g

Exercices : création de visualisations

Pour les questions suivantes, créez une visualisation répondant le plus précisement et le plus clairement possible aux souhaits des décideurs.

Gouvernance

« Je suis délégué à la science ouverte à l’Université de Toulon. La présidence de l’Université m’a demandé de connaître l’évolution dans le temps des dépôts sur la plateforme HAL ces 10 dernières années. »

Gouvernance

« La présidence de l’Université de Toulon m’a chargé d’établir un tableau présentant les revues dans lesquelles les chercheurs de l’Université de Toulon publient le plus sur les 10 dernières années. »

Gouvernance

« La présidence de l’Université de Toulon m’a chargé de dénombrer et d’identifier les références qui ne possède pas de DOI sur les 10 dernières années. »

Collaboration internationale

« Je travaille au pôle dédié aux relations internationales de l’Université de Toulon et nous voulons développer nos partenariats européens. Pour ce faire, je souhaiterais connaître les pays avec lesquels les chercheurs de l’Université collaborent le plus au cours de ces 10 dernières années. »

Science ouverte

« Je suis délégué à la science ouverte à l’Université de Toulon. Je souhaite établir un état des lieux, sur les 10 dernières années, de la recherche toulonnaise d’un point de vue science ouverte. Il serait intéressant de voir la proportion des types de revues qui publient les productions scientifiques et si ces dernières sont disponibles en libre accès ou non. »

Exercice : création d’un tableau de bord

Créez un tableau de bord présentant l’ensemble des visualisations précédement créées et ajoutez un sélecteur permettant de décliner les résultats par laboratoire.

Évaluation

Import du jeu de données

En suivant les mêmes étapes que l’import précédent, télechargez et dé-zippez l’archive « es_decathlon.zip » (disponible seulement le jour de l’évaluation) puis importez le.

Pensez à remplacer hal-utln par decathlon dans les commandes. Il n’est pas nécessaire d’éxecuter à nouveau la commande npm install elasticdump -g (ligne 2).

Questionnaire

Le questionnaire est noté sur 10 points : 5 questions sur le cours, 5 questions sur le jeu de données précédemment importé. Merci de ne pas utiliser votre voisin(e), l’utilisation d’Internet et/ou du support de cours est autorisée.

Remplissez le questionnaire Google Forms disponible en cliquant ici (disponible seulement le jour de l’évaluation).

Présentation

Vous devez présenter un tableau le plus complet, le plus flexible, le plus clair et le plus simple d’utilisation possible à destination du responsable du site e-commerce d’où proviennent les données. Cet utilisateur ne connaît pas l’outil Kibana.

Vous pouvez aussi créer vous même votre jeu de données ou utiliser des données Twitter (cf. ci-après).

Votre tableau de bord est noté sur 10 points.

Développer autour de ELK

Interconnecter Python et ElasticSearch

Si vous n’avez pas encore d’environnement de développement, jetez un oeil à PyCharm Community Edition.

Vous pouvez requêter une instance ElasticSearch (insertion de données, interrogation, etc.) depuis votre code Python à l’aide du du module Elasticsearch sur Python.

Pour ce faire, créez un projet puis installez le module ElasticSearch à l’aide de PyPi :

pip install elasticsearch

Pour interroger l’instance ElasticSearch et obtenir des données qui correspondent à votre requête, il vous suffit de ré-utiliser l’extrait de code commenté ci-dessous.

from elasticsearch import Elasticsearch, helpers # Connexion à l'instance ElasticSearch es = Elasticsearch(hosts="http://elastic:changeme@localhost:9200/") # Requête request = { "match_all": {} } # Interrogation de l'instance ElasticSearch result = es.search(index="test", query=request) for res in result["hits"]["hits"]: print(res)

Pour insérer des données dans l’instance ElasticSearch, il vous suffit de ré-utiliser l’extrait de code commenté ci-dessous. Le premier bloc correspond à une insertion document par document alors que le second correspond à une insertion de masse.

from elasticsearch import Elasticsearch, helpers # Connexion à l'instance ElasticSearch es = Elasticsearch(hosts="http://elastic:changeme@localhost:9200/") my_dict = {...} # Insertion d'un document (ou dictionnaire en Python) result = es.index(index="index-name", body=my_dict)
from elasticsearch import Elasticsearch, helpers # Connexion à l'instance ElasticSearch es = Elasticsearch(hosts="http://elastic:changeme@localhost:9200/") list_dict = [ {...}, {...}, {...} ] # Insertion d'une liste de documents (ou liste de dictionnaires en Python) result = helpers.bulk( es, list_dict, index="index-name", )

Désinstaller les logiciels et librairies

Si vous souhaitez désinstaller les logiciels et librairies qui étaient nécessaires pour la réalisation de cet atelier, suivez les étapes ci dessous :