Pourquoi adopter OpenTelemetry plutôt qu'un agent propriétaire
OpenTelemetry est un projet CNCF graduaté qui unifie les trois piliers de l'observabilité — traces, métriques et logs — sous un standard vendor-neutral. Contrairement aux agents Datadog ou New Relic, l'OTel Collector reçoit, transforme et exporte la télémétrie vers n'importe quel backend compatible. Vous changez de stockage sans retoucher votre code applicatif. Les SDKs couvrent Node.js, Python, Go, Java, PHP, Ruby et la plupart des langages modernes, ce qui en fait un socle d'instrumentation pérenne quelle que soit votre stack.
Ce que la stack OTel + Grafana Tempo vous donne
- Tracing distribué sans index externe — Grafana Tempo v2.x stocke les traces en blocs compressés (parquet) sur disque local ou objet storage, sans Cassandra ni Elasticsearch.
- Requêtes TraceQL — le langage dédié de Tempo permet de filtrer les traces par durée, service, statut d'erreur ou attributs personnalisés en quelques secondes.
- Compatibilité multi-protocoles — Tempo accepte OTLP, Zipkin et Jaeger : vos applications existantes s'y connectent sans ré-instrumentation.
- Stack légère sur VPS — 2 Go de RAM suffisent pour un environnement de dev ou staging ; en production avec charge, 4 Go assurent une marge confortable.
- Coût maîtrisé — un VPS à 99 DH/mois/mois self-hosted remplace un abonnement APM Datadog facturé environ 99 DH/mois par hôte et par mois.
Prérequis VPS
Votre VPS doit disposer d'au moins 2 Go de RAM et d'un accès root ou sudo. Docker Engine et Docker Compose v2 doivent être installés. Prévoyez un sous-domaine dédié (par exemple grafana.votre-domaine.com) pour exposer l'interface Grafana derrière un reverse proxy TLS. Les ports 4317 (OTLP/gRPC) et 4318 (OTLP/HTTP) doivent être ouverts dans votre pare-feu pour recevoir la télémétrie depuis vos applications.
Déployer la stack OTel en cinq étapes
Créer la structure Docker Compose
Organisez un dossier otel-stack/ contenant vos fichiers de configuration et un docker-compose.yml. Définissez quatre services : otel-collector, tempo, prometheus et grafana. Reliez-les sur un réseau Docker interne monitoring. Montez un volume nommé tempo-data pour la persistance des traces sur le disque du VPS.
Configurer l'OTel Collector (`otelcol-config.yaml`)
Déclarez deux receivers : otlp sur les ports 4317 (gRPC) et 4318 (HTTP). Dans la section exporters, ajoutez otlp/tempo pointant vers tempo:4317 et prometheus vers le port 8889. Le pipeline traces relie le receiver OTLP à l'exporter Tempo ; le pipeline metrics relie le receiver OTLP à l'exporter Prometheus.
Configurer Grafana Tempo (`tempo-config.yaml`)
Activez le receiver OTLP (gRPC sur le port 4317). Définissez le backend de stockage en mode local avec le chemin /var/tempo. Activez la fonctionnalité search pour permettre les requêtes TraceQL depuis Grafana. Pour un usage production, remplacez le backend local par s3 ou gcs et renseignez les identifiants de votre fournisseur objet.
Lancer Grafana avec les datasources Tempo et Prometheus
Montez un fichier de provisioning datasources.yaml dans le dossier /etc/grafana/provisioning/datasources/. Déclarez deux datasources : une Tempo pointant vers http://tempo:3200 et une Prometheus vers http://prometheus:9090. Lancez l'ensemble avec docker compose up -d. Accédez à Grafana sur le port 3000 et vérifiez que les deux datasources s'affichent en vert.
Instrumenter une première application Node.js ou Python
Pour Node.js, installez @opentelemetry/sdk-node et @opentelemetry/auto-instrumentations-node. Initialisez le SDK avec l'exporter OTLP pointant vers http://votre-vps:4318 et définissez la variable d'environnement OTEL_SERVICE_NAME avec le nom de votre service. Pour Python, utilisez opentelemetry-distro et opentelemetry-exporter-otlp. Relancez votre application et consultez Grafana Explore pour voir apparaître vos premières traces.
TraceQL est le langage de requête natif de Grafana Tempo. Il permet de filtrer les traces par durée, service, statut HTTP ou attribut personnalisé. Par exemple, la requête { duration > 500ms && status = error } isole immédiatement les appels lents en erreur sur l'ensemble de votre infrastructure. Combinez plusieurs conditions avec && ou || pour affiner le diagnostic sans parcourir des milliers de spans manuellement.
Aller plus loin : corréler traces, métriques et logs
Ajoutez Grafana Loki à votre stack pour centraliser les logs applicatifs dans le même environnement. Grafana Explore vous permet de passer d'une trace à ses logs associés en un clic, puis de vérifier les métriques Prometheus correspondantes sur la même fenêtre temporelle. Si vous préférez un seul binaire tout-en-un, OpenObserve est une alternative légère qui regroupe traces, métriques et logs dans un seul service — disponible lui aussi en auto-hébergement sur VPS.