Skip to content

La vigie du corsaire

Retours d'expériences Java, J2EE et autres…

Menu
  • Accueil
  • Vigie
  • Contact

Vigie

Passez vos applications Java au microscope électronique.

Passez vos applications java au microscope électronique

La « Vigie » est née d’un besoin dans mes activités de consultant Java/JEE.
L’une de mes missions consiste à diagnostiquer et résoudre des problèmes de fonctionnement, de robustesse ou de performance d’applications java.

Une des difficultés rencontrées pendant ces analyses est le manque d’informations. L’application est une boîte noire, son comportement est invisible depuis l’extérieur.
Diagnostiquer un problème sur une application requiert bien souvent de reconstituer une histoire en partant de faits. Les traces systèmes, serveurs et applicatives constituent généralement les principales sources d’informations.

Même si les serveurs d’application Java Open Source ou commerciaux exposent généralement pas mal d’informations utiles il en est très souvent autrement des applications qui y sont déployées.

Or, bien souvent ce sont elles qui détiennent la clef du problème.

De plus, les cycles de vie des projets informatiques ne permettent pas toujours de modifier le code rapidement afin d’ajouter des traces supplémentaires aux endroits clefs.

Par conséquent, comment faire en sorte d’obtenir les informations manquantes qui permettraient de réaliser les analyses et de résoudre les problèmes ?

La réponse que j’ai trouvé est de modifier le bytecode java au sein de la Machine Virtuelle Java (JVM)
Cette approche permet de ne pas avoir à repartir sur un cycle complet de développement (Développement, intégration, qualification, production) pour enrichir l’application des traces manquantes.

Cas d’utilisation

Cet outil permet par exemple de répondre aux questions suivantes :

Mon application doit se connecter sur un serveur (HTTP, service web, EJB, etc…) mais ça ne marche pas.
Vigie surveille toutes les ouvertures de sockets afin de les tracer. Cela permet de vérifier par exemple que l’url utilisée est bien la bonne.
 Comment connaître tous les fichiers properties chargés par mon application ?
Vigie surveille le chargement des fichiers .properties par la JVM afin de les tracer
Comment savoir quelle classe accède à telle ou telle propriété d’un fichier .properties ?
Vigie surveille la lecture des propriétés afin de les tracer.
 Comment détecter les servlets dont le délai d’exécution dépasse un certain seuil ?
Vigie surveille les temps d’exécution des servlets de votre choix et trace celles qui dépassent le seuil fixé.
 Une exception du type … est déclenchée par l’application mais je ne sais pas depuis quelle classe et quelle méthode ?
Vigie surveille n’importe quelle exception et trace son déclenchement en fournissant la pile complète des appels.
 Quelles sont les requêtes SQL exécutées par mon application ?
Vigie surveille les pilotes JDBC afin de tracer l’exécution des requêtes SQL (avec la valeur des paramètres) ainsi que les demandes de connexions SQL.
 Mon serveur d’application met beaucoup de temps à démarrer. Comment déterminer l’origine du problème ?
Vigie déclenche une série de thread dumps dès le démarrage de la JVM afin de voir où se situe le problème.
 Comment connaître toutes les méthodes exécutées suite à la réception d’une requête par le serveur d’application ?
Vigie trace toutes les exécutions de méthodes au sein de la JVM. Ceci permet de reconstituer partiellement ou intégralement le « parcours » de la requête. En bous, les paramètres d’entrée des méthodes ainsi que les valeurs de retour sont tracées.
 Je constate que le conteneur web créé ou détruit des sessions HTTP mais je ne sais pas quand ni quel code en est à l’origine.
Vigie surveille les créations/suppressions de sessions HTTP des applications Web afin de répondre à ces questions.
 J’ai besoin de connaître ou vérifier les fichiers chargés par mon application (.properties, .xml, etc…)
Vigie surveille les fichiers ouverts par l’application
 J’ai besoin de savoir quand une classe est chargée par la JVM, par qui (classloader et thread) et depuis quel emplacement (.jar)
Vigie surveille le chargement des classes par la JVM.
J’ai besoin de savoir quels sont les certificats de sécurité utilisés ainsi que leur date d’expiration
Vigie surveille les Keystores et les certificats qui y sont stockés.

Vigie dispose d’autres capacités dont certaines sont étroitement liées aux serveurs d’application (Oracle WebLogic Server ou JBoss par exemple)

Son champs opérationnel n’est pas limité et il évolue régulièrement en fonction des besoins rencontrés pendant les missions.

Certains de ces cas peuvent faire sourire mais ils sont tous le résultat d’expériences vécues chez les clients auprès d’équipes de développement ou des Ops en charge des infrastructures. Il est également acté que la plupart de ces informations peuvent être obtenues autrement mais souvent au pris de modifications de l’application elle-même ou de son environnement d’exécution.

Déploiement

Techniquement, Vigie est constitué d’un agent Java, d’une application Web de pilotage et d’un client Java. L’application web est optionnelle et n’est pas requise pour le fonctionnement de l’outil.

Le client java permet de communiquer avec l’agent via le réseau afin de déclencher des opérations ou de récupérer des informations. Il est facilement intégrable dans un script exécuté régulièrement sur une machine, via une cron table par exemple. Il est possible d’utiliser le protocole TLS pour authentifier le client auprès de l’agent et chiffrer les échanges réseaux entre le client et l’agent.

L’agent peut être implanté dans la JVM

  • soit directement au niveau des paramètres de démarrage de la JVM. Redémarrage de la JVM requis ;
  • soit en s’accrochant à une JVM qui fonctionne sans nécessiter un redémarrage de celle-ci. Très pratique pour ne pas engendrer d’interruption de service à cause de l’arrêt de la JVM.

Informations obtenues

Une fois implantée dans la JVM, Vigie peut récupérer des informations telles que :

  • les méthodes invoquées, avec les paramètres d’entrée et la valeur de retour
  • la pile des appels (stack trace) menant à une invocation de méthode
  • Un thread dump complet
  • L’identifiant et le nom du thread
  • L’identifiant de corrélation utilisé par WebLogic Server (ECID) s’il est disponible
  • L’identifiant de l’utilisateur s’il est authentifié
  • etc…

Vigie génère des logs dans lesquelles sont stockées les informations recueillies au sein de la JVM. La compression et la rotation des fichiers de logs sont gérées automatiquement par l’outil.

Impact sur le comportement des applications

Quel impact sur l’application ?
Vigie a pour vocation d’être utilisé sur les environnements de tests ou de développement.
Il peut (et a déjà été) être utilisé sur des environnements de production, même fortement sollicités, à condition de limiter son champs opérationnel.
Il dispose également de garde-fous qui peuvent limiter la quantité de traces générées afin de ne pas impacter les performances ou saturer les systèmes de fichiers.

Contact

Si vous voulez en savoir plus, n’hésitez pas à prendre contact avec moi via le formulaire de contact.

À propos de l’auteur

Informaticien par passion, je gravite dans l’univers Java/JEE depuis 2000.

Profil linkedin.

CV

Rechercher

Quelques liens utiles

  • Another technical blog about Middleware

    Tips for Middleware and Exalogic systems

  • The WebLogic Server Blog
  • Java Platform Group, Product Management Blog
  • Korben Info

    Incontournable.

  • Zataz

    Pour rester informé au niveau sécurité des systèmes et des applications.

  • Sitedetout

    Infos et tutos autour de Java, j2ee, Linux, etc...

Étiquettes

14.1.1 configuration console d'administration CPU Critial Patch Update Critical Patch Upate critical patch update CVE CVE-2019-2725 dynatrace Développement Eclipse Fusion Middleware Go HTTP java JBoss Linux Red Hat logs métrique OEPE OPatch Oracle Oracle Enterprise Pack for Eclipse Oracle ODI Oracle SOA Suite Outil de développement patching protocole python ReadyApp Framework release réseau serveur session http Shared Library SOA Suite SSL supervision sécurité weblogic WebLogic Server web service WLST www

Archives

  • octobre 2022
  • janvier 2022
  • janvier 2021
  • juillet 2020
  • avril 2020
  • février 2020
  • novembre 2019
  • octobre 2019
  • septembre 2019
  • juillet 2019
  • mai 2019
  • avril 2019
  • mars 2019
  • février 2019
  • janvier 2019
  • décembre 2018
  • octobre 2018
  • août 2018
  • juillet 2018
  • avril 2018
  • mars 2018
  • février 2018
  • décembre 2017
  • novembre 2017
  • octobre 2017
  • septembre 2017

La vigie du corsaire 2025 . Powered by WordPress