
Personnalisation de l'endpoint `/info`
Apprenez à enrichir l'endpoint /info d'Actuator avec des informations de build, des données Git et des contributions personnalisées dans Spring Boot.
Introduction à l'utilité de l'endpoint `/info`
L'endpoint `/info` de Spring Boot Actuator sert de vitrine pour exposer des informations générales, non sensibles, sur votre application. Contrairement à `/health` qui indique l'état opérationnel ou `/metrics` qui fournit des données de performance, `/info` est destiné à afficher des métadonnées descriptives : version de l'application, informations de build, détails sur le commit Git, ou toute autre information statique ou dynamique que vous jugez pertinente pour identifier ou décrire l'instance applicative en cours d'exécution.
Par défaut, cet endpoint est souvent vide. Sa véritable valeur réside dans sa capacité à être personnalisé pour fournir un contexte utile aux développeurs, aux équipes d'exploitation ou aux outils de supervision. Savoir quelle version exacte du code tourne sur un environnement donné, ou quel commit spécifique a été déployé, peut s'avérer crucial pour le diagnostic et la gestion des déploiements.
Pour accéder à cet endpoint (si exposé via HTTP, ce qui est souvent le cas par défaut pour `/info`), vous pouvez généralement utiliser une requête GET sur `/actuator/info` (le chemin de base `/actuator` peut varier selon votre configuration `management.endpoints.web.base-path`).
Configuration statique via `application.properties` ou `application.yml`
La manière la plus simple d'ajouter des informations à l'endpoint `/info` est d'utiliser des propriétés préfixées par `info.` dans vos fichiers de configuration (`application.properties` ou `application.yml`). Spring Boot collecte automatiquement toutes les propriétés sous ce préfixe et les expose dans la réponse JSON de l'endpoint.
Dans `application.properties` :
# application.properties
info.app.name=Mon Application Incroyable
info.app.description=Service de gestion des commandes
info.app.version=1.2.3
info.contact.email=support@example.com
info.contact.team=Equipe Alpha
Dans `application.yml` (permettant une structure plus hiérarchique) :
# application.yml
info:
app:
name: Mon Application Incroyable
description: Service de gestion des commandes
version: 1.2.3
contact:
email: support@example.com
team: Equipe Alpha
En accédant à `/actuator/info`, vous obtiendriez une réponse JSON structurée reflétant ces propriétés :
{
"app": {
"name": "Mon Application Incroyable",
"description": "Service de gestion des commandes",
"version": "1.2.3"
},
"contact": {
"email": "support@example.com",
"team": "Equipe Alpha"
}
}
Cette méthode est idéale pour les informations qui ne changent pas fréquemment ou qui sont définies au niveau de l'environnement.
Intégration automatique des informations de build
Il est souvent très utile d'exposer les informations relatives au build de l'application (version, artefact, groupe, date/heure du build). Spring Boot facilite cela grâce aux plugins Maven et Gradle.
Avec Maven, assurez-vous que le plugin `spring-boot-maven-plugin` est configuré et exécutez le goal `build-info` :
org.springframework.boot
spring-boot-maven-plugin
build-info
Avec Gradle, la tâche `bootBuildInfo` est disponible lorsque le plugin `org.springframework.boot` est appliqué. Elle est généralement exécutée automatiquement lors du build.
// build.gradle
springBoot {
buildInfo() // Active la génération de build-info.properties
}
Ces configurations génèrent un fichier `META-INF/build-info.properties` dans l'artefact final. Si Actuator détecte ce fichier, et si la contribution `build` est activée (par défaut `management.info.build.enabled=true`), les informations seront ajoutées à l'endpoint `/info` sous la clé `build`.
{
"build": {
"artifact": "mon-app",
"name": "mon-app",
"time": "2023-10-27T10:30:00.123Z",
"version": "1.2.3-SNAPSHOT",
"group": "com.example"
}
// ... autres infos
}
Affichage des informations Git
De manière similaire aux informations de build, il est possible d'exposer des détails sur l'état du repository Git au moment du build (branche, ID du dernier commit, heure du commit). Ceci est réalisé à l'aide d'un plugin qui génère un fichier `git.properties`.
Avec Maven, utilisez `git-commit-id-plugin` :
io.github.git-commit-id
git-commit-id-maven-plugin
revision
${project.basedir}/.git
false
Avec Gradle, un plugin équivalent existe (`com.gorylenko.gradle-git-properties`).
Si le fichier `git.properties` est présent et que la contribution Git est activée (par défaut `management.info.git.enabled=true`), les informations apparaîtront sous la clé `git` dans `/info`.
{
"git": {
"branch": "main",
"commit": {
"id": "abcdef1",
"time": "2023-10-27T09:15:00Z"
}
}
// ... autres infos
}
Vous pouvez contrôler la quantité d'informations Git exposées via la propriété `management.info.git.mode=simple` (par défaut, n'expose que la branche et l'ID court du commit) ou `management.info.git.mode=full` (expose plus de détails comme le message du commit, l'auteur, etc., si générés par le plugin).
Ajout d'informations dynamiques avec `InfoContributor`
Pour exposer des informations qui ne sont pas statiques ou qui nécessitent une logique de calcul au moment de l'appel, vous pouvez implémenter l'interface `InfoContributor`. Spring Boot détectera automatiquement tous les beans qui implémentent cette interface et appellera leur méthode `contribute` lors de la construction de la réponse `/info`.
Créez un bean qui implémente `InfoContributor` :
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class CustomInfoContributor implements InfoContributor {
private final Environment environment;
public CustomInfoContributor(Environment environment) {
this.environment = environment;
}
@Override
public void contribute(Info.Builder builder) {
// Exemple 1: Ajouter les profils actifs
builder.withDetail("active-profiles", environment.getActiveProfiles());
// Exemple 2: Ajouter des détails personnalisés dans une map
Map customDetails = new HashMap<>();
customDetails.put("customStatus", determineCustomStatus());
customDetails.put("lastCheckTime", System.currentTimeMillis());
builder.withDetail("custom-system-info", customDetails);
}
private String determineCustomStatus() {
// Logique pour déterminer un statut personnalisé
return "OPERATIONAL";
}
}
Le résultat dans `/actuator/info` inclura les informations fournies par ce contributeur :
{
"active-profiles": [
"prod",
"cloud"
],
"custom-system-info": {
"customStatus": "OPERATIONAL",
"lastCheckTime": 1678886400000
}
// ... autres infos (build, git, info.*)
}
Cette approche offre une flexibilité maximale pour exposer des informations dynamiques ou contextuelles sur l'état de votre application.
Considérations importantes
Bien que l'endpoint `/info` soit généralement considéré comme moins sensible que d'autres endpoints Actuator (comme `/env` ou `/heapdump`), il est crucial de ne jamais y inclure d'informations confidentielles (clés API, mots de passe, données personnelles, etc.). Son but est de fournir des informations descriptives générales.
Assurez-vous que les informations de build et Git sont correctement générées et à jour lors de chaque build et déploiement. Des informations obsolètes peuvent être trompeuses.
N'oubliez pas de revoir la configuration de sécurité globale de vos endpoints Actuator. Même si `/info` est souvent exposé par défaut, vous pourriez vouloir restreindre son accès en fonction de votre politique de sécurité, comme pour tous les autres endpoints Actuator.