RousselTMLEARNING

Article · OpenTelemetry: From Discovery to Expertise

Exporters: routing data to backends

This article is available in French.

1. Panorama des exporters #

Quel exporter pour quel backend ?

Les plus courants #

Exporters du Collector
Un même signal peut aller vers plusieurs exporters.
ExporterSignalUsage
otlp (gRPC)Traces, métriques, logsTempo, autre Collector, backends compatibles OTLP
otlphttpTraces, métriques, logsLoki (/otlp), Grafana Cloud, Dynatrace, Honeycomb
prometheusMétriquesExpose un endpoint /metrics à scraper
prometheusremotewriteMétriquesPush vers Prometheus, Mimir, Thanos Receive
debugTousAfficher dans la console (diagnostic)
fileTousÉcrire dans un fichier JSON
loadbalancingTraces, logsRépartir par TraceID entre plusieurs Collectors

2. Configurer les exporters #

Exemples complets.

OTLP, Prometheus et debug #

exporters:
  otlp/tempo:
    endpoint: tempo:4317
    tls: { insecure: true }
  otlphttp/loki:
    endpoint: http://loki:3100/otlp
  prometheusremotewrite:
    endpoint: http://mimir:9009/api/v1/push
    headers: { X-Scope-OrgID: equipe-a }
    resource_to_telemetry_conversion: { enabled: true }
  prometheus:
    endpoint: 0.0.0.0:8889          # à scraper par Prometheus
  debug:
    verbosity: basic

service:
  pipelines:
    traces:  { receivers: [otlp], processors: [batch], exporters: [otlp/tempo, debug] }
    metrics: { receivers: [otlp], processors: [batch], exporters: [prometheusremotewrite] }
    logs:    { receivers: [otlp], processors: [batch], exporters: [otlphttp/loki] }

TLS et authentification #

exporters:
  otlphttp/cloud:
    endpoint: https://otlp-gateway-prod-eu-west-0.grafana.net/otlp
    auth: { authenticator: basicauth/cloud }
  otlp/secure:
    endpoint: backend.interne:4317
    tls:
      ca_file: /etc/otel/ca.pem
      cert_file: /etc/otel/client.pem
      key_file: /etc/otel/client.key

extensions:
  basicauth/cloud:
    client_auth: { username: ${env:GC_USER}, password: ${env:GC_TOKEN} }
service:
  extensions: [basicauth/cloud]
Erreur Courante : Ne laissez pas tls.insecure: true en production : la télémétrie peut contenir des données sensibles. Utilisez des variables d'environnement (${env:NOM}) pour les secrets.

3. Fiabilité : retry et file d'attente #

Ne pas perdre de données quand le backend est lent.

sending_queue et retry_on_failure #

exporters:
  otlp/tempo:
    endpoint: tempo:4317
    sending_queue:
      enabled: true
      num_consumers: 10
      queue_size: 5000
      storage: file_storage/queue       # file d'attente persistante sur disque
    retry_on_failure:
      enabled: true
      initial_interval: 5s
      max_interval: 30s
      max_elapsed_time: 5m
    timeout: 15s

extensions:
  file_storage/queue:
    directory: /var/lib/otelcol/queue
Bonne Pratique : Surveillez otelcol_exporter_queue_size et otelcol_exporter_send_failed_spans : une file qui se remplit signale un backend trop lent avant la perte de données.

4. Répartir la charge et diagnostiquer #

loadbalancing et debug.

Load balancing par TraceID #

# Couche 1 : distribue par TraceID vers les Collectors de la couche 2 (tail sampling)
exporters:
  loadbalancing:
    routing_key: traceID
    protocol: { otlp: { tls: { insecure: true } } }
    resolver:
      dns: { hostname: otel-collector-tier2.monitoring.svc.cluster.local, port: 4317 }

Vérifier que les données partent #

curl -s localhost:8888/metrics | grep -E 'otelcol_exporter_(sent|send_failed)_(spans|metric_points|log_records)'
docker logs otelcol 2>&1 | grep -iE "error|dropping|retry" | tail
otelcol-contrib validate --config=config.yaml

📄 OpenTelemetry Collector : les Exporters (envoyer la télémétrie vers les backends) →

My progress

  • ⏱ Estimated time : ≈ 11 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Recommended Articles

Instrumenter ses applications pour Jaeger avec OpenTelemetry

Envoyer des traces à Jaeger avec OpenTelemetry : auto-instrumentation (Java, Python, Node.js), SD...

Les Data Sources dans Grafana : Connectez et unifiez vos données

Apprenez à étendre les capacités de Grafana via les Data Sources. Découvrez les plugins essentiel...

Les conventions sémantiques OpenTelemetry (semconv) : nommer la télémétrie

Comprendre et appliquer les conventions sémantiques OpenTelemetry : attributs de ressource, HTTP,...

Les métriques OpenTelemetry : instruments, temporalité, histogrammes et exemplars

Maîtriser le signal métrique : MeterProvider, instruments synchrones et asynchrones (Counter, UpD...

OpenTelemetry sur Kubernetes : Operator, auto-instrumentation et Collector

Déployer OpenTelemetry sur Kubernetes : modes de déploiement du Collector (DaemonSet, Deployment,...

Les concepts fondamentaux d'OpenTelemetry : signaux, ressources, contexte et maturité

Le vocabulaire indispensable d'OpenTelemetry : les quatre signaux, API et SDK, ressource et instr...

Envoyer des traces vers Tempo : instrumentation OpenTelemetry et Alloy

Produire et acheminer des traces vers Tempo : auto-instrumentation Python/Java/Node, SDK manuel, ...

OpenTelemetry et Dynatrace : OTLP, collecteur et instrumentation

Intégrer OpenTelemetry à Dynatrace : endpoint OTLP et jetons, Dynatrace OTel Collector, traces, m...

Les profils, le quatrième signal d'OpenTelemetry : profilage continu et corrélation avec les traces

Comprendre le nouveau signal profile d'OpenTelemetry : profilage continu, flame graphs, modèle de...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!