implémenter un traçage distribué avec opentelemetry et jaeger dans un saas node.js sur kubernetes
08/08/2025
Vous gérez une application SaaS en Node.js déployée sur un cluster Kubernetes et vous souhaitez comprendre précisément le comportement de vos microservices ? Le traçage distribué avec OpenTelemetry et Jaeger vous permet de collecter, visualiser et optimiser chaque appel de bout en bout. Ce tutoriel détaille les étapes pour instrumenter votre code, déployer les composants nécessaires et analyser vos premières traces.
openTelemetry traçage distribué SaaS Node.js Kubernetes : pourquoi et quand l’adopter
Le traçage distribué vous aide à :
- Diagnostiquer un ralentissement et identifier le service coupable.
- Mesurer le temps de réponse moyen par endpoint.
- Visualiser les dépendances entre vos microservices.
En production, on observe souvent une réduction de 30 % du time-to-detect d’incidents grâce à un bon traçage.
étape 1 : installer et configurer les SDK OpenTelemetry
Dans votre projet Node.js, ajoutez les dépendances de base et l’exporter vers Jaeger :
npm install @opentelemetry/api @opentelemetry/sdk-node \
@opentelemetry/auto-instrumentations-node \
@opentelemetry/exporter-jaeger
Puis, créez un fichier tracing.js
à la racine :
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
const sdk = new NodeSDK({
traceExporter: new JaegerExporter({
endpoint: 'http://jaeger-collector:14268/api/traces'
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk.start()
.then(() => console.log('Tracing initialized'))
.catch(err => console.error('Error starting tracing', err));
étape 2 : intégrer le module de traçage dans votre service
Au tout début de votre index.js
ou app.js
, importez :
require('./tracing');
const express = require('express');
const app = express();
// ... votre code
étape 3 : déployer Jaeger sur Kubernetes
Créez un fichier jaeger-deploy.yaml
minimal :
apiVersion: v1
kind: Namespace
metadata:
name: observability
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jaeger
namespace: observability
spec:
replicas: 1
selector: { matchLabels: { app: jaeger } }
template:
metadata: { labels: { app: jaeger } }
spec:
containers:
- name: jaeger
image: jaegertracing/all-in-one:1.43
ports:
- containerPort: 16686
- containerPort: 14268
---
apiVersion: v1
kind: Service
metadata:
name: jaeger
namespace: observability
spec:
type: ClusterIP
ports:
- port: 16686
targetPort: 16686
- port: 14268
targetPort: 14268
selector:
app: jaeger
Puis déployez :
kubectl apply -f jaeger-deploy.yaml
étape 4 : vérifier la collecte et visualiser les traces
Ouvrez le dashboard Jaeger :
kubectl port-forward svc/jaeger 16686:16686 -n observability
Puis accédez à http://localhost:16686. Vous devriez voir vos services instrumentés et les spans générés à chaque requête.
bonnes pratiques pour un traçage distribué performant
- Limiter le nombre de spans par requête (éviter la surcharge). Objectif : 100 spans max pour un appel complexe.
- Attribuer des noms de service et d’opération clairs (
user-service.getUserById
). - Pensez au sampling adaptatif pour la production (ex.
1 % des requêtes
). - Utiliser un storage scalable (ex. backend Jaeger sur Cassandra ou Elasticsearch) pour plus de 10 M de spans/jour.
- Surveillez l’overhead CPU : idéalement <10 ms de latence ajoutée.
conclusion
Le traçage distribué avec OpenTelemetry et Jaeger vous fournit une visibilité fine sur le comportement de votre SaaS Node.js sous Kubernetes. Grâce à ce guide, vous pouvez diagnostiquer plus rapidement les goulots d’étranglement, améliorer vos temps de réponse et garantir une meilleure satisfaction client. Pour aller plus loin dans l’optimisation de vos architectures SaaS ou pour un accompagnement complet, contactez-nous.