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
- .NET SDK 6.0 eller senare
- En KQL-databas.
- En Azure-prenumeration Skapa ett kostnadsfritt Azure-konto.
- Din databasinmatnings-URI som ska användas som TargetURI-värde . Mer information finns i Kopiera URI.
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.
Logga in på din Azure-prenumeration via Azure CLI. Autentisera sedan i webbläsaren.
az login
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
Skapa tjänstens huvudnamn. I det här exemplet kallas
my-service-principal
tjänstens huvudnamn .az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Från de returnerade JSON-data kopierar du
appId
,password
ochtenant
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.
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)
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}]'
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.
Lägg till följande kod i din app:
using Serilog.Sinks.AzureDataExplorer;
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.
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);
Skapa och kör appen. Om du till exempel använder Visual Studio trycker du på F5.
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.
Klona Serilog-mottagarens git-lagringsplats med följande git-kommando:
git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
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:
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
I terminalen bläddrar du till exempelmappen och kör följande .NET-kommando för att köra appen:
dotnet build run
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