Cómo usar JMX con HTTP a través de Jolokia

En este tutorial utilizaremos el agente VM de Jolokia para administrar la información de la JMX console a través de un protocolo mucho más estandar como es el protocolo HTTP/JSON.

Índice de contenidos

1. Introducción

La administración de las aplicaciones empresariales a través de los protocolos RMI proporcionados por la JMX Console muchas veces hace que sea un quebradero de cabeza en cuanto a conectividad, aplicación específicas para dicho protocolo, etc.

Es por ello, por lo que en este tutorial os traigo una forma mucho más sencilla de administrar la aplicación haciendo uso del agente VM Jolokia, que no es nada más ni nada menos que un puente HTTP/JSON para el acceso JMX remoto.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro Retina 15′ (2.3 Ghz Intel Core I7, 16GB DDR3).
  • Sistema Operativo: Mac OS Sierra 10.12
  • Entorno de desarrollo: Eclipse Neon
  • Apache Maven 3.3.3
  • Java JDK 1.8.0

3. Clonado de un proyecto ejemplo

Como el objetivo de este tutorial es ver cómo podemos añadir Jolokia a nuestro proyecto, en esta ocasión vamos a apoyarnos en un proyecto ejemplo que dispongo en GitHub, y que está basado en Spring Boot.

Este proyecto no es más que un “HelloWorld” hecho con Spring Boot: Spring Boot Helloworld en GitHub

E importamos el proyecto en nuestro IDE favorito.

4. Descarga del agente JVM de Jolokia

Una vez disponemos del proyecto, es hora de descargar el agente JVM de Jolokia.

En esta ocasión, podemos acceder a su página oficial de Downloads o directamente descargar la librería a través de este enlace jolokia-jvm-1.3.7-agent.jar

Por comodidad, vamos a dejar la librería descargada en la ruta ‘src/main/resources’ del proyecto.

5. Arranque de la aplicación con el agente JVM de Jolokia

Para que el agente JVM de Jolokia entre en funcionamiento cuando arrancamos la aplicación, tenemos que añadir una nueva línea en los VM arguments indicando que vamos a añadir un nuevo ‘javaagent’.

Por defecto, Jolokia levantará el servidor HTTP en el puerto 8778.

También podemos configurar el puerto en el que queremos que se arranque el servidor HTTP que nos permitirá lanzar peticiones a Jolokia.

Una vez hayamos añadido dicha línea a nuestros VM arguments, arrancamos la aplicación y comprobamos que aparece en los logs la referencia a que Jolokia ha arrancado satisfactoriamente.

Finalmente, comprobamos que Jolokia nos está respondiendo de forma satisfactoria a través de nuestro navegador.

6. Uso del Jolokia REST API.

A partir de aquí, ya disponemos de toda la información que nos ofrecería la JMX Console pero a través de un interfaz mucho más estandar, como es el interfaz HTTP Rest.

Esto nos aporta la ventaja de que podemos utilizar multitud de clientes como por ejemplo el propio navegador, dispositivos móviles, aplicaciones personalizadas, o herramientas del mercado que entiendan HTTP Rest + JSON.

Para este tutorial, vamos a mostrar un pequeño ejemplo de uso utilizando Jolokia para conocer los detalles de la memoria de nuestra aplicación.

Para ello como primer ejemplo, así se obtendría la información completa del MBean ‘java:lang=Memory’

O podríamos optar por conocer únicamente el atributo ‘HeapMemoryUsage’ de dicho MBean:

Como se puede observar, Jolokia no solo nos aporta el valor de lo que solicitamos, sino que además le añade información adicional como por ejemplo la petición que hemos realizado, el timestamp o el código HTTP de la respuesta.

Podemos consultar la documentación completa del uso del Jolokia REST API en su página de referencia oficial: Jolokia Protocol

7. Conclusiones

En este tutorial hemos podido aprender cómo disponer de todo la funcionalidad que nos ofrece la JMX Console a través de un interfaz mucho más utilizado como es el HTTP Rest + JSON a través del agente de la JVM de Jolokia, evitando así los problemas derivados de utilizar la propia JConsole a través del protocolo RMI, los cuales no suelen tener conectividad en los entornos normales de producción.

8. Contacto y GitHub repository

¿Habéis tenido algún que otro problema con el tutorial? Déjame un comentario en este artículo o coméntamelo a través de mi cuenta de Twitter: @drodriguezhdez.

Echa un vistazo al código del tutorial en mi repositorio de GitHub: Source code del Tutorial.

9. Referencias