Dela via


Transformeringsstruktur i Azure Monitor

Med transformeringar i Azure Monitor kan du filtrera eller ändra inkommande data innan de lagras på en Log Analytics-arbetsyta. De implementeras som en Kusto-frågespråk -instruktion (KQL) i en datainsamlingsregel (DCR). Den här artikeln innehåller information om hur den här frågan är strukturerad och begränsningar för KQL-språket som tillåts.

Transformeringsstruktur

KQL-instruktionen tillämpas individuellt på varje post i datakällan. Den måste förstå formatet på inkommande data och skapa utdata i måltabellens struktur. En virtuell tabell med namnet source representerar indataströmmen. source tabellkolumner matchar dataströmdefinitionen för indata. Följande är ett typiskt exempel på en transformering. Det här exemplet innehåller följande funktioner:

source  
| where severity == "Critical" 
| extend Properties = parse_json(properties)
| project
    TimeGenerated = todatetime(["time"]),
    Category = category,
    StatusDescription = StatusDescription,
    EventName = name,
    EventId = tostring(Properties.EventId)

KQL-begränsningar

Eftersom omvandlingen tillämpas på varje post individuellt kan den inte använda några KQL-operatorer som agerar på flera poster. Endast operatorer som tar en enskild rad som indata och returnerar högst en rad stöds. Sammanfattning stöds till exempel inte eftersom det sammanfattar flera poster. En fullständig lista över funktioner som stöds finns i KQL-funktioner som stöds.

Transformeringar i en datainsamlingsregel (DCR) gör att du kan filtrera eller ändra inkommande data innan de lagras på en Log Analytics-arbetsyta. Den här artikeln beskriver hur du skapar transformeringar i en DCR, inklusive information och begränsningar för Kusto-frågespråk (KQL) som används för transformeringsinstrukeringen.

Obligatoriska kolumner

Utdata för varje transformering måste innehålla en giltig tidsstämpel i en kolumn som heter TimeGenerated av typen datetime. Se till att inkludera den i det sista extend eller project blocket! Att skapa eller uppdatera en DCR utan TimeGenerated i utdata från en transformering leder till ett fel.

Hantera dynamiska data

Överväg följande indata med dynamiska data:

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

Om du vill komma åt egenskaperna i AdditionalContext definierar du det som kolumnen av dynamisk typ i indataströmmen:

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

Innehållet i kolumnen AdditionalContext kan nu parsas och användas i KQL-omvandlingen:

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

Dynamiska literaler

Använd funktionen parse_json för att hantera dynamiska literaler.

Följande frågor ger till exempel samma funktioner:

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

KQL-funktioner som stöds

Instruktioner som stöds

let-instruktion

Den högra sidan av let kan vara ett skalärt uttryck, ett tabelluttryck eller en användardefinierad funktion. Endast användardefinierade funktioner med skalära argument stöds.

tabelluttrycksinstruktioner

De enda datakällor som stöds för KQL-instruktionen är följande:

  • som representerar källdata. Till exempel:
source
| where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
| project PreciseTimeStamp, Message
print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)

Tabelloperatorer

Skaläroperatorer

Numeriska operatorer

Alla numeriska operatorer stöds.

Datetime- och Timespan-aritmetiska operatorer

Alla Datetime- och Timespan-aritmetiska operatorer stöds.

Strängoperatorer

Följande strängoperatorer stöds.

  • ==
  • !=
  • =~
  • !~
  • innehåller
  • !Innehåller
  • contains_cs
  • !contains_cs
  • Har
  • !Har
  • has_cs
  • !has_cs
  • startswith
  • !startswith
  • startswith_cs
  • !startswith_cs
  • endswith
  • !endswith
  • endswith_cs
  • !endswith_cs
  • matchar regex
  • in
  • !i

Bitvisa operatorer

Följande Bitwise-operatorer stöds.

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

Skalärfunktioner

Bitvis-funktioner

Konverteringsfunktioner

Funktionerna DateTime och TimeSpan

Dynamiska funktioner och matrisfunktioner

Matematiska funktioner

Villkorsstyrda funktioner

Strängfunktioner

Typfunktioner

Specialfunktioner

parse_cef_dictionary

Givet en sträng som innehåller ett CEF-meddelande parse_cef_dictionary parsar egenskapen Extension för meddelandet till ett dynamiskt nyckel/värde-objekt. Semikolon är ett reserverat tecken som ska ersättas innan råmeddelandet skickas till metoden, som du ser i exemplet.

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

Exempel på utdata från funktionen parse_cef_dictionary.

geo_location

Med tanke på att en sträng som innehåller IP-adress (IPv4 och IPv6 stöds) geo_location returnerar funktionen ungefärlig geografisk plats, inklusive följande attribut:

  • Land
  • Region
  • Tillstånd
  • City
  • Latitud
  • Longitud
| extend GeoLocation = geo_location("1.0.0.5")

Skärmbild av exempelutdata för funktionen geo_location.

Viktigt!

På grund av typen av IP-geoplatstjänst som används av den här funktionen kan den införa svarstid för datainmatning om den används för mycket. Var försiktig när du använder den här funktionen fler än flera gånger per transformering.

Identifierare som citerar

Använd identifierare som anger efter behov.

Nästa steg