Gegevens extraheren uit gestructureerde tekenreeksgegevens
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")