Hent data fra Serilog
Serilog er et populært loggingsstruktur for .NET-programmer. Serilog lar utviklere kontrollere hvilke loggsetninger som sendes ut med vilkårlig kornethet basert på loggerens navn, loggernivå og meldingsmønster. Serilog-vasken, også kjent som en tilføying, strømmer loggdataene til tabellen, der du kan analysere og visualisere loggene i sanntid.
Denne artikkelen viser hvordan du inntar data med Serilog.
Hvis du vil ha en fullstendig liste over datakoblinger, kan du se Oversikt over datakoblinger.
Forutsetning
- .NET SDK 6.0 eller nyere
- En KQL-database.
- Et Azure-abonnement. Opprett en gratis Azure-konto.
- URI-en for databaseinntak som skal brukes som TargetURI-verdi . Hvis du vil ha mer informasjon, kan du se Kopier URI.
Opprette en Microsoft Entra-tjenestekontohaver
Microsoft Entra-programgodkjenning brukes for programmer som trenger tilgang til KQL-databasetabellen uten en bruker til stede. Hvis du vil innta data ved hjelp av Serilog-koblingen, må du opprette og registrere en Microsoft Entra-tjenestekontohaver, og deretter godkjenne denne hovedstolen som identiteten som brukes av koblingen til å innta data til KQL-databasen.
Microsoft Entra-tjenestekontohaveren kan opprettes gjennom Azure-portalen eller programmatisk, som i eksemplet nedenfor.
Du vil senere gi tillatelser for denne tjenestekontohaveren for å få tilgang til Kusto-ressurser.
Logg på Azure-abonnementet via Azure CLI. Deretter godkjenner du i nettleseren.
az login
Velg abonnementet som vert for hovedstolen. Dette trinnet er nødvendig når du har flere abonnementer.
az account set --subscription YOUR_SUBSCRIPTION_GUID
Opprett tjenestekontohaveren. I dette eksemplet kalles
my-service-principal
tjenestekontohaveren .az ad sp create-for-rbac -n "my-service-principal" --role Contributor --scopes /subscriptions/{SubID}
Kopier ,
password
ogtenant
for fremtidig bruk,appId
fra de returnerte JSON-dataene.{ "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 opprettet Microsoft Entra-programmet og tjenestekontohaveren.
Opprette en måltabell og inntakstilordning
Opprett en måltabell for innkommende data og en inntakstilordning for å tilordne de inntatte datakolonnene til kolonnene i måltabellen. I trinnene nedenfor tilsvarer tabellskjemaet og tilordningen dataene som sendes fra eksempelappen.
Kjør følgende tabellopprettingskommando i redigeringsprogrammet for spørringen, og erstatte plassholderen TableName med navnet på måltabellen:
.create table <TableName> (Timestamp: datetime, Level: string, Message: string, Exception: string, Properties: dynamic, Position: dynamic, Elapsed: int)
Kjør følgende .create-inntakstilordningskommando, og erstatte plassholderne TableName med måltabellnavnet og TableNameMapping med navnet på inntakstilordningen:
.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}]'
Gi tjenestekontohaveren fra Opprett en rolletillatelse for microsoft Entra-tjenestekontohaverdatabasen til å arbeide med databasen. Hvis du vil ha mer informasjon, kan du se Eksempler. Erstatt plassholderen DatabaseName med navnet på måldatabasen og ApplicationID med
AppId
verdien du lagret da du opprettet en Microsoft Entra-tjenestekontohaver..add database <DatabaseName> ingestors ('aadapp=<ApplicationID>') 'App Registration'
Bruk Serilog i ASP.NET Core-programmet
Denne delen forklarer hvordan du integrerer Serilog i ASP.NET Core-programmet for å logge data og sende dem til KQL-tabellen.
Installer pakken
Legg til Serilog.Sinks.AzureDataExplorer NuGet-bibliotekpakken. Bruk installeringspakke-kommandoen som angir navnet på NuGet-pakken.
Install-Package Serilog.Sinks.AzureDataExplorer
Legg til Serilog-vasken i appen
Bruk følgende fremgangsmåte for å:
- Legg til Serilog-vasken i appen.
- Konfigurer variablene som brukes av vasken.
- Bygg og kjør appen.
Legg til følgende kode i appen:
using Serilog.Sinks.AzureDataExplorer;
Konfigurer Serilog-vasken, og bytt ut plassholdere ved hjelp av informasjonen i tabellen som følger:
var log = new LoggerConfiguration() .WriteTo.AzureDataExplorerSink(new AzureDataExplorerSinkOptions { IngestionEndpointUri = "<TargetURI>", DatabaseName = "<MyDatabase>", TableName = "<MyTable>", BufferBaseFileName = "<BufferBaseFileName>" }) .CreateLogger();
Variabel Bekrivelse InntakEndPointUri Den inntatte URI-en. Databasenavn Navnet på måldatabasen skiller mellom store og små bokstaver. TableName Navnet på et eksisterende måltabell skiller mellom store og små bokstaver. SerilogTest er for eksempel navnet på tabellen som er opprettet i Opprett en måltabell og inntakstilordning. AppId Programklient-IDen kreves for godkjenning. Du lagret denne verdien i Opprett en Microsoft Entra-tjenestekontohaver. AppKey Programnøkkelen kreves for godkjenning. Du lagret denne verdien som password
i Opprett en Microsoft Entra-tjenestekontohaver.Leier ID-en til leieren der programmet er registrert. Du lagret denne verdien i Opprett en Microsoft Entra-tjenestekontohaver. BufferBaseFileName Valgfritt basisfilnavn for bufferfilen. Angi denne verdien hvis du krever at loggene er holdbare mot tap, noe som resulterer i tilkoblingsfeil i klyngen. Eksempel: C:/Temp/Serilog
.Hvis du vil ha flere alternativer, kan du se Alternativer for synke.
Send data til databasen ved hjelp av Serilog-vasken. Eksempel:
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);
Bygg og kjør appen. Hvis du for eksempel bruker Visual Studio, trykker du F5.
Kontroller at dataene er i tabellen. Kjør følgende spørring som erstatter plassholderen med navnet på tabellen som ble opprettet i et tidligere trinn:
<TableName> | take 10
Kjør eksempelappen
Hvis du ikke har dine egne data å teste, kan du bruke eksempellogggeneratorappen med eksempeldata til å teste konfigurasjon og bruk av Serilog-vasken.
Klon serilogvaskens git-repositorium ved hjelp av følgende git-kommando:
git clone https://github.com/Azure/serilog-sinks-azuredataexplorer
Angi følgende miljøvariabler for å konfigurere Serilog-vasken:
Variabel Bekrivelse InntakEndPointUri Den inntatte URI-en. Databasenavn Navnet på måldatabasen skiller mellom store og små bokstaver. TableName Navnet på et eksisterende måltabell skiller mellom store og små bokstaver. SerilogTest er for eksempel navnet på tabellen som er opprettet i Opprett en måltabell og inntakstilordning. AppId Programklient-ID kreves for godkjenning. Du lagret denne verdien i Opprett en Microsoft Entra-tjenestekontohaver. AppKey Programnøkkel kreves for godkjenning. Du lagret denne verdien i Opprett en Microsoft Entra-tjenestekontohaver. Leier ID-en til leieren der programmet er registrert. Du lagret denne verdien i Opprett en Microsoft Entra-tjenestekontohaver. BufferBaseFileName Det grunnleggende filnavnet for bufferfilen. Angi denne verdien hvis du krever at loggene er holdbare mot tap, noe som resulterer i tilkoblingsfeil i klyngen. Eksempel: C:/Temp/Serilog
Du kan angi miljøvariablene manuelt eller bruke følgende kommandoer:
Bla til rotmappen for klonet repo i terminalen, og kjør følgende .NET-kommando for å bygge appen:
dotnet build src
Bla til eksempelmappen i terminalen, og kjør følgende .NET-kommando for å kjøre appen:
dotnet build run
Velg måldatabasen for KQL, og kjør følgende spørring for å utforske de inntatte dataene, og erstatte plassholderen TableName med navnet på måltabellen:
<TableName> | take 10
Utdataene skal ligne på følgende utdata:
Tidsstempel Nivå Melding Unntak Egenskaper Posisjon Gått 2023-03-12 1248:474590 Informasjon Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 1248474770 Advarsel! Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 1248475590 Feil Zohar Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 1248474790 Informasjon Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5610 Advarsel! Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5620 Feil Zohar Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5630 Informasjon Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5660 Feil Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5670 Informasjon Zohar Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34 2023-03-12 124847.5680 Advarsel! Behandlet { Breddegrad: 25, Lengdegrad:30} {"Position": { "Latitude": 25, "Longitude":30} { "Breddegrad": 25, "Lengdegrad":30} 34