Monitoraggio in Spring Boot
Un'applicazione in produzione deve fare molto più che limitarsi a girare. Deve essere osservabile e facile da riparare in caso di guasto. Sono necessari health check, metriche, log e procedure chiare per gestire gli incidenti.
Spring Boot utilizza Actuator per fornire queste funzionalità. Actuator mette a disposizione endpoint come health, metrics e info. È possibile esporli tramite HTTP o JMX.
Aree chiave da monitorare:
• Disponibilità: Controllare uptime, readiness e liveness. • Performance: Monitorare tempi di risposta, latenza e throughput. • Errori: Monitorare gli errori HTTP 4xx/5xx e i messaggi falliti. • JVM: Monitorare heap, memoria, CPU e thread. • Database: Monitorare i connection pool e le query lente. • Kafka: Monitorare il consumer lag e i tassi di retry.
Raccolta delle metriche
Spring Boot utilizza Micrometer per raccogliere le metriche. È possibile utilizzare il registro Prometheus per esporre queste metriche. Una configurazione comune prevede:
Spring Boot App → Prometheus → Grafana
Ciò consente di visualizzare i dati dell'applicazione su dashboard.
Best practice per il logging
I log aiutano a capire cosa è accaduto durante un guasto. In produzione, utilizza il logging JSON strutturato per rendere i log leggibili dalle macchine.
Da fare:
- Registrare ID di business come orderId o customerId.
- Utilizzare correlation ID per collegare i log di una singola richiesta.
- Includere gli stack trace per le eccezioni.
- Utilizzare log strutturati.
Da non fare:
- Registrare password, token o dati personali.
- Registrare troppi dati all'interno dei cicli.
- Utilizzare System.out.println.
- Nascondere gli errori con blocchi catch vuoti.
Stabilità operativa
Il supporto operativo significa mantenere il servizio stabile dopo il deployment. Dovresti concentrarti su:
- Supporto agli incidenti per investigare i problemi.
- Dashboard e alert per individuare i problemi precocemente.
- Runbook per guidare i passaggi di ripristino.
- Strategie di rollback per i rilasci falliti.
Un servizio Spring Boot robusto è facile da monitorare, facile da debuggare e facile da ripristinare.
Fonte: https://dev.to/antonio_casado_1fe39cd90e/monitoring-in-spring-boot-1220