Extrakce dat ze strukturovaných řetězcových dat
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")