Extrair dados de dados de cadeia de caracteres estruturada

Concluído

Os campos Strings também podem conter dados estruturados, como pares JSON ou Key-Value. O KQL fornece fácil acesso a esses valores para análise posterior.

Campos dinâmicos

Dentro de uma tabela do Log Analytics, há tipos de campo definidos como Dinâmico. Os campos dinâmicos contêm um par chave-valor, como:

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

Para acessar as cadeias de caracteres dentro de um campo Dinâmico, use a notação de ponto. O campo DeviceDetail da tabela SigninLogs é do tipo dynamic. Neste exemplo, você pode acessar o sistema operacional com o nome do campo DeviceDetail.operatingSystem.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

O exemplo de consulta abaixo mostra o uso de campos dinâmicos com a tabela 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

O KQL fornece funções para manipular JSON armazenados em campos de cadeia de caracteres. Muitos logs enviam dados no formato JSON, o que requer que você saiba como transformar dados JSON em campos consultáveis.

O exemplo abaixo é uma lista de funções e operadores relacionados a JSON.

Função Descrição
parse-json() ou todynamic() Interpreta uma cadeia de caracteres como um valor JSON e retorna o valor como dinâmico. Use qualquer uma destas funções para se referir a um campo: JsonField.Key ou JsonField["Key"]
mv-expandir é aplicado em uma matriz de tipo dinâmico ou coluna de conjunto de propriedades para que cada valor na coleção obtenha uma linha separada. Todas as outras colunas em uma linha expandida são duplicadas. mv_expand é a maneira mais fácil de processar matrizes JSON.
mv-aplicar Aplica uma subconsulta a cada registro e retorna a união dos resultados de todas as subconsultas. Aplique uma consulta a cada valor em uma matriz.

Execute cada consulta separadamente para ver os resultados.

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