Kusto Query Language (KQL)’e Genel Bakış

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, istekleri resultCode 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 bir resultCode 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 bir outerMessage 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ümlerini name 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 bir name 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 bir result 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.

 

Related articles

Azure Application Insights Nedir?

Azure monitoring hizmetinin bir özelliği olan Azure Application Insights,...

Azure Veri Analizi: Power BI, Azure Data Lake ve Synapse Analytics ile Veri Yolculuğu

Günümüzde veri, işletmelerin birbirlerine karşı rekabet edebilmesi ve doğru...

Excel ile Veri Analizi Notları

Bu yazı, size Veri Analizi için Excel elektronik tablolarını...

Veri Analisti Hangi Araçlardan Faydalanabilir?

Excel ile veri analizi yazı dizisinin ilk postunda, mevcut...

Excel’de Formüller

Artık formüllerin temellerini öğrendiğinize, bazı temel hesaplamaları nasıl yapacağınızı...

Case Studies