Condividi tramite


Inserire dati con il sink Serilog in Azure Esplora dati

Serilog è un framework di registrazione diffuso per le applicazioni .NET. Serilog consente agli sviluppatori di controllare quali istruzioni di log vengono restituite con granularità arbitraria in base al nome, al livello del logger e al modello di messaggio. Il sink Serilog, noto anche come appender, trasmette i dati di log alla tabella, in cui è possibile analizzare e visualizzare i log in tempo reale.

Questo articolo illustra come inserire dati con Serilog.

Per un elenco completo dei connettori dati, vedere Panoramica delle integrazioni dei dati.

Prerequisiti

  • .NET SDK 6.0 o versione successiva
  • Un cluster e un database di Azure Esplora dati con i criteri di conservazione e cache predefiniti.
  • Ambiente di query di Azure Esplora dati
  • URI del cluster Kusto per il valore TargetURI nel cluster> di formatohttps://ingest-<.<region.kusto.windows.net>. Per altre informazioni, vedere Aggiungere una connessione cluster.

Creare un'entità servizio Microsoft Entra

L'autenticazione dell'applicazione Microsoft Entra viene usata per le applicazioni che devono accedere alla tabella di database KQL senza che sia presente un utente. Per inserire dati usando il connettore Serilog, è necessario creare e registrare un'entità servizio Microsoft Entra e quindi autorizzare questa entità come identità usata dal connettore per inserire i dati nel database KQL.

L'entità servizio Microsoft Entra può essere creata tramite il Portale di Azure o a livello di programmazione, come nell'esempio seguente.

Successivamente si concedono le autorizzazioni a questa entità servizio per accedere alle risorse Kusto.

  1. Accedere alla sottoscrizione di Azure usando l'interfaccia della riga di comando di Azure. Eseguire quindi l'autenticazione nel browser.

    az login
    
  2. Scegliere la sottoscrizione per ospitare l'entità di sicurezza. Questo passaggio è necessario quando si hanno più sottoscrizioni.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Creare l'entità servizio. In questo esempio l'entità servizio viene chiamata my-service-principal.

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Dai dati JSON restituiti copiare appId, password e tenant per un uso futuro.

    {
      "appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "tenant": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
    

L'applicazione Microsoft Entra e l'entità servizio sono state create.

Creare una tabella di destinazione e un mapping di inserimento

Creare una tabella di destinazione per i dati in ingresso, e un mapping di inserimento per mappare le colonne di dati inseriti alle colonne della tabella di destinazione. Nei seguenti passaggi lo schema e il mapping della tabella corrispondono ai dati inviati dall'app di esempio.

  1. Nell'editor di query eseguire il comando di creazione della tabella seguente, sostituendo il segnaposto NomeTabella con il nome della tabella di destinazione:

    .create table <TableName> (Timestamp: datetime, Level: string, Message: string, Exception: string, Properties: dynamic, Position: dynamic, Elapsed: int)
    
  2. Eseguire il comando crea mapping di inserimento seguente, sostituendo i segnaposto NomeTabella con il nome della tabella di destinazione e NomeMappingTabella con il nome del mapping di inserimento:

    .create table <TableName> ingestion csv mapping '<TableNameMapping>' '[{"Name":"Timestamp","DataType":"","Ordinal":"0","ConstValue":null},{"Name":"Level","DataType":"","Ordinal":"1","ConstValue":null},{"Name":"Message","DataType":"","Ordinal":"2","ConstValue":null},{"Name":"Exception","DataType":"","Ordinal":"3","ConstValue":null},{"Name":"Properties","DataType":"","Ordinal":"4","ConstValue":null},{"Name":"Position","DataType":"","Ordinal":"5","ConstValue":null},{"Name":"Elapsed","DataType":"","Ordinal":"6","ConstValue":null}]'
    
  3. Usare l'entità servizio da Creare un'entità servizio Microsoft Entra database ingestor per concedere l'autorizzazione per lavorare con il database. Per maggiori informazioni, vedere gli Esempi. Sostituire il segnaposto DatabaseName con il nome del database di destinazione e ApplicationID con il AppId valore salvato durante la creazione di un'entità servizio Microsoft Entra.

    .add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'App Registration'
    

Usare Serilog nell’applicazione ASP.NET Core

Questa sezione illustra come integrare Serilog nell'applicazione ASP.NET Core per registrare i dati e inviarli alla tabella KQL.

Installare il pacchetto

Aggiungere il pacchetto di libreria NuGet Serilog.Sinks.AzureDataExplorer. Usare il comando del pacchetto di installazione che specifica il nome del pacchetto NuGet.

Install-Package Serilog.Sinks.AzureDataExplorer

Aggiungere il sink Serilog all'app

Eseguire la procedura descritta di seguito per:

  • Aggiungere il sink Serilog all'app.
  • Configurare le variabili usate dal sink.
  • Compilare ed eseguire l'app.
  1. Aggiungere il seguente codice all'applicazione:

    using Serilog.Sinks.AzureDataExplorer;
    
  2. Configurare il sink Serilog sostituendo i segnaposto usando le informazioni nella tabella seguente:

    var log = new LoggerConfiguration()
    .WriteTo.AzureDataExplorerSink(new AzureDataExplorerSinkOptions
    {
        IngestionEndpointUri = "<TargetURI>",
        DatabaseName = "<MyDatabase>",
        TableName = "<MyTable>",
        BufferBaseFileName = "<BufferBaseFileName>"
    })
    .CreateLogger();
    
    Variabile Descrizione
    IngestionEndPointUri URI di inserimento.
    DatabaseName Il nome che è sensibile alle maiuscole del database di destinazione.
    TableName Nome sensibile alle maiuscole della tabella di destinazione esistente. Ad esempio, SerilogTest è il nome della tabella creata in Creare una tabella di destinazione e il mapping di inserimento.
    AppId L'ID client dell'applicazione richiesto per l'autenticazione. Questo valore è stato salvato in Creare un'entità servizio Microsoft Entra.
    AppKey La chiave dell'applicazione necessaria per l'autenticazione. Questo valore è stato salvato come password in Creare un'entità servizio Microsoft Entra.
    Tenant L'ID del tenant dove è registrata l'applicazione. Questo valore è stato salvato in Creare un'entità servizio Microsoft Entra.
    BufferBaseFileName Nome file di base facoltativo per il file di buffer. Impostare questo valore se è necessario che i log siano durevoli in caso di perdita di errori di connessione risultanti nel cluster. Ad esempio: C:/Temp/Serilog.

    Per altre opzioni, vedere Opzioni sink.

  3. Inviare dati al database usando il sink Serilog. Ad esempio:

    log.Verbose("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Warning("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Error(new Exception(), "Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    log.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    
  4. Compilare ed eseguire l'app. Ad esempio, se si usa Visual Studio, premere F5.

  5. Verificare che i dati si trovino nella tabella. Eseguire la query seguente sostituendo il segnaposto con il nome della tabella creata in un passaggio precedente:

    <TableName>
    | take 10
    

Eseguire l'app di esempio

Se non si hanno dati personalizzati da testare, è possibile usare l'app generatore di log di esempio con dati di esempio per testare la configurazione e l'uso del sink Serilog.

  1. Clonare il sink Serilog repository git usando il comando git seguente:

    git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
    
  2. Impostare le variabili di ambiente seguenti per configurare il sink Serilog:

    Variabile Descrizione
    IngestionEndPointUri URI di inserimento.
    DatabaseName Il nome che è sensibile alle maiuscole del database di destinazione.
    TableName Nome sensibile alle maiuscole della tabella di destinazione esistente. Ad esempio, SerilogTest è il nome della tabella creata in Creare una tabella di destinazione e il mapping di inserimento.
    AppId L'ID client dell'applicazione richiesto per l'autenticazione. Questo valore è stato salvato in Creare un'entità servizio Microsoft Entra.
    AppKey L'Application key richiesto per l'autenticazione. Questo valore è stato salvato in Creare un'entità servizio Microsoft Entra.
    Tenant L'ID del tenant dove è registrata l'applicazione. Questo valore è stato salvato in Creare un'entità servizio Microsoft Entra.
    BufferBaseFileName Nome del file di base per il file di buffer. Impostare questo valore se è necessario che i log siano durevoli in caso di perdita di errori di connessione risultanti nel cluster. Ad esempio, C:/Temp/Serilog

    Si possono configurare tali variabili di ambiente manualmente o usando i comandi seguenti:

    $env:ingestionURI="<ingestionURI>"
    $env:appId="<appId>"
    $env:appKey="<appKey>"
    $env:tenant="<tenant>"
    $env:databaseName="<databaseName>"
    $env:tableName="<tableName>"
    
  3. Sul computer esplora la cartella radice del repository clonato ed eseguire il comando .NET seguente per creare l'app:

    dotnet build src
    
  4. Sul computer esplora la cartella con gli esempi ed eseguire il comando .NET seguente per creare l'app:

    dotnet build run
    
  1. Nell'ambiente di query selezionare il database di destinazione ed eseguire la query seguente per esplorare i dati inseriti, sostituendo il segnaposto TableName con il nome della tabella di destinazione:

    <TableName>
    | take 10
    

    L'output dovrebbe essere simile alla seguente immagine:

    Screenshot della tabella con 10 funzioni e risultati.