Günlük araması uyarı sorgularını iyileştirme

Bu makalede, en iyi performansı elde etmek için günlük araması uyarılarının nasıl yazıldığı ve dönüştürüldüğü açıklanır. İyileştirilmiş sorgular, sık çalıştırılan uyarıların gecikme süresini ve yükünü azaltır.

Uyarı günlüğü sorgusu yazmaya başlama

Uyarı sorguları, Log Analytics'te sorunu gösteren günlük verilerini sorgulamaktan başlar. Neler keşfedebileceğinizi anlamak için bkz . Azure İzleyici Log Analytics'te sorguları kullanma. Kendi sorgunuzu yazmaya da başlayabilirsiniz.

Uyarıyı değil sorunu belirten sorgular

Uyarı akışı, sorunu belirten sonuçları bir uyarıya dönüştürmek için oluşturulmuştu. Örneğin, aşağıdaki gibi bir sorgu söz konusu olduğunda:

SecurityEvent
| where EventID == 4624

Kullanıcının amacı uyarı vermekse, bu olay türü gerçekleştiğinde uyarı mantığı sorguya eklenir count . Çalıştırılacak sorgu şu şekilde olacaktır:

SecurityEvent
| where EventID == 4624
| count

Sorguya uyarı mantığı eklemeye gerek yoktur ve bunu yapmak sorunlara bile neden olabilir. Yukarıdaki örnekte, sorgunuza eklerseniz count her zaman 1 değeriyle sonuçlanır çünkü uyarı hizmeti bunu countyaparcount.

Sınırdan kaçının ve işleçleri alın

take Ve limit sorgularında ve kullanılması, sonuçların zaman içinde tutarlı olmadığından uyarıların gecikme süresini ve yükünü artırabilir. Bunları yalnızca gerekirse kullanın.

Günlük sorgusu kısıtlamaları

Azure İzleyici'deki günlük sorguları bir tablo, searchveya union işleçle başlar.

Günlük araması uyarı kurallarıyla ilgili sorgular, sorgu performansını ve sonuçların ilgi düzeyini artıran net bir kapsam tanımlamak için her zaman bir tabloyla başlamalıdır. Uyarı kurallarındaki sorgular sık sık çalıştırılır. ve union kullanmaksearch, birden çok tabloda tarama gerektirdiğinden uyarıya gecikme süresi ekleyen aşırı ek yüke neden olabilir. Bu işleçler, uyarı hizmetinin sorguyu iyileştirme becerisini de azaltır.

Kaynaklar arası sorgular dışında veya işleçleri kullanan search günlük araması uyarı kurallarının oluşturulmasını veya union değiştirilmesini desteklemiyoruz.

Örneğin, aşağıdaki uyarı sorgusunun kapsamı SecurityEvent tablosu olarak belirlenmiştir ve belirli bir olay kimliğini arar. Sorgunun işlemesi gereken tek tablodur.

SecurityEvent
| where EventID == 4624

Kaynaklar arası sorguların kullandığı günlük araması uyarı kuralları bu değişiklikten etkilenmez çünkü çapraz kaynak sorguları, sorgu kapsamını belirli kaynaklarda sınırlayan bir türü unionkullanır. Aşağıdaki örnek geçerli bir günlük araması uyarı sorgusu olabilir:

union
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
workspace('00000000-0000-0000-0000-000000000003').Perf 

Not

Kaynaklar arası sorgular yeni scheduledQueryRules API'sinde desteklenir. Günlük araması uyarıları oluşturmak için eski Log Analytics Uyarı API'sini kullanmaya devam ediyorsanız, geçiş hakkında bilgi edinmek için bkz. Eski kural yönetimini geçerli Azure İzleyici Zamanlanmış Sorgu Kuralları API'sine yükseltme.

Örnekler

Aşağıdaki örnekler ve unionkullanan search günlük sorgularını içerir. Uyarı kurallarında kullanmak üzere bu sorguları değiştirmek için kullanabileceğiniz adımlar sağlar.

Örnek 1

kullanarak searchperformans bilgilerini alan aşağıdaki sorguyu kullanarak bir günlük araması uyarı kuralı oluşturmak istiyorsunuz:

search *
| where Type == 'Perf' and CounterName == '% Free Space'
| where CounterValue < 30
  1. Bu sorguyu değiştirmek için, özelliklerin ait olduğu tabloyu tanımlamak için aşağıdaki sorguyu kullanarak başlayın:

    search *
    | where CounterName == '% Free Space'
    | summarize by $table
    

    Bu sorgunun sonucu CounterName özelliğinin Perf tablosundan geldiğini gösterir.

  2. Uyarı kuralı için kullanacağınız aşağıdaki sorguyu oluşturmak için bu sonucu kullanın:

    Perf
    | where CounterName == '% Free Space'
    | where CounterValue < 30
    

Örnek 2

kullanarak searchperformans bilgilerini alan aşağıdaki sorguyu kullanarak bir günlük araması uyarı kuralı oluşturmak istiyorsunuz:

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. Bu sorguyu değiştirmek için, özelliklerin ait olduğu tabloyu tanımlamak için aşağıdaki sorguyu kullanarak başlayın:

    search ObjectName=="Memory" and CounterName=="% Committed Bytes In Use"
    | summarize by $table
    

    Bu sorgunun sonucunda ObjectName ve CounterName özelliklerinin Perf tablosundan geldiği gösterilir.

  2. Uyarı kuralı için kullanacağınız aşağıdaki sorguyu oluşturmak için bu sonucu kullanı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)
    

Örnek 3

Performans bilgilerini almak için ve searchunion kullanan aşağıdaki sorguyu kullanarak bir günlük araması uyarı kuralı oluşturmak istiyorsunuz:

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. Bu sorguyu değiştirmek için, sorgunun ilk bölümündeki özelliklerin ait olduğu tabloyu tanımlamak için aşağıdaki sorguyu kullanarak başlayın:

    search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
    | summarize by $table
    

    Bu sorgunun sonucu, tüm bu özelliklerin Performans tablosundan geldiğini gösterir.

  2. Hangi kaynak tablonun her satıra katkıda bulunduğunu belirlemek için komutuyla kullanın unionwithsource :

    union withsource=table *
    | where CounterName == "% Processor Utility"
    | summarize by table
    

    Bu sorgunun sonucu, bu özelliklerin Perf tablosundan da geldiğini gösterir.

  3. Uyarı kuralı için kullanacağınız aşağıdaki sorguyu oluşturmak için bu sonuçları kullanı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
    

Örnek 4

İki search sorgunun sonuçlarını birleştiren aşağıdaki sorguyu kullanarak günlük araması uyarı kuralı oluşturmak istiyorsunuz:

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. Sorguyu değiştirmek için, birleştirmenin sol tarafındaki özellikleri içeren tabloyu tanımlamak için aşağıdaki sorguyu kullanarak başlayın:

    search Type == 'SecurityEvent' and EventID == '4625'
    | summarize by $table
    

    Sonuç, birleştirmenin sol tarafındaki özelliklerin SecurityEvent tablosuna ait olduğunu gösterir.

  2. Birleştirmenin sağ tarafındaki özellikleri içeren tabloyu tanımlamak için aşağıdaki sorguyu kullanın:

    search in (Heartbeat) OSType == 'Windows'
    | summarize by $table
    

    Sonuç, birleştirmenin sağ tarafındaki özelliklerin Sinyal tablosuna ait olduğunu gösterir.

  3. Uyarı kuralı için kullanacağınız aşağıdaki sorguyu oluşturmak için bu sonuçları kullanı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
    

Sonraki adımlar

  • Azure İzleyici'de günlük araması uyarıları hakkında bilgi edinin.
  • Günlük sorguları hakkında bilgi edinin.