Supervision de Tomcat avec le couple Jolokia/Centreon Plugins

Quentin Garnier

Cet article va vous présenter comment superviser son serveur Tomcat efficacement.

- Titre : Supervision de Tomcat avec le couple Jolokia/Centreon Plugins

- Auteur : Quentin Garnier

- Parution : 18 août 2015

- Licence : Le contenu de cet article est rédigé par Quentin Garnier et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Sommaire

- I. Introduction

- II. Installation

- II-A. Tomcat 7

- II-B. Jolokia

- II-C. Centreon Plugins

- III. Supervision du serveur Tomcat

- IV. Conclusion

- V. Remerciements

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 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 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: Centreon, Icinga, 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 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.