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:
- Filtrerar inkommande data med en
where
instruktion. - Lägger till en ny kolumn med operatorn
extend
. - Formaterar utdata så att de matchar kolumnerna i måltabellen med operatorn
project
.
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.
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.
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 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":{}}')
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.
Tabellbaserade uttrycksinstruktioner
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
som alltid skapar en enskild rad. Till exempel:print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Tabelloperatorer
extend
project
print
where
parse
project-away
project-rename
datatable
columnifexists
(använd columnifexists i stället för column_ifexists)
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.
==
!=
=~
!~
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
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
ago
datetime_add
datetime_diff
datetime_part
dayofmonth
dayofweek
dayofyear
endofday
endofmonth
endofweek
endofyear
getmonth
getyear
hourofday
make_datetime
make_timespan
now
startofday
startofmonth
startofweek
startofyear
todatetime
totimespan
weekofyear
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
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 bör ersättas innan det råa 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.
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.