À ce stade, on sait utiliser ElasticSearch en local ainsi qu'en mode distribué, ce qui est déjà suffisant pour pas mal d'applications : notamment, vous pouvez déjà mettre en place un moteur de recherche pour une application web. Mais il y a un usage en particulier qui est très courant, parce que très utile : c'est la visualisation de données pour ElasticSearch avec un outil qui s'appelle Kibana.
Kibana est un client pour ElasticSearch qui fournit à l'utilisateur une interface graphique (UI) accessible par un navigateur web. Cette UI permet à l'utilisateur de réaliser des recherches, de visualiser des documents individuels et d'agréger des résultats dans des graphes et des diagrammes. Dans ce chapitre on va voir comment installer et utiliser Kibana pour visualiser notre jeu de données de films.
Installation
Kibana s'installe et se lance aussi simplement qu'ElasticSearch. Il suffit de télécharger une archive contenant les binaires pré-compilés et de lancer un exécutable :
$ wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.0-linux-x86_64.tar.gz
$ tar xzf kibana-5.6.0-linux-x86_64.tar.gz
$ cd kibana-5.6.0-linux-x86_64/
$ ./bin/kibana
Évidemment, pour bien fonctionner, Kibana a besoin d'un cluster ElasticSearch fonctionnel. Dans ce chapitre, on suppose que vous avez un nœud ElasticSearch qui tourne en local et qui écoute sur le port 9200 (c'est la configuration par défaut). Si ce n'est pas le cas vous pouvez ajuster la configuration de Kibana en modifiant son fichier de configuration :
$ vim config/kibana.yml
L'adresse du nœud ElasticSearch peut être modifiée en définissant le paramètreelasticsearch.url
(qui vauthttp://localhost:9200
par défaut).
Prise en main
Une fois que Kibana a bien été lancé, vous pouvez accéder à son interface graphique en ouvrant un navigateur à l'URL http://localhost:5601. Là aussi, si vous désirez changer cette adresse, vous pouvez modifier les paramètresserver.port
etserver.host
dans le fichier de configuration de Kibana. Vous êtes accueillis par une page qui vous invite à définir un schéma d'index :
Commencez par modifier le schéma pour le nom d'index : ce sont les données du ou des index correspondants qui seront visualisées dans Kibana. Sélectionnez ensuitefields.release_date
comme "Time filter field date". On va voir un peu plus loin à quoi ça sert. Enfin, cliquez sur "Create". Cela devrait créer un index.kibana
avec un shard primaire et un replica shard, comme vous pouvez le vérifier en exécutant la commande_cat/shards
:
$ curl localhost:9200/_cat/shards
.kibana 0 p STARTED 2 13kb 127.0.0.1 Tcy3YXx
.kibana 0 r UNASSIGNED
...
Donc, très clairement, Kibana stocke ses données dans ElasticSearch : ça signifie notamment qu'on va pouvoir redémarrer Kibana quand on veut et que toutes nos données seront sauvegardées même si on efface le répertoirekibana
.
Le menu de gauche présente six entrées : "Discover", "Visualize", "Dashboard", "Timelion", "Dev Tools", "Management". Actuellement, vous devriez vous trouver dans l'onglet "Management" :
En gros, l'onglet management contient le mapping des données de votre index. Vous pouvez d'ores et déjà y modifier le champfields.image_url
pour qu'il soit de format "Url", de type "Image" et avec un "Url template" vide :
Dans la suite de ce chapitre, nous allons utiliser les trois premiers onglets ("Discover", "Visualize", "Dashboard") pour créer et partager des visualisations interactives de nos données.
Exploration de données
Commençons par l'onglet "Discover" : sans surprise, il permet de partir à la découverte de nos données. À l'aide d'un langage de requêtes ad-hoc, il permet de réaliser des recherches, de filtrer et de visualiser les documents résultats. C'est à partir de cette page que vous allez réaliser vos requêtes préliminaires pour développer une intuition de phénomènes intéressants à observer.
Dans un premier temps, vous n'allez probablement voir aucune donnée sur cette page parce que seuls les films sortis dans les 15 dernières minutes seront affichés, c'est-à-dire... aucun ! Cliquez sur la petite horloge en haut à droite pour faire en sorte que tous les films de 1920 à 2017 soient affichés :
On obtient alors tous les documents de l'indexmovies
triés par dates décroissantes :
Ces documents peuvent être filtrés en réalisant des requêtes dans la barre de recherche : le format des requêtes doit respecter la syntaxe du "mini langage" de requête décrit dans la documentation officielle. Nous n'allons pas détailler précisément ce langage ici, mais simplement donner des exemples de requêtes que l'on peut réaliser :
john
: documents contenant "John" (insensible à la casse) dans un des champs.fields.actors:"Harrison Ford"
: documents dont le champfields.actors
contient "Harrison Ford".fields.actors:"Harrison Ford" AND fields.rating:>=8
: documents de la recherche précédente et dont la note est supérieure ou égale à 8.fields.release_date:[2001 TO 2100]
: films sortis au XXIème siècle.fields.actors:malkovitch~
: films dont un acteur a un nom ressemblant à "malkovitch".
N'hésitez pas à réaliser ces recherches sur vos données pour observer les résultats obtenus. Pour améliorer l'affichage des résultats, vous pouvez sélectionner un ou plusieurs champs qui seront affichés à la place du document complet. Dans "Available Fields", sélectionnez un champ, puis "Add". Par exemple ici nous avons choisi de n'afficher que le titre, le réalisateur et l'affiche du film :
Si vous pensez que vous avez réalisé une recherche que vous allez réutiliser par la suite, vous pouvez la sauvegarder en utilisant le bouton "Save" en haut de l'écran. Les recherches sauvegardées seront utiles pour la...
Visualisation de données
On touche ici au cœur de Kibana : c'est l'onglet qui va nous permettre d'agréger nos données et d'afficher les résultats dans des diagrammes très parlant visuellement, de manière assez similaire à Excel.
La création d'une visualisation est un peu complexe. Pour commencer, il est important de savoir à quel résultat vous voulez parvenir. N'hésitez pas à dessiner sur un papier le diagramme que vous cherchez à obtenir avant de le construire avec des données réelles dans Kibana.
Sélectionnez le type de visualisation correspondant à votre besoin, puis la source de vos données : à ce stade, vous pouvez réutiliser une des recherches que vous avez sauvegardées dans l'onglet "Discover". Par exemple, j'aimerais générer un camembert des 10 réalisateurs les plus prolifiques et je voudrais que ce camembert permette de visualiser les genres de prédilection de ces réalisateurs :
Ensuite, je commence la conception des axes du graphes. Dans mon exemple, je veux que les tranches du camembert représentent un décompte du nombre de documents. Chaque "bucket" du camembert est associé à un des dix réalisateurs les plus fréquents. Puis je découpe à nouveau chaque tranche pour faire figurer les cinq genres les plus fréquents associés à chaque réalisateur. Voici le résultat :
Grâce à ce diagramme, on apprend qu'Alfred Hitchcock est le troisième réalisateur le plus prolifique et que son genre de prédilection est le thriller.
Là aussi, une fois que j'ai créé une visualisation, je peux la sauvegarder à l'aide du bouton "Save" situé en haut de l'écran. Je peux ainsi créer toute une série de visualisation, ce qui me sera bien utile pour...
Établir un tableau de bord
Kibana vous permet de juxtaposer les visualisations que vous avez créées dans un tableau de bord : un tableau de bord vous permet de visualiser en un coup d'œil les informations les plus importantes que vous pouvez tirer de vos données.
Dans l'onglet "Dashboard", créez un nouveau dashboard, puis ajoutez-y certaines des visualisations que vous avez créées. Comme vous pouvez le voir, vous pouvez déplacer, réorganiser et redimensionner vos visualisations un peu comme vous le désirez. Voici par exemple le tableau de bord que j'ai créé pour visualiser d'un coup d'œil quelques statistiques :
Via le bouton "Share" situé en haut de l'écran, il est possible de partager les dashboards que l'on crée ainsi que de les inclure dans des pages web. Mais faites bien attention au public avec qui vous partagez ces dashboards : comme ils nécessitent de réaliser des requêtes sur la base ElasticSearch, il ne faut pas qu'un trop grand nombre d'utilisateurs y accèdent, sous peine de faire tomber votre cluster ElasticSearch.