Metrics, Pour Mesurer Efficacement Les Performances : Les Bases
présentation de Metrics
Je vous propose dans cette série de 4 articles, de vous présenter la librairie Metrics,
initié par la société Yammer.
Celle-ci permet de fournir des métriques au niveau applicatif et JVM.
Ce premier article, présente les différents types de mesures disponibles dans Metrics, leur usage et leur installation.
pourquoi mesurer ?
A l’instar des grands du web, il devient primordial de mesurer les choses avant d’agir.
Cela permet de matérialiser, identifier et comprendre le fonctionnement interne en production de nos applications. Cela permet aussi de lever des freins techniques ou fonctionnels, notamment en comprenant la valeur métier de certaines fonctionnalités, les dysfonctionnements techniques ou le manque de performances. Pour cela, rien de tel qu’une mesure fiable, numérique, pour comprendre, et prendre des décisions.
La librairie Metrics, est une bonne solution pour répondre à ce besoin.
installation de metrics
Pour installer Metrics, il faut rajouter à son fichier maven pom.xml
, la section suivante :
|
|
montée de version, renommage de package
A noter qu’à partir de la version 3, Metrics a pour package de base com.codahale.metrics
, et non com.yammer.metrics
(cas des versions 2.x).
Isolation des métriques par application
Toutes les métriques de Metrics, sont stockées dans une instance de MetricsRegistry. Pour que plusieurs applications au sein de la même JVM, aient des métriques dissociées, il faut que chacune d’elles créent leur propre instance (chaque application étant isolée car possédant son propre classloader). Ceci peut soit se faire via le framework d’injection de dépendances (Spring, Guice), soit via un servletListener pour des applications JEE, ou via un champ statique public final de chaque application, accessible depuis l’extérieur de la classe.
|
|
les métriques disponibles
Le registre installé, nous pouvons créer les métriques dont nous avons besoin.
Voici les différents types de métriques disponibles :
- la jauge
- le compteur
- la mesure
- l’histogramme
- la mesure
- le timer
Lors de cette création, nous pouvons les identifier de façon unique dans le registre par les éléments suivants :
- groupe : la valeur par défaut est le package de la classe
- type : nom de classe
- nom : décrit le but de la métrique
- scope (optionel) : permet de différentier des métriques de plusieurs instances d’une même classe
la jauge
La jauge représente la valeur instantanée de ce qui est mesuré. Cette mesure simple, est à utiliser quand nous ne maîtrisons pas directement son incrément et son décrément.
C’est le cas quand la valeur représente un système externe, ou quand celle-ci est maîtrisée par une librairie tierce.
Un exemple d’usage de la jauge est le nombre de sessions actives dans une application web.
|
|
la jauge JMX
Cette jauge spécialisée permet d’intégrer facilement dans le registre Metrics, une valeur exposée via JMX. Metrics peut donc devenir l’unique référentiel de métriques applicatives, en récupérant des données tierces via JMX, afin de les exposer via d’autres canaux (JMX, Graphite, Ganglia etc…).
|
|
la jauge ratio
Cette jauge permet d’intégrer dans Metrics, le résultat du rapport entre deux variables.
la jauge cachée
Cette jauge permet de réutiliser pendant un temps paramétrable via un cache, un résultat coûteux à récupérer.
|
|
la jauge dérivée
Cette jauge permet de calculer un résultat à partir d’une jauge déjà présente dans le registre de Metrics.
|
|
le compteur
représente une mesure maîtrisée par l’application, qui s’incrémente et se décrémente.
Un exemple de compteur pourrait être le nombre de tâches planifiées en cours d’exécution à un instant t.
Tous les compteurs ont une valeur initiale de 0.
|
|
l’histogramme
L’histogramme représente la distribution statistique de valeurs d’un ensemble de données.
Cela nous permet d’avoir des informations comme la moyenne, le minimum, le maximum, la médiane, la déviation standard, les quartiles ou percentiles.
Afin d’éviter un plantage, lorsque le calcul porte sur un grand nombre de données, Metrics réalise un échantillonage statistique représentatif, via différents algorithmes, appelés Reservoirs.
Les réservoirs fournis, hormis le dernier présenté, ont la particularité d’avoir une occupation mémoire restreinte.
Des échantillons uniformes
Il existe l’algorithme de Vitter, qui produit des échantillons uniformes. Celui-ci est intéressant pour faire une analyse à long terme, mais n’est pas adaptée pour savoir si la distribution des données porte un changement significatif récent.
|
|
Des échantillons récents
Il existe aussi un algorithme mettant un fort poids statistique sur des données récentes. Celui-ci est à privilégier lorsque l’on veut avoir une vision récente de la distribution des évenements.
Cette algorithme est utilisé par défaut dans les Timers.
|
|
Des échantillons à fenêtre glissante
cet algorithme permet d’étudier la distribution des N dernières données.
|
|
Des échantillons temporels à fenêtre glissante
cet algorithme permet d’étudier la distribution des N dernières secondes.
Un bémol est à apporter concernant cet algorithme, qui contrairement aux autres, porte sur la totalité des données des N dernières secondes, ce qui peut représenter un volume en mémoire important. Cet algorithme est aussi le plus lent.
|
|
la mesure
La mesure mesure la fréquence à laquelle surviennent les évenements sur les périodes suivantes :
- la durée de vie complète de l’application
- les 15 dernières minutes
- les 5 dernières minutes
- la dernière minute
Le nombre de requêtes par seconde pendant les 5 dernières minutes est un bon exemple de mesures.
L’alimentation de cette mesure se fait de la façon suivante :
le timer
Le timer représente un histogramme des durées et une mesure de la fréquence d’apparition.
Un résulat issu de l’usage du timer serait :
à 1500 requêtes par seconde, notre latence augmente de 25 à 357 ms.
|
|
Conclusion
J’espère que ce premier article sur Metrics, vous permettra d’avoir une vue d’ensemble des différentes métriques disponibles.
Les trois autres articles de cette série porteront, dans l’ordre, sur l’intégration de Metrics dans une application web JEE, l’intégration de Metrics avec spring et guice et l’intégration de Metrics avec JDBC, logback et jersey.