Extrahera data från strukturerade strängdata

Slutförd

Strängfält kan också innehålla strukturerade data som JSON- eller Key-Value-par. KQL ger enkel åtkomst till dessa värden för ytterligare analys.

Dynamiska fält

I en Log Analytics-tabell finns det fälttyper som definierats som Dynamiska. Dynamiska fält innehåller ett nyckel/värde-par, till exempel:

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

Om du vill komma åt strängarna i ett dynamiskt fält använder du punkt notationen. Fältet DeviceDetail från tabellen SigninLogs är av typen dynamisk. I det här exemplet kan du komma åt operativsystemet med fältnamnet DeviceDetail.operatingSystem.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

Frågeexemplet nedan visar användningen av dynamiska fält med tabellen 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 innehåller funktioner för att manipulera JSON som lagras i strängfält. Många loggar skickar data i JSON-format, vilket kräver att du vet hur du omvandlar JSON-data till frågebara fält.

Exemplet nedan är en lista över JSON-relaterade funktioner och operatorer.

Funktion Beskrivning
parse-json() eller todynamic() Tolkar en sträng som ett JSON-värde och returnerar värdet som dynamiskt. Använd någon av dessa funktioner för att referera till ett fält: JsonField.Key eller JsonField["Key"]
mv-expand tillämpas på en dynamisk typmatris eller egenskapsuppsättningskolumn så att varje värde i samlingen får en separat rad. Alla andra kolumner i en expanderad rad dupliceras. mv_expand är det enklaste sättet att bearbeta JSON-matriser.
mv-apply Tillämpar en underfråga på varje post och returnerar union av resultaten för alla underfrågor. Tillämpa en fråga på varje värde i en matris.

Kör varje fråga separat för att se resultatet.

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")