Začínáme s dotazy protokolů v Azure Monitoru
Poznámka
Pokud shromažďujete data alespoň z jednoho virtuálního počítače, můžete si toto cvičení projít ve svém vlastním prostředí. Pro jiné scénáře použijte naše ukázkové prostředí, které obsahuje spoustu ukázkových dat.
Pokud už víte, jak dotazovat v dotazovacím jazyce Kusto, ale potřebujete rychle vytvářet užitečné dotazy na základě typů prostředků, podívejte se na podokno uložených příkladů dotazů v článku Použití dotazů v Azure Monitor Log Analytics.
V tomto kurzu se naučíte psát dotazy na protokol v Azure Monitor. Tento článek ukazuje, jak:
- Principy struktury dotazů
- Řazení výsledků dotazu
- Filtrování výsledků dotazu
- Zadejte časový rozsah.
- Vyberte pole, která se mají zahrnout do výsledků.
- Definujte a používejte vlastní pole.
- Agregovat a seskupit výsledky.
Kurz týkající se používání Log Analytics v Azure Portal najdete v tématu Začínáme s Azure Monitor Log Analytics.
Další informace o dotazech na protokol v Azure Monitor najdete v tématu Přehled dotazů na protokol v Azure Monitor.
Tady je video verze tohoto kurzu:
Vytvoření nového dotazu
Dotazy mohou začínávat názvem tabulky nebo vyhledávacím příkazem. Je vhodné začít s názvem tabulky, protože definuje jasný obor dotazu a zlepšuje výkon dotazů i relevanci výsledků.
Poznámka
Dotazovací jazyk Kusto, který používá Azure Monitor, rozlišuje velká a malá písmena. Klíčová slova jazyka se obvykle zapisová malými písmeny. Pokud v dotazu používáte názvy tabulek nebo sloupců, nezapomeňte použít správná velká a malá písmena, jak je znázorněno v podokně schématu.
Dotazy založené na tabulkách
Azure Monitor organizuje data protokolu v tabulkách, přičemž každá se skládá z několika sloupců. Všechny tabulky a sloupce se zobrazují v podokně schématu v Log Analytics na portálu Analytics. Identifikujte tabulku, která vás zajímá, a pak se podívejte na část dat:
SecurityEvent
| take 10
Předchozí dotaz vrátí 10 výsledků z tabulky SecurityEvent bez konkrétního pořadí. Jedná se o běžný způsob, jak se podívat na tabulku a porozumět její struktuře a obsahu. Podívejme se, jak je sestavená:
- Dotaz začíná tabulkou s názvem SecurityEvent, která definuje rozsah dotazu.
- Znak kanálu (|) odděluje příkazy, takže výstupem prvního příkazu je vstup dalšího příkazu. Můžete přidat libovolný počet prvků s kanálem.
- Za kanálem následuje příkaz take, který vrátí určitý počet libovolných záznamů z tabulky.
Dotaz bychom mohli spustit i bez přidání | take 10 . Příkaz by stále byl platný, ale mohl by vrátit až 10 000 výsledků.
Vyhledávací dotazy
Vyhledávací dotazy jsou méně strukturované a obecně se hodí pro hledání záznamů, které obsahují konkrétní hodnotu v libovolném ze svých sloupců:
search in (SecurityEvent) "Cryptographic"
| take 10
Tento dotaz vyhledá v tabulce SecurityEvent záznamy, které obsahují frázi Kryptografické. Z těchto záznamů se vrátí a zobrazí 10 záznamů. Pokud část vyhodíte a spustíte pouze příkaz , hledání se prohledá ve všech tabulkách, což by trvá déle a in (SecurityEvent) search "Cryptographic" bylo by méně efektivní.
Důležité
Vyhledávací dotazy jsou obvykle pomalejší než dotazy založené na tabulce, protože musí zpracovávat více dat.
Řazení a začátek
I když je funkce take užitečná pro získání několika záznamů, výsledky jsou vybrány a zobrazeny v žádném konkrétním pořadí. Pokud chcete získat seřazené zobrazení, můžete řadit podle preferovaného sloupce:
SecurityEvent
| sort by TimeGenerated desc
Předchozí dotaz ale může vrátit příliš mnoho výsledků a může také nějakou dobu trvat. Dotaz seřadí celou tabulku SecurityEvent podle sloupce TimeGenerated. Portál Analytics pak omezuje zobrazení jenom na 10 000 záznamů. Tento přístup samozřejmě není optimální.
Nejlepší způsob, jak získat jenom posledních 10 záznamů, je použít horní, který seřadí celou tabulku na straně serveru a pak vrátí nejlepší záznamy:
SecurityEvent
| top 10 by TimeGenerated
Výchozí pořadí řazení je sestupné, takže byste obvykle vynechat argument desc. Výstup vypadá takto:

Operátor where: filtrování podle podmínky
Filtry, jak je označeno jejich názvem, filtrují data podle konkrétní podmínky. Toto je nejběžnější způsob, jak omezit výsledky dotazů na relevantní informace.
Pokud chcete do dotazu přidat filtr, použijte operátor where následovaný jednou nebo více podmínkami. Například následující dotaz vrátí pouze záznamy SecurityEvent, kde Level se rovná 8:
SecurityEvent
| where Level == 8
Při psaní podmínek filtru můžete použít následující výrazy:
| Výraz | Popis | Příklad |
|---|---|---|
| == | Kontrola rovnosti (rozlišují se malá a velká písmena) |
Level == 8 |
| =~ | Kontrola rovnosti (bez rozlišení velkých a malých písmen) |
EventSourceName =~ "microsoft-windows-security-auditing" |
| !=, <> | Kontrola nerovnosti (oba výrazy jsou identické) |
Level != 4 |
| and, or | Požadováno mezi podmínkami | Level == 16 or CommandLine != "" |
Pokud chcete filtrovat podle více podmínek, můžete použít některý z následujících přístupů:
Použijte a, jak je znázorněno tady:
SecurityEvent
| where Level == 8 and EventID == 4672
Kanálu násobek, kde prvky, jeden po druhém, jak je znázorněno zde:
SecurityEvent
| where Level == 8
| where EventID == 4672
Poznámka
Hodnoty mohou mít různé typy, takže je možná budete muset přetypovat, aby bylo možné provést porovnání se správným typem. Například sloupec SecurityEvent Level je typu String, takže ho musíte přetypovat na číselný typ, například na typ int nebo long, abyste na něj mohli použít číselné operátory, jak je znázorněno zde: SecurityEvent | where toint(Level) >= 10
Zadání časového rozsahu
Použití nástroje pro výběr času
Vedle tlačítka Spustit se zobrazí výběr času, který označuje, že se dotazuje na záznamy z posledních 24 hodin. Toto je výchozí časový rozsah použitý pro všechny dotazy. Pokud chcete získat záznamy pouze za poslední hodinu, vyberte Poslední hodina a pak spusťte dotaz znovu.

Přidání časového filtru do dotazu
Můžete také definovat vlastní časový rozsah přidáním časového filtru do dotazu. Časový filtr je nejlepší umístit hned za název tabulky:
SecurityEvent
| where TimeGenerated > ago(30m)
| where toint(Level) >= 10
V předchozím časovém filtru to znamená "před 30 minutami", což znamená, že tento dotaz vrátí záznamy pouze z posledních 30 minut (vyjádřeno například ago(30m) jako 30 min). Mezi další časové jednotky patří dny (například 2d) a sekundy (například 10 s).
Použití projektu a rozšíření pro výběr a výpočet sloupců
Pomocí projektu vyberte konkrétní sloupce, které chcete zahrnout do výsledků:
SecurityEvent
| top 10 by TimeGenerated
| project TimeGenerated, Computer, Activity
Předchozí příklad vygeneruje následující výstup:

Pomocí projektu můžete také přejmenovat sloupce a definovat nové. V dalším příkladu se projekt používá k následujícímu:
- Vyberte pouze původní sloupce Computer (Počítač) a TimeGenerated (Čas vygenerování času).
- Zobrazí se sloupec Aktivita jako EventDetails.
- Vytvořte nový sloupec s názvem EventCode. Funkce substring() slouží k získání pouze prvních čtyř znaků z pole Aktivita.
SecurityEvent
| top 10 by TimeGenerated
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)
Pomocí rozšíření můžete zachovat všechny původní sloupce v sadě výsledků dotazu a definovat další sloupce. Následující dotaz pomocí rozšíření přidá sloupec EventCode. Tento sloupec se nemusí zobrazit na konci výsledků tabulky. v takovém případě byste si museli rozbalit Podrobnosti záznamu a zobrazit ho.
SecurityEvent
| top 10 by TimeGenerated
| extend EventCode=substring(Activity, 0, 4)
Použít souhrn pro agregační skupiny řádků
Použijte sumarizace k identifikaci skupin záznamů v závislosti na jednom nebo více sloupcích a použijte pro ně agregace. Nejběžnějším využitím souhrnu je počet, který vrací počet výsledků v každé skupině.
Následující dotaz zkontroluje všechny záznamy výkonu za poslední hodinu, seskupuje je podle ObjectName a spočítá záznamy v každé skupině:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName
Někdy je vhodné definovat skupiny podle více dimenzí. Každá jedinečná kombinace těchto hodnot definuje samostatnou skupinu:
Perf
| where TimeGenerated > ago(1h)
| summarize count() by ObjectName, CounterName
Dalším běžným použitím je provádět matematické nebo statistické výpočty na každé skupině. Následující příklad vypočítá průměrnou CounterValue pro každý počítač:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer
Výsledky tohoto dotazu bohužel nemají smysl, protože jsme společně s různými čítači výkonu. Aby byly výsledky smysluplnější, vypočítáte průměr zvlášť pro každou kombinaci CounterName a počítače:
Perf
| where TimeGenerated > ago(1h)
| summarize avg(CounterValue) by Computer, CounterName
Shrnout podle sloupce s časem
Seskupení výsledků může být také založeno na časovém sloupci nebo jiné průběžné hodnotě. Jednoduchým shrnutím by TimeGenerated je ale, že by se v časovém rozmezí vytvořily skupiny pro každou dobu milisekund, protože jsou to jedinečné hodnoty.
Chcete-li vytvořit skupiny, které jsou založeny na souvislých hodnotách, je nejlepší rozdělit rozsah na spravovatelné jednotky pomocí přihrádky. Následující dotaz analyzuje záznamy výkonu , které měří volnou paměť (k dispozici v MB) na určitém počítači. Vypočítá průměrnou hodnotu každé 1 hodiny za posledních 7 dnů:
Perf
| where TimeGenerated > ago(7d)
| where Computer == "ContosoAzADDS2"
| where CounterName == "Available MBytes"
| summarize avg(CounterValue) by bin(TimeGenerated, 1h)
Aby byl výstup jasný, můžete ho vybrat k zobrazení jako grafu času, který zobrazuje dostupnou paměť v čase:

Další kroky
- Další informace o použití řetězcových dat v dotazu protokolu najdete v tématu práce s řetězci v Azure Monitorch dotazech protokolu.
- Další informace o agregaci dat v dotazech protokolu najdete v tématu Rozšířené agregace v Azure Monitorch dotazech protokolu.
- Informace o tom, jak spojit data z více tabulek, najdete v tématu věnovaném spojením v Azure Monitorch dotazech protokolu.
- Získejte dokumentaci k celému dotazovacímu jazyku Kusto v Referenční příručce jazyka KQL.