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]
}
}