1. Introduzione
Prima di tuffarci nella pratica, capiamo perché servono sistemi esterni per raccogliere i log. Immagina che la tua applicazione sia distribuita non sul PC di casa ma in produzione: centinaia di server, microservizi, tanti utenti, qualcuno si lamenta che "l'applicazione va lenta". Trovare l'evento giusto in quel flusso di log è come cercare un ago in un pagliaio. Senza raccolta centralizzata dei log è praticamente impossibile fare debugging e mantenimento di applicazioni così complesse. Ed è qui che entrano in scena Seq e Application Insights.
Seq: UI gradevole, ricerca veloce, tempo reale
Seq è un sistema per la raccolta e analisi centralizzata di log strutturati, ottimizzato per .NET e Serilog. Non è solo un servizio per scaricare file di log, ma uno strumento potente: in tempo reale vedi i flussi di log, filtri, cerchi per proprietà, crei alert. Seq può essere avviato localmente o nel cloud.
Perché scegliere Seq?
- Progettato per .NET e Serilog, funziona "out of the box".
- Ricerca e filtraggio estremamente veloci su qualsiasi proprietà dei messaggi.
- Interfaccia web semplice e comoda.
- Puoi avviarlo localmente senza burocrazia, anche su un portatile.
Com'è fatta una semplice architettura?
+--------------+ +-------------+ +-------------+
| .NET-prilozh.| --(log)| Serilog | --(http)| Seq |
+--------------+ +-------------+ +-------------+
| ^
| |
(poisk, fil'try, <----[Web UI]
alerty, integracii)
L'app scrive log strutturati tramite Serilog, Serilog li invia a Seq. Nell'interfaccia web di Seq fai tutto quello che ti serve.
2. Integrazione di Serilog con Seq
Installazione di Seq
Seq si può provare rapidamente in locale anche per esperimenti casalinghi. Per esempio, su Windows scarica Seq dal sito ufficiale.
- Scarica Seq e installalo.
- Dopo l'installazione apri l'interfaccia web (di solito http://localhost:5341).
- Fatto! Ora resta solo configurare l'invio dei log a Seq.
Integrazione di Serilog con Seq
Installazione del pacchetto NuGet:
dotnet add package Serilog.Sinks.Seq
Esempio di configurazione del logging in Program.cs:
using Serilog;
public class Program
{
public static void Main(string[] args)
{
// Nastroyka Serilog dlya vyvoda logov v Seq
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341") // URL vashego Seq-servera
.CreateLogger();
Log.Information("Prilozhenie startuet");
// ... Ostal'nij kod prilozheniya ...
Log.CloseAndFlush();
}
}
Se tutto è configurato correttamente, i tuoi log dall'applicazione cominceranno ad arrivare in Seq.
Esempio di evento strutturato
Log.Information("Pol'zovatel' {User} zaloginilsya v {Time}", userName, DateTime.UtcNow);
In Seq ora puoi cercare tutti gli accessi di uno specifico utente:
User == 'vasya'
Filtraggio e ricerca
Seq sa filtrare eventi su qualsiasi campo e valore. Per esempio, vuoi vedere tutti gli errori di oggi? Imposta il filtro:
@Level = 'Error' and @Timestamp > today()
Puoi combinare le condizioni — è davvero comodo!
Alert e integrazioni
Seq permette di creare alert: se, ad esempio, il numero di errori supera una soglia, ricevi una email, si attiva un webhook, o puoi inviare un messaggio in Slack.
Quali altre possibilità ci sono?
- Integrazione con sistemi CI/CD per raccogliere automaticamente i log dei test.
- Possibilità di Dashboards personalizzate (a pagamento).
- Plugin per analisi dei log, automazione di azioni (es. creazione automatica di bug al crash).
- Integrazione con Grafana/Prometheus tramite plugin.
Errori tipici nella configurazione di Seq
Uno dei problemi comuni è dimenticare di specificare correttamente l'URL del server Seq in Serilog, oppure il server Seq ascolta su una porta diversa.
Un altro problema è non aprire la porta per le connessioni in ingresso se Seq gira in Docker o su un server. Verifica la raggiungibilità della porta dall'applicazione verso Seq.
3. Application Insights: telemetria per .NET, cloud e un po' di magia
Application Insights (o "App Insights") è la piattaforma cloud di monitoraggio e analisi applicativa di Microsoft Azure. Non è solo raccolta di log, ma anche rilevamento automatico di anomalie, analisi di utilizzo, monitoraggio delle dipendenze, delle richieste, delle API esterne — e naturalmente visualizzazione in tempo reale. Azure Application Insights è lo standard nel mondo enterprise .NET.
Quali sono i vantaggi di Application Insights?
- Non richiede l'installazione di un server separato: tutto è in cloud.
- Profonda integrazione con .NET, ASP.NET, Azure, Visual Studio.
- Raccoglie automaticamente non solo i tuoi log ma anche metriche, errori, richieste, query SQL.
- Possibilità di creare dashboard, monitorare SLA, cercare anomalie, analizzare tracing distribuito (distributed tracing).
Come funziona Application Insights?
+--------------+ +-------------------+ +---------------------+
| .NET-prilozh.| --(SDK)| AppInsights SDK | --(https)| Azure Application |
+--------------+ +-------------------+ | Insights (oblako) |
+---------------------+
^ |
(W3C Trace +----> Analitika, poisk, paneli
Context)
L'app con SDK connesso invia telemetria al cloud Azure; analizzi e visualizzi tutto tramite l'interfaccia web del portale Azure.
Integrazione di Application Insights con un'app .NET
Opzione 1: Veloce e semplice
Se hai un'app ASP.NET Core, è molto semplice:
dotnet add package Microsoft.ApplicationInsights.AspNetCore
In Program.cs:
builder.Services.AddApplicationInsightsTelemetry("<vash_klyuch_instrumenta>");
E se hai un'app console o desktop:
dotnet add package Microsoft.ApplicationInsights
Inizializzazione:
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<vash_klyuch_instrumenta>";
var telemetryClient = new TelemetryClient(telemetryConfig);
telemetryClient.TrackTrace("Ciao da Application Insights!");
telemetryClient.TrackException(new Exception("OOP, sluchilas' oshibka!"));
La chiave dello strumento la ottieni nel portale Azure dopo aver creato la risorsa Application Insights.
Come inviare dati strutturati?
Puoi aggiungere proprietà a ogni trace:
telemetryClient.TrackTrace("Pol'zovatel' zaloginilsya",
new Dictionary<string, string> { ["User"] = userName }
);
Esempio: logging delle azioni dell'utente
Supponiamo di voler loggare il login dell'utente:
var props = new Dictionary<string, string>
{
{ "User", userName },
{ "Time", DateTime.UtcNow.ToString("o") }
};
telemetryClient.TrackEvent("UserLogin", props);
Ora non solo l'evento, ma anche tutte le proprietà sono visibili nel portale.
4. Suggerimenti utili
Cosa vedi in Application Insights?
- Panoramica per applicazioni: accessi, errori, dipendenze (es. query SQL).
- Ricerca nei log: qualsiasi evento, filtraggio per proprietà.
- Visualizzazione: grafici, dashboard.
- Tracing: puoi vedere la catena di chiamate e quanto tempo ha impiegato ogni operazione.
- Alerting: configurazione di alert su qualsiasi condizione.
Breve struttura di Application Insights
| Oggetto | Descrizione |
|---|---|
| Trace | Messaggio testuale (log normale). |
| Event | Evento arbitrario (es. "Acquisto"). |
| Exception | Informazioni su errore/eccezione. |
| Dependency | Chiamata esterna (SQL, richiesta HTTP, ecc.). |
| Metric | Indicatori numerici (es. conteggio). |
| Request | Richiesta utente (per app web). |
Esempio: ricerca di un errore in Application Insights
Nel portale Azure puoi scrivere una semplice query (Kusto Query Language — KQL):
exceptions
| where timestamp > ago(1d)
| where outerMessage contains "Timeout"
| project timestamp, operation_Name, user_Id, outerMessage
Questo ti mostrerà tutti i timeout dell'ultimo giorno, con i dettagli.
Limitazioni/considerazioni di Application Insights
- Serve un account Azure. C'è un piano gratuito, ma con limiti.
- A volte c'è un ritardo tra l'invio dei log e la loro comparsa nell'UI — fino a qualche minuto.
- Per progetti "molto privati" — è cloud, non una installazione locale.
- Se abusi dei trace, puoi rapidamente consumare il limite giornaliero.
5. Confronto tra Seq e Application Insights
| Seq | Application Insights | |
|---|---|---|
| Dove si memorizza | Server locale (o cloud) | Cloud Azure |
| Prezzo | Gratis/a pagamento, locale | C'è un piano gratuito, a pagamento su Azure |
| Miglior uso | Applicazioni .NET, CI locali | Qualsiasi applicazione, produzione/enterprise |
| UI/Ricerca | Molto comodo, filtri | Potente, analytics, dashboard |
| Alerting | Integrato | Condizioni complesse, integrazione con Azure |
| Integrazione | Serilog, altri sink | SDK per ASP.NET, .NET, JS ecc. |
| Flessibilità | Controlli tutto tu | Tutto sotto il controllo di Microsoft |
Mettere in pratica le conoscenze
Le conoscenze su Seq e Application Insights ti serviranno non solo in produzione, ma anche durante sviluppo e testing (es. per analizzare il comportamento dei test automatici), quando lavori con microservizi e vuoi vedere il quadro completo. Ai colloqui spesso chiedono "Come organizzeresti la raccolta dei log per trovare velocemente i problemi in produzione?" — ora hai cosa rispondere!
Inoltre, molte aziende moderne usano questi sistemi per creare intere catene DevOps: Continuous Delivery, creazione automatica di bug dagli alert e altro. Un sistema di raccolta log non è solo "dove va a finire la riga Console.WriteLine", ma una vera "scatola nera" e il monitor della tua applicazione.
GO TO FULL VERSION