CodeGym /Corsi /C# SELF /Raccolta dei log: Seq

Raccolta dei log: Seq e Application Insights

C# SELF
Livello 64 , Lezione 2
Disponibile

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.

  1. Scarica Seq e installalo.
  2. Dopo l'installazione apri l'interfaccia web (di solito http://localhost:5341).
  3. 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.

2
Compito
C# SELF, livello 64, lezione 2
Bloccato
Integrazione di Application Insights per la raccolta della telemetria
Integrazione di Application Insights per la raccolta della telemetria
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION