Aller au contenu principal

Chapitre 1: Introduction à Spring Boot Actuator

Introduction​

Spring Boot Actuator ajoute des fonctionnalités de monitoring et de gestion à votre application. Il expose des endpoints HTTP qui permettent de surveiller l'état de santé, les métriques, et de diagnostiquer les problèmes.


🎯 Objectifs du Chapitre​

À la fin de ce chapitre, vous saurez:

  1. ✅ Ce qu'est Actuator et pourquoi l'utiliser
  2. ✅ Ajouter Actuator à votre projet
  3. ✅ Configurer les endpoints
  4. ✅ Sécuriser l'accès aux endpoints

1. Qu'est-ce qu'Actuator?​

Fonctionnalités Principales​

Spring Boot Actuator fournit:
├── Health Checks: L'application fonctionne-t-elle?
├── Métriques: Performance, utilisation mémoire, requêtes/seconde
├── Info: Informations sur l'application (version, build)
├── Environment: Configuration et variables d'environnement
├── Loggers: Modifier les niveaux de log à chaud
├── Thread Dump: Analyser les threads
├── Heap Dump: Analyser la mémoire
└── HTTP Trace: Historique des requêtes

Cas d'Usage​

1. Kubernetes: Probes de liveness/readiness
2. Load Balancer: Vérifier si l'instance est saine
3. Prometheus: Collecter des métriques
4. Debugging: Diagnostiquer en production
5. DevOps: Automatiser les déploiements

2. Installation​

Dépendance Maven​

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

Gradle​

implementation 'org.springframework.boot:spring-boot-starter-actuator'

3. Configuration de Base​

Activer les Endpoints​

Par défaut, seul /actuator/health est exposé via HTTP.

# application.properties

# Exposer tous les endpoints via HTTP
management.endpoints.web.exposure.include=*

# Ou exposer seulement certains endpoints
management.endpoints.web.exposure.include=health,info,metrics,prometheus

# Exclure des endpoints sensibles
management.endpoints.web.exposure.exclude=env,beans

Vérifier l'Installation​

# Démarrer l'application
mvn spring-boot:run

# Lister tous les endpoints disponibles
curl http://localhost:8080/actuator

Réponse:

{
"_links": {
"self": {"href": "http://localhost:8080/actuator"},
"health": {"href": "http://localhost:8080/actuator/health"},
"info": {"href": "http://localhost:8080/actuator/info"},
"metrics": {"href": "http://localhost:8080/actuator/metrics"},
"loggers": {"href": "http://localhost:8080/actuator/loggers"}
}
}

4. Port et Path Personnalisés​

Séparer le Port de Management​

# Port séparé pour Actuator (recommandé en production)
management.server.port=8081

# L'application reste sur 8080
# Actuator accessible sur 8081

Avantages:

  • Isoler le trafic de monitoring
  • Configurer un firewall différent
  • Ne pas exposer sur Internet

Personnaliser le Path​

# Changer le path de base
management.endpoints.web.base-path=/admin/monitoring

# Les endpoints seront sous:
# /admin/monitoring/health
# /admin/monitoring/info
# etc.

5. Sécurité des Endpoints​

Avec Spring Security​

@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
// Endpoints publics
.requestMatchers("/actuator/health").permitAll()
.requestMatchers("/actuator/info").permitAll()

// Endpoints pour Prometheus (IP interne seulement)
.requestMatchers("/actuator/prometheus").permitAll()

// Tous les autres endpoints Actuator: ADMIN seulement
.requestMatchers("/actuator/**").hasRole("ADMIN")

// Reste de l'application
.anyRequest().authenticated()
)
.httpBasic(Customizer.withDefaults());

return http.build();
}
}

Désactiver des Endpoints​

# Désactiver complètement un endpoint
management.endpoint.shutdown.enabled=false
management.endpoint.env.enabled=false

# Désactiver tous, puis activer sélectivement
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
management.endpoint.info.enabled=true
management.endpoint.metrics.enabled=true

6. Endpoints Essentiels​

/actuator/health​

curl http://localhost:8080/actuator/health
{
"status": "UP"
}

Avec détails:

management.endpoint.health.show-details=always
{
"status": "UP",
"components": {
"db": {
"status": "UP",
"details": {
"database": "H2",
"validationQuery": "isValid()"
}
},
"diskSpace": {
"status": "UP",
"details": {
"total": 499963174912,
"free": 234567891234,
"threshold": 10485760
}
}
}
}

/actuator/info​

# Ajouter des infos personnalisées
info.app.name=My Application
info.app.version=1.0.0
info.app.description=Application de demo
info.contact.email=support@example.com

# Infos Git (si spring-boot-maven-plugin configuré)
management.info.git.mode=full
curl http://localhost:8080/actuator/info
{
"app": {
"name": "My Application",
"version": "1.0.0",
"description": "Application de demo"
},
"contact": {
"email": "support@example.com"
}
}

/actuator/metrics​

# Lister toutes les métriques
curl http://localhost:8080/actuator/metrics

# Une métrique spécifique
curl http://localhost:8080/actuator/metrics/jvm.memory.used
{
"name": "jvm.memory.used",
"measurements": [
{"statistic": "VALUE", "value": 123456789}
],
"availableTags": [
{"tag": "area", "values": ["heap", "nonheap"]},
{"tag": "id", "values": ["G1 Eden Space", "G1 Old Gen"]}
]
}

7. Configuration Complète Recommandée​

# ===== ACTUATOR =====

# Exposer les endpoints nécessaires
management.endpoints.web.exposure.include=health,info,metrics,prometheus,loggers

# Port séparé (optionnel mais recommandé en prod)
# management.server.port=8081

# Health avec détails
management.endpoint.health.show-details=when_authorized
management.endpoint.health.show-components=when_authorized

# Info personnalisé
info.app.name=@project.name@
info.app.version=@project.version@
info.app.encoding=@project.build.sourceEncoding@
info.java.version=@java.version@

# Activer les infos de build
management.info.build.enabled=true
management.info.git.enabled=true
management.info.env.enabled=true

# Métriques
management.metrics.tags.application=${spring.application.name}

8. Résumé​

Installation​

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

Configuration Minimale​

management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always

Endpoints Clés​

EndpointUsage
/actuator/healthÉtat de santé
/actuator/infoInformations application
/actuator/metricsMétriques de performance
/actuator/loggersNiveaux de log
/actuator/envVariables d'environnement

🎯 Prochaine Étape​

Explorons en détail tous les endpoints disponibles.

➡️ Chapitre 2: Les Endpoints


⬅️ Retour au Module 11