RousselTMLEARNING

Observabilité

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

Configurer les exporters du Collector OpenTelemetry : OTLP gRPC/HTTP, Prometheus, prometheusremotewrite, Loki, debug, file, load balancing, TLS, authentification, retry et file d'attente.

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

Articles liés

OpenTelemetry Collector : les Processors (transformer, filtrer et protéger la télémétrie)

Maîtriser les processors du Collector OpenTelemetry : batch, memory_limiter, attributes, resource, filter, tr…

Tracing distribué : la propagation du contexte (W3C Trace Context et baggage)

Comprendre et mettre en œuvre la propagation de contexte OpenTelemetry : en-tête traceparent, tracestate, bag…

Architecture OpenTelemetry : Comprendre les 3 niveaux

Plongée au cœur de l'architecture OpenTelemetry. Apprenez comment les données circulent de l'application au b…

Pour aller plus loin