Connexion de JConsole à JBoss AS 7 sur Amazon EC2

Un article de JTips.
(Redirigé depuis JBoss/JMX-EC2)
Connexion de JConsole à JBoss AS 7 sur Amazon EC2
Auteur : Alexis Hassler
Formation(s) sur le sujet :
Administration JBoss AS 7
Sewatech.png


L'objectif est d'établir une connexion entre jconsole et JBoss AS 7 déployé sur une instance Amazon EC2.

Environnement

L'environnement dans lequel j'ai mis en place la solution est le suivant :

  • JBoss AS 7.1 ou 7.0
  • Amazon EC 2 t1.micro instance, Amazon Linux
  • IP publique fixe (Elastic IP), avec un nom DNS personnalisé (aws1.sewatech.net)
  • Client jconsole (JDK 6) sur MacOS X, derrière un pare-feu


Jb7-ec2.png.png


Configuration de JBoss

Dans JBoss AS 7.1, les accès distants à JMX sont désactivés. L'activation de l'accès distant se fait en deux parties.

Activation des connecteurs

Tout d'abord, il faut associer des connecteurs au sous-système JMX, en changeant, dans le fichier standalone/configuration/standalone.xml, la portion :

<subsystem xmlns="urn:jboss:domain:jmx:1.1" show-model="true"/>

en :

<subsystem xmlns="urn:jboss:domain:jmx:1.1" show-model="true">
    <jmx-connector registry-binding="jmx-connector-registry"
                   server-binding="jmx-connector-server"/>
</subsystem>

Cette opération est inutile avec les versions 7.0.

Connexion distante

Ensuite, il faut mettre ces connecteurs à l'écoute de connexions distantes. Par défaut, ils n'acceptent que les connexions locales. Ceci peut se faire grâce à un paramètre au lancement de JBoss (-Djboss.bind.address.management=0.0.0.0). J'ai préféré modifier la configuration de l'interface réseau management utilisée par les connecteurs JMX.

<interfaces>
    <interface name="management">
        <inet-address value="0.0.0.0"/>
    </interface>
    ...
</interfaces>

Dans cette partie de la configuration, il n'y a aucune spécificité liée à Amazon EC2. La première spécificité est due au firewall et à la translation d'adresse pour accéder au serveur. Le nom (public) utilisé pour atteindre le serveur n'est pas celui du serveur lui-même, appelé nom privé. Il en est de même pour les adresses IP : une IP publique et une IP privée.

Avec JBoss AS 7.1.0.CR1

Attention : cette partie est obsolète. La technique présentée ici n'est valable qu'en version 7.1.0.CR1. Elle ne fonctionnait pas dans les versions précédentes et ne fonctionne plus à partir de la 7.1.0.Final.

Pour que la translation d'adresse ne pause pas de problème à l'accès JMX, il faut ajouter un paramètre au lancement de JBoss. En fin du fichier bin/standalone.conf, j'ai ajouté la ligne suivante :

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=aws1.sewatech.net"

Cette option ne fonctionne qu'à partir de la version 7.1.0.CR1 ; cf. AS7-3120.

Configuration du firewall Amazon

JBoss utilise deux ports fixes pour JMX : 1090, pour la connexion initiale et 1091 pour la communication ultérieure. Il faut donc autoriser le client à accéder à ces ports.

ec2-authorize quicklaunch-1 -P tcp -p 1090-1091 -s xxx.yyy.zzz.www/32

JConsole

Pour finir, on peur démarrer jconsole normalement.

jconsole aws.sewatech.net:1090

Avec JBoss AS 7.0

Ceci est aussi valable avec la version AS 7.1.beta1, avant que le ticket AS7-3120 ne soit résolu.

Configuration du client

L'accès direct au serveur n'est pas possible. Il faut mettre en place un proxy SOCKS.

ssh -vfND 9999 -i .ec2/aws1.pem [email protected]

Configuration du firewall Amazon

Dernière étape, il faut autoriser la connexion au serveur. Du fait du proxy SOCKS, il faut autoriser le serveur lui-même à accéder au port.

ec2-authorize quicklaunch-1 -P tcp -p 1090 -s 107.20.184.81/32

C'est l'adresse IP publique qui est spécifiée ici.

JConsole

On démarre JConsole en lui indiquant le proxy SOCKS.

jconsole -J-DsocksProxyHost=localhost -J-DsocksProxyPort=9999 aws1.sewatech.net:1090

Il y a un peu de latence au démarrage, mais ça fonctionne.



Quelques autres articles sur JBoss