Dela via


KQL-funktioner som stöds i Azure Monitor-transformeringar

Med transformeringar i Azure Monitor kan du köra en KQL-fråga mot inkommande Azure Monitor-data för att filtrera eller ändra inkommande data innan de lagras på en Log Analytics-arbetsyta. Den här artikeln beskriver KQL-överväganden och funktioner som stöds i omvandlingsfrågor utöver särskilda operatorer som endast är tillgängliga i transformeringar.

Eftersom transformeringar tillämpas på varje post individuellt kan de inte använda några KQL-operatorer som fungerar 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.

Endast de operatorer som anges i den här artikeln stöds i transformeringar. Andra operatorer som kan användas i andra loggfrågor stöds inte i transformeringar.

Särskilda beaktanden

Parsa kommando

Parsningskommandot i en transformering är begränsat till 10 kolumner per instruktion av prestandaskäl. Om omvandlingen kräver parsning av fler än 10 kolumner delar du upp den i flera instruktioner enligt beskrivningen i Dela upp stora parsningskommandon.

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 för att hantera dynamiska literaler.parse_json

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

Specialfunktioner

Följande funktioner är endast tillgängliga i transformeringar. De kan inte användas i andra loggfrågor.

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.

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.

Tabellbaserade uttrycksinstruktioner

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

  • som representerar källdata. Till exempel:

    source
    | where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
    | project PreciseTimeStamp, Message
    
  • print som alltid skapar en enskild rad. Till exempel:

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

Tabelloperatorer som stöds

Skalära operatorer som stöds

Skalärfunktioner

Identifierare som citerar

Använd identifierare som anger efter behov.

Nästa steg