Wyodrębnianie danych z danych ciągów strukturalnych

Ukończone

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