Azure — Time Series Insight (Ön İnceleme)

Henüz Preview aşamasında olan, Microsoft Azure ailesinin yeni üyesi Time Series Insight servisine göz atmakta fayda var dedim ve yaptığım ön çalışmayı da paylaşmanın keyifli olacağını düşündüm, şimdi de bu satırları yazıyorum.

Time Series Database (TSDB) Nedir?

Adından da anlaşılacağı üzere bu servis, bir TSDB (Time Series Database) servisi. Bu veritabanı sistemiyle uğraşanlar konsepte oldukça hakimdir ancak kısaca açıklamak gerekirse anlık olan gelişen milyonlarca metrik veriyi güvenli bir şekilde muhafaza eden ve sağladığı arayüz desteği ile son kullanıcıya sunan veritabanları olarak ifade edebiliriz. “Yazılımlarımızı Nasıl İzliyor ve Kontrol Altında Tutuyoruz?” başlıklı yazımda da bu kavrama kısaca değinme fırsatına sahip olmuştum.

TSDB Hangi Senaryolarda Kullanılabilir?

Aslında yukarıdaki kısa tanımdan da anlaşılabileceği üzere metrik verilerinizi tutmak için biçilmiş kaftan diyebilirim. Hürriyet evreninde biz de bu veritabanı sistemini aktif olarak kullanıyoruz. Sunuculara düşen anlık istek sayıları, sunuculardan gelen anlık hata sayıları, CPU sıcaklık değerleri, hafıza kullanımı gibi dış parametrelere bağlı olarak anlık değişen yığın dataları tutuyor ve bir arayüz eşliğinde gözlemliyoruz.

IOT kavramının hayatımıza girmesiyle birlikte de bu veritabanı sistemleri önemini gün geçtikçe arttırmakta. Odanızın anlık sıcaklık ya da nem değerlerini bir Raspberry cihazından okuyup TSDB veritabanında tutabilirsiniz. Mağazanızın önünden geçen kişilerin raflarınıza ne kadar süre baktığını algılayan bir cihaz kurabilir ve cihazdan gelen verileri yine bu veritabanı sistemi üzerinde saklayabilirsiniz. Senaryoları ihtiyaçlar doğrultusunda arttırmak işten bile değil hayal ettiğiniz üzere.

Microsoft Azure bu işin neresinde?

Kendilerinin de ifade ettiği gibi henüz en başında. InfluxDB, OpenTSDB hatta aynı çerçevede değerlendirilmese dahi Elasticsearch gibi teknolojiler şu anda aktif olarak yukarıda sayılan senaryolar için aktif olarak profesyonel sahnede yer alıyor. Bu sahneye çıkış adımı olarak da geçtiğimiz günlerde Time Series Insights adını verdikleri servisi kullanıma sundular.

Bu yazıda işin maliyeti, diğer Cloud çözümlerinin sunduğu alternatif servislerle karşılaştırma gibi kalemlere değinmeyeceğim. Amacımız yazının sonunda bu servisi kullanarak lokal ortamda bir uygulama geliştirmek ve arayüz üzerinden göndermiş olduğumuz yığın verileri gözlemleyebilmek.

Bir sonraki paragrafta başlayacağımız örnek çalışma için;

  • Bir Azure hesabına sahip olmanız,
  • Temel düzeyde Python bilmeniz

yeterli olacaktır. Ben de bu gereksinimleri karşıladığınızı düşünerek örneğime başlıyorum:

Let the game begin :)

Öncelikle nasıl bir çalışma modelimiz olduğunu tartışmakta fayda var. Elimde bir adet TSDB çözümü var. Bu çözüme veri sağlamakla sorumluyum. Global çözümde bir TSDB içerisinde farklı metrik değerleri tutmanız mümkün. Yani CPU takibi için ayrı, yük oranı için ayrı bir veritabanına ihtiyacım yok. Azure bunun karşılığı olarak “Event Hubs” servisini kullanıyor. Bu hub — bundan sonra kanal olarak ifade edeceğim — üzerinden olay kayıtlarını veritabanına ileteceğim. Bunun için yeni bir Event Hubs servisi oluşturuyorum:

Azure üzerinde oluşturduğunuz servisler bir Resource Group içerisinde tutulmalıdır. Eğer bir grubunuz varsa bunu seçebilir ya da benim örneğimde olduğu gibi bu panel üzerinden yeni bir grup oluşturabilirsiniz. Olmazsa olmazımız ise “Name” alanında belirttiğimiz servis adı. Bunu bir yere not edelim, ileride kullanacağız.

Servisi oluşturduktan sonra açılan pencereden “Shared access policies” menü elemanına tıklıyor ve sağa doğru açılan yeni pencereden “PRIMARY KEY” kolonundaki değeri kopyalıyoruz. Bunu da not etmeyi unutmayalım:

Adından da anlaşılacağı üzere Event Hubs, kanalların tutulduğu bir container servisi aslında. Dolayısıyla bu depoya açılan küçük küçük kanallar açabilir ve bu kanallar üzerinden verilerinizi iletebilirsiniz. Biz de “cpu-usage-event-hub” adını vereceğimiz kanalımızı oluşturuyoruz. Bu kanal üzerinden veritabanına CPU kullanım yüzdesini anlık olarak göndereceğiz.

Artık olayları göndereceğimiz kanalımız hazır. Sıra bu kanalı dinleyen time-series veritabanımızı oluşturmakta. Bunun için de yeni bir servis ekleme alanına gidiyor ve “Time Series Insights Preview” servisini seçiyoruz.

Bu veritabanın bir arayüzü olacak elbette. Bu arayüze erişim sağlayacak, arayüz üzerinde sorgu çalıştırabilecek, sorguları global olarak ya da kendine özel kaydedebilecek kullanıcılara ihtiyacımız var. Hadi şimdi bunları tanımlayalım ve servis penceresindeki “Data Access Policies” menü elemanını seçelim. Açılan pencereden “Select User” seçeneği ile erişim sağlayacak kullanıcıyı seçiyoruz. “Select Role” seçeneği ile de bu kullanıcının okuyucu ve katkı sağlayıcı yetkilere sahip olması gerektiğini ifade ediyoruz:

Daha sonra ise yine servis penceresine dönüyor ve verinin alınabilmesi için gerekli ayarların yapıldığı “Event Sources” menü elemanına tıklıyoruz:

Burası ilk etapta otomatik olarak doluyor (her bir servisten zaten bir tane tanımlı olduğu için). Kısaca açıklamak gerekirse;

  • Event Source Name: Olay kaynağına verilecek isim belirtilir.
  • Source: Bu kaynağın bir Event Hub ya da IOT Hub servisinden dolacağı belirtilir.
  • Import Option: Event oluşturulurken mevcut ayarlar ile mi yoksa JSON formatındaki ayar dosyası ile mi oluşturulacağı seçilebilir.
  • Subscription Id: Azure kayıt bilgisi
  • Service Bus Name: Daha önce oluşturduğumuz Event Hubs servisi
  • Event Hub Name: Servis altında oluşturduğumuz alt kanalın ismi
  • Event Hub Policy Name: Servis altında oluşturduğumuz yetki tanımlamaları
  • Event Hub Policy Key: Servis altında oluşturduğumuz yetkiye ait anahtar (programatik olarak kullanılabilir)

Artık TSDB’imiz hazır. Arayüz adresini de TSDB servisi penceresinden alıyoruz:

Aşağıda vermiş olduğum Github repomdan uygulamayı indirdikten sonra testini yapabilirsiniz. NOT: main.py dosyasında yer alan; “SERVICE_NAMESPACE”, “SHARED_ACCESS_KEY_NAME”, “SHARED_ACCESS_KEY_VALUE”, “EVENT_HUB_NAME” değişkenlerinin değerlerini kendi hesap ve servis bilgileriniz ile değiştirmeyi unutmayın.

Uygulamayı çalıştırdığınızda her şey yolunda ise aşağıdakine benzer bir konsol çıktısı alıyor olmanız gerekiyor:

Son olarak arayüze gidiyorum ve bir süreliğine göndermiş olduğum değerlerin yansıyıp yansımadığını kontrol ediyorum:

Bu ekranda (1) ile işaretlenmiş alandan, çizim için kullanılacak metriği seçmeyi; (2) ile işaretlenmiş alandan çizilecek alana bir isim ve renk vermeyi; (3) ile işaretlenmiş alandan verileriniz arasındaki süreyi; (4) ile işaretlediğim alandan ise tüm işlemleri yaptıktan sonra grafiği güncellemeyi de unutmayın.

Azure her ne kadar yolun başında olsa da sunmuş olduğu kolay arayüz, işlem adımlarının net olması ve servislerin kolay bir şekilde birbirine bağlanması geleceğe dair umutlarımı yeşertti.

Sizler de yorum alanından TSDB alanındaki deneyimlerinizi paylaşırsanız mutlu olurum. Tekrar görüşene dek, yığın datalarınız hep güvenle saklı olsun :)