Az átalakítás struktúrája az Azure Monitorban
Az Azure Monitorban végzett átalakítások lehetővé teszik a bejövő adatok szűrését vagy módosítását a Log Analytics-munkaterületen való tárolás előtt. Ezek Kusto lekérdezésnyelv (KQL) utasításként vannak implementálva egy adatgyűjtési szabályban (DCR). Ez a cikk részletesen ismerteti a lekérdezés felépítését és az engedélyezett KQL-nyelv korlátozásait.
Átalakítási struktúra
A KQL utasítást a rendszer egyenként alkalmazza az adatforrás minden egyes bejegyzésére. Meg kell értenie a bejövő adatok formátumát, és létre kell hoznia a kimenetet a céltábla szerkezetében. A bemeneti adatfolyamot egy névvel ellátott source
virtuális tábla jelöli. source
a táblaoszlopok megfelelnek a bemeneti adatfolyam definíciójának. Az alábbi példa egy átalakítás tipikus példája. Ez a példa a következő funkciókat tartalmazza:
- A bejövő adatok szűrése egy where utasítással
- Új oszlop hozzáadása a kiterjesztő operátorral
- A kimenet formázása a céltábla oszlopainak megfelelően a projekt operátorával
source
| where severity == "Critical"
| extend Properties = parse_json(properties)
| project
TimeGenerated = todatetime(["time"]),
Category = category,
StatusDescription = StatusDescription,
EventName = name,
EventId = tostring(Properties.EventId)
KQL-korlátozások
Mivel az átalakítás minden rekordra külön-külön van alkalmazva, nem használhat olyan KQL-operátorokat, amelyek több rekordon működnek. Csak azok az operátorok támogatottak, amelyek egyetlen sort vesznek fel bemenetként, és egynél több sort nem adnak vissza. Az összegzés például nem támogatott, mivel több rekordot foglal össze. A támogatott funkciók teljes listáját a támogatott KQL-funkciók között találja.
Az adatgyűjtési szabály ( DCR) átalakításával szűrheti vagy módosíthatja a bejövő adatokat, mielőtt azokat egy Log Analytics-munkaterületen tárolná. Ez a cikk bemutatja, hogyan hozhat létre átalakításokat egy DCR-ben, beleértve az átalakítási utasításhoz használt Kusto lekérdezésnyelv (KQL) részleteit és korlátozásait.
Kötelező oszlopok
Minden átalakítás kimenetének érvényes időbélyeget kell tartalmaznia egy típusnak datetime
nevezett TimeGenerated
oszlopban. Ügyeljen rá, hogy az utolsó extend
vagy project
a blokkba is belefoglalja! A DCR létrehozása vagy frissítése az átalakítás kimenete nélkül TimeGenerated
hibát fog eredményezni.
Dinamikus adatok kezelése
Vegye figyelembe a következő bemenetet dinamikus adatokkal:
{
"TimeGenerated" : "2021-11-07T09:13:06.570354Z",
"Message": "Houston, we have a problem",
"AdditionalContext": {
"Level": 2,
"DeviceID": "apollo13"
}
}
Az AdditionalContext tulajdonságainak eléréséhez definiálja dinamikus típusú oszlopként a bemeneti adatfolyamban:
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "Message",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "dynamic"
}
]
Az AdditionalContext oszlop tartalma mostantól elemezhető és használható a KQL-átalakítás során:
source
| extend parsedAdditionalContext = parse_json(AdditionalContext)
| extend Level = toint (parsedAdditionalContext.Level)
| extend DeviceId = tostring(parsedAdditionalContext.DeviceID)
Dinamikus literálok
A dinamikus literálok kezeléséhez használja a parse_json függvényt.
A következő lekérdezések például ugyanazokat a funkciókat biztosítják:
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":{}}')
Támogatott KQL-funkciók
Támogatott utasítások
let utasítás
A let jobb oldala lehet skaláris kifejezés, táblázatos kifejezés vagy felhasználó által definiált függvény. Csak a skaláris argumentumokkal rendelkező, felhasználó által definiált függvények támogatottak.
táblázatos kifejezési utasítások
A KQL-utasítás egyetlen támogatott adatforrása a következő:
- forrás, amely a forrásadatokat jelöli. Példa:
source
| where ActivityId == "383112e4-a7a8-4b94-a701-4266dfc18e41"
| project PreciseTimeStamp, Message
- nyomtatási operátor, amely mindig egyetlen sort hoz létre. Példa:
print x = 2 + 2, y = 5 | extend z = exp2(x) + exp2(y)
Tabulált operátorok
- meghosszabbít
- projekt
- nyomtat
- hol
- elemez
- projekteltávol
- projekt átnevezése
- adattábla
- columnifexists (a columnifexists használata column_ifexists helyett)
Skaláris operátorok
Numerikus operátorok
Minden numerikus operátor támogatott.
Datetime és Timespan aritmetikai operátorok
Minden Datetime és Timespan aritmetikai operátor támogatott.
Sztringoperátorok
A következő sztring operátorok támogatottak.
- ==
- !=
- =~
- !~
- contains
- !Tartalmaz
- contains_cs
- !contains_cs
- rendelkezik
- !rendelkezik
- has_cs
- !has_cs
- startswith
- !startswith
- startswith_cs
- !startswith_cs
- végződés:
- !endswith
- endswith_cs
- !endswith_cs
- egyezés regex
- in
- !ban
Bitenkénti operátorok
A következő Bitwise operátorok támogatottak.
- binary_and()
- binary_or()
- binary_xor()
- binary_not()
- binary_shift_left()
- binary_shift_right()
Skaláris függvények
Bitenkénti függvények
Konverziós függvények
DateTime és TimeSpan függvények
- ezelőtt
- datetime_add
- datetime_diff
- datetime_part
- dayofmonth
- dayofweek
- napofév
- endofday
- endofmonth
- endofweek
- év végi
- getmonth
- getyear
- hourofday
- make_datetime
- make_timespan
- most
- startofday
- startofmonth
- startofweek
- startofyear
- todatetime
- totimespan
- hétofév
Dinamikus és tömbfüggvények
Matematikai függvények
Feltételes függvények
Sztringfüggvények
- base64_encodestring (base64_encode_tostring helyett használja a base64_encodestring)
- base64_decodestring (base64_decode_tostring helyett használjon base64_decodestring)
- darabszám
- kivonat
- extract_all
- indexof
- isempty
- isnotempty
- parse_json
- helyettesít
- hasít
- strcat
- strcat_delim
- strlen
- Substring
- tolower
- toupper
- hash_sha256
Típusfüggvények
Különleges függvények
parse_cef_dictionary
Ha egy CEF-üzenetet tartalmazó sztringet tartalmaz, parse_cef_dictionary
az üzenet Bővítmény tulajdonságát egy dinamikus kulcs/érték objektummá elemzi. A pontosvessző egy fenntartott karakter, amelyet a nyers üzenet metódusba való továbbítása előtt ki kell cserélni, ahogy az a példában is látható.
| 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
Az IP-címet tartalmazó karakterlánc (az IPv4 és az IPv6 támogatott) geo_location
miatt a függvény hozzávetőleges földrajzi helyet ad vissza, beleértve a következő attribútumokat:
- Ország
- Régió
- Állapot
- Város
- Latitude
- Longitude
| extend GeoLocation = geo_location("1.0.0.5")
Fontos
A függvény által használt IP-földrajzi helymeghatározási szolgáltatás jellege miatt túlzott használat esetén adatbetöltési késést okozhat. Körültekintően járjon el, ha átalakításonként többször használja ezt a függvényt.
Azonosító idézőjele
Szükség szerint használjon azonosító idézőjelet .
Következő lépések
- Hozzon létre egy adatgyűjtési szabályt és egy hozzá tartozó társításokat egy virtuális gépről az Azure Monitor-ügynök használatával.