Dela via


Hämta data från Serilog

Serilog är ett populärt loggningsramverk för .NET-program. Med Serilog kan utvecklare styra vilka loggutdrag som är utdata med godtycklig kornighet baserat på loggarens namn, loggningsnivå och meddelandemönster. Serilog-mottagaren, även känd som ett tillägg, strömmar dina loggdata till tabellen, där du kan analysera och visualisera dina loggar i realtid.

Den här artikeln visar hur du matar in data med Serilog.

En fullständig lista över dataanslutningar finns i Översikt över dataanslutningar.

Förutsättningar

Skapa ett huvudnamn för Microsoft Entra-tjänsten

Microsoft Entra-programautentisering används för program som behöver komma åt din KQL-databastabell utan att en användare finns. Om du vill mata in data med hjälp av Serilog-anslutningsappen måste du skapa och registrera ett Microsoft Entra-tjänsthuvudnamn och sedan auktorisera det här huvudkontot som den identitet som används av anslutningsappen för att mata in data till din KQL-databas.

Microsoft Entra-tjänstens huvudnamn kan skapas via Azure Portal eller programmatiskt, som i följande exempel.

Du beviljar senare behörigheter för tjänstens huvudnamn för åtkomst till Kusto-resurser.

  1. Logga in på din Azure-prenumeration via Azure CLI. Autentisera sedan i webbläsaren.

    az login
    
  2. Välj den prenumeration som ska vara värd för huvudkontot. Det här steget behövs när du har flera prenumerationer.

    az account set --subscription YOUR_SUBSCRIPTION_GUID
    
  3. Skapa tjänstens huvudnamn. I det här exemplet kallas my-service-principaltjänstens huvudnamn .

    az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
    
  4. Från de returnerade JSON-data kopierar du appId, passwordoch tenant för framtida användning.

    {
      "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"
    }
    

Du har skapat ditt Microsoft Entra-program och tjänstens huvudnamn.

Skapa en måltabell och inmatningsmappning

Skapa en måltabell för inkommande data och en inmatningsmappning för att mappa de inmatade datakolumnerna till kolumnerna i måltabellen. I följande steg motsvarar tabellschemat och mappningen de data som skickas från exempelappen.

  1. Kör följande tabellskapandekommando i frågeredigeraren och ersätt platshållaren TableName med namnet på måltabellen:

    .create table <TableName> (Timestamp: datetime, Level: string, Message: string, Exception: string, Properties: dynamic, Position: dynamic, Elapsed: int)
    
  2. Kör följande .create-inmatningsmappningskommando och ersätt platshållarna TableName med måltabellnamnet och TableNameMapping med namnet på inmatningsmappningen:

    .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. Bevilja tjänstens huvudnamn från Skapa en Microsoft Entra-tjänsthuvudnamnsdatabas ingestor-rollbehörighet för att arbeta med databasen. Mer information finns i Exempel. Ersätt platshållaren DatabaseName med namnet på måldatabasen och ApplicationID med det AppId värde som du sparade när du skapade ett Microsoft Entra-tjänsthuvudnamn.

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

Använda Serilog i ditt ASP.NET Core-program

I det här avsnittet beskrivs hur du integrerar Serilog i ditt ASP.NET Core-program för att logga data och skicka dem till din KQL-tabell.

Installera -paketet

Lägg till nuget-bibliotekspaketet Serilog.Sinks.AzureDataExplorer. Använd kommandot Install-Package som anger namnet på NuGet-paketet.

Install-Package Serilog.Sinks.AzureDataExplorer

Lägg till Serilog-mottagaren i din app

Använd följande steg för att:

  • Lägg till Serilog-mottagaren i din app.
  • Konfigurera variablerna som används av mottagaren.
  • Skapa och kör appen.
  1. Lägg till följande kod i din app:

    using Serilog.Sinks.AzureDataExplorer;
    
  2. Konfigurera Serilog-mottagaren och ersätt platshållarna med hjälp av informationen i tabellen som följer:

    var log = new LoggerConfiguration()
    .WriteTo.AzureDataExplorerSink(new AzureDataExplorerSinkOptions
    {
        IngestionEndpointUri = "<TargetURI>",
        DatabaseName = "<MyDatabase>",
        TableName = "<MyTable>",
        BufferBaseFileName = "<BufferBaseFileName>"
    })
    .CreateLogger();
    
    Olika beskrivning
    IngestionEndPointUri Inmatnings-URI:n.
    DatabaseName Måldatabasens skiftlägeskänsliga namn.
    TableName Skiftlägeskänsligt namn på en befintlig måltabell. SerilogTest är till exempel namnet på tabellen som skapades i Skapa en måltabell och inmatningsmappning.
    AppId Programklient-ID som krävs för autentisering. Du sparade det här värdet i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    AppKey Programnyckeln som krävs för autentisering. Du sparade det här värdet som password i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    Klientorganisation ID:t för klientorganisationen där programmet är registrerat. Du sparade det här värdet i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    BufferBaseFileName Valfritt basfilnamn för buffertfilen. Ange det här värdet om du kräver att loggarna ska vara varaktiga mot förlust som resulterar i anslutningsfel till klustret. Exempel: C:/Temp/Serilog

    Fler alternativ finns i Alternativ för mottagare.

  3. Skicka data till databasen med Serilog-mottagaren. Till exempel:

    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. Skapa och kör appen. Om du till exempel använder Visual Studio trycker du på F5.

  5. Kontrollera att data finns i tabellen. Kör följande fråga och ersätt platshållaren med namnet på tabellen som skapades i ett tidigare steg:

    <TableName>
    | take 10
    

Kör exempelappen

Om du inte har egna data att testa kan du använda exempellogggeneratorappen med exempeldata för att testa konfigurationen och användningen av Serilog-mottagaren.

  1. Klona Serilog-mottagarens git-lagringsplats med följande git-kommando:

    git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
    
  2. Ange följande miljövariabler för att konfigurera Serilog-mottagaren:

    Olika beskrivning
    IngestionEndPointUri Inmatnings-URI:n.
    DatabaseName Måldatabasens skiftlägeskänsliga namn.
    TableName Skiftlägeskänsligt namn på en befintlig måltabell. SerilogTest är till exempel namnet på tabellen som skapades i Skapa en måltabell och inmatningsmappning.
    AppId Programklient-ID som krävs för autentisering. Du sparade det här värdet i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    AppKey Programnyckel krävs för autentisering. Du sparade det här värdet i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    Klientorganisation ID:t för klientorganisationen där programmet är registrerat. Du sparade det här värdet i Skapa ett Microsoft Entra-tjänsthuvudnamn.
    BufferBaseFileName Basfilnamnet för buffertfilen. Ange det här värdet om du kräver att loggarna ska vara varaktiga mot förlust som resulterar i anslutningsfel till klustret. Till exempel: C:/Temp/Serilog

    Du kan ange miljövariablerna manuellt eller med hjälp av följande kommandon:

    $env:ingestionURI="<ingestionURI>"
    $env:appId="<appId>"
    $env:appKey="<appKey>"
    $env:tenant="<tenant>"
    $env:databaseName="<databaseName>"
    $env:tableName="<tableName>"
    
  3. I terminalen bläddrar du till rotmappen för den klonade lagringsplatsen och kör följande .NET-kommando för att skapa appen:

    dotnet build src
    
  4. I terminalen bläddrar du till exempelmappen och kör följande .NET-kommando för att köra appen:

    dotnet build run
    
  1. Välj din KQL-måldatabas och kör följande fråga för att utforska inmatade data och ersätt platshållaren TableName med namnet på måltabellen:

    <TableName>
    | take 10
    

    Dina utdata bör se ut ungefär som följande utdata:

    Tidsstämpel Nivå Meddelande Undantag Egenskaper Position Förfluten
    2023-03-12 1248:474590 Information Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 1248474770 Varning Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 1248475590 Fel Zohar Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 1248474790 Information Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5610 Varning Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5620 Fel Zohar Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5630 Information Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5660 Fel Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5670 Information Zohar Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34
    2023-03-12 124847.5680 Varning Bearbetad { Latitud: 25, Longitud:30} {"Position": { "Latitude": 25, "Longitud":30} { "Latitud": 25, "Longitud":30} 34