Gegevens extraheren uit gestructureerde tekenreeksgegevens

Voltooid

Tekenreeksvelden kunnen ook gestructureerde gegevens bevatten, zoals JSON- of sleutel-waardeparen. KQL biedt eenvoudige toegang tot deze waarden voor verdere analyse.

Dynamische velden

In een Log Analytics-tabel zijn er veldtypen gedefinieerd als Dynamisch. Dynamische velden bevatten een sleutel-waardepaar, zoals:

{"eventCategory":"Autoscale","eventName":"GetOperationStatusResult","operationId":"xxxxxxxx-6a53-4aed-bab4-575642a10226","eventProperties":"{\"OldInstancesCount\":6,\"NewInstancesCount\":5}","eventDataId":" xxxxxxxx -efe3-43c2-8c86-cd84f70039d3","eventSubmissionTimestamp":"2020-11-30T04:06:17.0503722Z","resource":"ch-appfevmss-pri","resourceGroup":"CH-RETAILRG-PRI","resourceProviderValue":"MICROSOFT.COMPUTE","subscriptionId":" xxxxxxxx -7fde-4caf-8629-41dc15e3b352","activityStatusValue":"Succeeded"}

Gebruik de punt notatie om toegang te krijgen tot de tekenreeksen in een dynamisch veld. Het veld DeviceDetail uit de tabel SigninLogs is van het type dynamisch. In dit voorbeeld hebt u toegang tot het besturingssysteem met de veldnaam DeviceDetail.operatingSystem.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

In het onderstaande queryvoorbeeld ziet u het gebruik van dynamische velden met de tabel SigninLogs.

// Example query for SigninLogs showing how to break out packed fields.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem, Browser = DeviceDetail.browser 
| extend StatusCode = tostring(Status.errorCode), StatusDetails = tostring(Status.additionalDetails) 
| extend Date = startofday(TimeGenerated) 
| summarize count() by Date, Identity, UserDisplayName, UserPrincipalName, IPAddress, ResultType, ResultDescription, StatusCode, StatusDetails 
| sort by Date

JSON

KQL biedt functies voor het bewerken van JSON die is opgeslagen in tekenreeksvelden. Veel logboeken verzenden gegevens in JSON-indeling. Hiervoor moet u weten hoe u JSON-gegevens kunt transformeren naar doorzoekbare velden.

In het onderstaande voorbeeld ziet u een lijst met JSON-gerelateerde functies en operators.

Functie Beschrijving
parse-json() of todynamic() Interpreteert een tekenreeks als een JSON-waarde en retourneert de waarde als dynamisch. Gebruik een van deze functies om te verwijzen naar een veld: JsonField.Key of JsonField["Key"]
mv-expand wordt toegepast op een kolom met dynamisch getypte matrix of eigenschapsverzameling, zodat elke waarde in de verzameling een afzonderlijke rij krijgt. Alle andere kolommen in een uitgevouwen rij worden gedupliceerd. mv_expand is de eenvoudigste manier om JSON-matrices te verwerken.
mv-apply Hiermee wordt een subquery toegepast op elke record en wordt de samenvoeging van de resultaten van alle subquery's geretourneerd. Een query toepassen op elke waarde in een matrix.

Voer elke query afzonderlijk uit om de resultaten te bekijken.

SigninLogs 
| extend AuthDetails =  parse_json(AuthenticationDetails) 
| extend AuthMethod =  AuthDetails[0].authenticationMethod 
| extend AuthResult = AuthDetails[0].["authenticationStepResultDetail"] 
| project AuthMethod, AuthResult, AuthDetails 


SigninLogs 
| mv-expand AuthDetails = parse_json(AuthenticationDetails) 
| project AuthDetails

SigninLogs 
| mv-apply AuthDetails = parse_json(AuthenticationDetails) on
(where AuthDetails.authenticationMethod == "Password")