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
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")
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
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(använd columnifexists i stället för column_ifexists)
Skalära operatorer som stöds
- Alla numeriska operatorer stöds.
- Alla Datetime- och Timespan-aritmetiska operatorer stöds.
- Följande strängoperatorer stöds.
- `=
!=
=~
!~
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
- 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
base64_encodestring
(använd base64_encodestring i stället för base64_encode_tostring)base64_decodestring
(använd base64_decodestring i stället för base64_decode_tostring)countof
extract
extract_all
indexof
isempty
isnotempty
parse_json
replace
split
strcat
strcat_delim
strlen
substring
tolower
toupper
hash_sha256
- Typfunktioner
Identifierare som citerar
Använd identifierare som anger efter behov.
Nästa steg
- Skapa en datainsamlingsregel och en association till den från en virtuell dator med hjälp av Azure Monitor-agenten.