Endpointes de Spring Boot Actuator

Spring Boot Actuator Endpoints nos permite monitorear e interactuar con nuestra aplicación. Spring Actuator es un submódulo de Spring Boot y proporciona puntos finales incorporados que podemos habilitar y deshabilitar para nuestra aplicación.

Spring Boot Actuator Endpoints

Los Endpoints de Spring Boot Actuator se exponen a través de JMX y HTTP, la mayoría de las veces utilizamos endpoints de Actuator basados en HTTP porque son fáciles de acceder a través del navegador, el comando CURL, scripts de shell, etc. Algunos de los endpoints de Actuator útiles son:

  1. beans: este endpoint devuelve la lista de todos los beans configurados en nuestra aplicación.
  2. env: proporciona información sobre las propiedades del entorno de Spring.
  3. health: Muestra la salud de la aplicación
  4. info: Muestra información de la aplicación, podemos configurar esto en las propiedades del entorno de Spring.
  5. mappings: Muestra la lista de todos los caminos de @RequestMapping.
  6. shutdown: nos permite cerrar la aplicación de manera segura.
  7. threaddump: proporciona el volcado de hilos de la aplicación.

Puedes obtener la lista completa de puntos finales del actuador de Spring desde aquí.

Seguridad de los Puntos finales del Actuador de Spring

Solo los puntos finales “health” e “info” se exponen sin ninguna seguridad; para acceder a todos los demás puntos finales, necesitamos configurar nuestra aplicación para la seguridad de Spring. Esto es muy fácil de lograr, lo veremos en la parte posterior del tutorial.

Habilitar los Puntos finales del Actuador de Spring

Cuando agregamos las dependencias del Actuador de Spring a nuestro proyecto de arranque de Spring, habilita automáticamente los puntos finales del actuador. Agrega las siguientes dependencias a tu aplicación de Spring para habilitar los puntos finales del actuador de Spring.

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

Ahora, cuando ejecutes la aplicación, verás que los puntos finales del actuador se están asignando en los registros.

2018-06-19 15:23:20.715  INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Ten en cuenta que solo se han asignado dos puntos finales: health y info. La siguiente imagen muestra la salida de estos puntos finales de actuador. ¿Notaste que no hay datos en /actuator/info? Es porque no los hemos configurado. Simplemente agrega las siguientes propiedades a tu archivo application.properties.

info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot

Reinicia la aplicación y obtendrás la siguiente salida:

Personalización de la Ruta Base de los Puntos Finales del Actuador

Por defecto, la ruta base de los puntos finales del actuador es /actuator, podemos cambiarla a cualquier otro valor configurando management.endpoints.web.base-path en el archivo de propiedades de la aplicación.

management.endpoints.web.base-path=/management

Exposición de Otros Puntos Finales del Actuador

Podemos habilitar y deshabilitar otros puntos finales del actuador a través de archivos de propiedades. Si deseas habilitar todos los puntos finales del actuador, agrega la siguiente propiedad.

management.endpoints.web.exposure.include=*

Para habilitar solo puntos finales de actuador específicos, proporcione la lista de identificadores de puntos finales.

management.endpoints.web.exposure.include=health,info,beans,env

Seguridad de Spring para Puntos Finales del Actuador

Tenga en cuenta que necesitamos agregar Seguridad de Spring a nuestra aplicación para habilitar puntos finales adicionales, ya que todos los demás puntos finales requieren al menos autenticación básica. Agregue la siguiente dependencia para la seguridad de Spring en su aplicación.

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

También agregue nombre de usuario y contraseña de seguridad de Spring en el archivo de propiedades de la aplicación.

spring.security.user.name=pankaj
spring.security.user.password=pankaj

Reinicie la aplicación y verá que se asignan puntos finales adicionales.

2018-06-19 16:18:22.211  INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Ahora, al intentar acceder a los puntos finales de actuador protegidos, deberá proporcionar credenciales de inicio de sesión. Las siguientes imágenes muestran la respuesta de los puntos finales beans y env/java.home.

Puntos Finales Personalizados del Actuador de Spring

Una de las grandes características del Framework Spring es que es muy fácil de ampliar. Podemos crear nuestros propios puntos finales personalizados del actuador utilizando la anotación @Endpoint en una clase. Luego tenemos que usar las anotaciones @ReadOperation, @WriteOperation o @DeleteOperation en los métodos para exponerlos como un bean de punto final del actuador. Podemos crear puntos finales específicos de tecnología utilizando las anotaciones @JmxEndpoint y @WebEndpoint. Aquí tienes un ejemplo de nuestro propio punto final del actuador de Spring personalizado.

package com.journaldev.spring;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {

	@ReadOperation
	@Bean
	public String hi() {
		return "Hi from custom endpoint";
	}
}

¿Notaste el identificador del punto final? También necesitamos configurarlo en la lista de puntos finales del actuador que deben estar habilitados. Actualiza las siguientes propiedades en el archivo application.properties.

management.endpoints.web.exposure.include=health,info,beans,env,myendpoint

Ahora, cuando inicies la aplicación, verifica si este nuevo punto final está mapeado en los registros.

2018-06-19 17:06:59.743  INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

La siguiente imagen muestra la salida cuando invocamos nuestro punto final del actuador personalizado.

Resumen

Spring Boot Actuator es un módulo de gestión e información listo para producción. Podemos ampliarlo fácilmente para agregar nuestras propias API y gestionar nuestra aplicación.

Puedes descargar el proyecto completo desde nuestro Repositorio de GitHub.

Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints