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
SecurityEvent
tabulky, 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.
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.
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:
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í aTimeGenerated
původní sloupce. Activity
Zobrazí sloupec jakoEventDetails
.- Vytvořte nový sloupec s názvem
EventCode
. Funkcesubstring()
slouží k získání pouze prvních čtyř znaků zActivity
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 ObjectName
a 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 CounterName
Computer
a:
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 TimeGenerated
skupiny 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.
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.