Monitorare Alfresco via JMX: copertina

Guida per realizzare un server Alfresco + Tomcat + JMX.

Instroduzione

Lo scenario in cui operiamo è quello descritto nell'articolo "Guida per installare Alfresco 7 dal pacchetto zip in Linux Ubuntu" (https://www.digitaldsb.it/portal/informatica/guida-per-installare-alfresco-7-dal-pacchetto-zip-in-linux-ubuntu).
Nell'installazione default il monitorin JMX (Java Management Extensions) è disattivato.
Per attivarlo dobbiamo intervenire prima sul server configurando opportunamente Tomcat e Alfresco.
Successivamente ci spostiamo sul PC da cui operiamo (un Linux Ubuntu 24 o Maint 24) e useremo VisualVM o JConsole per connetterci e monitorare il nostro server.

NB: le indicazioni sul manuale ufficiale di Liferay e diverse guide in rete non funzionano. Questo perché fanno riferimento standard e pre-configurazioni attualmente superate.


JMX base

Server JVM

Iniziamo spegnedo tutto lo stack Alfresco


sudo systemctl stop alfresco-stack

 

aggiungiamo le properties Java per attivare JMX


sudo nano /opt/kbsb/alf/tomcat/bin/setenv.sh

aggiorniamo la variabile CATALINA_OPTS come segue


CATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=50500 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

le properties che ci interessano sono e significano:
- -Dcom.sun.management.jmxremote: attiva JMX
- -Dcom.sun.management.jmxremote.port=50500: definisce la porta 50500 come porta dove ascoltare JMX
- -Dcom.sun.management.jmxremote.ssl=false: disattiva la connessione securizzata con crittografia TLS
- -Dcom.sun.management.jmxremote.authenticate=false: disattiva l'autenticazione per accedere al monitoring

procediamo configurando Alfresco. Aggiungiamo le seguenti stringe in fondo al file alfresco-global.properties


sudo nano /opt/kbsb/alf/tomcat/shared/classes/alfresco-global.properties


[ ... ]
#
# Enable JMX on port 50500
#
alfresco.jmx.connector.enabled=true
alfresco.rmi.services.port=50500
alfresco.rmi.services.host=0.0.0.0

le direttive aggiunte significano:
- alfresco.jmx.connector.enabled=true: attiva il connettore JMX
- alfresco.rmi.services.port=50500: il servizio è sulla porta 50500
- alfresco.rmi.services.host=0.0.0.0: il monitoring può essere fatto da qualsiasi IP e qualsiasi host

riavviamo lo stack Alfresco


systemctl start alfresco-stack

passiamo ora al nostro PC client per attivare il client che ci farà vedere il monitoring.


Client JVM

Iniziamo facendo il login con un utente abilitato come amministratore.
Per vedere JMX abbiamo bisogno di un client. Possiamo usare JConsole: preinstallato, ma graficamente povero.
Possiamo usare VisualVM: da installare, ma graficamente più evoluto e con qualcosa in più.

Procediamo aprendo un terminale (da tastiera possiamo usare la combinazione CTRL+ALT+T).
Installiamo VisualVM:


sudo apt install visualvm

lanciamo VisualVM.
Da "File" clicchiamo su "Add JMX Connection..." e completiamo la form come segue:

- Connection: service:jmx:rmi:///jndi/rmi://www.example.com:50500/jmxrmi
- Display name: Mio server Alf
- Use security credentials: NO
- Do not require SSL connection: SI
- Connect immediately: SI
- Connect automatically: SI

A questo punto abbiamo finito e inizieremo a vedere subito status, grafici e report.

 

Considerazioni

Il processo di attivazione descritto è piuttosto semplice, ma così configurato è totalmente insicuro in quanto chiunque potrebbe accedere e fare di tutto.


JMX securizzato

Ci sono diverse securizzazioni su cui possiamo operare:
1. introdurre un'account per accedere al monitoring
2. definire quale host o rete può accedere
3. restringere i permessi in base all'account di accesso
4. criptare il traffico tramite SSL\TLS.

Procediamo creando un'account.


Server JVM

Iniziamo spegnendo tutto lo stack Alfresco


sudo systemctl stop alfresco-stack

 

aggiungiamo le properties Java per attivare JMX


sudo nano /opt/kbsb/alf/tomcat/bin/setenv.sh

aggiorniamo la variabile CATALINA_OPTS come segue


CATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=50500 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=/opt/kbsb/alf/tomcat/conf/jmxremote.access -Dcom.sun.management.jmxremote.password.file=/opt/kbsb/alf/tomcat/conf/jmxremote.password "

le properties che ci interessano sono e significano:
- -Dcom.sun.management.jmxremote.access.file: file con i ruoli (username e ruolo)
- -Dcom.sun.management.jmxremote.password.file: file con le account (username e password)

procediamo creando il file delle account:


sudo nano /opt/kbsb/alf/tomcat/conf/jmxremote.password


monitorRole  Password#Monitor01
controlRole  Password#Control01

procediamo creando il file con i ruoli:


sudo nano /opt/kbsb/alf/tomcat/conf/jmxremote.access


monitorRole   readonly
controlRole   readwrite

correggiamo la sicurezza per i due file creati


sudo chown tomcat:tomcat /opt/kbsb/alf/tomcat/conf/jmxremote.*
sudo chmod 600 /opt/kbsb/alf/tomcat/conf/jmxremote.*

riavviamo lo stack Alfresco


sudo systemctl start alfresco-stack

passiamo ora al nostro PC client per attivare il client che ci farà vedere il monitoring.


Client JVM

La configurazione del client è identica alla precedente, ma dobbiamo aggiungere le credenziali per autenticarci:

- Connection: service:jmx:rmi:///jndi/rmi://www.example.com:50500/jmxrmi

- Display name: Mio server Alf Auth
- Use security credentials: SI
- Username: controlRole
- Password: Password#Control01
- Save security credentials: SI
- Do not require SSL connection: SI
- Connect immediately: SI
- Connect automatically: SI

A questo punto abbiamo finito e inizieremo a vedere subito status, grafici e report.

 

Considerazioni

La securizzazione è un capitolo complesso, ma fondamentale.
Quanto sopra esposto è una minimalizzazione didattica.
Sarà utile, se abbiamo un'installazione di Alfresco in produzione, approfondire e migliorare la securizzazione.


WebGrafia

https://support.hyland.com/r/Alfresco/Alfresco-Content-Services/25.1/Alfresco-Content-Services/Configure/Overview/Using-JMX-Client-to-Change-Settings-Dynamically/Connect-through-JMX

https://tomcat.apache.org/tomcat-10.0-doc/monitoring.html 

https://geekflare.com/dev/enable-jmx-tomcat-to-monitor-administer/