Partager via


Fonctionnalités KQL prises en charge dans les transformations Azure Monitor

Les transformations dans Azure Monitor vous permettent d’exécuter une requête KQL sur les données Azure Monitor entrantes pour filtrer ou modifier les données entrantes avant de les stocker dans un espace de travail Log Analytics. Cet article détaille les considérations relatives à KQL et les fonctionnalités prises en charge dans les requêtes de transformation en plus des opérateurs spéciaux disponibles uniquement dans les transformations.

Étant donné que les transformations sont appliquées individuellement à chaque enregistrement, elles ne peuvent pas utiliser des opérateurs KQL agissants sur plusieurs enregistrements. Seuls les opérateurs qui acceptent une seule ligne comme entrée et ne retournent pas plus d’une ligne sont pris en charge. Par exemple, la fonctionnalité summarize n’est pas prise en charge, car elle permet de récapituler plusieurs enregistrements.

Seuls les opérateurs répertoriés dans cet article sont pris en charge dans les transformations. Les autres opérateurs qui peuvent être utilisés dans d’autres requêtes de journal ne sont pas pris en charge dans les transformations.

Considérations spéciales

Commande parse

La commande parse d’une transformation est limitée à 10 colonnes par instruction pour des raisons de performances. Si votre transformation nécessite l’analyse de plus de 10 colonnes, fractionnez-la en plusieurs instructions, comme indiqué dans Diviser les commandes parse volumineuses.

Gestion des données dynamiques

Considérons l’entrée suivante avec des données dynamiques :

{
    "TimeGenerated" : "2021-11-07T09:13:06.570354Z",
    "Message": "Houston, we have a problem",
    "AdditionalContext": {
        "Level": 2,
        "DeviceID": "apollo13"
    }
}

Pour accéder aux propriétés dans AdditionalContext, définissez-la en tant que colonne de type dynamique dans le flux d’entrée :

"columns": [
    {
        "name": "TimeGenerated",
        "type": "datetime"
    },
    {
        "name": "Message",
        "type": "string"
    }, 
    {
        "name": "AdditionalContext",
        "type": "dynamic"
    }
]

Le contenu de la colonne AdditionalContext peut désormais être analysé et utilisé dans la transformation KQL :

source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)

Littéraux dynamiques

Utilisez la fonction parse_json pour gérer les littéraux dynamiques.

Par exemple, les requêtes suivantes offrent la même fonctionnalité :

print d=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
print d=parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')

Fonctions spéciales

Les fonctions suivantes ne sont disponibles que dans des transformations. Elles ne peuvent pas être utilisées dans d’autres requêtes de journal.

parse_cef_dictionary

Étant donné une chaîne contenant un message CEF, parse_cef_dictionary analyse la propriété Extension du message dans un objet clé/valeur dynamique. Le point-virgule est un caractère réservé qui doit être remplacé avant de transmettre le message brut à la méthode, comme illustré dans l’exemple ci-dessous.

| extend cefMessage=iff(cefMessage contains_cs ";", replace(";", " ", cefMessage), cefMessage) 
| extend parsedCefDictionaryMessage =parse_cef_dictionary(cefMessage) 
| extend parsecefDictionaryExtension = parsedCefDictionaryMessage["Extension"]
| project TimeGenerated, cefMessage, parsecefDictionaryExtension

Exemple de sortie de la fonction parse_cef_dictionary.

geo_location

À partir d’une chaîne donnée contenant une adresse IP (IPv4 et IPv6 sont pris en charge), la fonction geo_location retourne un emplacement géographique approximatif, avec les attributs suivants :

  • Country
  • Région
  • State
  • Ville
  • Latitude
  • Longitude
| extend GeoLocation = geo_location("1.0.0.5")

Capture d’écran de l’exemple de sortie de la fonction geo_location.

Important

En raison de la nature du service de géolocalisation IP utilisé par cette fonction, une latence d’ingestion des données peut être observée dans le cas d’une utilisation excessive. Faites preuve de prudence lorsque vous utilisez cette fonction plusieurs fois par transformation.

Instructions prises en charge

Let, instruction

La partie droite de let peut représenter une expression scalaire, une expression tabulaire ou une fonction définie par l’utilisateur. Seules les fonctions définies par l’utilisateur avec des arguments scalaires sont prises en charge.

Instructions d’expression tabulaire

Voici les seules sources de données prises en charge pour l’instruction KQL dans une transformation :

  • source qui représente les données sources. Par exemple :

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • Opérateur print, qui produit toujours une seule ligne. Par exemple :

    print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
    

Opérateurs tabulaires pris en charge

Opérateurs scalaires pris en charge

Fonctions scalaires

Identificateur quoting

Utilisez l’identificateur quoting si nécessaire.

Étapes suivantes