Come monitorare Tomcat su un server remoto protetto da firewall

Dopo aver visto come monitorare un applicativo java generico, vediamo quale approccio si può avere nel caso di un servizio come Apache Tomcat che risieda su un server remoto protetto da firewall.

I requisiti per poter monitorare Tomcat su un server remoto protetto da firewall sono tre:

Innanzitutto dobbiamo abilitare la porta jmx di Apache Tomcat. Per
farlo, è sufficiente aggiungere la riga seguente allo script di startup
del servizio:

CATALINA_OPTS=”-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=HOSTNAME”;


Queste configurazioni servono per abilitare la porta jmx (specificata in
jmxremote.port) senza autenticazione e senza accesso ssl (da impostare
in questo modo solo nel caso in cui la porta jmx sia bloccata da
firewall, altrimenti tutti potrebbero averne accesso), con un host
uguale a HOSTNAME (verificate che tale hostname sia specificato nel file
di host del server). A questo punto riavviate il servizio per applicare
le nuove configurazioni. Ora dobbiamo fare in modo di accedere alla
porta jmx con il nostro client di monitoraggio Jvisualvm. Non solo.
Tomcat infatti abilita alcune porte in maniera randomica allo startup
che servono al client di monitoraggio.
Dobbiamo quindi capire quali sono le porte a cui ci serve accedere. Per far questo ci viene in aiuto il comando netstat (nel mio caso eseguito su un server linux):

server:/# netstat -lntp | grep java

tcp6 0 0 :::44739 :::* LISTEN 11762/java

tcp6 0 0 127.0.0.1:8005 :::* LISTEN 11762/java

tcp6 0 0 :::12345 :::* LISTEN 11762/java

tcp6 0 0 :::8009 :::* LISTEN 11762/java

tcp6 0 0 :::8080 :::* LISTEN 11762/java

tcp6 0 0 :::48790 :::* LISTEN 11762/java

Con il comando netstat -lntp possiamo visualizzare tutte le
porte TCP su cui sono in ascolto i servizi della macchina. Con l’opzione
-p visualizziamo qual’è l’applicativo che sta usando tale porta. Quindi
ci basta aggiungere un grep java per capire quali sono le
porte utilizzate da una JVM. Nel mio caso non c’erano altri applicativi
java sul server. Escludendo dalla lista le porte classiche utilizzate da
Tomcat (8080, 8009, 8005), rimangono la 12345 (porta jmx impostata da
configurazioni) e le 48790 e 44739. Quindi sono queste tre le porte a
cui serve accedere. Come possiamo raggiungerle se il firewall le blocca?
Disponendo di un accesso ssh, possiamo utilizzare la possibilità
fornita dal tunnel verso un server remoto, con il quale
poter accedere in locale a porte non accessibili direttamente. Se il
client risiede su un pc Windows potete utilizzare le impostazioni
presenti su Putty, per un Linux ci sono le opzioni del comando ssh. Una
volta configurato il tunnel per portare in locale le tre porte,
aggiungiamo sul file di host del nostro pc il valore impostato in
HOSTNAME sulle configurazioni del tomcat, con IP di riferimento locale
(127.0.0.1). Fatto questo, abbiamo Jvisualvm, e sulla colonna Applications facciamo doppio click su Remote. Si aprirà la finestra di inserimento dei dati di accesso al Remote Host. In Host Name inserite il nome dato a HOSTNAME più la porta jmx impostata sulle
configurazioni di Tomcat separati da : (HOSTNAME:12345). Salvete, e dopo
poco sulla colonna delle Applications vedrete apparire la voce del nuovo host remoto inserito. Apritelo e monitorate!

3 thoughts on “Come monitorare Tomcat su un server remoto protetto da firewall

  1. Dio, Allah o qualunque altra divinità a te affine ti benedica.
    Ho perso quasi un giorno a leggere tutti i tutorial esistenti per farlo funzionare e alla fine il mio problema l’hai centrato tu:
    “Tomcat infatti abilita alcune porte in maniera randomica allo startup
    che servono al client di monitoraggio.”

    Grazie mille!

Lascia un commento