Kusto Query Language (KQL), Microsoft tarafından geliştirilen ve özellikle büyük veri kümeleri üzerinde hızlı ve verimli sorgulama yapmak için tasarlanmış güçlü bir sorgu dilidir. Bu blog yazısında, KQL’in kim tarafından ve nasıl oluşturulduğunu, neden gerekli olduğunu, temel parametreleri ve sorgu şekillerini, ve nerelerde kullanıldığını anlatmaya çalışacağım. Aslında Azure tarafında filtrelerle de ihtiyaçlarınızı çözümleyebildiğiniz gibi arama sorgularınızı daha detaylandırmak isterseniz KSQL ile detaylandırabilirsiniz.
KQL’in Tarihi ve Oluşumu
KQL, Microsoft tarafından büyük veri analitiği için geliştirilmiş olan Azure Data Explorer’ın bir parçası olarak ortaya çıkmıştır. KQL’in geliştirilme süreci, büyük veri kümelerinin hızlı ve etkili bir şekilde analiz edilmesi ihtiyacından doğmuştur. Microsoft, log verilerini, telemetri verilerini ve diğer büyük veri setlerini işlemek için daha verimli bir çözüm arayışındayken, KQL bu ihtiyacı karşılamak üzere geliştirilmiştir.
KQL Neden Gerekli?
Büyük veri analitiği, modern uygulamaların performansını izlemek, kullanıcı davranışlarını anlamak ve iş süreçlerini optimize etmek için kritik öneme sahiptir. Geleneksel SQL dillerinin performans ve kullanım kolaylığı açısından yetersiz kaldığı durumlarda, KQL’in esnek ve güçlü yapısı devreye girer. KQL, yüksek performanslı veri sorgulama yetenekleri ile büyük veri kümelerini hızlı bir şekilde analiz etmenizi sağlar.
KQL’in Kullanım Alanları
KQL, özellikle aşağıdaki alanlarda yaygın olarak kullanılmaktadır:
1. Log Analizi
Azure Monitor ve Azure Log Analytics kullanarak sistem loglarını analiz edebilir, performans sorunlarını ve hata kaynaklarını tespit edebilirsiniz.
2. Uygulama İzleme
Azure Application Insights ile uygulama performansını izleyebilir, kullanıcı davranışlarını analiz edebilir ve uygulama hatalarını giderebilirsiniz.
3. Güvenlik İzleme
Azure Sentinel kullanarak güvenlik olaylarını izleyebilir, tehditleri tespit edebilir ve güvenlik analizleri yapabilirsiniz.
4. Büyük Veri Analitiği
Azure Data Explorer ile büyük veri kümelerini analiz edebilir, verilerinizi görselleştirerek anlamlı içgörüler elde edebilirsiniz.
KQL’in Temel Özellikleri ve Sorgu Şekilleri
1. take
KQL, veri sorgulamalarını basit ve anlaşılır hale getirir. Örneğin, belirli bir tablodaki ilk 10 satırı sorgulamak için şu sorgu kullanılabilir:
StormEvents
| take 10
StormEvents
| take 10
2. where
Veri kümesindeki belirli kriterlere göre filtreleme yapabilirsiniz:
StormEvents
| where State == “Texas”
| take 10
3. summarize
Verileri belirli sütunlara göre gruplandırabilir ve toplama işlemleri yapabilirsiniz:
StormEvents
| summarize Count = count() by State
4. project
Belirli sütunları seçmek için `project` ifadesini kullanabilirsiniz:
StormEvents
| project StartTime, EndTime, EventType
5. extend
Hesaplanan sütunları eklemek için kullanılır.
StormEvents
| extend Duration = EndTime – StartTime
6. order by
Verileri belirli sütunlara göre sıralar.
StormEvents
| order by StartTime desc
7. join
İki tabloyu birleştirmek için kullanılır.
StormEvents
| join kind=inner (OtherTable) on commonColumn
8. count
Veri kümesindeki toplam satır sayısını döndürür.
StormEvents
| count
9. distinct
Belirli sütunlar için benzersiz değerleri döndürür.
StormEvents
| distinct State
Kusto Query Language (KQL), büyük veri analizi için geliştirilmiş güçlü ve esnek bir sorgu dilidir. Microsoft tarafından oluşturulan KQL, log analizi, uygulama izleme, güvenlik izleme ve büyük veri analitiği gibi alanlarda yaygın olarak kullanılmaktadır. Basit ve anlaşılır sorgu yapısı sayesinde, KQL ile büyük veri kümeleri üzerinde hızlı ve verimli analizler yapabilirsiniz. KQL’i öğrenerek, veri analitiği becerilerinizi bir üst seviyeye taşıyabilir ve iş süreçlerinizi optimize edebilirsiniz.Bu yazıdaki bahsedilen komutları kendiniz de denemek istiyorsanız buradan içinde örnek veri olan tablolardan kullanabilirsiniz.
Kullanılan Veri Tabloları
Kusto Query Language (KQL) kullanarak Azure Application Insights içindeki verileri analiz ederken, belirli veri tabloları (başlıklar) kullanılır. Bu başlıklar, uygulamanızdan toplanan çeşitli veri türlerini temsil eder.
- Traces: Uygulamanızdan toplanan izleme ve günlük verilerini içerir. Uygulama içindeki belirli olayları veya mesajları izlemek, hata ayıklama ve performans analizi yapmak için kullanılır.
– Örnek Sorgu:
traces
| where message contains “error”
| take 10
Bu Kusto Query Language (KQL) sorgusu, traces
tablosunda bulunan ve mesajında “error” kelimesini içeren ilk 10 kaydı döndürür.
Sorgu Açıklaması
traces
: Bu tablo, uygulamanızın izleme ve günlük (log) verilerini içerir. Bu, uygulamanızın içindeki olayların, hata mesajlarının ve diğer önemli logların kaydedildiği yerdir.where message contains "error"
: Bu kısım,message
sütununda “error” kelimesini içeren kayıtları filtreler. Bu, hata mesajlarını içeren log kayıtlarını seçer.take 10
: Bu kısım, filtrelenmiş sonuçlardan ilk 10 kaydı döndürür. Bu, sorgunun sadece 10 kayıtla sınırlandırılmasını sağlar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
timestamp | message | severityLevel | otherColumns… |
---|---|---|---|
2024-06-05T12:00:00Z | Error: Unable to connect to database | Error | … |
2024-06-05T12:05:00Z | Error: Null reference exception | Error | … |
2024-06-05T12:10:00Z | Error: Timeout occurred | Error | … |
… | … | … | … |
Detaylı Açıklama
timestamp
: Log kaydının oluşturulduğu tarih ve saat.message
: Log kaydının mesajı. Bu mesaj, “error” kelimesini içerir ve hata ile ilgili detayları sağlar.severityLevel
: Log kaydının ciddiyet seviyesini belirten bir sütun. Örneğin, “Error”, “Warning”, “Information” gibi değerler alabilir.otherColumns
:traces
tablosunda bulunan diğer sütunlar. Bu sütunlar uygulamanıza özgü ek bilgiler içerebilir.
Bu sorgu, hata mesajlarını hızlı bir şekilde tespit etmek ve incelemek için kullanışlıdır. Uygulamanızda meydana gelen hataların hızlı bir özetini almak ve bu hataları daha ayrıntılı bir şekilde incelemek için bu tür sorguları kullanabilirsiniz.
- Requests:Uygulamanıza yapılan HTTP isteklerini içerir. Uygulamanıza yapılan isteklerin sayısını, yanıt sürelerini ve sonuçlarını analiz etmek için kullanılır.
– Örnek Sorgu:
requests
| where timestamp >= ago(1h)
| summarize count() by resultCode
Bu Kusto Query Language (KQL) sorgusu, requests
tablosunda son bir saat içerisindeki HTTP isteklerini sonuç koduna (resultCode
) göre gruplar ve her sonuç kodunun sayısını özetler.
Sorgu Açıklaması
requests
: Bu tablo, uygulamanıza yapılan HTTP isteklerini içerir. Her bir istek hakkında detaylı bilgiler bulunur.where timestamp >= ago(1h)
: Bu kısım, sorgunun son bir saat içerisindeki kayıtlarla sınırlandırılmasını sağlar.summarize count() by resultCode
: Bu kısım, istekleriresultCode
sütununa göre gruplar ve her grup için istek sayısını hesaplar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
resultCode | count_ |
---|---|
200 | 150 |
404 | 25 |
500 | 5 |
302 | 10 |
Detaylı Açıklama
resultCode
: HTTP yanıt kodunu belirtir. Bu kodlar, istemcinin isteğinin başarıyla tamamlanıp tamamlanmadığını veya bir hata meydana gelip gelmediğini gösterir.200
: OK – İstek başarıyla tamamlandı.404
: Not Found – İstenen kaynak bulunamadı.500
: Internal Server Error – Sunucuda bir hata meydana geldi.302
: Found – Geçici olarak başka bir URI’ye yönlendirme.
count_
: Her birresultCode
için istek sayısını gösterir. Örneğin,resultCode
200 olan 150 istek yapılmış.
Kullanım Alanları
Bu sorgu, uygulamanızın HTTP isteklerinin dağılımını ve hangi sonuç kodlarının daha sık meydana geldiğini anlamak için kullanılır. Örneğin:
- Başarılı isteklerin (
200
) sayısını ve oranını belirlemek. - Hata oranlarını (
404
,500
gibi) izlemek ve yüksek hata oranlarını tespit etmek. - Yönlendirme ve diğer özel yanıtların (
302
gibi) sıklığını görmek.
Bu bilgiler, uygulamanızın performansını ve güvenilirliğini değerlendirmek ve olası sorunları tespit etmek için kullanışlıdır.
- Dependencies: Uygulamanızın diğer hizmetlere veya veritabanlarına yaptığı çağrıları içerir. Bağımlılıkların performansını izlemek ve sorunları tespit etmek için kullanılır.
– Örnek Sorgu:
dependencies
| where timestamp >= ago(1h)
| summarize avg(duration) by target
Bu Kusto Query Language (KQL) sorgusu, dependencies
tablosunda son bir saat içerisinde yapılan bağımlılık çağrılarının ortalama süresini (duration) hedefe (target) göre özetler. Sorgunun çıktısı, her hedef (target) için ortalama çağrı süresini gösteren bir tablo olacaktır.
Sorgu Açıklaması
dependencies
: Bu tablo, uygulamanızın dış hizmetlere, veritabanlarına veya diğer kaynaklara yaptığı bağımlılık çağrılarını içerir.where timestamp >= ago(1h)
: Bu kısım, sorgunun son bir saat içerisindeki kayıtlarla sınırlandırılmasını sağlar.summarize avg(duration) by target
: Bu kısım, bağımlılık çağrılarının süresinin (duration) hedefe (target) göre gruplandırılarak ortalama değerini hesaplar.
Örnek Çıktı
target | avg_duration |
---|---|
sqlserver.database | 120.5 ms |
redis.cache | 45.8 ms |
external.api | 200.3 ms |
Detaylı Açıklama
target
: Bağımlılık çağrısının hedefi. Bu, uygulamanızın çağrı yaptığı dış hizmet veya kaynak olabilir (örneğin, SQL Server veritabanı, Redis önbelleği, dış bir API vb.).avg_duration
: Belirtilen hedefe yapılan bağımlılık çağrılarının ortalama süresi. Bu değer milisaniye (ms) cinsindendir ve çağrıların ne kadar sürdüğünü gösterir.
Bu sorgu, uygulamanızın çeşitli bağımlılıklarının performansını izlemek için kullanılır. Hangi bağımlılıkların daha fazla zaman aldığını belirleyerek, potansiyel performans iyileştirme alanlarını tespit edebilirsiniz.
- Exceptions: Uygulamanızda meydana gelen istisnaları (hataları) içerir. Hata analizi ve sorun giderme için kullanılır.
– Örnek Sorgu:
exceptions
| where timestamp >= ago(1h)
| summarize count() by outerMessage
Bu Kusto Query Language (KQL) sorgusu, exceptions
tablosunda son bir saat içerisinde meydana gelen istisnaları (exceptions) outerMessage
sütununa göre gruplar ve her bir outerMessage
değeri için istisna sayısını özetler.
Sorgu Açıklaması
exceptions
: Bu tablo, uygulamanızda meydana gelen istisnaları (hataları) içerir.where timestamp >= ago(1h)
: Bu kısım, sorgunun son bir saat içerisindeki kayıtlarla sınırlandırılmasını sağlar.summarize count() by outerMessage
: Bu kısım, istisnalarıouterMessage
sütununa göre gruplar ve her grup için istisna sayısını hesaplar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
outerMessage | count_ |
---|---|
NullReferenceException | 15 |
SqlException: Timeout expired | 8 |
IndexOutOfRangeException | 5 |
InvalidOperationException | 10 |
Detaylı Açıklama
outerMessage
: İstisnanın dış mesajını belirtir. Bu, hata mesajının genellikle kullanıcıya veya geliştiriciye yönelik açıklayıcı kısmıdır.count_
: Her birouterMessage
değeri için meydana gelen istisna sayısını gösterir. Örneğin,NullReferenceException
hatası son bir saat içinde 15 kez meydana gelmiş.
Kullanım Alanları
Bu sorgu, uygulamanızda meydana gelen istisnaların türlerini ve sıklıklarını analiz etmek için kullanılır. Örneğin:
- En yaygın hataları ve bunların ne kadar sık meydana geldiğini belirlemek.
- Uygulamanın belirli bölümlerinde veya işlevlerinde hangi hataların daha sık meydana geldiğini tespit etmek.
- Potansiyel performans ve güvenilirlik sorunlarını tespit ederek çözüm geliştirmek.
Bu bilgiler, uygulamanızın hata yönetimi ve iyileştirme süreçlerini planlamak ve uygulamanızın genel sağlığını değerlendirmek için kritiktir.
- PageViews: Web uygulamanızdaki sayfa görünümlerini içerir. Kullanıcıların hangi sayfaları ziyaret ettiğini ve sayfa görüntüleme sıklığını analiz etmek için kullanılır.
– Örnek Sorgu:
pageViews
| summarize count() by name
Bu Kusto Query Language (KQL) sorgusu, pageViews
tablosundaki sayfa görünümlerini name
sütununa göre gruplar ve her bir sayfa adı (name) için sayfa görünümlerinin sayısını özetler. Ancak, sorguda bir yazım hatası var: summrize
yerine summarize
olmalıdır.
Sorgu Açıklaması
pageViews
: Bu tablo, web uygulamanızdaki sayfa görünümlerini içerir. Her sayfa görüntüleme olayı hakkında bilgi sağlar.summarize count() by name
: Bu kısım, sayfa görünümlerininame
sütununa göre gruplar ve her grup için sayfa görünümlerinin sayısını hesaplar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
name | count_ |
---|---|
HomePage | 150 |
ContactUsPage | 30 |
AboutUsPage | 25 |
ProductDetailsPage | 45 |
Detaylı Açıklama
name
: Görüntülenen sayfanın adını belirtir.count_
: Her bir sayfa adı için toplam sayfa görünümlerinin sayısını gösterir.
- CustomEvents: Uygulamanızdan özel olarak tanımlanmış olayları içerir. Özel olayları izlemek ve analiz etmek için kullanılır.
– Örnek Sorgu:
customEvents
| summarize count() by name
Bu Kusto Query Language (KQL) sorgusu, customEvents
tablosundaki özel olayları (custom events) name
sütununa göre gruplar ve her bir name
değeri için olayların sayısını özetler.
Sorgu Açıklaması
customEvents
: Bu tablo, uygulamanızda tanımladığınız özel olayları içerir. Özel olaylar, uygulamanızın belirli eylemlerini veya önemli olaylarını izlemek için kullanılır.summarize count() by name
: Bu kısım, özel olaylarıname
sütununa göre gruplar ve her grup için olay sayısını hesaplar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
name | count_ |
---|---|
ButtonClick | 150 |
UserLogin | 45 |
PurchaseCompleted | 25 |
PageView | 75 |
Detaylı Açıklama
name
: Özel olayın adını belirtir. Bu, uygulamanızda izlemek istediğiniz belirli bir eylem veya olayı temsil eder.count_
: Her birname
değeri için toplam olay sayısını gösterir. Örneğin,ButtonClick
adlı olay 150 kez meydana gelmiş.
- AvailabilityResults: Uygulamanızın kullanılabilirlik testlerinin sonuçlarını içerir. Uygulamanızın erişilebilirliğini izlemek için kullanılır.
– Örnek Sorgu:
availabilityResults
| summarize count() by result
Bu Kusto Query Language (KQL) sorgusu, availabilityResults
tablosundaki kullanılabilirlik testlerinin sonuçlarını result
sütununa göre gruplar ve her bir result
değeri için test sayısını özetler.
Sorgu Açıklaması
availabilityResults
: Bu tablo, uygulamanızın kullanılabilirlik (availability) testlerinin sonuçlarını içerir. Bu testler, uygulamanızın belirli zamanlarda erişilebilir olup olmadığını kontrol eder.summarize count() by result
: Bu kısım, kullanılabilirlik testlerinin sonuçlarınıresult
sütununa göre gruplar ve her grup için test sayısını hesaplar.
Örnek Çıktı
Örnek bir çıktı aşağıdaki gibi görünebilir:
result | count_ |
---|---|
Passed | 150 |
Failed | 25 |
Detaylı Açıklama
result
: Kullanılabilirlik testinin sonucunu belirtir. Genellikle “Passed” veya “Failed” gibi değerler alır. “Passed”, testin başarılı olduğunu, “Failed” ise testin başarısız olduğunu gösterir.count_
: Her birresult
değeri için toplam test sayısını gösterir. Örneğin, “Passed” sonucu 150 kez meydana gelmiş.
- PerformanceCounters: Uygulamanızın çalıştığı sunucunun performans sayaçlarını içerir. Sunucu performansını izlemek için kullanılır (örneğin, CPU, bellek kullanımı).
– Örnek Sorgu:
performanceCounters
| where name == “% Processor Time”
| summarize avg(value) by bin(timestamp, 5m)
BrowserTimings: Web uygulamanızın tarayıcıda yüklenme sürelerini içerir. Kullanıcıların sayfa yüklenme deneyimini analiz etmek için kullanılır.
– Örnek Sorgu:
browserTimings
| summarize avg(totalDuration) by name
- AppMetrics: Uygulamanızdan toplanan çeşitli metrikleri içerir. Özel metriklerin izlenmesi ve analizi için kullanılır.
– Örnek Sorgu:
appMetrics
| summarize avg(value) by name - AppTraces: Uygulama izleme verilerini içerir, `traces` tablosuna benzer ancak daha ayrıntılı olabilir. Daha spesifik izleme senaryoları için kullanılır.
- CustomMetrics: Özel olarak tanımlanmış metrikleri içerir. Uygulamanızın belirli performans veya kullanım ölçümlerini izlemek için kullanılır.
– Örnek Sorgu:
customMetrics
| summarize avg(value) by name
Events: Uygulama içi olayları içerir. Belirli olayları ve bunların tetiklenme sıklığını analiz etmek için kullanılır.
– Örnek Sorgu:
events
| summarize count() by name
- Heartbeat :Uygulamanın durumunu izlemek için periyodik olarak gönderilen sinyalleri içerir. Uygulamanın çalışma durumunu ve sağlığını izlemek için kullanılır.
– Örnek Sorgu:
Bu başlıklar, Azure Application Insights içindeki farklı veri türlerini ve bunların analiz edilmesi gereken farklı senaryoları temsil eder. Bu tablo başlıklarını kullanarak, uygulamanızın performansını, sağlığını, kullanıcı davranışlarını ve daha birçok önemli metriği detaylı bir şekilde analiz edebilirsiniz.