Estrarre dati da dati stringa strutturati

Completato

I campi stringa possono anche contenere dati strutturati, ad esempio coppie chiave-valore o JSON. KQL consente di accedere facilmente a questi valori per un'analisi ulteriore.

Campi dinamici

All'interno di una tabella Log Analytics sono presenti tipi di campo definiti come dinamici. I campi dinamici contengono una coppia chiave-valore, ad esempio:

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

Per accedere alle stringhe all'interno di un campo dinamico, usare la notazione del punto. Il campo DeviceDetail della tabella SigninLogs è di tipo dinamico. In questo esempio è possibile accedere al sistema operativo con il nome del campo DeviceDetail.operatingSystem.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

L'esempio di query seguente mostra l'uso dei campi dinamici con la tabella 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 fornisce funzioni per la modifica di JSON archiviati nei campi stringa. Molti log inviano i dati in formato JSON, è quindi necessario saper modificare i dati JSON in campi queryable.

L'esempio seguente riporta un elenco di funzioni e operatori correlati a JSON.

Funzione Descrizione
parse-json() o todynamic() interpreta una stringa come un valore JSON e restituisce il valore come dinamico. Usare una di queste funzioni per fare riferimento a un campo: JsonField.Key o JsonField["Key"]
mv-expand viene applicato a una matrice o a una colonna contenitore di proprietà tipizzata dinamica in modo che ogni valore dell'insieme ottenga una riga separata. Tutte le altre colonne in una riga espansa vengono duplicate. mv_expand è il modo più semplice per elaborare matrici JSON.
mv-apply applica una sottoquery a ogni record e restituisce l'unione dei risultati di tutte le sottoquery. Applicare una query a ciascun valore di una matrice.

Eseguire ogni query separatamente per visualizzare i risultati.

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