Sdílet prostřednictvím


Začínáme s dotazy na protokoly v protokolech služby Azure Monitor

Tento článek vysvětluje základy zápisu dotazů na protokoly v protokolech služby Azure Monitor, včetně postupu:

V případě potřeby článek obsahuje příklady dotazování dat pomocí jednoduchého režimu dotazovací jazyk Kusto (KQL) i Log Analytics.

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.

Výukové video

Poznámka:

Toto video ukazuje starší verzi uživatelského rozhraní, ale snímky obrazovky v tomto článku jsou aktuální a odrážejí aktuální uživatelské rozhraní.


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.

Strukturování 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 webu Azure Portal.

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ů.

Vyhledávací dotazy

Vyhledávací dotazy jsou méně strukturované. Nejlépe se hodí k vyhledání záznamů, které obsahují určitou hodnotu v libovolném sloupci určité tabulky.

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ů:

search in (SecurityEvent) "Cryptographic"
| take 10

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.

Omezit výsledky

Pomocí operátoru take můžete zobrazit malý vzorek záznamů vrácením až do zadaného počtu záznamů. Příklad:

SecurityEvent
| take 10

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 top operátorysort.

Řazení výsledků

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.

Sort

Pomocí operátoru sort můžete výsledky dotazu seřadit 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.

Desc a asc

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
    

Pokud chcete řadit vzestupně, zadejte asc.

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:

Snímek obrazovky znázorňující prvních 10 záznamů seřazených sestupně

Filtrování výsledků

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 != ""

Filtrování podle více podmínek

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.

Poznámka:

Pokud do dotazu zahrnete časový rozsah, výběr času se automaticky změní na Nastavit v dotazu. Pokud ručně změníte výběr času na jinou hodnotu, log Analytics použije menší ze dvou časových rozsahů.

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.

Snímek obrazovky znázorňující výběr času a jeho seznam příkazů časového rozsahu v režimu KQL

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

Můžete také definovat vlastní časový rozsah přidáním časového filtru do dotazu.

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

Zahrnutí nebo vyloučení sloupců ve výsledcích dotazu

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:

Snímek obrazovky se seznamem výsledků dotazu projekt

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)

Definování a použití vlastních polí

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)

Poznámka:

extend Operátor použijte pro ad hoc výpočty v dotazech. K transformaci nebo agregaci dat v době příjmu dat použijte transformacenebo souhrnná pravidla pro efektivnější dotazy.

Agregace a seskupení výsledků

Agregační skupiny řá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

Seskupení jedinečných kombinací hodnot ve více sloupcích

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

Provádění matematických nebo statistických výpočtů

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 == "DC01.na.contosohotels.com" 
| 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. Uděláte to tak, že přepnete do zobrazení Graf , otevřete boční panel Formátování grafu vpravo a vyberete Spojnicový graf pro typ grafu:

Snímek obrazovky znázorňující hodnoty paměti dotazu v průběhu času v režimu KQL

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.