I. Introduction▲
Depuis Java 5.0, il est possible d'utiliser l'API JMX (Java Management Extensions) pour la supervision des applicatifs Java. Cette API permet de lire en temps réel les données d'un serveur d'application Java (ainsi que ses applicatifs hébergées).
Par défaut, la lecture des données est réalisée par un client via le protocole RMI (il existe aussi JMXMP mais cette couche de transport n'est pas implémentée dans Java par défaut).
Dans cet article, nous allons présenter JolokiaSite Jolokia.
Jolokia est un agent (ou connecteur) libre et open-source permettant de lire les données JMX à travers "HTTP/JSON". Ce connecteur possède les avantages suivants :
- installation simplifiée: utilisation d'une archive WAR à déployer dans le serveur d'application)
- performant: lecture de plusieurs objets en une seule requête (bulk-requests)
- configuration réseau simplifiée (protocole HTTP)
Pour lire ces données JMX, nous allons utiliser les sondes du projet Centreon PluginsSite Centreon Plugins. Ce logiciel est un programme Perl (libre et open-source fourni par l'outil de supervision "Centreon") permettant de collecter des données pour la supervision. Dans le monde de la supervision, ce type de programme est appelé sonde ou "plugin". Ce plugin est fonctionnel avec les logiciels de supervision compatible Nagios tel que: CentreonSite Centreon, IcingaSite Icinga, ShinkenSite Shinken,...
Voici les versions applicables pour cet article :
- Debian Wheezy
- Tomcat 7
- Jolokia 1.3.1
- Centreon Plugins (github)
II. Installation▲
II-A. Tomcat 7▲
Installez le serveur Tomcat sur votre serveur Debian :
# aptitude -R install tomcat7
II-B. Jolokia▲
Pour la supervision d'un serveur Tomcat, nous allons télécharger la version « WAR-Agent »: https://jolokia.org/download.html Cette version permet de déployer aisément Jolokia sur Tomcat.
Installez l'agent sur votre serveur Debian :
# wget http://search.maven.org/remotecontent?filepath=org/jolokia/jolokia-war/1.3.1/jolokia-war-1.3.1.war -O /var/lib/tomcat7/webapps/jolokia.war
L'agent Jolokia est automatiquement déployé et accessible sans mot de passe via l'url suivante: http://[ADDR]:8080/jolokia
Pour vérifier le bon fonctionnement de l'agent, veuillez utiliser un navigateur web. Si vous visualisez une chaîne de caractère de ce type, l'agent fonctionne correctement :
{"timestamp":1439741743,"status":200,"request":{"type":"version"},"value":{"protocol":"7.2","config":{"detectorOptions":"{}","canonicalNaming":"true","maxCollectionSize":"0","includeStackTrace":"true","historyMaxEntries":"10","agentId":"10.30.2.22-7085-1ff16424-servlet","debug":"false","dispatcherClasses":"org.jolokia.jsr160.Jsr160RequestDispatcher","maxDepth":"15","maxObjects":"0","discoveryEnabled":"false","serializeException":"false","agentType":"servlet","debugMaxEntries":"100"},"agent":"1.3.1","info":{"product":"tomcat","vendor":"Apache","version":"7.0.28"}}}
Nous allons configurer l'authenfication pour l'accès à l'agent Jolokia. Editez le fichier "/var/lib/tomcat7/webapps/jolokia/WEB-INF/web.xml" et décommentez la partie suivante qui va restreindre l'accès à Jolokia aux utilisateur Tomcat ayant le rôle « Jolokia » :
<!--
Example
Configuration
for
switching
on
BASIC
security.
The
role
'Jolokia'
must
be
mapped
to
real
users
with
passwords
on
the
Appserver
side:
-->
<
login-config
>
<
auth-method
>
BASIC<
/
auth-method
>
<
realm-name
>
Jolokia<
/
realm-name
>
<
/
login-config
>
<
security-constraint
>
<
web-resource-collection
>
<
web-resource-name
>
Jolokia-Agent Access<
/
web-resource-name
>
<
url-pattern
>
/*<
/
url-pattern
>
<
/
web-resource-collection
>
<
auth-constraint
>
<
role-name
>
Jolokia<
/
role-name
>
<
/
auth-constraint
>
<
/
security-constraint
>
<
security-role
>
<
role-name
>
Jolokia<
/
role-name
>
<
/
security-role
>
<
/
web-app
>
Ajoutez l'utilisateur avec le rôle « Jolokia » en éditant le fichier "/etc/tomcat7/tomcat-users.xml" :
<
user
username
=
"
supervision
"
password
=
"
test
"
roles
=
"
Jolokia
"
/
>
Redémarrez le service Tomcat :
# /etc/init.d/tomcat7 restart
L'accès à la page « http://[ADDR]:8080/jolokia » doit être maintenant sécurisé. Essayez de vous connecter avec l'utilisateur "supervision" et le mot de passe "test".
II-C. Centreon Plugins▲
Nous allons réaliser l'installation sur le même serveur Debian. Il est possible de réaliser l'installation sur un serveur distant.
Installez la dépendance Perl « JMX::Jmx4Perl » non packagée par la distribution :
# aptitude install libdata-dump-perl libjson-perl libwww-perl libmodule-find-perl libsys-sigaction-perl
# wget http://search.cpan.org/CPAN/authors/id/R/RO/ROLAND/jmx4perl-1.12.tar.gz
# tar xvf jmx4perl-1.12.tar.gz && cd jmx4perl-1.12
# ./Build.PL
...
Install 'jmx4perl' ? (y/n) [y ]n
...
Install 'check_jmx4perl' ? (y/n) [y ]n
...
Install 'cacti_jmx4perl' ? (y/n) [y ]n
...
Install 'j4psh' ? (y/n) [y ]n
...
Install 'jolokia' ? (y/n) [y ]n
...
# ./Build && ./Build install
Installez "Centreon Plugins" :
# wget https://github.com/centreon/centreon-plugins/archive/master.zip
# unzip master.zip && cd centreon-plugins-master/
III. Supervision du serveur Tomcat▲
Ce chapitre va vous expliquer comment superviser votre serveur Tomcat avec quelques exemples. Vous pourrez les intégrer dans votre outil de supervision préféré (Centreon, Icinga, Nagios, Shinken,...). Veuillez vous positionner dans le répertoire "centreon-plugins-masters" pour tester ces commandes. Le retour des sondes suit la syntaxe NagiosGuidelines Nagios.
Supervision du nombre de classes Java chargées :
# perl centreon_plugins.pl --plugin=apps::tomcat::jmx::plugin --custommode=jolokia --mode=class-count --url='http://127.0.0.1:8080/jolokia' --statefile-dir=/tmp --username=supervision --password=test
OK: Class Current : 2508, Loaded : 1, Unloaded : 0 | 'current'=2508;;;0; 'loaded'=1;;;0; 'unloaded'=0;;;0;
Supervision du taux d'utilisation des file descriptors (warning si > 50%, critical si > 60%) :
# perl centreon_plugins.pl --plugin=apps::tomcat::jmx::plugin --custommode=jolokia --mode=fd-usage --url='http://127.0.0.1:8080/jolokia' --username=supervision --password=test --warning=50 --critical=60
OK: File descriptor percentage usage: 1.17% | 'fd'=48;0:2048;0:2457;0;4096
Supervision de l'utilisation mémoire Java (warning si > 60%, critical si > 75%) :
# perl centreon_plugins.pl --plugin=apps::tomcat::jmx::plugin --custommode=jolokia --mode=memory --url='http://127.0.0.1:8080/jolokia' --username=supervision --password=test --warning-heap=60 --critical-heap=75 --warning-nonheap=60 --critical-nonheap=75
OK: HeapMemory Usage: 7.30% - NonHeapMemoryUsage : 7.96% | 'HeapMemoryUsage'=9473384B;0:5684030;0:7105038;0;129761280 'NonHeapMemoryUsage'=17855824B;0:10713494;0:13391868;0;224395264
Supervision détaillée de l'utilisation mémoire Java :
# perl centreon_plugins.pl --plugin=apps::tomcat::jmx::plugin --custommode=jolokia --mode=memory-detailed --url='http://127.0.0.1:8080/jolokia' --username=supervision --password=test --verbose
OK: All memories within bounds | 'permanent'=16696216B;;;0;174063616 'survivor'=184320B;;;0;4456448 'eden'=3496744B;;;0;35782656 'tenured'=6166832B;;;0;89522176 'code'=1169728B;;;0;50331648
CMS Perm Gen usage 9.59%
Survivor Space usage 4.14%
Eden Space usage 9.77%
CMS Old Gen usage 6.89%
Code Cache usage 2.32%
Supervision du nombre de threads Java en cours d'exécution (warning si > 25 threads, critical si > 50 threads) :
# perl centreon_plugins.pl --plugin=apps::tomcat::jmx::plugin --custommode=jolokia --mode=threads --url='http://127.0.0.1:8080/jolokia' --statefile-dir=/tmp --username=supervision --password=test --verbose --warning-active=25 --critical-active=50
OK: Threads Active : 18, Started : 0, Daemon : 17 | 'active'=18;0:25;0:50;0; 'started'=0;;;0; 'daemon'=17;;;0;
IV. Conclusion▲
Le couple Jolokia et Centreon Plugins permettent une supervision efficace de son serveur Tomcat. Veuillez lire la documentation suivante pour plus d'informations sur les "Centreon Plugins": https://github.com/centreon/centreon-plugins/blob/master/docs/fr/user/guide.rst
Je vous remercie d'avoir lu ce tutoriel et de me contacter en cas d'erreurs.
V. Remerciements▲
Merci à Quentin Delance pour la correction des erreurs qui s'étaient glissées dans le tutoriel.