Monitorizando estado de servidores JEE con Nagios y JMX4Perl
0. Índice de contenidos.
- 1. Entorno
- 2. Introducción
- 3. Prerequisitos
- 4. Instalación de jmx4perl y el agente Jolokia
- 5. Creación de comando y servicios en NagiosQL
- 6. Resultados
- 7. Referencias
1. Entorno
Este tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil 2,4 Ghz Intel Core2 Duo P8600
- Sistema Operativo: Ubuntu 11.04 Natty Server
2. Introducción
En el tutorial «Monitorizando equipos y servicios con Nagios + NagiosQl + PNP4Nagios» veiamos como instalar y configurar Nagios para poder realizar monitorización a nivel de sistema. En este tutorial aprovecharemos las capacidades del comando check_jmx4perl para monitorizar el estado de un servidor de aplicaciones.
3. Prerequisitos
Antes de comenzar la instalación de jmx4nagios, necesitamos que se instalen librerias de perl, lo haremos de dos formas, via apt-get y via cpan, ambas con un usuario con permisos de sudo. Tambien aprovecharemos para instalar un servidor de aplicaciones tomcat6 el cual vamos a monitorizar:
~$ sudo apt-get install libxml-tidy-perl ~$ sudo apt-get install libnagios-plugin-perl ~$ sudo apt-get install libdigest-sha1-perl ~$ sudo apt-get install libarchive-zip-perl ~$ sudo apt-get install libcrypt-blowfish-perl ~$ sudo apt-get install libterm-progressbar-perl ~$ sudo apt-get install libfile-searchpath-perl ~$ sudo apt-get install libterm-size-perl ~$ sudo apt-get install libjson-perl ~$ sudo apt-get install libmodule-find-perl ~$ sudo apt-get install libxml-libxml-perl ~$ sudo apt-get install libconfig-general-perl ~$ sudo apt-get install libterm-readline-gnu-perl ~$ sudo apt-get install tomcat6 ~$ sudo cpan ~$ cpan[2]> install cpan ~$ cpan[2]> install Term::size ~$ cpan[2]> install Term::ShellUI ~$ cpan[2]> install Crypt::Blowfish_PP ~$ cpan[2]> install Term::Clui
4. Instalación de jmx4perl
Ahora vamos a instalar jmx4perl para ello descargamos/descomprimos en nuestro home el paquete jmx4perl-0.95.tar.gz:
~$ wget http://search.cpan.org/CPAN/authors/id/R/RO/ROLAND/jmx4perl-0.95.tar.gz ~$ tar -xvzf jmx4perl-0.95.tar.gz ~$ cd jmx4perl-0.95 ~$ perl Build.PL ~$ ./Build ~$ ./Build test ~$ sudo ./Build install ~$ sudo ln -s /usr/local/bin/check_jmx4perl /srv/nagios/libexec/check_jmx4perl
Para realizar las peticiones jmx, utilizaremos un agente llamado Jolokia que nos devuelve objetos JMX serializados como JSON. En los siguientes comandos descargamos y desplegamos en tomcat el agente:
~$ cd ~$ wget http://labs.consol.de/maven/repository/org/jolokia/jolokia-war/0.95/jolokia-war-0.95.war ~$ sudo mv jolokia-war-0.95.war /var/lib/tomcat6/webapps/jolokia.war
Si todo ha ido bien, podemos probar las comunicaciones mediante el siguiente comando:
~$ jmx4perl http://localhost:8080/jolokia Name: Apache Tomcat Vendor: Apache Version: 6.0.28 -------------------------------------------------------------------------------- Memory: Heap-Memory used : 11 MB Heap-Memory alloc : 81 MB Heap-Memory max : 125 MB NonHeap-Memory max : 214 MB Classes: Classes loaded : 1969 Classes total : 1969 Threads: Threads current : 11 Threads peak : 11 OS: CPU Arch : amd64 CPU OS : Linux 2.6.38-10-server Memory total : 491 MB Memory free : 491 MB Swap total : 1023 MB Swap free : 1023 MB FileDesc Open : 41 FileDesc Max : 4096 Runtime: Name : 11828@ubuntu JVM : 20.0-b11 OpenJDK 64-Bit Server VM Sun Microsystems Inc. Uptime : 44 m, 1 s Starttime : Wed Aug 24 15:59:06 2011
5. Creación de comando y servicios en NagiosQL
Una vez que hemos completado la instalación de los comandos de jmx4perl, procedemos a la integración de dos servicios en Nagios, uno para la monitorización de la memoria heap de tomcat y otro para monitorizar los hilos en uso. Primero crearemos el comando, para ello en NagiosQL vamos a «Comandos -> Definiciones» y pulsamos sobre el botón «Agregar»:
Ahora vamos a dar de alta el servicio check_heap, para ello en la pantalla «Supervisión -> Servicios» pulsamos sobre el boton «Agregar»:
Rellenamos el formulario con los siguientes datos (basandonos en la información que hemos recibido antes del servidor, los valores de critical y warning en bytes), y los asignamos al host localhost (pulsando sobre el botón modificar de la sección hosts), tambien aplicamos la plantilla «generic-service» que modificamos en el anterior tutorial para poder sacar los gráficos con pnp4nagios:
$ARG1$ = --name "Memoria Asignada" --mbean java.lang:type=Memory --attribute HeapMemoryUsage --path used --critical 125000000 --warning 120000000
Ahora vamos a dar de alta el servicio check_threads, para ello pulsamos sobre el boton «Agregar» y rellenamos el formulario con los siguientes datos (basandonos en la información que hemos recibido antes del servidor), y los asignamos al host localhost (pulsando sobre el botón modificar de la sección hosts):
$ARG1$ = --name "Hilos en uso" --mbean java.lang:type=Threading --attribute ThreadCount --critical 40 --warning 30
Una vez creados los comandos y servicios escribimos la configuración de Nagios y reiniciamos el servicio desde «Herramientas -> Control Nagios»:
6. Resultados
Ahora vamos a nuestra pantalla de Servicios en Nagios y deberemos ver nuestros comandos, y sus gráficas correspondientes:
Esta combinación de utilidades es muy ponente dado que podemos consultar cualquier dato del servidor con una carga mucho menos pesada (tanto para el servidor Nagios que realiza la petición con un script perl, como para el propio servidor de aplicaciones que estamos monitorizando, ya que las peticiones jmx son locales) que realizando peticiones JMX desde un programa Java como comando Nagios.
Cualquier duda o sugerencia podeis comentarlo.
Saludos.
7. Referencias
- http://www.nagios.org/
- http://www.nagiosql.org/
- http://search.cpan.org/dist/jmx4perl
- http://www.jolokia.org