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 self-hosted remplace un abonnement APM Datadog facturé environ 23 $ 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 undocker-compose.yml. Définissez quatre services :otel-collector,tempo,prometheusetgrafana. Reliez-les sur un réseau Docker internemonitoring. Montez un volume nommétempo-datapour la persistance des traces sur le disque du VPS.Configurer l'OTel Collector (`otelcol-config.yaml`)
Déclarez deux receivers :
otlpsur les ports 4317 (gRPC) et 4318 (HTTP). Dans la sectionexporters, ajoutezotlp/tempopointant verstempo:4317etprometheusvers le port 8889. Le pipelinetracesrelie le receiver OTLP à l'exporter Tempo ; le pipelinemetricsrelie 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
localavec le chemin/var/tempo. Activez la fonctionnalitésearchpour permettre les requêtes TraceQL depuis Grafana. Pour un usage production, remplacez le backendlocalpars3ougcset renseignez les identifiants de votre fournisseur objet.Lancer Grafana avec les datasources Tempo et Prometheus
Montez un fichier de provisioning
datasources.yamldans le dossier/etc/grafana/provisioning/datasources/. Déclarez deux datasources : uneTempopointant vershttp://tempo:3200et unePrometheusvershttp://prometheus:9090. Lancez l'ensemble avecdocker 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-nodeet@opentelemetry/auto-instrumentations-node. Initialisez le SDK avec l'exporter OTLP pointant vershttp://votre-vps:4318et définissez la variable d'environnementOTEL_SERVICE_NAMEavec le nom de votre service. Pour Python, utilisezopentelemetry-distroetopentelemetry-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.