Kayıt arama uyarı sorgularını optimize etme

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.

Günlük araması uyarı 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.

Sorgunuzun uyarının kendisini değil sorunu tanımladığından emin olun

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. Önceki örnekte, sorgunuza count eklerseniz, her zaman 1 değeri elde edilir çünkü uyarı hizmeti count gerçekletirir count.

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

limit ve take sorgularda kullanılması, sonuçların zamanla tutarlı olmaması nedeniyle uyarıların gecikme süresini ve yükünü artırabilir. Bunları yalnızca gerekirse kullanın.

Kayıt sorgusu kısıtlamaları

Azure İzleyici'deki günlük sorguları bir tablo, search, veya union işleçle başlamaktadır.

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. search ve union kullanmak, birden çok tabloda tarama gerektiğ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 search veya union işleçlerini kullanan günlük araması uyarı kurallarının oluşturulmasını veya 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 kullanan günlük araması uyarı kuralları, bu değişiklikten etkilenmez çünkü kaynaklar arası sorgular, sorgu kapsamını belirli kaynaklarla sınırlayan bir tür union kullanır. Aşağıdaki örnek geçerli bir log arama 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. Hala eski Log Analytics Uyarı API'sini günlük araması uyarıları oluşturmak için kullanıyorsanız, geçiş hakkında bilgi edinmek için Eski kural yönetimini geçerli Azure İzleyici Zamanlanmış Sorgu Kuralları API'sine yükseltme sayfasına bakın.

Örnekler

Aşağıdaki örnekler, search ve union kullanan 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

Aşağıdaki sorguyu kullanarak search üzerinden performans bilgilerini alan 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

Aşağıdaki sorguyu kullanarak search üzerinden performans bilgilerini alan 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

Aşağıdaki sorguyu kullanarak hem search hem de union kullanarak performans bilgilerini almak için 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. union ve withsource komutunu kullanarak hangi kaynak tablonun her satıra katkıda bulunduğunu belirleyin.

    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 Heartbeat 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