Začínáme s dotazy protokolů v Azure Monitoru

Poznámka:

Pokud shromažďujete data z alespoň jednoho virtuálního počítače, můžete v tomto cvičení pracovat ve svém vlastním prostředí. V jiných scénářích použijte naše ukázkové prostředí, které zahrnuje spoustu ukázkových dat.

Pokud už víte, jak dotazovat v dotazovací jazyk Kusto (KQL), ale potřebujete rychle vytvářet užitečné dotazy na základě typů prostředků, podívejte se na podokno Uložené ukázkové dotazy v tématu Použití dotazů ve službě Azure Monitor Log Analytics.

V tomto kurzu se naučíte psát dotazy na protokoly ve službě Azure Monitor. V článku se dozvíte, jak:

  • Principy struktury dotazů
  • Seřaďte výsledky dotazu.
  • Filtrování výsledků dotazu
  • Zadejte časový rozsah.
  • Vyberte pole, která mají být zahrnuta do výsledků.
  • Definujte a používejte vlastní pole.
  • Agregace a seskupení výsledků

Kurz použití Log Analytics na webu Azure Portal najdete v tématu Začínáme se službou Azure Monitor Log Analytics.

Další informace o dotazech protokolu ve službě Azure Monitor najdete v tématu Přehled dotazů protokolu ve službě Azure Monitor.

Toto je video verze tohoto kurzu:

Požadována oprávnění

Musíte mít Microsoft.OperationalInsights/workspaces/query/*/read oprávnění k pracovním prostorům služby Log Analytics, které dotazujete, jak poskytuje integrovaná role Čtenář log Analytics, například.

Vytvoření nového dotazu

Dotazy můžou začínat názvem tabulky nebo příkazem search . Je vhodné začít s názvem tabulky, protože definuje jasný obor dotazu. Zlepšuje také výkon dotazů a relevanci výsledků.

Poznámka:

KQL, který používá Azure Monitor, rozlišují malá a velká písmena. Klíčová slova jazyka se obvykle zapisují malými písmeny. Pokud v dotazu používáte názvy tabulek nebo sloupců, nezapomeňte použít správný případ, 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, kterou vás zajímá, a pak se podívejte na část dat:

SecurityEvent
| take 10

Předchozí dotaz vrátí 10 výsledků z SecurityEvent tabulky bez konkrétního pořadí. Tento běžný způsob, jak získat přehled o tabulce, vám pomůže pochopit jeho strukturu a obsah. Pojďme se podívat, jak je sestavená:

  • Dotaz začíná názvem SecurityEventtabulky, která definuje rozsah dotazu.

  • Znak svislé roury (|) 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 svislých prvků.

  • Za kanálem take je operátor.

    Dotaz bychom mohli spustit i bez přidání | take 10. Příkaz bude stále platný, ale může vrátit až 30 000 výsledků.

Take

Pomocí operátoru take můžete zobrazit malý vzorek záznamů vrácením až do zadaného počtu záznamů. Vybrané výsledky jsou libovolné a zobrazují se v žádném konkrétním pořadí. Pokud potřebujete vrátit výsledky v určitém pořadí, použijte operátory a operátorysort.top

Vyhledávací dotazy

Vyhledávací dotazy jsou méně strukturované. Jsou vhodnější pro vyhledání záznamů, které obsahují určitou hodnotu v libovolném sloupci:

search in (SecurityEvent) "Cryptographic"
| take 10

Tento dotaz vyhledá SecurityEvent v tabulce záznamy, které obsahují frázi "Kryptografické". Z těchto záznamů se vrátí a zobrazí 10 záznamů. Pokud tuto in (SecurityEvent) část vynecháte a spustíte jenom search "Cryptographic", hledání přejde přes všechny tabulky. Proces pak bude trvat déle a bude méně efektivní.

Důležité

Vyhledávací dotazy jsou obvykle pomalejší než dotazy založené na tabulkách, protože musí zpracovávat více dat.

Řazení a shora

Tato část popisuje operátory sort a top jejich desc a asc argumenty. I když take je užitečné získat několik záznamů, nemůžete vybrat nebo seřadit výsledky v žádném konkrétním pořadí. Pokud chcete získat seřazené zobrazení, použijte sort a top.

Desc a asc

Desc

Pomocí argumentu desc můžete seřadit záznamy v sestupném pořadí. Sestupně je výchozí pořadí řazení pro sort a top, takže můžete obvykle vynechat desc argument.

Například data vrácená oběma následujícími dotazy se seřadí podle sloupce TimeGenerated v sestupném pořadí:

  • SecurityEvent	
    | sort by TimeGenerated desc
    
  • SecurityEvent	
    | sort by TimeGenerated
    

Asc

Pokud chcete řadit vzestupně, zadejte asc.

Sort

Operátor můžete použítsort. sort seřadí výsledky dotazu podle zadaného sloupce. sort Neomezuje ale počet záznamů vrácených dotazem.

Následující dotaz například vrátí všechny dostupné záznamy pro SecurityEvent tabulku, což je maximálně 30 000 záznamů a seřadí je podle sloupce TimeGenerated.

SecurityEvent	
| sort by TimeGenerated

Předchozí dotaz by mohl vrátit příliš mnoho výsledků. Může také nějakou dobu trvat, než se vrátí výsledky. Dotaz seřadí celou SecurityEvent tabulku podle TimeGenerated sloupce. Portál Analytics pak omezí zobrazení jenom na 30 000 záznamů. Tento přístup není optimální. Nejlepší způsob, jak získat pouze nejnovější záznamy, je použít top operátor.

Hlavní

Operátor slouží top k seřazení celé tabulky na straně serveru a následnému vrácení pouze horních záznamů.

Například následující dotaz vrátí nejnovějších 10 záznamů:

SecurityEvent
| top 10 by TimeGenerated

Výstup vypadá jako v tomto příkladu.

Screenshot that shows the top 10 records sorted in descending order.

Operátor where: Filtrovat podle podmínky

Filtry, jak je uvedeno podle jejich názvu, filtrují data podle konkrétní podmínky. Filtrování je nejběžnější způsob, jak omezit výsledky dotazů na relevantní informace.

Pokud chcete do dotazu přidat filtr, použijte where operátor následovaný jednou nebo více podmínkami. Například následující dotaz vrátí pouze SecurityEvent záznamy, kde Level equals _8:

SecurityEvent
| where Level == 8

Při psaní podmínek filtru můžete použít následující výrazy:

Expression Popis Příklad
== Kontrola rovnosti
(rozlišují se malá a velká písmena)
Level == 8
=~ Kontrola rovnosti
(nerozlišují malá a velká písmena)
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 != ""

K filtrování podle několika podmínek můžete použít některý z následujících přístupů:

Použijte and, jak je znázorněno tady:

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

Roušte více where prvků, jeden za druhým, jak je znázorněno tady:

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

Poznámka:

Hodnoty můžou mít různé typy, takže je možná budete muset přetypovat, abyste provedli porovnání se správným typem. Například SecurityEvent Level sloupec je typu String, takže ho musíte přetypovat na číselný typ, například int nebo long, před použitím číselných operátorů, jak je znázorněno zde: SecurityEvent | where toint(Level) >= 10

Zadání časového rozsahu

Časový rozsah můžete zadat pomocí nástroje pro výběr času nebo filtru času.

Použití časového výběru

Vedle tlačítka Spustit se zobrazí výběr času a označuje, že dotazujete záznamy pouze z posledních 24 hodin. Tento výchozí časový rozsah se použije pro všechny dotazy. Pokud chcete získat záznamy pouze z poslední hodiny, vyberte Poslední hodinu a pak dotaz spusťte znovu.

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

Přidání časového filtru do dotazu

Můžete také definovat vlastní časový rozsah přidáním časového filtru do dotazu. Přidání časového filtru přepíše časový rozsah vybraný v nástroji pro výběr času.

Nejlepší je umístit časový filtr hned za název tabulky:

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

V předchozím filtru času znamená " ago(30m) před 30 minutami". Tento dotaz vrátí záznamy pouze z posledních 30 minut, což je vyjádřeno například 30 min. Mezi další časové jednotky patří dny (například 2d) a sekundy (například 10 sekund).

Použití projektu a rozšíření k výběru a výpočetním sloupcům

Slouží project k výběru konkrétních sloupců, které se mají zahrnout do výsledků:

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

Předchozí příklad vygeneruje následující výstup:

Screenshot that shows the query 'project' results list.

Můžete také použít project k přejmenování sloupců a definování nových sloupců. V dalším příkladu se používá project následující akce:

  • Vyberte pouze Computer původní a TimeGenerated původní sloupce.
  • Activity Zobrazí sloupec jako EventDetails.
  • Vytvořte nový sloupec s názvem EventCode. Funkce substring() slouží k získání pouze prvních čtyř znaků z Activity pole.
SecurityEvent
| top 10 by TimeGenerated 
| project Computer, TimeGenerated, EventDetails=Activity, EventCode=substring(Activity, 0, 4)

Můžete použít extend k zachování všech původních sloupců v sadě výsledků a definování dalších sloupců. Následující dotaz používá extend k přidání EventCode sloupce. Tento sloupec nemusí být zobrazen na konci výsledků tabulky. Abyste ho mohli zobrazit, budete muset rozbalit podrobnosti záznamu.

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

Použití souhrnu k agregaci skupin řádků

Slouží summarize k identifikaci skupin záznamů podle jednoho nebo více sloupců a použití agregací na ně. Nejběžnějším použitím summarize je count, který vrátí počet výsledků v každé skupině.

Následující dotaz zkontroluje všechny Perf záznamy z poslední hodiny, seskupí je podle ObjectNamea spočítá záznamy v každé skupině:

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

Někdy dává smysl 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ění matematických nebo statistických výpočtů v každé skupině. Následující příklad vypočítá průměr CounterValue pro každý počítač:

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

Výsledky tohoto dotazu jsou bohužel bezvýznamné, protože jsme se spojili s různými čítači výkonu. Pokud chcete, aby výsledky byly smysluplnější, vypočítejte průměr zvlášť pro každou kombinaci CounterNameComputera:

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

Shrnutí podle časového sloupce

Výsledky seskupení můžou být také založené na časovém sloupci nebo na jiné souvislé hodnotě. Jednoduše byste ale sumarizovali by TimeGeneratedskupiny pro každý jeden milisekund v časovém rozsahu, protože tyto hodnoty jsou jedinečné.

Pokud chcete vytvořit skupiny založené na průběžných hodnotách, je nejlepší rozdělit rozsah na spravovatelné jednotky pomocí bin. Následující dotaz analyzuje Perf záznamy, které měří volné paměti (Available MBytes) v určitém počítači. Vypočítá průměrnou hodnotu každého 1hodinového období za posledních 7 dnů:

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

Pokud chcete výstup usnadnit, můžete ho vybrat a zobrazit ho jako časový graf, který zobrazuje dostupnou paměť v průběhu času.

Screenshot that shows the values of a query memory over time.

Nejčastější dotazy

Tato část obsahuje odpovědi na běžné otázky.

Proč se v protokolech služby Azure Monitor zobrazují duplicitní záznamy?

Občas si můžete všimnout duplicitních záznamů v protokolech služby Azure Monitor. Tato duplicita obvykle pochází z jedné z následujících dvou podmínek:

  • Komponenty v kanálu mají opakování, aby se zajistilo spolehlivé doručování v cíli. V některých případech může mít tato funkce za následek duplicity pro malé procento položek telemetrie.
  • Pokud duplicitní záznamy pocházejí z virtuálního počítače, možná máte nainstalovaného agenta Log Analytics i agenta Služby Azure Monitor. Pokud stále potřebujete nainstalovaného agenta Log Analytics, nakonfigurujte pracovní prostor služby Log Analytics tak, aby už neshromažďoval data shromážděná také pravidlem shromažďování dat používaným agentem služby Azure Monitor.

Další kroky

  • Další informace o používání řetězcových dat v dotazu protokolu najdete v tématu Práce s řetězci v dotazech protokolu služby Azure Monitor.
  • Další informace o agregaci dat v dotazu protokolu najdete v tématu Pokročilé agregace v dotazech protokolu služby Azure Monitor.
  • Informace o spojení dat z více tabulek najdete v tématu Spojení v dotazech protokolu služby Azure Monitor.
  • Získejte dokumentaci k celému dotazovací jazyk Kusto v referenční dokumentaci jazyka KQL.