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 count
yaparcount
.
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, search
veya 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ü union
kullanı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 union
kullanan 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 search
performans 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
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.
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 search
performans 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)
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.
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 search
union
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
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.
Hangi kaynak tablonun her satıra katkıda bulunduğunu belirlemek için komutuyla kullanın
union
withsource
: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 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
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.
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 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