Ismerkedés az Azure Monitor-naplólekérdezésekkel

Megjegyzés

Ha legalább egy virtuális gépről gyűjt adatokat, ezt a gyakorlatot saját környezetében is végrehajthatja. Más forgatókönyvek esetén használja a bemutatókörnyezetet, amely rengeteg mintaadatot tartalmaz.

Ha már tudja, hogyan kérdezhet le Kusto lekérdezésnyelv, de gyorsan létre kell hoznia hasznos lekérdezéseket erőforrástípusok alapján, tekintse meg a mentett példa lekérdezések panelét az Azure Monitor Log Analytics Lekérdezések használata című cikkében.

Ebben az oktatóanyagban megtudhatja, hogyan írhat napló lekérdezéseket az Azure Monitorban. A cikk bemutatja, hogyan:

  • A lekérdezési struktúra megismerése.
  • Lekérdezési eredmények rendezése.
  • Lekérdezési eredmények szűrése.
  • Adjon meg egy időtartományt.
  • Válassza ki, hogy mely mezők szerepeljenek az eredmények között.
  • Egyéni mezők definiálása és használata.
  • Az eredmények összesítése és csoportosítása.

A Log Analytics a Azure Portal való használatáról szóló oktatóanyagért tekintse meg Első lépések az Azure Monitor Log Analytics szolgáltatással.

További információ az Azure Monitor napló lekérdezéseiről: Az Azure Monitor napló lekérdezéseinek áttekintése.

Az oktatóanyag videóverziója:

Új lekérdezés írása

A lekérdezések táblanévvel vagy keresési paranccsal kezdődhetnek. Érdemes táblanévvel kezdeni, mert egyértelmű hatókört határoz meg a lekérdezéshez, és javítja a lekérdezés teljesítményét és az eredmények relevanciáját.

Megjegyzés

Az Azure Monitor által használt Kusto lekérdezési nyelv megkülönbözteti a kis- és nagybetűktől. A nyelvi kulcsszavakat általában kisbetűvel írják. Ha táblák vagy oszlopok nevét használja egy lekérdezésben, ügyeljen arra, hogy a megfelelő esetet használja a sémapanelen látható módon.

Táblaalapú lekérdezések

Az Azure Monitor több oszlopból álló táblákba rendezi a naplóadatokat. Az összes tábla és oszlop megjelenik a Séma panelen a Log Analyticsben az Analytics portálon. Azonosítsa a kívánt táblát, majd tekintse meg az adatokat:

SecurityEvent
| take 10

Az előző lekérdezés 10 eredményt ad vissza a SecurityEvent táblából, konkrét sorrendben. Ez egy gyakori módszer arra, hogy egy táblázatra rápillantsunk, és megértsük annak szerkezetét és tartalmát. Vizsgáljuk meg, hogyan épül fel:

  • A lekérdezés a SecurityEvent táblanévvel kezdődik, amely meghatározza a lekérdezés hatókörét.
  • A pipa (|) karakter elválasztja a parancsokat, így az első parancs kimenete a következő bemenete. Tetszőleges számú vezetékes elemet adhat hozzá.
  • A cső követése a take parancs, amely a táblából adott számú tetszőleges rekordot ad vissza.

A lekérdezést még hozzáadás | take 10nélkül is lefuttathatjuk. A parancs továbbra is érvényes lenne, de legfeljebb 10 000 eredményt adhat vissza.

Keresési lekérdezések

A keresési lekérdezések kevésbé strukturáltak, és általában jobban alkalmasak olyan rekordok keresésére, amelyek egy adott értéket tartalmaznak bármelyik oszlopban:

search in (SecurityEvent) "Cryptographic"
| take 10

Ez a lekérdezés a SecurityEvent táblában keres olyan rekordokat, amelyek a "Kriptográfiai" kifejezést tartalmazzák. Ezek közül 10 rekord lesz visszaadva és megjelenítve. Ha kihagyja az alkatrészt in (SecurityEvent) , és csak search "Cryptographic"fut, a keresés az összes táblán át fog haladni, ami hosszabb időt vesz igénybe, és kevésbé hatékony lesz.

Fontos

A keresési lekérdezések általában lassabbak, mint a táblaalapú lekérdezések, mivel több adatot kell feldolgozniuk.

Rendezés és felül

Bár a take hasznos néhány rekord lekéréséhez, az eredményeket a rendszer kijelöli, és nem adott sorrendben jeleníti meg. Rendezett nézetet az előnyben részesített oszlop szerint rendezhet :

SecurityEvent	
| sort by TimeGenerated desc

Az előző lekérdezés azonban túl sok eredményt adhat vissza, és eltarthat egy ideig. A lekérdezés a teljes SecurityEvent táblát a TimeGenerated oszlop szerint rendezi. Az Elemzési portál ezután csak 10 000 rekordra korlátozza a megjelenítést. Ez a megközelítés természetesen nem optimális.

A legjobb módszer, ha csak a legújabb 10 rekordot használja, amely rendezi a teljes táblát a kiszolgáló oldalán, majd visszaadja a legfelső rekordokat:

SecurityEvent
| top 10 by TimeGenerated

A csökkenő sorrend az alapértelmezett rendezési sorrend, ezért általában kihagyja a desc argumentumot. A kimenet a következőképpen fog kinézni:

Screenshot of the top 10 records, sorted in descending order.

A where operátor: szűrés egy feltételen

A nevükben jelzett szűrők egy adott feltétel alapján szűrik az adatokat. Ez a lekérdezési eredmények releváns információkra való korlátozásának leggyakoribb módja.

Szűrő lekérdezéshez való hozzáadásához használja a where operátort, amelyet egy vagy több feltétel követ. A következő lekérdezés például csak olyan SecurityEvent rekordokat ad vissza, ahol a szintértéke 8:

SecurityEvent
| where Level == 8

Szűrőfeltételek írásakor a következő kifejezéseket használhatja:

Kifejezés Leírás Példa
== Egyenlőség ellenőrzése
(kis- és nagybetűk megkülönböztetése)
Level == 8
=~ Egyenlőség ellenőrzése
(kis- és nagybetűk megkülönböztetése)
EventSourceName =~ "microsoft-windows-security-auditing"
!=, <> Az egyenlőtlenség ellenőrzése
(mindkét kifejezés azonos)
Level != 4
and, or Feltételek között használandó Level == 16 or CommandLine != ""

Ha több feltétel alapján szeretne szűrni, az alábbi módszerek egyikét használhatja:

Használja és az itt látható módon:

SecurityEvent
| where Level == 8 and EventID == 4672

Az itt látható módon több csövet csövezhet oda, ahol az elemek egymás után vannak:

SecurityEvent
| where Level == 8 
| where EventID == 4672

Megjegyzés

Az értékek különböző típusúak lehetnek, ezért előfordulhat, hogy a megfelelő típuson történő összehasonlításhoz kell őket leadnia. A SecurityEvent Level oszlop például Sztring típusú, ezért numerikus típusra kell átírnia, például int vagy long értékre, mielőtt numerikus operátorokat használhat rajta, az itt látható módon: SecurityEvent | where toint(Level) >= 10

Időtartomány megadása

Az időválasztó használata

Az időválasztó a Futtatás gomb mellett jelenik meg, és azt jelzi, hogy csak az elmúlt 24 órából kérdez le rekordokat. Ez az összes lekérdezésre alkalmazott alapértelmezett időtartomány. Ha csak az utolsó órából szeretne rekordokat lekérni, válassza az Utolsó óra lehetőséget, majd futtassa újra a lekérdezést.

Screenshot of the time picker and its list of time-range commands.

Időszűrő hozzáadása a lekérdezéshez

Saját időtartományt is meghatározhat, ha hozzáad egy időszűrőt a lekérdezéshez. A legjobb, ha az időszűrőt közvetlenül a tábla neve után helyezi el:

SecurityEvent
| where TimeGenerated > ago(30m) 
| where toint(Level) >= 10

Az előző időszűrő a "30 perccel ezelőtt" értéket jelenti, ami azt jelenti, ago(30m) hogy ez a lekérdezés csak az utolsó 30 perc rekordjait adja vissza (például 30 ezredpercben kifejezve). Más időegységek közé tartoznak a napok (például 2d) és a másodpercek (például 10-ek).

Projekt használata és kiterjesztése oszlopok kiválasztására és kiszámítására

A project használatával válassza ki az eredményekbe belefoglalni kívánt oszlopokat:

SecurityEvent 
| top 10 by TimeGenerated 
| project TimeGenerated, Computer, Activity

Az előző példa a következő kimenetet hozza létre:

Screenshot of the query

A project használatával átnevezheti az oszlopokat, és újakat definiálhat. A következő példa a project használatával hajtja végre a következőket:

  • Csak a Számítógép és a TimeGenerated eredeti oszlopokat jelölje ki.
  • A Tevékenység oszlop megjelenítése EventDetailsként.
  • Hozzon létre egy EventCode nevű új oszlopot. A substring() függvény a Tevékenység mezőből csak az első négy karakter lekérésére szolgál.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

A kiterjesztés használatával megtarthatja az összes eredeti oszlopot az eredményhalmazban, és további oszlopokat definiálhat. Az alábbi lekérdezés az EventCode oszlop hozzáadásához használja az Extend függvényt. Előfordulhat, hogy ez az oszlop nem jelenik meg a tábla eredményeinek végén, ebben az esetben ki kell bontani egy rekord részleteit a megtekintéséhez.

SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)

Összesítés használata sorok csoportjainak összesítéséhez

Az összegzéssel rekordcsoportokat azonosíthat egy vagy több oszlop szerint, és összesítéseket alkalmazhat rájuk. Az összegzés leggyakoribb felhasználási helye a darabszám, amely az egyes csoportokban lévő eredmények számát adja vissza.

A következő lekérdezés áttekinti az elmúlt óra összes Perf rekordját, objectName szerint csoportosítja őket, és megszámolja az egyes csoportok rekordjait:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName

Néha érdemes több dimenzió szerint definiálni a csoportokat. Ezeknek az értékeknek minden egyedi kombinációja külön csoportot határoz meg:

Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName

Egy másik gyakori felhasználási lehetőség az egyes csoportokon végzett matematikai vagy statisztikai számítások elvégzése. Az alábbi példa kiszámítja az egyes számítógépek átlagos CounterValue értékét :

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer

Sajnos a lekérdezés eredményei értelmetlenek, mivel különböző teljesítményszámlálókat kevertünk össze. Az eredmények értelmesebbé tételéhez külön számítsa ki az átlagot a CounterName és a Számítógép minden egyes kombinációjához:

Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName

Összegzés időoszlop szerint

Az eredmények csoportosítása egy időoszlopon vagy egy másik folyamatos értéken is alapulhat. Egyszerűen összefoglalva by TimeGeneratedazonban minden egyes ezredmásodperchez létrehozna csoportokat az időtartományban, mivel ezek egyedi értékek.

Ha folyamatos értékeken alapuló csoportokat szeretne létrehozni, érdemes a intervallum használatával kezelhető egységekre bontani a tartományt. A következő lekérdezés elemzi azokat a perf rekordokat, amelyek egy adott számítógépen mérik a szabad memóriát (rendelkezésre álló MBytes). Kiszámítja az elmúlt 7 nap minden 1 órás időszakának átlagértékét:

Perf 
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2" 
| where CounterName == "Available MBytes" 
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)

A kimenet egyértelműbbé tétele érdekében kiválaszthatja, hogy idődiagramként jelenítse meg, amely megjeleníti a rendelkezésre álló memóriát az idő függvényében:

Screenshot displaying the values of a query memory over time.

Következő lépések