Microsoft Azure Stream Analytics Job’ının Oluşturulması (Demo)

Bir önceki yazımızda Microsoft Azure Event Hubs servisi ile uygulama tarafından tıklamalar ile gelen verilerin elde edilmesi kısmını ele almıştık. Uygulamamızın devamında Microsoft Azure Event Hubs ile alınan verilerin nasıl anlık olarak analiz edilebileceğini göreceğiz.

Bu aşamaya kadar uygulamadan gelen verileri artık JSON formatında Event Hub’da topladığımıza göre artık gelen verileri analiz etmek için Microsoft Azure Stream Analytics servisini ayağa kaldırabiliriz. Stream Analytics servisini oluşturmak için Azure portal üzerinde sayfanın alt kısmında bulunan New sekmesine tıklayarak Data Services butonuna tıklanır. Açılan sekmeden Stream Analytics seçilerek ve Quick Create kısmında ilgili servisi oluşturmak için bir job tanımlanır. Burada “Job Name” kısmında ilgili Stream Analytics job’ına bir isim verilir. Ardından bu job’ın hangi bölgede çalıştırılacağı seçilir. Burada dikkat edilmesi gereken noktalardan birisi stream olarak akan veriyi tutmak için oluşturduğumuz Event Hub ile bunu analiz etmek için oluşturduğumuz Stream Analytics servislerinin aynı bölgede oluşturulması bize avantaj sağlayacaktır. Farklı bölgelerde oluşturulan servisler için bölgeler arası veri transferi için ek ücret ödemesi gerekeceği unutulmamalıdır.

Bu kısımda oluşturulan Stream Analytics job’ını monitör etmek için saklanması gereken log bilgilerini saklayabileceğimiz bir storage bilgisi girmemiz gerekmektedir. Daha önce tanımlı olan bir Blob Storage hesabı yoksa burada yeni bir storage account’u da oluşturulabilir. Oluşturulan Azure Blob Storage hesabına bir isim girilir.

stream analytics job olusturma

Gerekli bilgiler sağlandıktan sonra sayfanın sağ alt köşesinde bulunan “Create Stream Analytics Job” butonuna tıklanarak ilgili job oluşturulmuş olur. Oluşturulan job’ı başlatmak için sayfanın altında bulunan Start butonu bu aşamada disabled olarak gelmektedir. Bunun nedeni, henüz oluşturulan job için verileri nereden alacağımızı belirteceğimiz input, gelen veri üzerinde işlem yapmamızı sağlayacak Query ve sorgunun sonucunda üretilecek olan verileri aktaracağımız output seçeneklerini set etmemiş olmamızdır.

Oluşturulan job üzerine tıklatıldığında veri akışını izleyebileceğimiz Dashborad, operasyonel logları izleyebileceğimiz Monitor, veri girişini sağlayabileceğimiz Input, gelen verileri sorgulayabileceğimiz Query, Azure Machine Learning ile entegre edebileceğimiz Functions (yazım aşamasında henüz preview konumunda bulunmaktadır), çıktıları göndermek istediğimiz seçenekleri belirleyebileceğimiz Output, Stream Analytics servisinin ölçeklendirilebileceği Scale ve gerekli ayarların yapılabileceği Configure tabları bulunmaktadır. Ayrıca sayfanın sağ tarafında da yine job’a ait temel bilgiler yer almaktadır.

  • Input Oluşturma:

Oluşturulan Stream Analytics job’ı için verilerin nereden geleceğini set etmek için Input sekmesine tıklayarak “Add an Input” seçeneği seçilir. Burada gelen verinin stream olarak akan bir veri mi olduğu yoksa referans bir veri mi olduğu seçilebilir.

stream analytics job input

Bizim örneğimizde uygulamadan stream olarak gelecek olan akan bir veri olduğu için Data Stream seçeneği seçilir. Ardından stream olarak gelen veri için hangi kaynaktan veri geldiği seçilecektir. Event Hub, Blob Storage ve IoT Hub (Henüz preview modunda) buradaki seçeneklerdir.

stream analytics job input2

Bizim uygulamamızdan üretilen stream veri Event Hub’da toplandığından burada Event Hub seçeneğini işaretleyerek bir sonraki aşamaya geçilir.

stream analytics job input3

Gelen ekranda sorgulamak için kullanacağımız tabloya ait isim olacak olan Input Alias kısmına akılda kalıcı bir isim verilmelidir. Query kısmında SQL sorgusu yazılırken buradaki verilen isim tablo adı yerine kullanılacaktır. Örneğimizde appdata ismi verilmiştir. Burada ayrıca kullanılan hesap için Subscription, Namespace, Event Hub Name, Policy Name ve Consumer Group seçenekleri de uygun şekilde seçilmelidir.

stream analytics job input4

Input oluşturmak için son aşamada da Event Hub’dan gelen verinin hangi formatta serialize edileceği (JSON, AVRO, CSV) ve Encoding olarak hangi formatın seçileceği set edilecektir. Örneğimizde JSON ve UTF8 seçenekleri seçilmektedir.

  • Query Oluşturma:

Bu aşamaya kadar Event Hub ile alınan gerçek zamanlı click stream verisinin toplanması gerçekleştirilmiş oldu. Oluşturulan Stream Analytics job’ı için input tanımlandı ve Event Hub’dan gelen verinin job için veri kaynağı olacağı set edildi. Şimdiki aşamada ise input olarak gelen verinin Query kısmında yazılan SQL sorguları ile analiz edilmesi gerekmektedir. Bunu gerçekleştirebilmek için Stream Analytics job’ında Input seçeneğinin yanında yer alan Query tabına tıklayarak sorgu yazılabilecek olan sayfa açılmalıdır.

stream analytics job query

Açılan sayfada görülebileceği üzere Microsoft SQL Server için kullanılmakta olan T-SQL diline çok benzeyen hatta bu dilin birçok özelliğini destekleyen bir analiz sorgusu yazılabilmektedir. Burada FROM komutundan sonra yazılması gereken tablo adı yerine, bir önceki aşamada input oluştururken belirlenen “Input Alias” doğru bir şekilde yazılmalıdır.

stream analytics job query2

Örneğimizde Input Alias olarak belirlediğimiz “appdata” ifadesi tablo gibi görülecek ve Event Hub’dan gelen veriler bu şekilde sorgulanabilecektir. Yazılan sorgu istenilen şekilde tamamlandığında sayfanın alt kısmında bulunan Save butonu ile kaydedilmelidir. Bunun ardından eğer istenilirse yine sayfanın alt bölümünde yer alan Test butonu ile daha önceden elimizde bulunan veya elde edilebilecek JSON formatındaki uygulamanın ürettiği veri yazılan sorgu ile analiz edilerek test ekranında gelen veriler tablo formatında görüntülenebilecektir.

stream analytics job query test

Örnekte görülebileceği üzere, daha önce uygulama tarafından üretilen ve JSON formatında kaydedilen bir veri kümesi test edilmiş ve sorgu sonuçları test ekranında listelenmiştir.

Query ekranında gelen verilere ait bütün bilgiler SELECT * FROM appdata sorgusu ile beraber getirilebilirken, Stream Analytics sorgulama dilinde T-SQL dilinde olmayan bazı ek geliştirmeler de bizlere sunulmaktadır. Bunlardan en dikkat çekici olanlar “Windowing Concepts” adı verilen belirli bir zaman dilimi üzerinde ilgili sorgunun çalıştırılmasıdır. Stream Analytics sorgulama dilinde üç farklı windowing concept tanımlanabilmektedir. Bunlar; Tumbling Window, Hopping Window ve Sliding Window’dur.

Örneğimizde biz de Tumbling Window kullanarak uygulamadan gelen verileri “Resim Ad” kolonuna göre gruplayarak sadece son 60 saniye içinde tıklanan verilerin analiz edilmesini sağlamaktadır. Burada kullanılan sorguda yer alan TIMESTAMP BY komutu ise ilgili zaman bileşeninin uygulamada gerçekleşen zaman birimi mi yoksa Event Hub’a uygulamadan ilgili verinin geliş zamanını mı kullanılacağını belirtmek için kullanılabilmektedir.

stream analytics job query3

Yazılan yeni sorgu aynı örnek test datası kullanılarak tekrar test edilebilmekte ve çıktıları test ekranında görüntülenebilmektedir.

  • Output Oluşturma:

Yazılan uygulama tarafından üretilen gerçek zamanlı click stream verisi Event Hub’a aktarılmış ve oluşturulan Stream Analytics job’ına input olarak verilmiş, ardından yazılan Query ile akan stream verinin analizi yapılmıştı. Son aşamada ise analiz edilen veri çıktı (output) olarak bir yere aktarılacaktır.

stream analytics job output

Burada output seçeneklerinden hangisini tercih edeceğimiz ihtiyaca göre değişkenlik gösterebilmektedir. Örneğin analiz edilen veri kalıcı olarak bir yerde saklanmak isteniliyorsa Azure SQL Database kullanılarak ilişkisel bir veri tabanına aktarılabilir, daha sonra başka bir analizde kullanılmak için saklanmak isteniliyorsa istenilen formatta Azure Blob Storage üzerinde saklanabilir, ilişkisel olmayan bir veri tabanı yapısında tutulmak isteniliyorsa Azure DocumentDB veya key-value çiftleri olarak tutulmak isteniliyorsa Table Storage, başka uygulamalara tekrar analiz edilmek için gönderilmek isteniliyorsa Event Hub, Service Bus Queue, Service Bus Topic, gerçek zamanlı olarak raporlar halinde panolar oluşturularak görsel bir şekilde sunumu yapabilmek için de Power BI seçenekleri tercih edilebilir.

Örneğimizde gerçek zamanlı olarak uygulamaya tıklatılarak üretilen click stream verisinin analiz edilmesi sonucu oluşan çıktıyı gerçek zamanlı olarak raporlama ihtiyacımız olduğu için Power BI çıktı seçeneği bizler için output olarak seçilecektir.

stream analytics job output2

Power BI output seçeneği tercih edildiğinde karşımıza çıkacak olan ekranda var olan bir Power BI hesabımızın olup olmadığı sorulmaktadır. Eğer kurumsal bir domain üzerinde var olan bir Power BI hesabımız varsa “Existing Microsoft Power BI User” seçeneğini, henüz bir Power BI hesabına sahip değilseniz de hesap oluşturabilmek için “New User” seçeneğine tıklanmalıdır. Burada kullanılan Power BI hesabı Microsoft’a ait domainlerden (hotmail, outlook, windowslive vb) oluşturulduğunda kabul edilmemektedir. Bu nedenle şirket veya okul hesabınızı kullanarak Power BI hesabınızı oluşturmanız gerekmektedir.

stream analytics job output powrbi giris

Örneğimizde BilgeAdam domainine ait mail hesabımıza bağlı Power BI kullanıcı bilgileri girilerek bu işlem gerçekleştirilmektedir. İlgili hesap ile oturum açıldığında karşımıza output olarak girmemiz gerek bazı bilgi ekranları gelecektir.

stream analytics job output3

Output Alias”, “Dataset Name”, “Table Name” ve “Workspace” gibi bilgiler daha sonra kullanacağımızda anlamlı olması açısından uygun ifadeler ile isimlendirilmelidir. Bu bilgiler girildikten sonra işlem tamamlandığında stream verinin output tanımlanması tamamlanmış olacaktır.

stream analytics job output4

  • Stream Analytics Job’ının Çalıştırılması:

Output bilgisi de tanımlanan Stream Analytics job’ı için daha önce pasif durumda bulunan ve tıklanamayan sayfanın alt bölümündeki Start butonu artık aktif hale gelmiş durumdadır. Uygulama tarafından üretilen ve Event Hub’a aktarılan, orada toplana click stream verileri artık job’ın çalıştırılmasıyla birlikte Stream Analytics tarafından input olarak alınacak, analiz edilecek ve output olarak Power BI hesabına analiz sonuçları gönderilecektir.

Oluşturulan Stream Analytics job’ını çalıştırmak için sayfanın alt kısmında bulunan Start butonuna tıklandığında karşımıza hangi zaman diliminden itibaren gelen veriler ile bu job’ın çalıştırılacağı sorulan bir ekran gelmektedir.

stream analytics job execute

Burada ilgili job’ın başlatıldığı andan itibaren gelen verileri kullanarak analiz gerçekleştirebileceğimiz “Job Start Time” ve istenilen herhangi bir başlangıç zamanından itibaren gelen verilerin analiz edilebileceği “Custom Time” seçenekleri mevcuttur. Örneğimizde job’ın başlatıldığı andan itibaren gelen verileri analiz etmek istediğimiz için “Job Start Time” seçeneği seçilerek işlem tamamlanmış ve Stream Analytics job’ı başlatılmıştır.

stream analytics job execute2

Oluşturulan Stream Analytics job’ı için herhangi bir hata ile karşılaşılmadığında ilgili job başlatılabilecek ve Dashboard tabına tıklandığında verilerin geldiğini ve sayfanın sağ tarafında yer alan Status kısmında da ilgili job’ın başarılı bir şekilde çalıştığını belirten “Running” ifadesini görebilmekteyiz.

Bu yazımızda daha önce Event Hub servisi ile alınan stream verisinin Stream Analytics job’ına nasıl input olarak verildiği, yazılan sorgular ile nasıl analizinin yapılabildiği ve tanımlanan output ile analiz edilen verinin nasıl dışarıya aktarılacağını ele aldık. Bir sonraki yazımızda output olarak alınan verinin Power BI portali üzerinde nasıl anlık olarak dashboard’lar ile görüntülenebileceğini örnek uygulama ile ele alacağız.

Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Yorum Yaz