Observabilidade
Logs
Métricas
Tracing
OpenTelemetry
Prometheus
Grafana
Cloud
DevOps

Observabilité dans les systèmes distribués : journaux, métriques et traçage

Observabilité dans les systèmes distribués : journaux, métriques et traçage

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é

  1. Journaux structurés, enregistrements d'événements au format JSON, facilitant les requêtes.
  2. Metrics, valeurs numériques au fil du temps (latence, taux d'erreur, utilisation du processeur).
  3. 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.name et environment dans 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