Wyodrębnianie danych z danych ciągów strukturalnych
Pola ciągów mogą również zawierać dane ustrukturyzowane, takie jak pary JSON lub Key-Value. Język KQL zapewnia łatwy dostęp do tych wartości w celu dalszej analizy.
Pola dynamiczne
W tabeli usługi Log Analytics istnieją typy pól zdefiniowane jako Dynamiczne. Pola dynamiczne zawierają parę klucz-wartość, taką jak:
{"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"}
Aby uzyskać dostęp do ciągów w polu Dynamiczny, użyj notacji kropkowej. Pole DeviceDetail z tabeli SigninLogs jest typu dynamiczne. W tym przykładzie można uzyskać dostęp do systemu operacyjnego przy użyciu nazwy pola DeviceDetail.operatingSystem.
SigninLogs
| extend OS = DeviceDetail.operatingSystem
Poniższy przykład zapytania przedstawia użycie pól dynamicznych z 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
Język KQL udostępnia funkcje do manipulowania formatem JSON przechowywanym w polach ciągów. Wiele dzienników przesyła dane w formacie JSON, co wymaga znajomości sposobu przekształcania danych JSON w celu wykonywania zapytań dotyczących pól.
W poniższym przykładzie znajduje się lista funkcji i operatorów związanych z plikiem JSON.
Funkcja | Opis |
---|---|
parse-json() lub todynamic() | Interpretuje ciąg jako wartość JSON i zwraca wartość jako dynamiczną. Użyj jednej z tych funkcji, aby odwołać się do pola: JsonField.Key lub JsonField["Key"] |
mv-expand | jest stosowany w kolumnie tablicy dynamicznej lub torby właściwości, tak aby każda wartość w kolekcji pobierała oddzielny wiersz. Wszystkie pozostałe kolumny w rozszerzonym wierszu są zduplikowane. mv_expand jest najprostszym sposobem przetwarzania tablic JSON. |
mv-apply | Stosuje podzapytywanie do każdego rekordu i zwraca unię wyników wszystkich podzapytania. Zastosuj zapytanie do każdej wartości w tablicy. |
Uruchom każde zapytanie oddzielnie, aby wyświetlić wyniki.
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")