Dans les environnements de microservices, savoir ce qui se passe au sein de l’application est essentiel. L'Observabilité va au-delà de la simple surveillance, elle vous permet de poser des questions à votre système et de recevoir des réponses fiables.
Trois piliers de l'observabilité
- Journaux structurés, enregistrements d'événements au format JSON, facilitant les requêtes.
- Metrics, valeurs numériques au fil du temps (latence, taux d'erreur, utilisation du processeur).
- Traçage distribué, suivi des demandes qui traversent plusieurs services.
Stratégie de mise en œuvre
- Centralisez les journaux à l'aide d'Elastic Stack (Filebeat → Logstash → Elasticsearch → Kibana) ou de services gérés comme CloudWatch Logs.
- Exportez les métriques vers Prometheus et affichez-les dans Grafana.
- Code instrument avec OpenTelemetry, envoi de spans à Jaeger ou Zipkin.
Liste de contrôle d'observabilité
- Configurer le logger JSON (ex. : Winston, Bunyan).
- Réglez
service.nameetenvironmentdans tous les journaux. - Exporter les métriques standards (
process_cpu_seconds_total,process_resident_memory_bytes). - Instrumentez les clients et serveurs HTTP avec OpenTelemetry.
- Créer des tableaux de bord de latence, de taux d'erreur et de débit.
- Définir les alertes SLA (par exemple latence > 500 ms, erreur > 1 %).
- Corrélation d'ID de document (
trace_id,span_id).
Exemple d'enregistreur JSON (Node.js)
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), defaultMeta: { service: process.env.SERVICE_NAME, environment: process.env.NODE_ENV }, transports: [new winston.transports.Console()] }); module.exports = logger;
Exemple de métrique personnalisée avec Prometheus (Node.js)
const client = require('prom-client'); const requestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duração das requisições HTTP em segundos', labelNames: ['method', 'route', 'status_code'] }); app.use((req, res, next) => { const end = requestDuration.startTimer({ method: req.method, route: req.path }); res.on('finish', () => end({ status_code: res.statusCode })); next(); });
Exemple de traçage avec OpenTelemetry (Node.js)
const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter({ endpoint: process.env.JAEGER_ENDPOINT }))); provider.register();
Conclusion
La mise en œuvre de l'observabilité nécessite de la discipline, mais apporte des résultats immédiats : détection précoce des pannes, réduction du MTTR (Mean Time To Recovery) et confiance nécessaire pour faire évoluer les systèmes critiques.
Comment surveillez-vous vos services ? Partagez vos outils préférés !
A lire aussi
- Observabilité avec OpenTelemetry : métriques, journaux et traçage distribué
- Observabilité au-delà des logs : ce que change OpenTelemetry en pratique -Workers : débogage, journaux et Workers Tail — observabilité à la périphérie sans serveur de journaux
- Architecture d'application : Guide complet des systèmes évolutifs -Métriques d'ingénierie de fiabilité du site : définition et surveillance des SLI, SLO et SLA
- Architecture Edge Computing : Stratégies pour le traitement distribué
