Extracción de datos de datos de cadena estructurados
Los campos de cadenas también pueden contener datos estructurados, como JSON o pares clave-valor. KQL proporciona un fácil acceso a estos valores para un análisis más exhaustivo.
Campos dinámicos
Dentro de una tabla de Log Analytics, hay tipos de campos definidos como dinámicos. Los campos dinámicos contienen un par clave-valor, como los siguientes:
{"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 acceder a las cadenas de un campo dinámico, use la notación de punto. El campo DeviceDetail de la tabla SigninLogs es de tipo dinámico. En este ejemplo, puede acceder al sistema operativo con el nombre de campo DeviceDetail.operatingSystem.
SigninLogs
| extend OS = DeviceDetail.operatingSystem
En la consulta de ejemplo siguiente se muestra el uso de campos dinámicos con la tabla 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 proporciona funciones para manipular datos JSON almacenados en campos de cadena. Muchos registros envían datos en formato JSON, por lo que es necesario saber cómo transformar datos JSON en campos consultables.
El ejemplo siguiente es una lista de las funciones i operadores relacionados con JSON.
Function | Descripción |
---|---|
parse-json() o todynamic() | Interpreta una cadena como un valor JSON y devuelve el valor como dinámico. Use cualquiera de estas funciones para hacer referencia a un campo: JsonField.Key or JsonField["Key"]. |
mv-expand | se aplica en una matriz de tipo dinámico o columna de contenedor de propiedades para que cada valor de la colección obtenga una fila independiente. Todas las demás columnas de una fila expandida se duplican. mv_expand es la manera más fácil de procesar matrices JSON. |
mv-apply | Aplica una subconsulta a cada registro y devuelve la unión de los resultados de todas las subconsultas. Aplique una consulta a cada valor de una matriz. |
Ejecute cada consulta por separado para ver los 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")