Extraire des données à partir de données de chaîne structurées
Les champs de chaînes peuvent également contenir des données structurées telles que des paires clé-valeur ou JSON. Le KQL fournit un accès facile à ces valeurs pour une analyse plus poussée.
Champs dynamiques
Dans une table Log Analytics, certains types de champs sont définis comme dynamiques. Les champs dynamiques contiennent une paire clé-valeur telle que :
{"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"}
Pour accéder aux chaînes dans un champ dynamique, utilisez la notation par points. Le champ DeviceDetail de la table SigninLogs est de type dynamique. Dans cet exemple, vous pouvez accéder au système d’exploitation avec le nom de champ DeviceDetail.operatingSystem.
SigninLogs
| extend OS = DeviceDetail.operatingSystem
L’exemple de requête ci-dessous illustre l’utilisation de champs dynamiques avec la table 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
Le KQL fournit des fonctions permettant de manipuler un JSON stocké dans des champs de chaîne. De nombreux journaux envoient des données au format JSON, ce qui vous oblige à savoir comment transformer des données JSON en champs interrogeables.
L’exemple ci-dessous est une liste de fonctions et d’opérateurs liés à JSON.
Fonction | Description |
---|---|
parse_json() ou todynamic() | Interprète une chaîne en tant que valeur JSON et retourne la valeur comme dynamique. Utilisez l’une ou l’autre de ces fonctions pour faire référence à un champ : JsonField.Key ou JsonField["Key"] |
mv-expand | L’opérateur est appliqué à un tableau ou à une colonne de jeu de propriétés de type dynamique afin que chaque valeur de la collection obtienne une ligne distincte. Toutes les autres colonnes d’une ligne développée sont dupliquées. mv_expand est le moyen le plus simple de traiter des tableaux JSON. |
mv-apply | Applique une sous-requête à chaque enregistrement, et retourne l’union des résultats de toutes les sous-requêtes. Appliquez une requête à chaque valeur dans un tableau. |
Exécutez chaque requête séparément pour voir les résultats.
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")