Extrakce dat ze strukturovaných řetězcových dat

Dokončeno

Pole řetězců mohou obsahovat také strukturovaná data, jako jsou páry JSON nebo klíč-hodnota. KQL poskytuje snadný přístup k těmto hodnotám pro další analýzu.

Dynamická pole

V tabulce Log Analytics jsou typy polí definované jako Dynamické. Dynamická pole obsahují pár klíč-hodnota, například:

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

Pokud chcete získat přístup k řetězcům v rámci dynamického pole, použijte zápis tečky. Pole DeviceDetail z tabulky SigninLogs je typu dynamické. V tomto příkladu můžete získat přístup k operačnímu systému s názvem pole DeviceDetail.operatingSystem.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

Následující příklad dotazu ukazuje použití dynamických polí s tabulkou 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 poskytuje funkce pro manipulaci s JSON uloženými v řetězcových polích. Mnoho protokolů odesílá data ve formátu JSON, což vyžaduje, abyste věděli, jak transformovat data JSON na dotazovatelná pole.

Následující příklad je seznam funkcí a operátorů souvisejících s JSON.

Funkce Popis
parse-json() nebo todynamic() Interpretuje řetězec jako hodnotu JSON a vrátí hodnotu jako dynamickou. Pomocí některé z těchto funkcí můžete odkazovat na pole: JsonField.Key nebo JsonField["Key"]
mv-expand se použije u sloupce pole s dynamickým typem nebo kontejneru vlastností, aby každá hodnota v kolekci získala samostatný řádek. Všechny ostatní sloupce v rozbaleném řádku se duplikují. mv_expand je nejjednodušší způsob zpracování polí JSON.
mv-apply Použije poddotaz na každý záznam a vrátí sjednocení výsledků všech poddotazů. Použití dotazu na každou hodnotu v poli

Výsledky zobrazíte spuštěním jednotlivých dotazů zvlášť.

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