Optimalizace dotazů na upozornění prohledávání protokolu
Tento článek popisuje, jak zapsat a převést upozornění prohledávání protokolu, aby se dosáhlo optimálního výkonu. Optimalizované dotazy snižují latenci a zatížení upozornění, která se spouští často.
Zahájení zápisu dotazu na upozornění prohledávání protokolu
Dotazy na upozornění začínají dotazováním dat protokolu v Log Analytics , které indikují problém. Informace o tom, co můžete zjistit, najdete v tématu Použití dotazů ve službě Azure Monitor Log Analytics. Můžete také začít psát vlastní dotaz.
Ujistěte se, že váš dotaz identifikuje problém, a ne samotné upozornění.
Tok upozornění byl vytvořen tak, aby transformoval výsledky, které označují problém na výstrahu. Například v případě dotazu jako:
SecurityEvent
| where EventID == 4624
Pokud je záměr uživatele upozornit, když k tomuto typu události dojde, logika upozorňování se připojí count
k dotazu. Dotaz, který se spustí, bude:
SecurityEvent
| where EventID == 4624
| count
Do dotazu není potřeba přidávat logiku upozorňování a to může dokonce způsobit problémy. Pokud v předchozím příkladu zahrnete count
do dotazu, bude výsledkem vždy hodnota 1, protože služba upozornění provede count
count
.
Vyhněte se omezení a převzetí operátorů
Použití limit
a take
vkládání dotazů může zvýšit latenci a zatížení upozornění, protože výsledky nejsou v průběhu času konzistentní. Používejte je jenom v případě potřeby.
Omezení dotazů protokolu
Dotazy na protokoly ve službě Azure Monitor začínají tabulkou nebo search
union
operátorem.
Dotazy na pravidla upozornění prohledávání protokolu by měly vždy začínat tabulkou, která definuje jasný obor, což zlepšuje výkon dotazů a relevanci výsledků. Dotazy v pravidlech upozornění se spouštějí často. Použití search
a union
může vést k nadměrné režii, která zvyšuje latenci výstrahy, protože vyžaduje kontrolu napříč několika tabulkami. Tyto operátory také snižují schopnost služby upozorňování optimalizovat dotaz.
Nepodporujeme vytváření ani úpravy pravidel upozornění prohledávání protokolu, která používají search
nebo používají operátory union
, s výjimkou dotazů napříč prostředky.
Například následující dotaz pro upozorňování je vymezený na tabulku SecurityEvent a vyhledá konkrétní ID události. Je to jediná tabulka, kterou dotaz musí zpracovat.
SecurityEvent
| where EventID == 4624
Pravidla upozornění prohledávání protokolu využívající dotazy mezi prostředky nejsou touto změnou ovlivněna, protože dotazy mezi prostředky používají typ union
dotazu, který omezuje obor dotazu na konkrétní prostředky. Následující příklad by byl platným dotazem upozornění prohledávání protokolu:
union
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
workspace('00000000-0000-0000-0000-000000000003').Perf
Poznámka:
Dotazy mezi prostředky se podporují v novém naplánovaném rozhraní APIQueryRules. Pokud stále používáte starší rozhraní API upozornění Log Analytics k vytváření upozornění prohledávání protokolů, přečtěte si téma Upgrade starší správy pravidel na aktuální rozhraní API naplánovaných dotazů služby Azure Monitor a seznamte se s přepínáním.
Příklady
Následující příklady zahrnují dotazy protokolu, které používají search
a union
. Poskytují kroky, které můžete použít k úpravě těchto dotazů pro použití v pravidlech upozornění.
Příklad 1
Chcete vytvořit pravidlo upozornění prohledávání protokolu pomocí následujícího dotazu, který načte informace o výkonu pomocí search
:
search *
| where Type == 'Perf' and CounterName == '% Free Space'
| where CounterValue < 30
Pokud chcete tento dotaz upravit, začněte následujícím dotazem a identifikujte tabulku, do které vlastnosti patří:
search * | where CounterName == '% Free Space' | summarize by $table
Výsledek tohoto dotazu by ukázal, že vlastnost CounterName pochází z tabulky Perf .
Pomocí tohoto výsledku vytvořte následující dotaz, který byste použili pro pravidlo upozornění:
Perf | where CounterName == '% Free Space' | where CounterValue < 30
Příklad 2
Chcete vytvořit pravidlo upozornění prohledávání protokolu pomocí následujícího dotazu, který načte informace o výkonu pomocí search
:
search ObjectName =="Memory" and CounterName=="% Committed Bytes In Use"
| summarize Avg_Memory_Usage =avg(CounterValue) by Computer
| where Avg_Memory_Usage between(90 .. 95)
Pokud chcete tento dotaz upravit, začněte následujícím dotazem a identifikujte tabulku, do které vlastnosti patří:
search ObjectName=="Memory" and CounterName=="% Committed Bytes In Use" | summarize by $table
Výsledek tohoto dotazu by ukázal, že vlastnosti ObjectName a CounterName pocházejí z tabulky Perf .
Pomocí tohoto výsledku vytvořte následující dotaz, který byste použili pro pravidlo upozornění:
Perf | where ObjectName =="Memory" and CounterName=="% Committed Bytes In Use" | summarize Avg_Memory_Usage=avg(CounterValue) by Computer | where Avg_Memory_Usage between(90 .. 95)
Příklad 3
Chcete vytvořit pravidlo upozornění prohledávání protokolu pomocí následujícího dotazu, který používá informace search
o výkonu a union
načítá je:
search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
| where Computer !in (
union *
| where CounterName == "% Processor Utility"
| summarize by Computer)
| summarize Avg_Idle_Time = avg(CounterValue) by Computer
Pokud chcete tento dotaz upravit, začněte následujícím dotazem a identifikujte tabulku, do které patří vlastnosti v první části dotazu:
search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total") | summarize by $table
Výsledek tohoto dotazu by ukázal, že všechny tyto vlastnosti pocházejí z tabulky Perf .
withsource
Pomocíunion
příkazu identifikujte, která zdrojová tabulka přispěla každým řádkem:union withsource=table * | where CounterName == "% Processor Utility" | summarize by table
Výsledek tohoto dotazu by ukázal, že tyto vlastnosti pocházejí také z tabulky Perf .
Pomocí těchto výsledků vytvořte následující dotaz, který byste použili pro pravidlo upozornění:
Perf | where ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total" | where Computer !in ( (Perf | where CounterName == "% Processor Utility" | summarize by Computer)) | summarize Avg_Idle_Time = avg(CounterValue) by Computer
Příklad 4
Chcete vytvořit pravidlo upozornění prohledávání protokolu pomocí následujícího dotazu, který spojí výsledky dvou search
dotazů:
search Type == 'SecurityEvent' and EventID == '4625'
| summarize by Computer, Hour = bin(TimeGenerated, 1h)
| join kind = leftouter (
search in (Heartbeat) OSType == 'Windows'
| summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h)
| project Hour , Computer
) on Hour
Pokud chcete upravit dotaz, začněte následujícím dotazem a identifikujte tabulku obsahující vlastnosti na levé straně spojení:
search Type == 'SecurityEvent' and EventID == '4625' | summarize by $table
Výsledek označuje, že vlastnosti na levé straně spojení patří do tabulky SecurityEvent .
Pomocí následujícího dotazu identifikujte tabulku, která obsahuje vlastnosti na pravé straně spojení:
search in (Heartbeat) OSType == 'Windows' | summarize by $table
Výsledek označuje, že vlastnosti na pravé straně spojení patří do tabulky Prezenčních signálů .
Pomocí těchto výsledků vytvořte následující dotaz, který byste použili pro pravidlo upozornění:
SecurityEvent | where EventID == '4625' | summarize by Computer, Hour = bin(TimeGenerated, 1h) | join kind = leftouter ( Heartbeat | where OSType == 'Windows' | summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h) | project Hour , Computer ) on Hour
Další kroky
- Seznamte se s upozorněními prohledávání protokolů ve službě Azure Monitor.
- Seznamte se s dotazy na protokoly.