Publié le : 10/05/2026 à 10:00

Plongez dans le traitement des traces distribuées. Apprenez à ingérer des traces OTLP, Jaeger ou Zipkin avec Grafana Alloy, et à configurer l'échantillonnage avant l'envoi vers Tempo.

1. Ingestion des Traces

Ingestion via OTLP ou protocoles tiers (Jaeger, Zipkin).

Recevoir la télémétrie

Grafana Alloy intègre les capacités de l'OpenTelemetry Collector. En utilisant le composant otelcol.receiver.otlp, Alloy peut écouter sur les ports gRPC et HTTP standards pour recevoir les spans envoyées par vos applications instrumentées. Il est également capable de recevoir des traces provenant de systèmes plus anciens utilisant les protocoles Jaeger ou Zipkin, centralisant ainsi toute la collecte de traces.

2. Transformation et Échantillonnage

Adaptation des spans et échantillonnage (sampling).

Optimiser le stockage des traces

Le volume de données généré par le traçage distribué peut être colossal. Les composants de processeurs (otelcol.processor) d'Alloy permettent de transformer les données en vol : modifier des attributs de spans, masquer des informations sensibles (PII), et surtout appliquer des stratégies d'échantillonnage (sampling). Vous pouvez configurer un échantillonnage probabiliste pour ne conserver qu'un certain pourcentage de traces, ou utiliser le filtrage basé sur la queue (tail-based) pour conserver spécifiquement les traces en erreur ou particulièrement lentes, avant de les envoyer vers Grafana Tempo via otelcol.exporter.otlp.


Bonne Pratique : Utilisez le composant otelcol.processor.tail_sampling pour mettre en place un échantillonnage intelligent. Conservez 100% des traces contenant des erreurs ou des latences anormales, mais seulement 5% des traces de succès normales. Cela réduit considérablement vos coûts Tempo.
Erreur Courante : Envoyer l'intégralité (100%) des traces d'une application à fort trafic directement à Tempo. Cela entraîne une saturation réseau, des coûts très élevés et une lenteur globale d'exploration.
otelcol.processor.tail_sampling "smart_sampler" {
  policy {
    name = "keep-errors"
    type = "status_code"
    status_code {
      status_codes = ["ERROR"]
    }
  }
  policy {
    name = "probabilistic-success"
    type = "probabilistic"
    probabilistic {
      sampling_percentage = 5
    }
  }
  output {
    metrics = [otelcol.exporter.otlp.tempo.input]
  }
}
Lien copié dans le presse-papiers !