JConsole SSH tunnel

La jconsole est une console JAVA pouvant se connecter en JMX à une JVM afin d’observer des données de performances et d’utilisation de la JVM, fournies par celle-ci ou encore par vos soins. Le protocole JMX étant aussi bien conçu sur le protocole NFSv3 il passe très mal les firewalls. Heureusement, SSH peut venir à notre secours et permettre de passer outre ces restrictions en offrant un proxy socks.

Tunnel et connexion manuelles

Dans un premier temps ouvrez un terminal et lancez un proxy socks passant par le serveur sur lequel vous souhaitez interroger la JVM:

ssh -D 1234 10.4.5.6

Lancez ensuite la jconsole sur votre machine en précisant d’utiliser le proxy socks, en local mais sur le port JMX distant (ici 5588)

jconsole -J-DsocksProxyHost=127.0.0.1 -J-DsocksProxyPort=1234 service:jmx:rmi:///jndi/rmi://localhost:5588/jmxrmi

Vous pouvez désormais vous connecter en jconsole à n’importe quel serveur pour lequel vous avez un accès SSH.

Scripter la fonctionnalité

Afin de vous simplifier la vie, nous allons ajouter quelques fonctions directement à notre shell. Ouvrez votre fichier .zshrc, .bashrc ou tout autre .XXXrc suivant votre shell et ajoutez les fonctions suivantes:

alias jconsole_tunnel="ssh -D 1234 "
function jconsole_rt () {
    if [ -z $1 ]; then
        JCONSOLE_PORT=5588
    else
        JCONSOLE_PORT=$1
    fi
    jconsole -J-DsocksProxyHost=127.0.0.1 -J-DsocksProxyPort=1234 service:jmx:rmi:///jndi/rmi://localhost:$JCONSOLE_PORT/jmxrmi
}

La commande jconsole_tunnel vous permettra de lancer le tunnel directement sur l’hôte spécifié, et la commande jconsole_rt lancera votre jconsole au travers ce tunnel, en utilisant le port 5588 par défaut, ou celui que vous spécifiez.

jconsole_tunnel 10.2.3.4
jconsole_rt 8756