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 datetimenevezett 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

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
  • Hsa
  • !Hsa
  • has_cs
  • !has_cs
  • startswith
  • !startswith
  • startswith_cs
  • !startswith_cs
  • végződés:
  • !endswith
  • endswith_cs
  • !endswith_cs
  • egyezés regex
  • in
  • !in

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

Dinamikus és tömbfüggvények

Matematikai függvények

Feltételes függvények

Sztringfüggvények

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

Sample output of parse_cef_dictionary function.

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")

Screenshot of sample output of geo_location function.

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