Delen via


Ondersteunde KQL-functies in Azure Monitor-transformaties

Met transformaties in Azure Monitor kunt u een KQL-query uitvoeren op binnenkomende Azure Monitor-gegevens om binnenkomende gegevens te filteren of te wijzigen voordat deze worden opgeslagen in een Log Analytics-werkruimte. In dit artikel vindt u informatie over KQL-overwegingen en ondersteunde functies in transformatiequery's, naast speciale operators die alleen beschikbaar zijn in transformaties.

Omdat transformaties afzonderlijk op elke record worden toegepast, kunnen ze geen KQL-operators gebruiken die op meerdere records reageren. Alleen operators die één rij als invoer gebruiken en die niet meer dan één rij retourneren, worden ondersteund. Samenvatten wordt bijvoorbeeld niet ondersteund omdat het meerdere records samenvat.

Alleen de operators die in dit artikel worden vermeld, worden ondersteund in transformaties. Alle andere operators die kunnen worden gebruikt in andere logboekquery's, worden niet ondersteund in transformaties.

Speciale overwegingen

Opdracht Parseren

De opdracht parseren in een transformatie is beperkt tot 10 kolommen per instructie om prestatieredenen. Als voor uw transformatie meer dan 10 kolommen moeten worden geparseerd, splitst u deze in meerdere instructies, zoals beschreven in grote parseringsopdrachten.

Dynamische gegevens verwerken

Houd rekening met de volgende invoer met dynamische gegevens:

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

Als u toegang wilt krijgen tot de eigenschappen in AdditionalContext, definieert u deze als kolom voor dynamisch type in de invoerstroom:

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

De inhoud van de kolom AdditionalContext kan nu worden geparseerd en gebruikt in de KQL-transformatie:

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

Dynamische letterlijke waarden

Gebruik de parse_json functie om dynamische letterlijke waarden te verwerken.

De volgende query's bieden bijvoorbeeld dezelfde functionaliteit:

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":{}}')

Speciale functies

De volgende functies zijn alleen beschikbaar in transformaties. Ze kunnen niet worden gebruikt in andere logboekquery's.

parse_cef_dictionary

Gezien een tekenreeks met een CEF-bericht parseert u parse_cef_dictionary de extensie-eigenschap van het bericht in een dynamisch sleutel-/waardeobject. Puntkomma is een gereserveerd teken dat moet worden vervangen voordat het onbewerkte bericht in de methode wordt doorgegeven, zoals wordt weergegeven in het voorbeeld.

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

Voorbeelduitvoer van parse_cef_dictionary functie.

geo_location

Gezien een tekenreeks met IP-adres (IPv4 en IPv6 worden ondersteund), geo_location retourneert de functie een geschatte geografische locatie, waaronder de volgende kenmerken:

  • Land/regio
  • Regio
  • Provincie
  • City
  • Breedtegraad
  • Lengtegraad
| extend GeoLocation = geo_location("1.0.0.5")

Schermopname van voorbeelduitvoer van geo_location functie.

Belangrijk

Vanwege de aard van de IP-geolocatieservice die door deze functie wordt gebruikt, kan dit leiden tot gegevensopnamelatentie als deze overmatig wordt gebruikt. Wees voorzichtig bij het gebruik van deze functie meer dan meerdere keren per transformatie.

Ondersteunde instructies

Let-instructie

De rechterkant van let kan een scalaire expressie, een tabellaire expressie of een door de gebruiker gedefinieerde functie zijn. Alleen door de gebruiker gedefinieerde functies met scalaire argumenten worden ondersteund.

Tabellaire expressie-instructies

De enige ondersteunde gegevensbronnen voor de KQL-instructie in een transformatie zijn als volgt:

  • bron, die de brongegevens vertegenwoordigt. Voorbeeld:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print operator, die altijd één rij produceert. Voorbeeld:

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

Ondersteunde operators in tabelvorm

Ondersteunde scalaire operators

  • Alle numerieke operators worden ondersteund.
  • Rekenkundige operatoren voor alle datum/tijd- en tijdspanne worden ondersteund.
  • De volgende tekenreeksoperators worden ondersteund.
    • `=
    • !=
    • =~
    • !~
    • contains
    • !contains
    • contains_cs
    • !contains_cs
    • has
    • !has
    • has_cs
    • !has_cs
    • startswith
    • !startswith
    • startswith_cs
    • !startswith_cs
    • endswith
    • !endswith
    • endswith_cs
    • !endswith_cs
    • matches regex
    • in
    • !in
  • De volgende Bitwise-operators worden ondersteund.
    • binary_and()
    • binary_or()
    • binary_xor()
    • binary_not()
    • binary_shift_left()
    • binary_shift_right()

Scalaire functies

Id-quotering

Gebruik id-quotering zoals vereist.

Volgende stappen