25. 11. 2013 Patrick Zambelli NetEye

Monitoraggio di Java Application

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.

Implementazione

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

Patrick Zambelli

Patrick Zambelli

Project Manager at Würth Phoenix
After my graduation in Applied Computer Science at the Free University of Bolzano I decided to start my professional career outside the province. With a bit of good timing and good luck I went into the booming IT-Dept. of Geox in the shoe district of Montebelluna, where I realized how a big IT infrastructure has to grow and adapt to quickly changing requirements. During this experience I had also the nice possibility to travel the world, while setting up the various production and retail areas of this company. Arrived at Würth Phoenix I started developing on our monitoring solution NetEye. Today, in my position as Consulting an Project Manager I am continuously heading to implement our solutions to meet the expectation of your enterprise customers.

Author

Patrick Zambelli

After my graduation in Applied Computer Science at the Free University of Bolzano I decided to start my professional career outside the province. With a bit of good timing and good luck I went into the booming IT-Dept. of Geox in the shoe district of Montebelluna, where I realized how a big IT infrastructure has to grow and adapt to quickly changing requirements. During this experience I had also the nice possibility to travel the world, while setting up the various production and retail areas of this company. Arrived at Würth Phoenix I started developing on our monitoring solution NetEye. Today, in my position as Consulting an Project Manager I am continuously heading to implement our solutions to meet the expectation of your enterprise customers.

Leave a Reply

Your email address will not be published. Required fields are marked *

Archive