1. Introduction
Avant de plonger dans la pratique, voyons pourquoi on a besoin de systèmes externes pour collecter les logs. Imaginez que votre application est déployée pas sur votre PC perso mais en production : des centaines de serveurs, des microservices, des tas d'utilisateurs, quelqu'un se plaint que "l'application rame". Trouver l'événement nécessaire dans un tel flux de logs, c'est comme chercher une aiguille dans une botte de foin. Sans collecte centralisée des logs, débugger et maintenir ces applications est presque impossible. C'est là que Seq et Application Insights entrent en jeu.
Seq : UI sympa, recherche rapide, temps réel
Seq est un système de collecte et d'analyse centralisée des logs structurés, optimisé pour .NET et Serilog. Ce n'est pas juste un service qui exporte des fichiers de log, c'est un outil puissant : en temps réel vous voyez les flux de logs, vous filtrez, recherchez par propriétés, créez des alertes. Seq peut être déployé localement ou dans le cloud.
Pourquoi choisir Seq ?
- Optimisé pour .NET et Serilog, fonctionne "out of the box".
- Recherche et filtrage ultra-rapides sur n'importe quelle propriété des messages.
- Interface web simple et pratique.
- Peut être déployé localement sans paperasse, même sur un laptop.
À quoi ressemble un schéma d'architecture simple ?
+--------------+ +-------------+ +-------------+
| .NET-app | --(log)| Serilog | --(http)| Seq |
+--------------+ +-------------+ +-------------+
| ^
| |
(recherche, filtres, <----[Web UI]
alertes, intégrations)
L'application écrit des logs structurés via Serilog, Serilog les envoie à Seq. Dans l'interface web de Seq vous faites tout ce que vous voulez.
2. Intégration de Serilog avec Seq
Installation de Seq
Seq peut être rapidement testé localement même pour des expérimentations perso. Par exemple, si vous êtes sous Windows, téléchargez Seq depuis le site officiel.
- Téléchargez Seq et installez-le.
- Après l'installation, ouvrez l'interface web (généralement http://localhost:5341).
- Voilà ! Il ne reste plus qu'à configurer l'envoi des logs vers Seq.
Intégration de Serilog avec Seq
Installation du package NuGet :
dotnet add package Serilog.Sinks.Seq
Exemple de configuration du logging dans Program.cs :
using Serilog;
public class Program
{
public static void Main(string[] args)
{
// Configuration de Serilog pour envoyer les logs à Seq
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341") // URL de votre serveur Seq
.CreateLogger();
Log.Information("L'application démarre");
// ... Le reste du code de l'application ...
Log.CloseAndFlush();
}
}
Si tout est configuré correctement, vos logs depuis l'application commenceront à affluer dans Seq.
Exemple d'événement structuré
Log.Information("L'utilisateur {User} s'est connecté à {Time}", userName, DateTime.UtcNow);
Dans Seq vous pouvez maintenant rechercher toutes les connexions d'un utilisateur spécifique :
User == 'user'
Filtrage et recherche
Seq sait filtrer les événements par n'importe quel champ et valeur. Par exemple, vous voulez voir toutes les erreurs d'aujourd'hui ? Il suffit de mettre le filtre :
@Level = 'Error' and @Timestamp > today()
Vous pouvez combiner les conditions — c'est vraiment pratique !
Alertes et intégrations
Seq peut créer des alertes : si, par exemple, le nombre d'erreurs dépasse un seuil, vous recevrez un email, un webhook sera déclenché, ou vous pouvez même envoyer un message dans Slack.
Quelles autres possibilités ?
- Intégration avec les systèmes CI/CD pour collecter automatiquement les logs des tests.
- Possibilité de Dashboards personnalisés (en option payante).
- Plugins pour l'analyse des logs, automatisation d'actions (par ex. création automatique de bugs lors d'un crash).
- Intégration avec Grafana/Prometheus via des plugins.
Erreurs typiques lors de la configuration de Seq
Un problème fréquent — oublier d'indiquer correctement l'URL du serveur Seq dans Serilog, ou que le serveur Seq écoute sur un autre port.
Autre problème — ne pas ouvrir le port pour les connexions entrantes si Seq tourne dans Docker ou sur un serveur. Il faut vérifier l'accessibilité du port depuis l'application vers Seq.
3. Application Insights : télémétrie pour .NET, cloud et un peu de magie
Application Insights (ou "App Insights") est la plateforme cloud de monitoring et d'analyse d'applications de Microsoft Azure. Ce n'est pas seulement la collecte de logs, mais aussi la détection automatique d'anomalies, l'analyse de l'usage, le monitoring des dépendances, des requêtes, des API externes — et bien sûr la visualisation en temps réel. Azure Application Insights est un standard dans l'univers enterprise .NET.
Quels avantages de Application Insights ?
- Pas besoin d'installer un serveur séparé : tout est dans le cloud.
- Intégration profonde avec .NET, ASP.NET, Azure, Visual Studio.
- Collecte automatiquement non seulement vos logs, mais aussi des métriques, des exceptions, des requêtes, des requêtes SQL.
- Possibilité de construire des dashboards, monitorer le SLA, détecter des anomalies, analyser les traces distribuées (distributed tracing).
Comment fonctionne Application Insights ?
+--------------+ +-------------------+ +---------------------+
| .NET-app | --(SDK)| AppInsights SDK | --(https)| Azure Application |
+--------------+ +-------------------+ | Insights (cloud) |
+---------------------+
^ |
(W3C Trace +----> Analytics, recherche, dashboards
Context)
L'application avec le SDK envoie la télémétrie vers le cloud Azure, vous l'analysez et la visualisez ensuite via l'interface web du portail Azure.
Intégration de Application Insights avec une application .NET
Option 1 : Rapide et simple
Si vous avez une application ASP.NET Core, c'est très simple :
dotnet add package Microsoft.ApplicationInsights.AspNetCore
Dans Program.cs :
builder.Services.AddApplicationInsightsTelemetry("<votre_clef_instrument>");
Et si vous avez une application console ou desktop :
dotnet add package Microsoft.ApplicationInsights
Initialisation :
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<votre_clef_instrument>";
var telemetryClient = new TelemetryClient(telemetryConfig);
telemetryClient.TrackTrace("Hello from Application Insights!");
telemetryClient.TrackException(new Exception("OOPS, une erreur est survenue !"));
La clé d'instrument doit être récupérée dans le portail Azure après la création de la ressource Application Insights.
Comment envoyer des données structurées ?
Vous pouvez ajouter des propriétés à chaque trace :
telemetryClient.TrackTrace("L'utilisateur s'est connecté",
new Dictionary<string, string> { ["User"] = userName }
);
Exemple : journaliser les actions d'un utilisateur
Supposons que vous voulez logguer la connexion d'un utilisateur :
var props = new Dictionary<string, string>
{
{ "User", userName },
{ "Time", DateTime.UtcNow.ToString("o") }
};
telemetryClient.TrackEvent("UserLogin", props);
Maintenant non seulement l'événement en lui-même, mais aussi toutes les propriétés sont visibles dans le portail.
4. Petites astuces utiles
Que voyez-vous dans Application Insights ?
- Vue d'ensemble par application : connexions, erreurs, dépendances (par ex. requêtes SQL).
- Recherche dans les logs : n'importe quel événement, filtrage par propriétés.
- Visualisation : graphiques, dashboards.
- Tracing : vous pouvez voir la chaîne d'appels et le temps pris par chaque opération.
- Alerting : configuration d'alertes sur n'importe quelle condition.
Bref sur la structure de Application Insights
| Objet | Description |
|---|---|
| Trace | Message texte (log classique). |
| Event | Événement arbitraire (par ex. "Achat"). |
| Exception | Informations sur une erreur/exception. |
| Dependency | Appel externe (SQL, requête HTTP, etc.). |
| Metric | Indicateurs numériques (par ex. un compteur). |
| Request | Requête utilisateur (pour les apps web). |
Exemple : rechercher une erreur dans Application Insights
Dans le portail Azure vous pouvez construire une requête simple (Kusto Query Language — KQL) :
exceptions
| where timestamp > ago(1d)
| where outerMessage contains "Timeout"
| project timestamp, operation_Name, user_Id, outerMessage
Cela vous montrera tous les timeouts des dernières 24 heures, avec les détails.
Limitations/nuances de Application Insights
- Il faut un compte Azure pour l'utiliser. Il y a une offre gratuite mais avec des limites.
- Parfois il y a un délai entre l'envoi des logs et leur apparition dans l'UI — jusqu'à quelques minutes.
- Pour des projets "très privés" — c'est du cloud, pas une installation locale.
- Si vous abusez des traces, vous pouvez rapidement consommer votre quota journalier.
5. Comparaison entre Seq et Application Insights
| Seq | Application Insights | |
|---|---|---|
| Où c'est stocké | Serveur local (ou cloud) | Cloud Azure |
| Coût | Gratuit/payant, en local | Il y a un plan gratuit, facturation Azure |
| Meilleur usage | Applications .NET, CI locales | Toutes les applications, prod/enterprise |
| UI/Recherche | Très pratique, filtres | Puissant, analytics, dashboards |
| Alerting | Intégré | Conditions complexes, intégration Azure |
| Intégration | Serilog, autres sinks | SDK pour ASP.NET, .NET, JS, etc. |
| Flexibilité | Vous gardez le contrôle | Tout sous le contrôle de Microsoft |
Mettre en pratique ces connaissances
Les connaissances sur Seq et Application Insights vous seront utiles non seulement en production, mais aussi durant le développement, les tests (par ex. pour analyser le comportement des tests automatisés), quand vous travaillez avec des microservices et que vous voulez voir la vue d'ensemble. Aux interviews on demande souvent "Comment organiseriez-vous la collecte des logs pour trouver rapidement les problèmes en production ?" — maintenant vous avez quoi répondre !
De plus, beaucoup d'entreprises modernes utilisent ces systèmes pour construire toute une chaîne d'outils DevOps : Continuous Delivery, création automatique de bugs à partir d'alertes, etc. Le système de collecte des logs n'est pas juste "où va le Console.WriteLine", c'est une vraie "boîte noire" et le moniteur de votre application.
GO TO FULL VERSION