I moderni Java application servers sono composti da costrutti complessi di servizi e business logic. Non è quindi possibile poterli monitorare attraverso sistemi convenzionali come ad esempio controllare se un processo sta girando o meno. Nei Java Application Server diversi componenti vengono raggruppati per contenere la logica e fornire l’intelligenza applicativa. Per tutti coloro che hanno già avuto esperienza con la programmazione java questo concetto sarà facilmente comprensibile, infatti le applicazioni java contengono costrutti gerarcici di oggetti e classi.
Per soddisfare l’esigenza di verificare la disponibilità e il corretto funzionamento delle applicazioni Java e dei loro servizi, sono state introdotte le estensioni Java Management ( JMX ). Questa tecnologia Java fornisce le risorse necessarie per la lettura degli oggetti applicativi e di sistema. Tali risorse sono rappresentati da oggetti chiamati MBeans (ovvero Managed Bean). La tecnologia Java Management Extensions (JMX) è una parte standard della piattaforma Java inclusa in tutti i server applicativi che si basano sulle tecnologie Java , come ad esempio il server GlassFish o il server Apache Tomcat.
Con la tecnologia JMX , una risorsa è accessibile da uno o più Managed Beans. Questi MBeans sono registrati in un cosiddetto MBean server. Il server MBean agisce come un agente di gestione e può funzionare sulla maggior parte dei dispositivi che sono stati attivati per il linguaggio di programmazione Java. In questo modo, gli agenti JMX accedono direttamente alle risorse e le rendono disponibili per le applicazioni di gestione remota. Per la comunicazione, la tecnologia JMX definisce i connettori standard (conosciuti come i connettori JMX) che abilitano l’accesso delle applicazioni di gestione remota (NetEye) ad accedere ai JavaBeans.
Come detto, la connessione remota a questi Java Beans può essere svolta in svariati modi, esistono infatti diverse API e framework. Per NetEye abbiamo definito un module Perl per la JMX. Perl viene supportato su Unix/Linux e ha ottime prestazioni su questi sistemi. Nello stesso modo dispone di un modulo dedicato che fornisce le necessarie funzionalità per stabilire la comunicazione.
Tutti i pacchetti necessari sono stati compilati e vengono forniti nell’ambiente di NetEye.
Lettura degli oggetti disponibili…
Lista dei Beans server
[box type=”shadow”] [root@pbzsilx001 ~]# jmx4perl http://localhost:8080/j4p –target service:jmx:rmi:///jndi/rmi://localhost:12345/jmxrmi list […] solr:id=org.apache.solr.handler.component.SearchHandler,type=/spell[/box]
Gli attributi:
source java.lang.String [ro], “”
avgTimePerRequest java.lang.String [ro], “”
errors java.lang.String [ro], “”
requests java.lang.String [ro], “”
version java.lang.String [ro], “”
totalTime java.lang.String [ro], “”
name java.lang.String [ro], “”
description java.lang.String [ro], “”
timeouts java.lang.String [ro], “”
sourceId java.lang.String [ro], “”
avgRequestsPerSecond java.lang.String [ro], “”
category java.lang.String [ro], “”
handlerStart java.lang.String [ro], “”
[…]
Esecuzione del controllo per il Java Bean SearchHandler, type=tvrh and attribute “requests”:
[box] [root@pbzsilx001 ~]# /usr/bin/check_jmx4perl -u http://localhost:8080/j4p –target service:jmx:rmi:///jndi/rmi://localhost:12345/jmxrmi -m solr:id=org.apache.solr.handler.component.SearchHandler, type=tvrh -a requests -c :0 OK – [solr:id=org.apache.solr.handler.component.SearchHandler, type=tvrh,requests] : Value 0 in range | ‘[solr:id=org.apache.solr.handler.component.SearchHandler, type=tvrh,requests]’=0;;:0[/box]
Esecuzione del controllo degli Aliases
Lista di tutti gli ALIASES check_jmx4perl che possono essere utilizzati:
[box] [root@pbzsilx001 ~]# perl -MJMX::Jmx4Perl::Alias -e ‘JMX::Jmx4Perl::Alias::help’CL_LOADED attr Number of currently loaded classes[/box]
CL_TOTAL attr Number of classes loaded in total
CL_UNLOADED attr Number of unloaded classes
JMX4PERL_DEBUG attr Switch on/off debugging by setting this boolean
JMX4PERL_DEBUG_INFO oper Print out latest debug info
JMX4PERL_DEBUG_MAX_ENTRIES attr Maximum number of entries for storing debug info
JMX4PERL_HISTORY_MAX_ATTRIBUTE oper Set the size of the history for a specific attribute
JMX4PERL_HISTORY_MAX_ENTRIES attr Maximum number of entries per attribute/operation possible
JMX4PERL_HISTORY_MAX_OPERATION oper Set the size of the history for a specific operation
JMX4PERL_HISTORY_RESET oper Reset the history for all attributes and operations
JMX4PERL_HISTORY_SIZE attr Size of the history of all attributes and operations in bytes
JMX4PERL_SERVER_INFO oper Show information about registered MBeanServers
MEMORY_GC oper Run a garbage collection
MEMORY_HEAP attr Heap memory usage, multiple values
MEMORY_HEAP_COMITTED attr Committed heap memory. That’s the memory currently available for this JVM
MEMORY_HEAP_INIT attr Initially allocated heap memory
MEMORY_HEAP_MAX attr Maximum available heap memory
MEMORY_HEAP_USED attr Used heap memory
[…]
[box] [root@pbzsilx001 plugins]# /usr/bin/check_jmx4perl -u http://localhost:8080/j4p –target service:jmx:rmi:///jndi/rmi://localhost:12345/jmxrmi –alias “OS_MEMORY_PHYSICAL_FREE” -n memory_free -c 103000000: OK – memory_free : Value 118382592 in range | ‘memory_free’=118382592;;103000000: [root@pbzsilx001 ~]# /usr/bin/check_jmx4perl -u http://localhost:8080/j4p –target service:jmx:rmi:///jndi/rmi://localhost:12345/jmxrmi –alias “OS_MEMORY_PHYSICAL_FREE” -c 103000000: CRITICAL – [OS_MEMORY_PHYSICAL_FREE] : Threshold ‘103000000:’ failed for value 71675904 | ‘[OS_MEMORY_PHYSICAL_FREE]’=71675904;;103000000:[/box]
Riferimenti::
https://en.wikipedia.org/wiki/Java_Management_Extensions