Oussama SAIDI

0 %
Oussama SAIDI
Consultant .Net
Sharepoint Office 365

  • Résidence:
    France
  • Ville:
    Lille
Arabe
Français
Anglais
.Net
Html/Css/Js
Web Api
Base de données
  • C#,.Net Core, .Net MVC
  • Rest Api
  • Docker
  • GIT,TFS

Logging Centralisé avec OpenTelemetry dans .NET Core

avril 7, 2025
Architecture OpenTelemetry pour le logging centralisé

Diagramme officiel OpenTelemetry montrant le flux de données. Source originale.

Introduction

Dans le monde du développement moderne, la gestion des logs est devenue un élément critique pour assurer la stabilité et la performance des applications. OpenTelemetry émerge comme la solution ultime pour implémenter une stratégie de logging centralisée efficace.

Ce guide vous montrera comment:
✔️ Configurer OpenTelemetry dans un projet .NET
✔️ Exporter vos logs vers différents backends
✔️ Mettre en place des bonnes pratiques professionnelles


1. Pourquoi OpenTelemetry ? Comparaison avec les Alternatives

Les Limites des Solutions Traditionnelles

Les outils classiques comme Serilog ou NLog présentent plusieurs inconvénients:

  • Manque de standardisation entre les différents systèmes
  • Difficulté à corréler logs, traces et métriques
  • Déploiement complexe dans les architectures distribuées

Les Avantages Clés d’OpenTelemetry

Contrairement aux alternatives, OpenTelemetry offre:
Un standard ouvert soutenu par la CNCF
Une instrumentation automatique pour de nombreux frameworks
Une intégration transparente avec les principaux backends (Prometheus, Jaeger, etc.)


2. Installation et Configuration de Base

Packages NuGet Essentiels

Commencez par installer ces packages:

dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Exporter.Console

Configuration Minimale

Voici comment initialiser OpenTelemetry:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddOpenTelemetry(options => {
    options.AddConsoleExporter();
    options.IncludeScopes = true;
    options.ParseStateValues = true;
});

3. Exportation Vers Différents Backends

Configuration pour Jaeger

Pour envoyer vos traces vers Jaeger:

builder.Services.AddOpenTelemetryTracing(builder => {
    builder.AddAspNetCoreInstrumentation()
           .AddJaegerExporter(o => {
               o.AgentHost = "localhost";
               o.AgentPort = 6831;
           });
});

Intégration avec Prometheus

Pour exporter des métriques:

builder.Services.AddOpenTelemetryMetrics(builder => {
    builder.AddAspNetCoreInstrumentation()
           .AddPrometheusExporter();
});

4. Bonnes Pratiques Avancées

Filtrage des Logs

Évitez la surcharge avec:

options.AddProcessor(new FilteringLogRecordProcessor(
    new SimpleLogRecordExportProcessor(new ConsoleLogRecordExporter()),
    logRecord => logRecord.Severity > LogLevel.Debug));

Enrichissement des Données

Ajoutez des informations contextuelles:

options.AddProcessor(new EnrichingProcessor());

Gestion des Erreurs

Configurez un fallback en cas d’échec d’export:

options.AddProcessor(new BatchExportProcessor<LogRecord>(
    new ConsoleLogRecordExporter(),
    maxQueueSize: 2000,
    scheduledDelayMilliseconds: 5000));

5. Cas d’Usage Réels

Microservices

Dans une architecture distribuée:

  1. Corrélation entre services via le tracing
  2. Détection rapide des goulots d’étranglement
  3. Surveillance unifiée des différents composants

Applications Cloud-Native

Avantages clés:

  • Intégration native avec Kubernetes
  • Export vers Azure Monitor, AWS X-Ray ou GCP Operations
  • Auto-scaling basé sur les métriques

FAQ

Q: OpenTelemetry remplace-t-il Serilog/NLog?
R: Non, il peut fonctionner en complément pour la centralisation des logs.

Q: Quel backend choisir?
R: Jaeger pour le debugging, Prometheus pour les métriques, ELK pour la recherche full-text.

Q: Comment gérer les données sensibles?
R: Utilisez les processors pour filtrer/masquer les informations critiques.


Conclusion et Prochaines Étapes

OpenTelemetry transforme la gestion des observabilités en proposant:
🔹 Une solution unifiée pour logs, traces et métriques
🔹 Une intégration transparente avec l’écosystème .NET
🔹 Une réduction significative de la complexité opérationnelle

Pour aller plus loin:

Publié dans .Net Core, Asp .Net, C Sharp, c#, ef core, entity framework core, entity-framework-core, Log, Logging, SerilogTags:
© 2024 Tous les droits sont réservés.
oussamasaidi.com