Cuando trabajamos con aplicaciones basadas en Spring Boot, la monitorización y gestión son elementos clave para garantizar que todo funcione correctamente. Aquí es donde entra en juego Spring Actuator, una herramienta poderosa que te permite tener un control detallado de tu aplicación, desde métricas básicas hasta puntos de control personalizados.
Spring Actuator es un módulo de Spring Boot diseñado para ofrecer monitorización y gestión de aplicaciones. Proporciona un conjunto de endpoints HTTP que exponen información sobre el estado interno de tu aplicación, incluyendo métricas, configuración del entorno, información de salud, y mucho más.
Con Actuator, puedes obtener una visión clara del rendimiento y los problemas de tu aplicación sin necesidad de añadir herramientas externas complejas. 🌟
Spring Actuator es ideal para aplicaciones modernas por las siguientes razones:
1. Monitorización fácil: Puedes obtener métricas como la carga del sistema, memoria utilizada, y mucho más con solo activar algunos endpoints.
2. Integración con herramientas externas: Funciona bien con herramientas como Prometheus, Grafana, y sistemas de logging centralizado.
3. Diagnóstico de problemas: Los endpoints de salud permiten detectar rápidamente si hay problemas en componentes críticos.
4. Personalización: Puedes extender y personalizar los endpoints para adaptarlos a tus necesidades.
🚀 Si buscas mejorar la observabilidad de tu aplicación Spring Boot, Actuator es la herramienta adecuada.
Spring Actuator viene incluido en Spring Boot, pero necesitas agregarlo explícitamente como una dependencia en tu archivo pom.xml (si usas Maven) o en build.gradle (si usas Gradle).
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Después de agregar la dependencia, Actuator estará activo por defecto. Puedes probarlo ejecutando tu aplicación y accediendo al endpoint de salud predeterminado en la URL:
http://localhost:8080/actuator/health
Deberías ver una respuesta similar a esta:
{
"status": "UP"
}
¡Y eso es todo! Ahora tienes Actuator configurado y listo para usar. 🎉
Spring Actuator proporciona una variedad de endpoints, cada uno diseñado para ofrecer información específica sobre la aplicación. Estos son algunos de los más importantes:
/actuator/health
Muestra el estado de salud de tu aplicación. Por defecto, devuelve "UP" si todo está funcionando correctamente. Puedes personalizarlo para incluir comprobaciones específicas, como conexiones a bases de datos o disponibilidad de servicios externos.
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "PostgreSQL",
"validationQuery": "isValid()"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 499963174912,
"free": 324988319744,
"threshold": 10485760
}
}
}
}
/actuator/metrics
Este endpoint proporciona una gran cantidad de métricas sobre el rendimiento de tu aplicación, como el uso de memoria, tiempo de respuesta de los endpoints, y más.
Ejemplo de datos devueltos:
{
"names": [
"jvm.memory.used",
"jvm.memory.max",
"http.server.requests",
"process.uptime"
]
}
Puedes acceder a métricas específicas añadiendo el nombre al final del endpoint, por ejemplo:
http://localhost:8080/actuator/metrics/jvm.memory.used
/actuator/env
Muestra todas las propiedades de entorno y configuración activa de tu aplicación. Esto incluye variables de entorno, propiedades de configuración de Spring, y valores predeterminados.
/actuator/loggers
Permite ver y cambiar los niveles de logging de tu aplicación en tiempo real. Por ejemplo, puedes aumentar el nivel de detalle de los logs para depurar problemas sin reiniciar la aplicación.
Una de las mejores características de Spring Actuator es su alta personalización. Puedes decidir qué endpoints habilitar, restringir accesos, y añadir tus propios endpoints personalizados.
application.properties
Puedes habilitar o deshabilitar endpoints específicos en el archivo de configuración:
management.endpoints.web.exposure.include=health,metrics,info
management.endpoints.web.exposure.exclude=beans,env
Si necesitas exponer información adicional, puedes crear un endpoint propio. Por ejemplo:
import org.springframework.boot.actuate.endpoint.web.annotation.RestControllerEndpoint;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestControllerEndpoint(id = "customEndpoint")
@RestController
public class CustomEndpoint {
@GetMapping("/customEndpoint")
public String customEndpointInfo() {
return "Información personalizada del endpoint";
}
}
Accede a tu nuevo endpoint en:
http://localhost:8080/actuator/customEndpoint
Es crucial proteger los endpoints de Actuator, ya que exponen información sensible. Por defecto, los endpoints están disponibles solo en la red local. Sin embargo, puedes reforzar la seguridad:
1. Configurar Spring Security: Protege los endpoints con autenticación y autorización.
Ejemplo básico en application.properties
:
management.endpoints.web.exposure.include=*
management.endpoint.health.roles=ADMIN
2. Cifrar la comunicación: Utiliza HTTPS para proteger los datos durante la transmisión.
Spring Actuator se integra fácilmente con sistemas de monitoreo como:
Para habilitar estas integraciones, a menudo necesitas agregar más dependencias y configurar exportadores específicos.
Spring Actuator es una herramienta imprescindible para cualquier desarrollador que quiera mejorar la observabilidad, monitorización y gestión de sus aplicaciones Spring Boot. Su facilidad de uso, combinada con la capacidad de personalización, lo convierte en una solución ideal tanto para aplicaciones pequeñas como para sistemas empresariales complejos.
Si aún no lo has probado, ¡es el momento perfecto para integrarlo en tu proyecto y llevar tu aplicación al siguiente nivel! 🚀
Jorge García
Fullstack developer