Mettez de l'APM dans vos projets (et vos devs)

le 31/08/2015 par Alain Faure
Tags: Software Engineering

Un APM, Application Performance Management, est un outil qui permet de surveiller et analyser les performances des applications. Selon les APMs il est possible de collecter les temps de réponse de l’utilisateur final, les temps de réponse des divers serveurs ainsi que l’activité (CPU, Mémoire). Il est aussi possible, principalement pour Java et .Net, de détecter les méthodes qui semblent poser des problèmes ainsi que les requêtes SQL les plus couteuses ou les threads qui sont bloqués. Le Gartner défini un APM comme un outil couvrant les dimensions suivantes :

  • Monitoring jusqu'à l'action utilisateur (End User experience Monitoring = EUM)
  • Découverte et visualisation de la topologie des applications
  • Profiling des transactions utilisateurs
  • Monitoring des ressources utilisées par les différents composants
  • Analyse et visualisation des données collectées

Vous allez me dire que VisualVM pour Java ou CLR profiler pour .NET couvrent au moins une partie de ces dimensions. C’est tout à fait exact mais ces outils nécessitent que vous soyez derrière eux, littéralement ! Ils ont pour autres inconvénients qu’il est souvent impossible et dangereux d’utiliser ces outils en environnement de production. A l’opposé un APM va collecter, stocker et agréger ces informations pour fournir des graphes qu’il est facile d’analyser à postériori. Un APM peut aussi envoyer des emails d’alertes quand certains seuils sont détectés.30

Ce premier article de la série donne une vue globale des fonctionnalités d'un APM et montre l'apport de ces outils dans les environnements de production, leur cible initiale, mais aussi l'intérêt d'élargir leur utilisation à d'autres environnements que la production. Les articles suivants se focaliseront sur les divers produits du marché.

APM en environnement de production

Un APM permet de mettre en place une culture de la métrique sans avoir à modifier les applications ni effectuer des développements spécifiques.

La cible initiale d'un APM est l'environnement de production. Un APM permet d'obtenir des mesures sur le fonctionnement des systèmes et applications sans avoir à modifier ou recompiler les applications et cela sur les principales technologies du marché. En plus de la collecte et de l'historisation des métriques, un APM peut automatiquement analyser des variations ou des comportements anormaux et générer des alertes. Un APM permet aussi de visualiser les données de manière synthétique afin d'analyser les causes des problèmes.

Requêtes HTTP et temps passé à les exécuterÉvolution des requêtes HTTP au cours du temps

Un APM améliore la communication au sein de l'entreprise

Au-delà de cet effet d'accélérateur dans la collecte et l'exploitation des métriques dans l'entreprise, l'APM permet une meilleure résolution des problèmes. La première raison est que la fourniture de mesures fiables met un terme aux jeux de devinettes hautement spéculatifs et générateurs de tensions inutiles; cela permet aux équipes de se concentrer sur la recherche de solution et non sur la recherche de coupable. La seconde raison pour laquelle un APM améliore la résolution des problèmes est qu'il facilite la communication entre les équipes de production, de développement et le métier. Au travers de l'APM il est possible de partager avec les équipes de développement et les équipes fonctionnelles ce qui a été mesuré en production pour aboutir à une compréhension globale du fonctionnement du système allant de la vision métier/utilisateur jusqu'à un niveau de détail très fin : requête SQL ou appel de méthode.

Pourquoi (pour quoi?) mettre un APM dans les environnements de développement ou de test ?

Un APM améliore à moindre coût la résolution des problèmes de performance.

Prenons un cas où une fonction fraichement implémentée est très lente : un APM va permettre de voir directement d’où vient le problème : client, traitement serveur applicatif, base de données. Bien sûr dans les environnements de test il est possible d’activer le bon niveau de logs ou de positionner un profiler ; l’avantage de l’APM est que l’information va être directement à disposition du développeur. Pour des problèmes plus compliqués comme des fuites mémoires l’APM va montrer les informations du Garbage Collector (GC) de manière graphique et synthétique : pas de perte de temps à analyser les logs du GC. Dans les environnements de qualification ou de test de performance il va être possible d’obtenir des informations statistiques sur les temps de réponse et les ressources utilisées par l’application. Très bien, on sait déjà faire tout cela… mais bien souvent on ne le fait pas car cela nécessite des expertises et prend du temps : il faut des scripts pour collecter des mesures, il faut stocker il faut trier, filtrer, agréger et visualiser… et surtout avoir des compétences pour mettre toute cela en œuvre.  C’est là où intervient l’argument principal en faveur d'un APM : mise à disposition d'information synthétique sans besoin d'expertise pointue et à un moindre coût.

Coût de mise en place d'un APM

Le coût de mise en place d'un APM comprend:

  • Le coût de licence
  • Le coût de l'infrastructure
  • Les coûts d'installation et de paramétrage du produit ainsi que le coût d'administration de l'infrastructure

Le coût de licence est très variable suivant le vendeur et les fonctionnalités proposées. Par exemple certains vendeurs proposent une licence gratuite pour une durée de rétention des données limitées à un jour. D'autres vendeurs fournissent des licences spéciales pour le développement.

La plupart des fournisseurs d'APM proposent des solutions en mode SaaS. Cette approche permet de simplifier la mise en place de la solution et de limiter drastiquement les coûts matériels et humains associés à cette mise en place : pas de serveur à provisionner, installer et administrer. Il n'y a plus qu'à créer un compte sur le site en ligne, télécharger un zip et enregistrer un agent (CLR ou java agent) sur votre serveur. Et c’est tout. Vous pouvez vous connecter sur le site de l’APM et voir comment se comporte votre application.

Du point de vue sécurité c’est votre application qui se connecte vers le cloud et envoie ses données de manière sécurisée et authentifiée : pas de port entrant à ouvrir dans les firewalls. La connexion à l’interface utilisateur de l’APM est elle aussi sécurisée par HTTPS ainsi que votre utilisateur et mot de passe.

Au final pour un investissement d’une paire d'heures et d'une fraction du coût d'un Jour/Homme, une solution d'APM en SaaS permet d’obtenir des premiers résultats tout simplement inenvisageables autrement. Dans un contexte de production, le paramétrage de l'outil  peut demander un effort, et un coût, plus conséquent pour affiner et valider les réglages afin de garder un impact minimum sur la production. Certains APM permettent même de quantifier leur impact en terme de consommation de ressources.

Les produits que nous avons testés sont New Relic, Ruxit, Dripstat, AppDynamics et Dynatrace. Ils présentent l’avantage d’être facile à mettre en œuvre, d’être dans le cloud et d’avoir un système de licence abordable. A noter que le secteur des APM est en ébullition et qu’il y a de nombreux autres produits.

Tour du propriétaire

New Relic, en compagnie de AppDynamics et Dynatrace fait partie des leaders suivant le Gartner (Magic Quadrant for Application Performance Monitoring, 28 Octobre 2014)

A titre d'exemple nous utiliserons New Relic pour montrer le type de fonctionnalités intéressantes dans des environnements de test ou de développement.

Ceci est une vision partielle des APMs; de nombreuses fonctionnalités, comme le Real User Monitoring (RUM), ne sont pas illustrées ici.

Mise en place

La mise en place est très simple. Après l’inscription sur le site vous récupérez un zip contenant en particulier le fichier de paramètres newrelic.yml déjà personnalisé votre clé de licence ainsi que l’agent java : newrelic.jar. Extrayez le zip dans un répertoire de votre serveur et ajoutez la directive -javaagent:/<chemin vers le répertoire de new Relic>/newrelic.jar en paramètre de lancement de votre application. C’est tout. Après avoir utilisé votre application vous pouvez directement visualiser son comportement.

Transactions et pages WEB

Ici notre application publie des services RESTs. Sans aucun paramétrage le produit est capable d'analyser les diverses requêtes envoyées à l'application et de fournir une vue synthétique de l'activité.

Par simple click il est possible d'effectuer un drill down sur une requête et obtenir les méthodes les plus longues ainsi que le nombre d'appels de cette requête au cours du temps. Les APM modernes ont une interface très intuitive permettant une prise en main très rapide.

Drill down d'une requêteDrill down du traitement d'une requête HTTP

Base de données

L'outil permet de capturer les diverses requêtes effectuées sur la base de données et d'identifier les plus consommatrices. L'analyse temporelle permet en un coup d’œil de se rendre compte si les requêtes sont jouées de manière régulière ou uniquement à certains moments. Ici par exemple les 'vat Insert' ne sont exécutés qu'au lancement de l'application.

Liste des requêtes SQL et de leur temps d'exécutionListe des requêtes SQL et de leur temps d'exécution

Ressources

L'outil permet de visualiser l'évolution de l'utilisation de la mémoire et des différents espaces. Cela permet de diagnostiquer des problèmes de type fuite mémoire ou caches qui ne se vident jamais.

Evolution de l'utilisation de la mémoireEvolution de l'utilisation de la mémoire

Le temps passé en Garbage Collection permet d'identifier des problèmes de ralentissement de l'application dus à une trop forte activité sur la mémoire, sans qu'il y ait nécessairement de fuite mémoire.

Activité du Garbage CollectorActivité du Garbage Collector

Il est aussi possible de voir des informations sur l'utilisation des threads.

Threads utilisés par la JVMThreads utilisés par la JVM

Informations diverses

L'APM capture diverses informations très utiles comme les paramètres de lancement de la JVM et les différents Jars utilisés ainsi que leur version

Paramètres de la JVM et packagesParamètres de la JVM et packages

Conclusion

En production l'APM est une brique incontournable pour surveiller le fonctionnement des applications et être capable de diagnostiquer et comprendre les problèmes de performances qui peuvent survenir. Des développements spécifiques n'arriveront jamais à rivaliser avec un APM sur la collecte automatisée, le stockage et la visualisation de métriques. Il est à noter qu'il existe aussi des solutions spécifiques à une technologie, comme Javamelody pour J2EE, qui permettent d'intégrer une partie des fonctionnalités d'un APM dans l'application elle même.

Dans des environnements de tests ou de développement l'APM fait office de couteau suisse de la performance. Il permet aux équipes d'analyser le fonctionnement d'une application sans passer par de fastidieux paramétrages, des analyses de logs chronophage et divers outils nécessitant une expertise pointue.

Un APM est finalement un formidable outil de communication permettant aux diverses parties prenantes d'avoir une vue complète sur le fonctionnement d'une application ou le résultat d'exécution de tests de performances.

Pour en savoir plus...