Observabilité Java : tracing, métriques, logs pour experts

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Observabilité en Java : de « pourquoi ça a planté ? » à « je sais ce qui va se passer dans une minute »

\n\n

Imaginez : votre application Java tourne en production. Tout va bien. Puis soudain, les utilisateurs se plaignent que la page met 10 secondes à charger. Vous vous connectez au serveur, regardez les logs, et ne voyez que des INFO sans aucun ERROR. Que faire ? Où regarder ?

\n\n

Avec le monitoring classique, vous vérifiez : le serveur est-il vivant, combien de mémoire est utilisée, le processus a-t-il planté. Mais c'est comme vérifier si l'ampoule du tableau de bord est allumée — utile, mais insuffisant. L'observabilité est le niveau supérieur. C'est la capacité à comprendre l'état interne d'un système à partir de ses données de sortie externes : logs, métriques et traces.

\n\n

Dans cet article, je vais vous montrer comment implémenter l'observabilité en Java avec des exemples concrets. Nous utiliserons OpenTelemetry, Micrometer, Spring Boot Actuator et le classique SLF4J. Vous apprendrez à lier logs, métriques et traces en une vue d'ensemble cohérente, et pas seulement à « tout collecter en vrac ».

\n\n

Qu'est-ce que l'observabilité et pourquoi ce n'est pas juste « collecter des logs » ?

\n\n

L'observabilité vient de la théorie du contrôle. Un système est observable si l'on peut reconstruire son état interne à partir de ses données de sortie. Dans le monde Java, cela repose sur trois piliers :

\n\n
    \n
  • Logs — enregistrements structurés d'événements (que s'est-il passé ?) ;
  • \n
  • Métriques — indicateurs numériques (combien ? combien de temps ?) ;
  • \n
  • Traces — chaînes d'appels (quel chemin a emprunté la requête ?).
  • \n
\n\n

Sans observabilité, vous êtes aveugle. Vous savez que le CPU est à 95 %, mais vous ignorez quel endpoint spécifique le sollicite. Vous voyez une erreur dans les logs, mais vous ne comprenez pas quel utilisateur l'a déclenchée ni quels services étaient impliqués. L'observabilité en Java n'est pas une question « d'ajouter une librairie », mais une culture de développement.

\n\n

OpenTelemetry : l'outil universel pour l'observabilité

\n\n

Avant, c'était la jungle : Zipkin pour le tracing, Prometheus pour les métriques, ELK pour les logs. Chacun avec son propre SDK. OpenTelemetry (OTel) est venu pour les unifier. C'est un standard open-source pour la collecte de télémétrie. Il supporte Java nativement et s'intègre facilement dans Spring Boot, Micronaut, Quarkus.

\n\n

Comment ça marche ? Vous ajoutez un agent ou un SDK à votre application Java, et OTel intercepte automatiquement les requêtes HTTP, les appels de base de données, les files de messages. Vous n'avez pas besoin d'écrire du code pour chaque outil séparément.

\n\n

Exemple : configuration d'OpenTelemetry dans Spring Boot

\n\n

Ajoutez la dépendance dans votre pom.xml :

\n\n
<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-api</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-sdk</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-spring-boot-starter</artifactId>\n    <version>2.6.0</version>\n</dependency>
\n\n

Ensuite, dans la configuration (application.yml), spécifiez l'exportateur, par exemple vers Jaeger ou un collecteur OTLP :

\n\n
otel:\n  exporter:\n    otlp:\n      endpoint: http://localhost:4317\n  traces:\n    exporter: otlp\n  metrics:\n    exporter: otlp\n  logs:\n    exporter: otlp
\n\n

Et voilà ! Désormais, chaque requête HTTP vers votre contrôleur crée automatiquement une trace. Vous pouvez voir combien de temps a pris chaque appel de base de données, d'API externe ou simplement un délai dans le thread.

\n\n

Tracing en Java : comment trouver le goulot d'étranglement

\n\n

Le tracing est sans doute la partie la plus puissante de l'observabilité. Lorsque votre application est composée de dizaines de microservices, les traces sont le seul moyen de comprendre pourquoi une requête prend 2 secondes, alors que chaque service

Blogs

Book Recommendations