Integra Spring boot con Jolokia para el manejo de métricas


Cuando creas una aplicación Spring boot utilizando Jersey en lugar de Spring MVC te darás cuenta que hay muchas cosas que no se integran de forma transparente, un ejemplo es cuando quieres utilizar Jolokia para el manejo de las métricas de tus aplicaciones. En este ejemplo explicaremos paso a paso como habilitarlo sin romperte la cabeza, tomaremos como base el proyecto Utiliza Spring boot Actuator con Jersey para el mantenimiento de tus aplicaciones.

Paso 1 Agregar la dependencia de Jolokia

El primer paso será agregar la dependencia de Jolokia en tu aplicación en tu archivo pom.xml.

<dependency>
	<groupId>org.jolokia</groupId>
	<artifactId>jolokia-core</artifactId>
</dependency>

Esto permitirá tener en tu proyecto todas las clases necesarias para la generación de métricas de tu aplicación.

Paso 2 Registrar el Servlet de Jolokia

Si estuvieras utilizando Spring MVC en lugar de Jersey eso sería suficiente para agregar el soporte de Jolokia, pero Jersey requiere una configuración adicional, y esta es registrar el servlet del monitor de Jolokia en nuestra apliación, para esto agregaremos las siguientes líneas en nuestra clase principal.

/**
 *
 */
package com.raidentrance;

import org.jolokia.http.AgentServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

/**
 * @author raidentrance
 *
 */
@SpringBootApplication
public class SprinBootSampleApplication {

	@Bean
	public ServletRegistrationBean servletRegistrationBean() {
		return new ServletRegistrationBean(new AgentServlet(), "/jolokia/*");
	}

	public static void main(String[] args) {
		SpringApplication.run(SprinBootSampleApplication.class, args);
	}
}

Una vez hecho esto el agente de jolokia estará registrado en nuestra aplicación.

Paso 3: Acceder a los endpoints de Jolokia

Una vez que ya agregamos la configuración y registramos el servlet en nuestra aplicación los endpoints de Jolokia estarán disponibles en la siguiente URL http://localhost:8080/jolokia con la siguiente salida:

{
   "request": {
      "type": "version"
   },
   "value": {
      "agent": "1.3.3",
      "protocol": "7.2",
      "config": {
         "agentId": "192.168.12.112-68508-59a1617d-servlet",
         "agentType": "servlet"
      },
      "info": {
         "product": "tomcat",
         "vendor": "Apache",
         "version": "8.5.4"
      }
   },
   "timestamp": 1516917873,
   "status": 200
}

La salida anterior muestra que nuestro agente de Jolokia esta configurado y listo para acceder a las métricas que deseamos, para ver la documentación completa accede a la url https://jolokia.org/reference/html/index.html .

Si te gusta el contenido y quieres enterarte cuando realicemos un post nuevo síguenos en nuestras redes sociales https://twitter.com/geeks_mx y https://www.facebook.com/geeksJavaMexico/.

Puedes encontrar el código completo en la siguiente url https://github.com/raidentrance/spring-boot-example/tree/part9-jolokia.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

 

Utiliza Spring boot Actuator con Jersey para el mantenimiento de tus aplicaciones


Cuando creas una aplicación Spring boot utilizando Jersey en lugar de Spring MVC te darás cuenta que hay muchas cosas que no se integran de forma transparente, un ejemplo es cuando quieres utilizar Actuator para el monitoreo y mantenimiento de tus aplicaciones, en este ejemplo explicaremos paso a paso como habilitarlo sin romperte la cabeza. Se tomará como base el proyecto Spring Boot + REST Jersey Parte 1.

Paso 1: Agregar dependencias para el soporte de Actuator

El primer paso será agregar las dependencias necesarias para utilizar Actuator en tu aplicación.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

Esto permitirá tener todas las clases necesarias para el monitoreo y mantenimiento de tu aplicación disponibles en el proyecto.

Paso 2: Modificar el context path de Jersey

Si estuvieras utilizando Spring MVC con lo anterior sería suficiente, pero Jersey utiliza el contexto raíz o ROOT context para desplegar los endpoints que se registren, por esto es necesario cambiar ese contexto raíz con la siguiente línea en la clase JerseyConfig.

/**
 *
 */
package com.raidentrance.config;

import javax.ws.rs.ApplicationPath;

import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;

import com.raidentrance.resource.UserResource;

/**
 * @author raidentrance
 *
 */
@Component
@ApplicationPath("/api")
public class JerseyConfig extends ResourceConfig {
	public JerseyConfig() {
		register(UserResource.class);
	}
}

Con esto, todos los endpoints que se registren, en este caso los definidos en UserResource se montarán dentro del contexto /api.

Paso 3: Probando la aplicación

El último paso será ejecutar nuestra aplicación y ver que todo esta funcionando, para ver la información de nuestro endpoint user accederemos a la dirección http://localhost:8080/api/users con la siguiente salida:

{
	username: "raidentrance"
}

Por último veamos algunos de los endpoints disponibles de el actuator service:

  • Health: Permite conocer la salud de la aplicación y puedes acceder a el en la siguiente url http://localhost:8080/health con la siguiente salida:
{
	status: "UP",
	diskSpace: {
		status: "UP",
		total: 499071844352,
		free: 373295026176,
		threshold: 10485760
	}
}
  • Metrics: Permite ver algunas métricas de tu aplicación y puedes acceder a el en la siguiente url http://localhost:8080/metrics con la siguiente salida:
{
   "mem": 462340,
   "mem.free": 172618,
   "processors": 8,
   "instance.uptime": 71209,
   "uptime": 195221,
   "systemload.average": 2.369629,
   "heap.committed": 403968,
   "heap.init": 262144,
   "heap.used": 231349,
   "heap": 3728384,
   "nonheap.committed": 59840,
   "nonheap.init": 2496,
   "nonheap.used": 58373,
   "nonheap": 0,
   "threads.peak": 16,
   "threads.daemon": 11,
   "threads.totalStarted": 97,
   "threads": 13,
   "classes": 6439,
   "classes.loaded": 6444,
   "classes.unloaded": 5,
   "gc.ps_scavenge.count": 13,
   "gc.ps_scavenge.time": 124,
   "gc.ps_marksweep.count": 6,
   "gc.ps_marksweep.time": 563,
   "httpsessions.max": -1,
   "httpsessions.active": 0
}

Para ver la lista completa de endpoints disponibles en el actuator ver el siguiente link.

Si te gusta el contenido y quieres enterarte cuando realicemos un post nuevo síguenos en nuestras redes sociales https://twitter.com/geeks_mx y https://www.facebook.com/geeksJavaMexico/.

Puedes encontrar el código completo en la siguiente url https://github.com/raidentrance/spring-boot-example/tree/part8-actuator.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com