𝗠𝗼𝗻𝗶𝘁𝗼𝗿𝗲𝗼 𝗲𝗻 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁
Una aplicación en producción debe hacer algo más que simplemente ejecutarse. Debe ser observable y fácil de reparar cuando falla. Necesitas controles de salud (health checks), métricas, registros (logs) y procedimientos claros para gestionar incidentes.
Spring Boot utiliza Actuator para proporcionar estas funcionalidades. Actuator te ofrece endpoints como health, metrics e info. Puedes exponerlos a través de HTTP o JMX.
Áreas clave para monitorear:
• Disponibilidad: Comprobar el tiempo de actividad (uptime), la preparación (readiness) y la vitalidad (liveness). • Rendimiento: Rastrear los tiempos de respuesta, la latencia y el rendimiento (throughput). • Errores: Vigilar los errores HTTP 4xx/5xx y los mensajes fallidos. • JVM: Monitorear el heap, la memoria, la CPU y los hilos (threads). • Base de datos: Rastrear los pools de conexiones y las consultas lentas. • Kafka: Monitorear el retraso del consumidor (consumer lag) y las tasas de reintento.
Recolección de métricas
Spring Boot utiliza Micrometer para recolectar métricas. Puedes usar el registro de Prometheus para exponer estas métricas. Una configuración común implica:
Spring Boot App → Prometheus → Grafana
Esto te permite visualizar los datos de la aplicación en tableros (dashboards).
Mejores prácticas de logging
Los logs te ayudan a entender qué sucedió durante un fallo. Utiliza logging JSON estructurado en producción para que los logs sean legibles por máquinas.
Qué hacer:
- Registrar IDs de negocio como orderId o customerId.
- Usar IDs de correlación para vincular los logs de una sola solicitud.
- Incluir trazas de la pila (stack traces) para las excepciones.
- Usar logs estructurados.
Qué no hacer:
- Registrar contraseñas, tokens o datos personales.
- Registrar demasiados datos dentro de bucles (loops).
- Usar System.out.println.
- Ocultar errores con bloques catch vacíos.
Estabilidad operativa
El soporte operativo significa mantener el servicio estable después de desplegarlo. Debes enfocarte en:
- Soporte de incidentes para investigar problemas.
- Dashboards y alertas para detectar problemas a tiempo.
- Runbooks para guiar los pasos de recuperación.
- Estrategias de rollback para lanzamientos fallidos.
Un servicio de Spring Boot sólido es fácil de monitorear, fácil de depurar y fácil de recuperar.
Fuente: https://dev.to/antonio_casado_1fe39cd90e/monitoring-in-spring-boot-1220