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 protokolu upozornění

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.

Dotazy, které indikují problém, a ne výstrahu

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

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 searchunion 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 uniondotazu, 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
  1. 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 .

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

  2. 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
  1. 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 .

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

  3. 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
  1. 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 .

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

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