Elastic vient de sortir sa dernière mouture de la stack Elastic. Il s'agit de la version 5 et, pour la première fois, tous les produits ont une version commune. Cette nouvelle version vient avec son lot de nouveautés. Dans cet article, nous allons nous concentrer sur les nouveautés apportées à Kibana, et principalement Timelion.

Les exemples sont tirés de métriques fournies par le plugin MetricBeat, qui remplace TopBeat dans la version 5 de la stack.

Généralités

Au lancement de Kibana, on remarque tout d'abord le changement visuel. Le menu est désormais à gauche, les icônes un peu cryptiques de Kibana 4 pour ajouter, sauvegarder ou ouvrir des éléments sont remplacées par des boutons avec du texte et les contours des visualisations dans les dashboards sont supprimés. Pour le reste, on retrouve assez vite ses habitudes de Kibana 4.

Les principales évolutions tiennent dans l'ajout des plugins Sense et Timelion (prononcez timeline). Ces modules ne sont pas nouveaux mais ils sont désormais intégrés de base dans Kibana.

Timelion

Présentation

Timelion permet d'afficher des courbes décrites par un langage particulier. Pour accéder à cette fonctionnalité, il faut cliquer sur l'icône avec une tête de lion.

La requête décrivant la courbe à afficher est présente dans le champ au dessus de la courbe. La requête de base est .es(*). Cela va afficher le nombre total d'événements reçus au fil du temps. La datasource .es (ou .elasticsearch) permet d'effectuer une requête lucène dans l'index elasticsearch par défaut. Il est possible de spécifier l'index et la requête de cette manière :

1
.es(index='metricbeat-*', q='*')

NB : Il existe plusieurs datasources en plus de Elasticsearch, notamment Graphite, Quandl et WorldBank

Afficher une courbe

Si on veut afficher une métrique plutôt que le nombre d'événements, il est possible d'ajouter un attribut metric à la requête. Les métriques disponibles sont avg, sum, min, max et cardinality (nombre de valeurs distinctes). Par exemple, pour afficher l'évolution de la consommation CPU de java, il faut effectuer la requête suivante :

1
.es(q='metricset.name:process AND system.process.name:java', metric='sum:system.process.cpu.total.pct')

Timelion affiche la requête en label de la courbe, ce qui n'est pas très lisible ici. Il est donc possible de fournir sont propre label avec la fonction label() :

1
.es(q='metricset.name:process AND system.process.name:java', metric='sum:system.process.cpu.total.pct').label('Consommation CPU Java')

Afficher plusieurs courbes

Maintenant, on aimerait afficher également le nombre d'événements qui arrivent afin de chercher une éventuelle corrélation entre la consommation CPU et la charge d'événements. Pour ce faire, il suffit d'ajouter à la requête une deuxième datasource, afin de récupérer ce nombre d'événements. Cependant, les deux échelles n'ont rien à voir, il faut donc ajouter une deuxième axe y avec la fonction yaxis.

1
.es(q='metricset.name:process AND system.process.name:java', metric='sum:system.process.cpu.total.pct').label('Consommation CPU Java'), .es(*).yaxis(yaxis=2).label('Evénements')

Les variations de la courbe des événements n'est pas très visible, on va donc fixer un seuil minimal à l'axe y pour y voir plus clair, avec la propriété min de yaxis. Avec un titre en plus (fonction title) et des couleurs fixes (fonction color), le graphe est prêt à mettre dans un dashboard.

1
.es(q='metricset.name:process AND system.process.name:java', metric='sum:system.process.cpu.total.pct').label('Consommation CPU Java').color('#F00'), .es(*).yaxis(yaxis=2, min=330).label('Evénements').color('#00F').title('Consommation CPU vs Evénements')

Visiblement, la charge n'est pas suffisante pour voir une corrélation entre la consommation CPU et le nombre d'événements.

Opérer sur des courbes

Timelion propose également de faire des opérations entre les courbes. Par exemple, il est possible de suivre la taille moyenne des paquets qui arrivent par l'interface lo en divisant (avec la fonction divide) le volume moyen qui transite par le nombre moyen de paquets.

1
.es(q='metricset.name:network AND system.network.name:lo', metric='avg:system.network.in.bytes').divide(.es(q='metricset.name:network AND system.network.name:lo', metric='avg:system.network.in.packets')).label('Taille moyenne des paquets')

NB : Il existe de nombreuses opérations qu'il est possible d'utiliser pour traiter les courbes : abs, movingaverage, multiply, subtract, sum, etc. Se référer à la documentation complète pour plus d'informations

Conclusion

Kibana 5 est assez agréable à utiliser mais ne change pas radicalement l'expérience utilisateur par rapport à la version 4. Les retouches graphiques sont appréciables mais les évolutions réellement impactantes sont à chercher du coté des plugins Sense et Timelion. Ce dernier est un outil très puissant pour mettre des courbes de différentes sources en corrélation (ou d'index différents dans un même cluster Elasticsearch) et je suis sûr que vous trouverez des tas de cas d'usage bien plus pertinents que ceux que j'ai pu montrer dans cet article.

Comments