jeudi 5 février 2015

Supervision JVisualVM de Tomcat 7 sous Vagrant

Le contexte en quelques mots :

  • J’ai une VM sous Vagrant (ou plus généralement sur un VirtualBox) headless (type Ubuntu)
  • Le VM fait tourner un serveur Tomcat 7
  • Je souhaite superviser ce serveur Tomcat 7 via JMX depuis le Host VirtualBox en utilisant JVisualVM (ou tout autre client JMX).

Paramétrer Tomcat :

Ce qu’il faut savoir lorsque l’on (active le serveur JMX de Tomcat via setenv.sh)[http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html#Enabling_JMX_Remote], c’est qu’il créé un port JMX additionnel avec un numéro aléatoire. C’est problématique dans le cas ou nous souhaitons nous connecter derrière un firewall, mais c’est également problématique dans le cas d’un accès depuis Vagrant car les ports entre le Host et le Guest sont forwardés explicitement dans le Vagrantfile (ou dans la configuration VirtualBox). Et comme nous ne pouvons pas savoir quel port forwarder, nous ne pouvons pas assurer une connexion JMX.

L’idée est de s’appuyer sur le JmxRemoteLifecycleListener pour fixer les numéros de ports utilisé lors de la connexion JMX, à travers les attributs rmiRegistryPortPlatform (le port normallement fixé via -Dcom.sun.management.jmxremote.port) et rmiServerPortPlatform (le port au numéro créé aléatoirement).

Editer le fichier <TOMCAT_HOME>/conf/server.xml et ajouter le noeud Listener. Dans mon exemple je mets les ports 10100 et 10101. A adapter si besoin :

<Server port="8005" shutdown="SHUTDOWN">
  ...

  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
    rmiRegistryPortPlatform="10100" rmiServerPortPlatform="10101" />

  ...
</Server>

Dans le fichier <TOMCAT_HOME>/conf/setenv.sh, il n’est plus nécessaire de spécifier le port, on limite au strict minimum, à savoir : l’activation de JMX, et les flags permettant de se connecter dans authentification et sans SSL (à adapter selon les besoins pour ces derniers).

 CATALINA_OPTS="$CATALINA_OPTS \
   ...
   -Dcom.sun.management.jmxremote \
   -Dcom.sun.management.jmxremote.authenticate=false \
   -Dcom.sun.management.jmxremote.ssl=false"

Paramétrer Vagrant

Pour assurer une communication entre le Host et le Guest, il faut assurer un Port forwarding.
Pour plus d’informations sur la communication entre Guest -> Host et Host -> Guest, aller voir cette réponse sur StackOverflow.
Notre Vagrantfile peut donc maintenant être configurer pour assurer le forward des ports du Guest vers le Host :

  config.vm.network "forwarded_port", guest: 10100, host: 10100
  config.vm.network "forwarded_port", guest: 10101, host: 10101

Paramétrer JVisualVM

Malgré que les ports soient forwardés sur notre Host avec les mêmes ports, nous ne pouvons pas utiliser les adresses 127.0.0.1 ou localhost pour la connexion depuis JVisualVm : ces adresses sont associés à l’interface réseau LoopBack (ma machine local - mon Host - n’expose pas directement ces ports. Ils ne sont visible en local que par l’adapteur VirtualBox).
Il est donc nécessaire d’utiliser l’adresse IP associé à l’interface réseau VirtualBox. Pour connaitre cette adresse , sous Windows :

C:\> ipconfig /all
  ...
Carte Ethernet VirtualBox Host-Only Network :

   Suffixe DNS propre à la connexion. . . :
   Description. . . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
   Adresse physique . . . . . . . . . . . : 08-00-27-00-7C-55
   DHCP activé. . . . . . . . . . . . . . : Non
   Configuration automatique activée. . . : Oui
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.56.1(préféré)
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . :
   NetBIOS sur Tcpip. . . . . . . . . . . : Activé

Ici notre adresse est 192.168.56.1 : c’est cette adresse IP que nous devons utiliser pour JVisualVM.

Dans JVisualVM, Créer un nouveau Remote avec cette adresse :

  • Clic droit sur Remote > Add Remote Host > 192.168.56.1.
  • Advanced Settings > Port 10100, puis valider
  • Clic-droit sur le Remote nouvellement créé, puis Add JMX Connection.
  • renseigner Connection:192.168.56.1:10100, puis valider.
  • La connexion apparait dans la partie Local. Sélectionner le connexion, puis clic-droit > Open.

Aucun commentaire:

Enregistrer un commentaire