Condividi tramite


Inserire dati con il sink NLog in Azure Esplora dati

NLog è una piattaforma di registrazione flessibile e gratuita per varie piattaforme .NET, tra cui .NET Standard. NLog consente di scrivere in diverse destinazioni, ad esempio un database, un file o una console. Con NLog è possibile modificare la configurazione della registrazione in tempo reale. Il sink NLog è una destinazione per NLog che consente di inviare i messaggi di log a un cluster KQL. Il plug-in si basa sulla libreria Azure-Kusto-Data e offre un modo efficiente per eseguire il sink dei log nel cluster.

In questo articolo si apprenderà come inserire dati con il sink nLog.

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

Prerequisiti

  • .NET SDK 6.0 o versione successiva
  • Un cluster e un database di Azure Esplora dati

Configurazione dell'ambiente

In questa sezione si preparerà l'ambiente per l'uso del connettore NLog.

Installare il pacchetto

Aggiungere il pacchetto NuGet NLog.Azure.Kusto . Usare il comando Install-Package che specifica il nome del pacchetto NuGet.

Install-Package NLog.Azure.Kusto

Creare una registrazione dell'app Microsoft Entra

L'autenticazione dell'applicazione Microsoft Entra viene usata per le applicazioni che devono accedere alla piattaforma senza un utente presente. Per ottenere dati usando il connettore NLog, è necessario creare e registrare un'entità servizio Microsoft Entra e quindi autorizzare questa entità a ottenere dati da un database.

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

Questa entità servizio sarà l'identità usata dal connettore per scrivere dati nella tabella in Kusto. Successivamente si concedono le autorizzazioni per questa entità servizio per accedere alle risorse Kusto.

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

    az login
    
  2. Scegliere la sottoscrizione per ospitare l'entità. 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 è denominata 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, passworde tenant per un uso futuro.

    {
      "appId": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn",
      "displayName": "my-service-principal",
      "name": "my-service-principal",
      "password": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn",
      "tenant": "1234abcd-e5f6-g7h8-i9j0-1234kl5678mn"
    }
    

È stata creata l'applicazione Microsoft Entra e l'entità servizio.

Salvare i valori seguenti da usare nei passaggi successivi: * ID applicazione (client) * ID directory (tenant) * Valore della chiave privata client

Concedere le autorizzazioni dell'app Microsoft Entra

  1. Nell'ambiente di query eseguire il comando di gestione seguente, sostituendo i segnaposto. Sostituire DatabaseName con il nome del database di destinazione e ApplicationID con il valore salvato in precedenza. Questo comando concede all'app il ruolo ingestor del database. Per altre informazioni, vedere Gestire i ruoli di sicurezza del database.

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

    Nota

    L'ultimo parametro è una stringa che viene visualizzata come note quando si eseguono query sui ruoli associati a un database. Per altre informazioni, vedere Visualizzare i ruoli di sicurezza esistenti.

Creare una tabella e un mapping di inserimento

Creare una tabella di destinazione per i dati in ingresso.

  • Nell'editor di query eseguire il comando di creazione della tabella seguente, sostituendo il segnaposto TableName con il nome della tabella di destinazione:

    .create table <TableName> (Timestamp:datetime, Level:string, Message:string, FormattedMessage:dynamic, Exception:string, Properties:dynamic)
    

Aggiungere la configurazione di destinazione all'app

Seguire questa procedura per:

  • Aggiungere la configurazione di destinazione
  • Compilare ed eseguire l'app
  1. Aggiungere la destinazione nel file di configurazione NLog.

    <targets>
        <target name="targettable" xsi:type="TargetTable"
        IngestionEndpointUri="<Connection string>"
        Database="<Database name>"
        TableName="<Table name>"
        ApplicationClientId="<Entra App clientId>"
        ApplicationKey="<Entra App key>"
        Authority="<Entra tenant id>"
        />
    </targets>
    
    ##Rules
    <rules>
        <logger name="*" minlevel="Info" writeTo="adxtarget" />
    </rules>
    

    Per altre opzioni, vedere Connettore Nlog.

  2. Inviare dati usando il sink NLog. Ad esempio:

    logger.Info("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
    logger.Error(exceptionObj, "This was exception");
    logger.Debug("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    logger.Warn("Processed {@Position} in {Elapsed:000} ms. ", position, elapsedMs);
    
  3. Compilare ed eseguire l'app. Ad esempio, se si usa Visual Studio, premere F5.

  4. Verificare che i dati si trovano nel cluster. Nell'ambiente di query eseguire la query seguente sostituendo il segnaposto con il nome della tabella usata in precedenza:

    <TableName>
    | take 10
    

Eseguire l'app di esempio

Usare l'app generatore di log di esempio come esempio che illustra come configurare e usare il sink NLog.

  1. Clonare il repository Git del sink NLog usando il comando git seguente:

    git clone https://github.com/Azure/azure-kusto-nlog-sink.git
    
  2. Impostare le variabili di ambiente seguenti, in modo che il file di configurazione NLog possa leggerli immediatamente dall'ambiente:

    Variabile Descrizione
    INGEST_ENDPOINT URI di inserimento per la destinazione dati. Questo URI è stato copiato nei prerequisiti.
    DATABASE Nome con distinzione tra maiuscole e minuscole del database di destinazione.
    APP_ID ID client dell'applicazione necessario per l'autenticazione. Questo valore è stato salvato in Creare una registrazione dell'app Microsoft Entra.
    APP_KEY Chiave dell'applicazione necessaria per l'autenticazione. Questo valore è stato salvato in Creare una registrazione dell'app Microsoft Entra.
    AZURE_TENANT_ID ID del tenant in cui è registrata l'applicazione. Questo valore è stato salvato in Creare una registrazione dell'app Microsoft Entra.

    È possibile impostare le variabili di ambiente manualmente o usando i comandi seguenti:

    $env:INGEST_ENDPOINT="<ingestionURI>"
    $env:APP_ID="<appId>"
    $env:APP_KEY="<appKey>"
    $env:AZURE_TENANT_ID="<tenant>"
    $env:DATABASE="<databaseName>"
    
  3. Nel terminale passare alla cartella radice del repository clonato ed eseguire il comando seguente dotnet per compilare l'app:

    cd .\NLog.Azure.Kusto.Samples\
    dotnet build
    
  4. Nel terminale passare alla cartella samples ed eseguire il comando seguente dotnet per eseguire l'app:

    dotnet run
    
  5. Nell'ambiente di query selezionare il database di destinazione ed eseguire la query seguente per esplorare i dati inseriti.

    ADXNLogSample
    | take 10
    

    L'output dovrebbe essere simile all'immagine seguente:

    Screenshot della tabella con la funzione e i risultati take 10