Utilisation d'éléments Metric et Markdown dans Canvas au sein de Kibana | Elastic Blog
Technique

Canvas : les éléments Metric (Indicateur) et Markdown

Exploration d'éléments Canvas dans Kibana

Canvas propose actuellement une sélection d'environ 20 éléments intégrés qui peuvent être ajoutés aux présentations (consultez la liste complète dans l'article de blog Prise en main). Dans cet article, nous allons nous pencher sur deux d'entre eux : Metrics (Indicateurs) et Markdown

Metric :

Zone de texte simplifiée affichant uniquement une valeur de donnée et une étiquette

blog01.3.png

Markdown :

Zone de texte complète affichant des données dynamiques avec des {{variables}} handlebars.js et la syntaxe Markdown

Remarque : Si vous avez déjà installé Canvas et l'échantillon de données, vous pouvez ignorer la section suivante et passer directement au tutoriel principal : Utilisation de Metrics (Indicateurs)

Révision rapide

Si vous n'avez pas encore lu attentivement l'article de blog Prise en main, nous vous recommandons de le faire, car il présente des concepts que nous allons utiliser dans le présent article. Aussi nous partons du principe que vous avez installé :

  1. Elasticsearch et Kibana (version 6.4 ou ultérieure)
  2. Canvas

Création d'une présentation Canvas

  1. Cliquez sur l'onglet Canvas dans la barre latérale.
  2. Cliquez sur Create workpad (Créer une présentation).
  3. Donnez un nom unique à la nouvelle présentation.

Installation d'un échantillon de données

Pour les besoins de ce tutoriel, nous allons utiliser l'échantillon de données suivant fourni par Elastic : Sample flight data (échantillon de données de vols).

Remarque : Cet ensemble de données est uniquement disponible avec Kibana 6.4 ou toute version ultérieure.

Accédez à votre instance Kibana :

  1. Cliquez sur Kibana dans la barre latérale.
  2. En bas de la section Add Data to Kibana (Ajouter des données à Kibana), cliquez sur le lien Load a data set and a Kibana dashboard (Charger un ensemble de données et un tableau de bord Kibana).
  3. Dans la vignette Sample flight data, cliquez sur Add (Ajouter).

blog01.gif

Référence rapide

Le tableau ci-dessous contient des informations sur l'échantillon de données que vous venez d'installer. Dans cette activité, nous allons utiliser les champs soulignés en gras, mais n'hésitez pas à manipuler les autres.

kibana_sample_data_flights
AvgTicketPrice
Carrier
DestCityName
DestCountry
FlightDelayType
FlightTimeMin
OriginCityName
OriginCountry
Dest
DestAirportID
DestLocation
DestRegion
DestWeather
DistanceKilometers
DistanceMiles
FlightDelay
FlightDelayMin
FlightNum
FlightTimeHour
Origin
OriginAirportID
OriginLocation
OriginRegion
OriginWeather
_id
_index
_score
_type
dayOfWeek
hour_of_day
timestamp

Utilisation de Metrics

Fonctionnement de base

Recherchons la durée totale des retards de vol en minutes et affichons-la dans un élément Metric. Pour ce faire, nous allons formuler une requête SQL afin d'extraire le total du champ FlightDelayMin de notre échantillon de données.

  1. Cliquez sur Add element (Ajouter un élément).
  2. Choisissez Metric
    1. CONSEIL : Lorsque vous créez un élément pour la première fois, celui-ci intègre des données de démonstration pour que vous puissiez le découvrir sans attendre.
  3. Dans le panneau d'édition situé à droite, sélectionnez l'onglet Data (Données).
  4. Cliquez sur Change your data source (Changer de source de données).
  5. Sélectionnez Elasticsearch SQL.
  6. Dans l'éditeur de requête SQL, saisissez :
SELECT
    SUM(FlightDelayMin) AS delay
FROM
    kibana_sample_data_flights

Explication supplémentaire : Cette requête SQL sélectionne toutes les valeurs JSON qui contiennent la clé FlightDelayMin dans l'index kibana_sample_data_flights. Ces données sont renvoyées dans une colonne intitulée delay (retard).

  1. Cliquez sur Save (Enregistrer).

Notez que l'élément Metric affiche désormais un symbole d'avertissement. Cela est dû au fait que l'élément désigne des données incorrectes.

  1. En haut du panneau d'édition situé à droite, sélectionnez l'onglet Display (Affichage).
  2. Dans la section Number (Nombre), définissez les valeurs suivantes :
    • Mesure : Value (Valeur)
    • Champ : delay (retard)
  3. Modifiez l'étiquette de l'indicateur comme suit : Total Delay in Minutes (Total des retards en minutes)

blog03.gif

Personnalisations

Ajoutons un filtre de temps pour afficher la durée totale des retards de vol en minutes pour une période donnée.

  1. Cliquez sur Add element (Ajouter un élément).
  2. Choisissez Time Filter (Filtre de temps).

Notez que l'élément Metric affiche désormais un symbole d'avertissement. Cela s'explique par le fait que tous les éléments de la présentation sont directement affectés par le filtre de temps alors que ce dernier n'est pas encore configuré.

  1. Déplacez le filtre de temps vers un emplacement vide de la présentation.
  2. Le champ de temps par défaut de l'élément Time filter (filtre de temps) indique @timestamp, ce qui est incorrect dans ce cas. Dans le panneau d'édition du filtre de temps, modifiez la valeur de la colonne comme suit : timestamp (autrement dit, supprimez le symbole @).
  3. Cliquez sur Set (Configurer).
  4. Cliquez sur le filtre de temps, puis sélectionnez les périodes suivantes :
    • Last 24 hours (24 dernières heures)
    • Last 7 days (7 derniers jours)
    • Last 2 weeks (2 dernières semaines)

Remarque : L'échantillon contient quatre semaines de données : deux semaines de données "passées" et deux semaines de données "futures". Le point médian correspond à la date d'installation de l'échantillon de données.

blog04.gif

Utilisation plus avancée

Essayons maintenant d'obtenir le retard de vol moyen. Nous allons devoir apporter une petite modification au code qui s'exécute en arrière-plan pour améliorer la présentation.

  1. Vérifiez que le premier indicateur que nous avons créé est sélectionné.
  2. Tout en haut à droite de l'écran, cliquez sur le bouton Duplicate (Dupliquer).
  3. Déplacez le nouvel élément Metric vers un emplacement vide de la présentation.
  4. Modifiez l'étiquette de l'indicateur comme suit : Average Delay in Minutes (Retard moyen en minutes)
  5. Sélectionnez l'onglet Data (Données).
  6. Dans l'éditeur de requête SQL, saisissez :
SELECT
    AVG(FlightDelayMin) AS delay
FROM
    kibana_sample_data_flights
  1. Cliquez sur Save (Enregistrer).
  2. Développez l'élément Metric pour afficher le nombre dans sa totalité.
    • Un nombre du type suivant devrait s'afficher : 47.33517114633586
    • À l'évidence, il serait préférable de l'arrondir.
  3. En bas à droite de l'écran, cliquez sur Expression editor (Éditeur d'expression). L'éditeur de code qui s'affiche vous permet de modifier le code qui alimente l'élément sélectionné.
  4. Dans la troisième ligne de code de l'éditeur d'expression, vous devriez voir une fonction math. Il s'agit de la ligne de code que nous souhaitons modifier :

blog03.png

  1. Dans la documentation de Canvas, Elastic fournit une liste de fonctions mathématiques que nous pouvons utiliser.
  2. Nous souhaitons utiliser la fonction round(a,b).
    • a indique la valeur à arrondir.
    • b indique le nombre de décimales.
  3. Dans l'éditeur d'expression, modifiez la ligne 3 pour inclure la fonction d'arrondi comme suit :
    1. Ligne 3 : | math "round(delay,0)"
  4. En bas à droite de l'éditeur d'expression, cliquez sur Run (Exécuter).

blog05.gif

Utilisation de Markdown

Fonctionnement de base

Recherchons le nombre total de vols et affichons le résultat dans un élément Markdown. Pour ce faire, nous allons exécuter une commande SQL pour interroger le champ FlightNum de notre échantillon de données.

  1. Cliquez sur Add element (Ajouter un élément).
  2. Choisissez Markdown.
    1. CONSEIL : Lorsque vous créez un élément pour la première fois, celui-ci intègre des données de démonstration pour que vous puissiez le découvrir sans attendre.
  3. Dans le panneau d'édition situé à droite, sélectionnez l'onglet Data (Données).
  4. Cliquez sur Change your data source (Changer de source de données).
  5. Sélectionnez Elasticsearch SQL.
  6. Dans l'éditeur de requête SQL, saisissez :
SELECT
    FlightNum
FROM
    kibana_sample_data_flights
  1. Cliquez sur Save (Enregistrer).
  2. Cliquez sur l'onglet Display (Affichage).
  3. Supprimez tout le contenu de l'éditeur Markdown content (Contenu Markdown) sauf :
**{{rows.length}} rows**

Remarque : Comme son nom l'indique, l'élément Markdown prend entièrement en charge la syntaxe Markdown : p. ex. **, ##, ```, etc. Pour ceux qui ne connaissent pas la syntaxe Markdown, dans l'exemple ci-dessus, nous entourons le texte avec ** pour mettre le texte en gras.

  1. Cliquez sur Apply (Appliquer).
  2. L'élément Markdown affiche désormais le nombre total de lignes de l'ensemble de données. Ce nombre correspond au nombre total de vols. Modifiez le texte comme suit :
Total number of flights: **{{rows.length}}**
  1. Cliquez sur Apply (Appliquer).
  2. Cliquez sur le symbole + dans l'éditeur Markdown situé en haut à droite de l'écran.
  3. Dans le menu déroulant, sélectionnez Text Settings (Paramètres de texte).
  4. Dans les paramètres de texte, effectuez les réglages suivants :
    1. Taille de la police : 36
    2. Alignement : Centré
  5. Redimensionnez l'élément Markdown pour l'adapter au texte.

blog06.gif

Personnalisations

Recherchons maintenant le nombre de vols en retard pour chaque type de retard. Pour ce faire, nous allons utiliser le champ FlightDelayType.

  1. Cliquez sur Add element (Ajouter un élément).
  2. Choisissez Markdown.
  3. Dans le panneau d'édition situé à droite, sélectionnez l'onglet Data (Données).
  4. Cliquez sur Change your data source (Changer de source de données).
  5. Sélectionnez Elasticsearch SQL.
  6. Dans l'éditeur de requête SQL, saisissez :
SELECT
    FlightDelayType,
    COUNT(FlightDelayType) AS count
FROM
    kibana_sample_data_flights
GROUP BY
    FlightDelayType
  1. Cliquez sur Save (Enregistrer).
  2. Cliquez sur l'onglet Display (Affichage).
  3. Supprimez tout le contenu de l'éditeur Markdown content (Contenu Markdown) sauf :
{{#each columns}}
 **{{name}}**
{{/each}}
  1. Explication supplémentaire :
  2. Ce code utilise la syntaxe handlebar.js. Pour chaque colonne renvoyée par la requête SQL, nous affichons le nom de la colonne. Cependant, nous devons afficher la valeur de chaque ligne dans la colonne FlightDelayType. Nous allons effectuer quelques corrections à l'étape suivante.
  1. Dans l'éditeur Markdown content (Contenu Markdown), remplacez :
    • columns (colonnes) par rows (lignes)
    • name (nom) par FlightDelayType
  2. Cliquez sur Apply (Appliquer).
  3. La liste des types de retard s'affiche. Ajoutons le nombre de retards de chaque type. Dans l'éditeur Markdown content (Contenu Markdown), remplacez le contenu actuel par le code ci-dessous :
{{#each rows}}
- {{FlightDelayType}} -- {{count}}
{{/each}}
  1. Explication du code ci-dessus :
  2. Ligne 1 : Pour chaque ligne...
  3. Ligne 2 : Afficher "-" pour indiquer qu'il s'agit d'un élément de liste, puis afficher les deux variables séparées par "--"
  4. Ligne 3 : Afficher une nouvelle ligne
  5. Ligne 4 : Fin de la boucle
  1. Cliquez sur Apply (Appliquer).

blog07.gif

Utilisation plus avancée

Dans l'élément Markdown que nous venons de créer, l'une des lignes indique :

No Delays -- 2856

Cette valeur ne nous dit rien au sujet des retards. Bien au contraire, elle nous indique le nombre de vols partis à l'heure. Supprimons cette ligne afin d'afficher uniquement les vols qui ont subi un retard. Pour ce faire, nous allons utiliser la fonction filterrows de Canvas.
blog02.7.png
  1. Vérifiez que l'élément Markdown que nous venons de créer (celui qui affiche tous les types de retard) est sélectionné.
  2. En bas à droite de l'écran, cliquez sur Expression editor (Éditeur d'expression). L'éditeur de code qui s'affiche vous permet de modifier le code qui alimente l'élément sélectionné.
  3. Dans l'éditeur d'expression, vous devriez voir quelque chose de semblable à ce qui suit :
filters
| essql 
  query="SELECT
    FlightDelayType,
    COUNT(FlightDelayType) AS count
FROM
    kibana_sample_data_flights
GROUP BY
    FlightDelayType"
| markdown "{{#each rows}}
- {{FlightDelayType}} -- {{count}}
{{/each}}"
  1. Nous allons acheminer les données au moyen de la fonction filterrows avant de les diriger vers l'élément Markdown. Insérons une nouvelle ligne à la ligne 10, puis ajoutons la fonction filterrows juste au-dessus de la fonction | markdown. N'oubliez pas la barre verticale | au début de la ligne.
...
GROUP BY
    FlightDelayType"
<b style="background-color:#ffae5b"><i>| filterrows {}</i></b>
| markdown "{{#each rows}}
- {{FlightDelayType}} -- {{count}}
...
  1. Nous voulons filtrer les lignes en fonction des valeurs contenues dans la colonne FlightDelayType. Pour ce faire, nous devons utiliser une autre fonction dénommée getCell. Celle-ci renvoie la valeur de chaque ligne à partir d'une colonne donnée (documentation de la fonction getCell).
| filterrows { <b style="background-color:#ffae5b"><i>getCell “FlightDelayType”</i></b> }
  1. Ensuite, nous allons acheminer la valeur de chaque ligne vers la fonction any. Celle-ci renvoie true (vrai) ou false (faux) en fonction d'une condition de vérification (documentation de la fonction any).
| filterrows {getCell “FlightDelayType” <b style="background-color:#ffae5b"><i>| any {}</i></b> }
  1. Enfin, pour ce qui est de la condition de vérification, assurons-nous que la valeur est différente de No delay (Aucun retard) en utilisant la fonction neq (documentation de la fonction neq).
| filterrows {getCell “FlightDelayType” | any { <b style="background-color:#ffae5b"><i>neq “No Delay”</i></b> }}
  1. En bas à droite de l'éditeur d'expression, cliquez sur Run (Exécuter). La ligne qui indique No Delay -- 2856 devrait disparaître.

blog08.gif

Liens vers d'autres ressources utiles

Et voilà ! Vous venez de parcourir plusieurs exemples d'utilisation d'éléments Metric et Markdown dans Canvas. N'hésitez pas à y ajouter d'autres éléments et à essayer l'ensemble des fonctionnalités de Canvas.

Nous vous suggérons aussi de consulter d'autres tutoriels Canvas :