Le suivi distribué permet de tracer l'intégralité du parcours d'une requête à travers les microservices, en mesurant les temps de réponse et en identifiant les dépendances entre composants.
Sleuth : instrumentation des traces
- Objectifs principaux :
- Cartographier le flux des appels entre services.
- Analsyer les performances par échantillonnage des requêtes lentes.
- Détecter les goulots d’étranglement et optimiser les chemins critiques.
- Visualiser les erreurs non interceptées via une intégration avec Zipkin.
- Concepts clés :
Span: unité élémentaire représentant une opération, identifiée par un ID et reliée à un parent.Trace: arborescence complète d’un appel, identifiée par un Trace ID unique.Annotations: marqueurs temporels :cs(Client Send) : début de la requête.sr(Server Received) : réception côté serveur.ss(Server Sent) : réponse prête côté serveur.cr(Client Received) : réception côté client.
<!-- Dépendance Sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
spring:
sleuth:
sampler:
probability: 1.0 # Taux d'échantillonnage (100% en dev)
Zipkin : collecte et visualisation
- Architecture :
- Collector : normalise les traces entrantes.
- Storage : stocke les données (mémoire, MySQL, Elasticsearch).
- UI Web : interface graphique pour explorer les traces.
- API REST : accès programmatique aux données.
- Déploiement : via Docker, accessible à
http://localhost:9411. - Persistance MySQL : schéma SQL fourni pour conserver les traces après redémarrage.
CREATE TABLE IF NOT EXISTS trace_segments (
trace_id_high BIGINT DEFAULT 0,
trace_id BIGINT NOT NULL,
segment_id BIGINT NOT NULL,
operation_name VARCHAR(255),
parent_id BIGINT,
start_time_micros BIGINT,
duration_micros BIGINT,
PRIMARY KEY (trace_id_high, trace_id, segment_id)
) ENGINE=InnoDB;
-- Index pour performance
ALTER TABLE trace_segments ADD INDEX idx_trace(trace_id_high, trace_id);
ALTER TABLE trace_segments ADD INDEX idx_operation(operation_name);
<!-- Intégration Sleuth + Zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
spring:
zipkin:
base-url: http://localhost:9411
sender:
type: web # Envoi HTTP synchrone
SkyWalking : alternative moderne
Plateforme APM complète avec collecte automatique, topologie dynamique, et analyse de métriques en temps réel. Compatible avec Sleuth via OpenTelemetry ou agents JVM.