Delen via


Structuur van transformatie in Azure Monitor

Met transformaties in Azure Monitor kunt u binnenkomende gegevens filteren of wijzigen voordat deze worden opgeslagen in een Log Analytics-werkruimte. Ze worden geïmplementeerd als een Kusto-querytaal -instructie (KQL) in een regel voor gegevensverzameling (DCR). Dit artikel bevat informatie over hoe deze query is gestructureerd en beperkingen voor de toegestane KQL-taal.

Transformatiestructuur

De KQL-instructie wordt afzonderlijk toegepast op elke vermelding in de gegevensbron. Het moet de indeling van de binnenkomende gegevens begrijpen en uitvoer maken in de structuur van de doeltabel. Een virtuele tabel met de naam source vertegenwoordigt de invoerstroom. source tabelkolommen komen overeen met de definitie van de invoergegevensstroom. Hieronder volgt een typisch voorbeeld van een transformatie. Dit voorbeeld bevat de volgende functionaliteit:

  • Filtert de binnenkomende gegevens met een where instructie.
  • Hiermee voegt u een nieuwe kolom toe met behulp van de extend operator.
  • Hiermee wordt de uitvoer opgemaakt zodat deze overeenkomt met de kolommen van de doeltabel met behulp van de project operator.
source  
| where severity == "Critical" 
| extend Properties = parse_json(properties)
| project
    TimeGenerated = todatetime(["time"]),
    Category = category,
    StatusDescription = StatusDescription,
    EventName = name,
    EventId = tostring(Properties.EventId)

KQL-beperkingen

Omdat de transformatie afzonderlijk op elke record wordt toegepast, kunnen er geen KQL-operators worden gebruikt 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. Zie Ondersteunde KQL-functies voor een volledige lijst met ondersteunde functies.

Met transformaties in een regel voor gegevensverzameling (DCR) kunt u binnenkomende gegevens filteren of wijzigen voordat deze worden opgeslagen in een Log Analytics-werkruimte. In dit artikel wordt beschreven hoe u transformaties bouwt in een DCR, inclusief details en beperkingen van de Kusto-querytaal (KQL) die worden gebruikt voor de transformatie-instructie.

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.

Vereiste kolommen

De uitvoer van elke transformatie moet een geldig tijdstempel bevatten in een kolom met de naam TimeGenerated van het type datetime. Zorg ervoor dat u deze opneemt in het laatste extend of project blok! Het maken of bijwerken van een DCR zonder TimeGenerated in de uitvoer van een transformatie leidt tot een fout.

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

Ondersteunde KQL-functies

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

Tabellaire operators

Scalaire operators

Numerieke operators

Alle numerieke operators worden ondersteund.

Rekenkundige operatoren datum/tijd en tijdspan

Rekenkundige operatoren voor alle datum/tijd- en tijdspanne worden ondersteund.

Tekenreeksoperators

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

Bitsgewijze operatoren

De volgende Bitwise-operators worden ondersteund.

  • binary_and()
  • binary_or()
  • binary_xor()
  • binary_not()
  • binary_shift_left()
  • binary_shift_right()

Scalaire functies

Bitsgewijze functies

Conversiefuncties

De functies DateTime en TimeSpan

Dynamische en matrixfuncties

Wiskundige functies

Voorwaardelijke functies

Tekenreeksfuncties

Typefuncties

Speciale functies

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.

Id-quotering

Gebruik id-quotering zoals vereist.

Volgende stappen