· Tutorial · 9 min read
Logstash, ElasticSearch, Kibana – S01E01 – Analyse d’e-réputation sur Twitter
Dans cet premier opus d’une mini série, nous allons voir comment monter un monitoring de Twitter afin d’aider notre équipe marketing.
Il arrive souvent que l’équipe marketing ou les community managers passent une partie de leur temps à scruter les différents réseaux sociaux en vogue (Facebook, Twitter, Google+, blogs, forums, etc.) pour prendre la tendance sur l’e-réputation de leur entreprise et de ses produits. Le tryptique Logstash, ElasticSearch, Kibana est une solution intéressante pour automatiser la collecte d’information et construire des tableaux de bords, avec des indicateurs agrégés et clairs.
Dans cet premier opus d’une mini série, nous allons voir comment monter un monitoring de Twitter afin d’aider notre équipe marketing. Ce “classique” dans la communauté ElasticSearch (JUG, talks, …) permettra de nous focaliser sur la configuration d’un dashboard Kibana.
À la fin de cet article, nous pourrons notamment répondre à des questions comme :
- combien de fois ai-je été cité dans un tweet durant les 15 dernières minutes ?
- quelle est ma part de marché parmi mes concurrents ?
- quels sont les hashtags les plus populaires associés à ma marque ?
- quelle est la répartition géographique des gens qui parlent de mes produits ?
Suivez le guide.
Dans un cas réel, une entreprise choisira certainement de cibler des termes comme :
- son nom
- le nom de ses produits
- le nom du concurrent
- le nom des produits concurrents
Pour les besoins de l’exercice, nous nous concentrerons sur les termes iphone, android, et blackberry. Ces 3 termes permettent de remonter un nombre de résultats suffisamment conséquent pour tester notre solution.
Création d’une application Twitter
Avant de pouvoir indexer le contenu de Twitter, il faut se brancher sur son API de Streaming public. Pour cela, vous devez créer une application Twitter. C’est une procédure très simple ne prenant pas plus de 5 minutes.
À l’aide de votre compte Twitter habituel :
- Rendez-vous sur la page de vos applications à cette adresse : https://dev.twitter.com/apps
- Créez une nouvelle application (ici “Twitter Survey”)
- Remplissez tous les champs du formulaire excepté “Callback URL”
- Acceptez les conditions (sans les lire ;)
- Validez
- Cliquez tout en bas de la page de votre application sur le bouton “Create my access token”
Notez les valeurs “Consumer key”, “Consumer secret”, “Access token” et “Access token secret” vous donnant accès à la précieuse API.
Installation d’ElasticSearch
Dans le terminal de votre Unix préféré, installons :
- Elasticsearch
- le plugin elasticsearch-head afin de visualiser notre cluster
- le plugin Twitter River
Démarrez ElasticSearch :
Création de la River Twitter
Une river est un service tournant au sein du cluster Elasticsearch, permettant de tirer (“pull”) ou de recevoir (“pushed with data”) des données.
Il existe plusieurs types de river, notamment :
Dans un autre terminal nous allons créer une river Elasticsearch de type “twitter” portant le nom “mobiles”. Cette river indexera tous les tweets publics contenant les termes “iphone”, “android”, “blackberry”. Les tweets seront insérés par lots de 500 et stockés dans l’index “mobiles”.
Note : N’oubliez pas de remplacer les étoiles par les valeurs correspondantes de votre application Twitter ^_^
La sortie d’ElasticSearch devrait être similaire à celle-ci :
Vous pouvez visualiser l’état de santé de votre cluster Elasticsearch grâce au plugin head à l’adresse http://localhost:9200/_plugin/head
Installation de Kibana
Pour installer Kibana, il vous faut également un serveur web. L’exemple est donné pour une installation standard d’Apache, mais tout autre serveur web capable de servir des fichiers statiques fera l’affaire. Il faut que vous adaptiez à votre contexte.
Vous pouvez désormais accéder à Kibana à l’adresse : http://localhost/kibana
La page d’accueil de Kibana dispose d’un menu en haut à droite permettant de charger, sauvegarder et partager vos dashboard via :
- Fichier JSON
- ElasticSearch
- Gist
- Permalien
Kibana offre 4 dashboards par défaut :
- un dashboard générique Logstash
- un dashboard générique Elasticsearch
- un dashboard non configuré
- un dashboard vide
Un dashboard se “branche” sur tous les index de votre cluster Elasticsearch, un index, ou les index dont le nom match un pattern (cas de logstash notamment).
L’interface HTML5 basé sur Twitter Bootstrap se décompose en lignes de 12 colonnes (pliables ou non) contenant des panels.
Il existe plusieurs types de panels à ajouter et configurer (recherche, période de temps, histogramme, camembert, carte, Markdown, …)
Création d’un dashboard Kibana
Nous allons créer un dashboard pas à pas, personnalisé pour nos données. N’oubliez pas de sauvegarder votre dashboard avant de rafraichir la page de votre navigateur !
Etape 1 – Configuration et ligne de recherche
Partez d’un Dashboard vierge en cliquant sur le lien “Blank Dashboard”.
Nous allons connecter Kibana à l’index “mobiles” de notre Elasticsearch.
Ouvrez la fenêtre modale “Dashboard settings” en cliquant sur la roue crantée dans le coin supérieur droit :
- dans l’onglet “General” : insérez le titre “Twitter Survey ™” et choisissez le style “dark” ou “light” selon votre envie
- dans l’onglet “Index” : sélectionnez “none” pour “Timestamping” et insérer “mobiles” pour “Default index”
- dans l’onglet “Controls” : cochez toutes les cases afin de vous donner le maximum d’options
- dans l’onglet “Timepicker” : remplissez le champ “Time field” avec “created_at”. Cette propriété contient la date du tweet. Elle servira de référence temporelle pour les requêtes
- fermez la boite de dialogue avec le bouton “Close”
La barre de recherche utilise le format Lucene Query ou une expression régulière depuis peu.
En cliquant sur le bouton ”+” du champ recherche, créez 4 barres de recherche contenant les requêtes suivantes :
*
iphone -android -blackberry
android -iphone -blackberry
blackberry -iphone -android
Vous pouvez épingler des recherches et leurs attribuer un alias.
Cliquez sur chaque rond de couleurs et sauvegardez les alias suivants :
- All
- iPhone
- Android
- Blackberry
Vous devez obtenir un dashboard similaire à celui-ci : Twitter Survey ™ – Step 1
Etape 2 – Ligne Hits
Nous allons ajouter une ligne “Hits” contenant des panels affichant le total de nos recherches “All”, “iPhone”, “Android”, et “Blackberry”.
Commencez par ajouter une ligne à votre dashboard :
- cliquez sur le bouton “Add a row”
- insérez “Hits” dans le champ titre
- cliquez sur le bouton “Create Row” puis “Close”
Ajoutez un premier panel affichant le nombre total de tweets :
- cliquez sur le bouton “Add panel to empty row”
- sélectionnez le type “hits”
- choisissez la valeur 3 pour la propriété "", qui correspond au nombre de colonne que le panel va prendre sur la ligne (Kibana est basé sur Twitter Bootstrap, qui utilise un layout de 12 colonnes)
- choisissez le style “Total” et une taille de police de 28 pt.
- utilisez la recherche “All” en choisissant “selected” dans le champ “queries”, puis cliquez sur “All”
- cliquez sur le bouton “Add Panel” puis “Close” pour finir
Répétez cette opération afin de créer les 3 autres panels affichant le total de tweets pour les requêtes “iPhone”, “Android” et “Blackberry”.
Vous devez obtenir une ligne similaire à celle-ci : Twitter Survey ™ – Step 2
Etape 3 – Ligne Trends
Maintenant que nous sommes capable d’avoir un peu de visibilité sur nos données, voyons comment répondre à une question métier de type :
“Quelle est l’évolution durant les 5 dernières minutes par rapport à l’heure précédente ? “.
Pour cela :
- cliquez sur “Add a row” pour ajoutez une ligne “Trends” qui va contenir nos 4 panels de type “trends”
- utilisez “5m” pour le champ “Time Ago”
- choisissez une police de 20pt
- utilisez les queries “All”, “iPhone”, “Android”, et “Blackberry”, une pour chaque panel
Une fois les 4 panneaux créés, ajoutez un filtre de temps “Last 1 hour” (en haut à droite “add time filter”). Vous remarquerez que votre filtre sur la dernière heure est apparu dans l’accordéon “Filtering”.
Vous devez obtenir une ligne similaire à celle-ci : Twitter Survey ™ – Step 3
Etape 4 – Ligne Timeline
Ajoutez une ligne “Timeline” contenant un panel de type “Histogram” affichant l’évolution des résultats dans le temps.
Utilisez le mode “count” et la valeur “created_at” pour le champ “Time Field”.
Sélectionnez les queries “iPhone”, “Android” et “Blackberry”.
Vous devez obtenir une ligne similaire à celle-ci : Twitter Survey ™ – Step 4
Ligne 5 – Ligne Analytics
Ajoutez une ligne “Analytics”.
Nous allons ajouter 3 panels :
- un panel affichant la répartition entre iPhone, Android et Blackberry
- un panel affichant les hashtags les plus utilisés
- une carte affichant les utilisateurs par pays.
Pour cela, ajouter les panels suivants :
- un panel de type “Hits”, style “pie”, et cochez la case “donut” et sélectionnez les queries “iPhone”, “Android”, “Blackberry”
- un panel de type “Pie”, mode “terms”, et utilisez “hashtag.text” dans le champ “Field” et sélectionnez la query “All” vous pouvez exclure une liste de termes, ici on utilisera : “iphone,android,iphonegames,androidgames,gameinsight,rt,retweet”
- un panel de type “Map”, et utilisez “place.country_code” dans le champ “Field” et sélectionnez la query “All”
Vous devez obtenir une ligne similaire à celle-ci : Twitter Survey ™ – Step 5
Ligne 6 – Ligne des Tweets
Afin de visualiser les données sélectionnées dans un tableau paginé, nous allons ajouter une ligne “Tweets” contenant un panel de type “Table”.
Lors de l’ajout du panel table, ajoutez les colonnes “created_at”, “text”, et “retweet_count” afin de les afficher par défault.
Sélectionnez la query “All” pour finir.
Vous devez obtenir une ligne similaire à celle-ci (et le dashboard final…) : Twitter Survey ™ – Step 6
Dashboard Final
Le dashboard final nous permet de savoir :
- 74939 tweets ont été indéxés
- Il y a 8.22% de tweets en plus contenant “blackberry”, depuis les 5 dernières minutes, par rapport à la dernière heure
- Quelques tweets viennent d’Indonésie
Pour allez plus loin
Kibana est construit autour des frameworks Twitter Bootstrap et Angular JS.
Vous pouvez ajouter votre propre type de panel relativement facilement si ces 2 frameworks vous sont familiers.
Le panel “Hits” est un exemple simple pour se plonger dans le projet :
https://github.com/elasticsearch/kibana/tree/master/src/app/panels/hits
Sources
- http://www.elasticsearch.org/guide
- http://lucene.apache.org/core/2_9_4/queryparsersyntax.html
- https://github.com/elasticsearch/elasticsearch-river-twitter/blob/master/README.md
- https://dev.twitter.com/docs/streaming-apis/streams/public#Using_the_streaming_APIs
- https://github.com/elasticsearch/kibana/tree/master/src/app/panels/hits
- http://fr.slideshare.net/roidelapluie/logstash-and-friends