Monitorizando estado de servidores JEE con Nagios y JMX4Perl

0
10312

Monitorizando estado de servidores JEE con Nagios y JMX4Perl

0. Índice de contenidos.

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»:

Comando

Ahora vamos a dar de alta el servicio check_heap, para ello en la pantalla «Supervisión -> Servicios» pulsamos sobre el boton «Agregar»:

Servicios

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
check_heap

check_heap Localhost1

check_heap Localhost2

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
check_threads

check_threads Localhost1

check_threads Localhost2

Una vez creados los comandos y servicios escribimos la configuración de Nagios y reiniciamos el servicio desde «Herramientas -> Control Nagios»:

Control Nagios

6. Resultados

Ahora vamos a nuestra pantalla de Servicios en Nagios y deberemos ver nuestros comandos, y sus gráficas correspondientes:

Control Nagios

Grafica Heap

Grafica Threads

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

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad