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

Bu makalede, en iyi performansı elde etmek için Günlük Uyarısı sorgularını yazma ve dönüştürme açıklanmıştır. İyileştirilmiş sorgular, sık sık çalıştırılmış olan 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 sorgulamadan başlar. Neler keşfedebilirsiniz anlamak için uyarı sorgusu örnekleri konusunu kullanabilirsiniz. Kendi sorgunuz yazmaya da başlamanız gerekir.

Uyarıyı değil sorunu gösteren sorgular

Uyarı akışı, sorunu belirten sonuçları bir uyarıya dönüştürmek için inşa edilmiştir. Örneğin, aşağıdaki gibi bir sorgu durumunda:

SecurityEvent
| where EventID == 4624

Kullanıcının amacı uyarı amaçlı ise, bu olay türü olduğunda, uyarı mantığı count sorguya eklenir. Çalıştıracak sorgu şöyle olur:

SecurityEvent
| where EventID == 4624
| count

Sorguya uyarı mantığı eklemeye gerek yoktur ve bunu yapmak bile soruna neden olabilir. Yukarıdaki örnekte, sorgunuza dahil ettiy olursanız uyarı hizmeti tarafından çalıştırılana kadar her zaman count 1 değeriyle count sonuçlandır. count

ve limit take işleçlerini önleme

Sorgularda ve kullanma, sonuçların zaman içinde tutarlı olması nedeniyle uyarıların limit gecikme süresini ve yükünü take artırabilir. Bunu yalnızca gerekirse kullanmak tercih edilir.

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

Azure izleyici 'de günlük sorguları bir tablo, search ya da union işleçle başlar.

Günlük uyarı kuralları sorguları, hem sorgu performansını hem de sonuçların uygunluğunu artıran bir açık kapsam tanımlamak için her zaman bir tabloyla başlamalıdır. Uyarı kurallarındaki sorgular sıklıkla çalışır; bu nedenle, ve ' ı kullanarak search union birden çok tablo üzerinde tarama gerektirdiği için, uyarıya gecikme süresini fazla yüke neden olabilir. Bu işleçler ayrıca uyarı hizmeti 'nin sorguyu en uygun hale getirme yeteneğini de azaltır.

Veya işleçlerini kullanan günlük uyarı kuralları oluşturma veya değiştirme desteklememiz search union , çapraz kaynak sorgular için bekleniyor.

Örneğin, aşağıdaki uyarı sorgusu securityevent tablosunun kapsamına alınır ve belırlı olay kimliğini arar. Sorgunun işlemesi gereken tek tablo.

SecurityEvent
| where EventID == 4624

Çapraz kaynak sorguları, union sorgu kapsamını belirli kaynaklarla sınırlayan bir türü kullandığından, çapraz kaynak sorgularını kullanan günlük uyarı kuralları bu değişiklikten etkilenmez. Aşağıdaki örnek geçerli günlük uyarı sorgusu olacaktır:

union
app('Contoso-app1').requests,
app('Contoso-app2').requests,
workspace('Contoso-workspace1').Perf 

Not

Yeni Scheduledqueryrules API'sinde çapraz kaynak sorguları desteklenir. Günlük uyarıları oluşturmak için eski Log Analytics uyarı API 'sini kullanmaya devam ediyorsanız, buradangeçiş yapmayı öğrenebilirsiniz.

Örnekler

Aşağıdaki örnekler, ve kullanan günlük sorgularını içerir search union ve bu sorguları uyarı kurallarında kullanılmak üzere değiştirmek için kullanabileceğiniz adımları sağlar.

Örnek 1

Kullanarak performans bilgilerini alan aşağıdaki sorguyu kullanarak bir günlük uyarı kuralı oluşturmak istersiniz search :

search *
| where Type == 'Perf' and CounterName == '% Free Space'
| where CounterValue < 30

Bu sorguyu değiştirmek için, özelliklerin ait olduğu tabloyu tanımlamak üzere 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.

Bu sonucu, uyarı kuralı için kullanacağınız aşağıdaki sorguyu oluşturmak için kullanabilirsiniz:

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

Örnek 2

Kullanarak performans bilgilerini alan aşağıdaki sorguyu kullanarak bir günlük uyarı kuralı oluşturmak istersiniz 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)  

Bu sorguyu değiştirmek için, özelliklerin ait olduğu tabloyu tanımlamak üzere aşağıdaki sorguyu kullanarak başlayalım:

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

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

Uyarı kuralı için aşağıdaki sorguyu oluşturmak üzere bu sonucu kullanabilirsiniz:

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 kullanan aşağıdaki sorguyu kullanarak bir günlük search union uyarısı kuralı oluşturmak istediğiniz:

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

Bu sorguyu değiştirmek için, sorgunun ilk bölümünde yer alan özelliklerin ait olduğu tabloyu tanımlamak için aşağıdaki sorguyu kullanarak başlayabilirsiniz:

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

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

Şimdi union komutuyla withsource komutunu kullanarak her satıra hangi kaynak tablonun katkıda olduğunu tanımlayabilirsiniz.

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

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

Uyarı kuralı için aşağıdaki sorguyu oluşturmak üzere bu sonuçları kullanabilirsiniz:

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 sorgunun sonuçlarını birleyen aşağıdaki sorguyu kullanarak bir günlük uyarısı kuralı oluşturmak search istediğiniz:

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

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şlayabilirsiniz:

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

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

Şimdi 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.

Uyarı kuralı için aşağıdaki sorguyu oluşturmak üzere bu sonuçları kullanabilirsiniz:

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