Hoy vamos a hablar de uno de los aspectos más útiles de Spring Boot Actuator: las métricas y la salud de la aplicación. Monitorizar el estado del sistema no solo te hace sentir un poco como el "médico" de tu aplicación, sino que es una herramienta imprescindible para analizar el rendimiento y resolver problemas.
¿Qué métricas están disponibles a través de Actuator?
Spring Boot Actuator proporciona una amplia gama de métricas por defecto. En vez de tener que escarbar en el código para entender por qué tu servidor de repente decidió "echarse a dormir", Actuator lo hace por ti: recoge y te da datos sobre el estado de la aplicación.
Aquí tienes algunas métricas que Actuator ofrece por defecto (y un poco de humor para la lista):
- Memoria JVM: cuánto memory se está usando activamente, cuánto queda libre y qué demonios está pasando en tu "cubo de basura".
- Hilos: actividad actual de los hilos. Útil para comprobar si tu aplicación no anda usando todo lo disponible, como un crío con caramelos.
- Uso de CPU: ayuda a entender si tu procesador está "sudando" mucho.
- Sesiones HTTP: monitorización del número de sesiones activas (sí, a veces los clientes son demasiado curiosos).
- Tiempo de respuesta de las peticiones: qué tan rápido responde tu aplicación (o no responde) a las peticiones entrantes.
- Frecuencia de errores: un salvavidas para quien quiere localizar dónde se está yendo todo al garete.
Ver métricas
Estas métricas se pueden ver a través del endpoint /actuator/metrics. Por ejemplo, si abres en el navegador:
http://localhost:8080/actuator/metrics
Verás la lista de todas las métricas disponibles, como jvm.memory.used, system.cpu.usage, http.server.requests y otras.
Para ver información detallada de una métrica concreta puedes usar la petición:
http://localhost:8080/actuator/metrics/{metricName}
Por ejemplo, para ver la métrica relacionada con el uso de memoria de la JVM:
http://localhost:8080/actuator/metrics/jvm.memory.used
Endpoint /health: comprobación del estado de la aplicación
¿Y si a tu aplicación le cae un mal día? El endpoint /actuator/health es la ventana para ver su estado. Te permite comprobar si la aplicación funciona correctamente y responde "saludable" o "no muy bien".
El endpoint /health proporciona la información sobre el estado de la aplicación en forma de respuesta JSON. Así podría verse una respuesta básica si todo va bien:
{
"status": "UP"
}
Si hay algún problema en el sistema, por ejemplo si la base de datos no está disponible, el estado cambiará a DOWN, y en el campo details aparecerán datos sobre qué fue lo que falló.
Ejemplo de respuesta si la base de datos no está disponible:
{
"status": "DOWN",
"components": {
"db": {
"status": "DOWN",
"details": {
"error": "java.sql.SQLException: Cannot connect to database"
}
}
}
}
Mostrar detalles adicionales
Por defecto, el endpoint /health tiene acceso limitado y solo muestra el estado. Sin embargo, puedes configurarlo para que muestre más información. Esto se hace mediante propiedades en el archivo application.properties o application.yml. Por ejemplo:
management.endpoint.health.show-details=always
Ahora el endpoint /health mostrará detalles como el estado de la base de datos, las sesiones, etc.
Configurar el nivel de visibilidad de las métricas
Spring Boot Actuator por defecto cuida tu información y no la expone al mundo entero. Aun así, puedes configurar el acceso y la visibilidad de las métricas.
Si quieres controlar qué endpoints de Actuator son visibles, puedes usar la siguiente propiedad:
management.endpoints.web.exposure.include=health, metrics
Aquí decimos que para acceso externo solo estarán disponibles los endpoints health y metrics. Para habilitar todos los endpoints estándar, usa el valor *:
management.endpoints.web.exposure.include=*
Si, por el contrario, quieres excluir algunos endpoints, puedes hacerlo así:
management.endpoints.web.exposure.exclude=shutdown
Restringir el acceso por roles
En producción es importante proteger los endpoints con Spring Security, para que solo usuarios autorizados puedan ver las métricas. Por ejemplo, puedes configurar el acceso solo para usuarios con el rol ADMIN.
Aplicación de las métricas en la vida real
Conocer tus métricas ayuda a evitar escenarios donde tu aplicación "se rinde" bajo carga, y tú te enteras de ello el último. Así es como puedes usar estos datos en la práctica:
- Análisis de rendimiento: las métricas permiten seguir qué tan rápido y eficiente funciona tu aplicación. Te ayudarán a identificar cuellos de botella.
- Depuración de errores: la frecuencia de errores en las peticiones te mostrará que algo falla antes de que los usuarios empiecen a inundar soporte técnico.
- Prevención de fallos: monitorizar recursos como memoria y CPU permite detectar problemas antes y tomar medidas.
Ejemplo: uso de la métrica "Cantidad de solicitudes"
Imagina que quieres saber con qué frecuencia los usuarios hacen peticiones a tu aplicación. Puedes usar la métrica http.server.requests. Así lo harías:
Abre en el navegador:
http://localhost:8080/actuator/metrics/http.server.requests
La respuesta podría ser algo así:
{
"name": "http.server.requests",
"measurements": [
{
"statistic": "count",
"value": 150
},
{
"statistic": "totalTime",
"value": 123.45
}
],
"availableTags": [
{
"tag": "status",
"values": ["200", "404", "500"]
},
{
"tag": "method",
"values": ["GET", "POST"]
}
]
}
Aquí vemos que se han procesado 150 peticiones y que el tiempo total de ejecución fue 123,45 segundos. Este enfoque ayuda a entender la intensidad de uso de tu API.
Ahora que sabes qué métricas están disponibles a través de Spring Boot Actuator y cómo comprobar el estado de tu aplicación, te resultará más sencillo gestionarla. La próxima vez que tu servidor decida "tener un mal día", estarás armado con las herramientas necesarias. O al menos sabrás antes que los usuarios empiecen a escribir en el chat del soporte técnico.
GO TO FULL VERSION