Suivi distribué des traces avec Spring Cloud, Sleuth, Zipkin et SkyWalking

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.

Étiquettes: SpringCloud Sleuth Zipkin SkyWalking APM

Publié le 15 septembre à 01h10