Kibana ile Veri Görselleştirme

Gökçe Öztürk
5 min readMay 23, 2021

İlk yazımda son staj yerimde gerçekleştirmiş olduğum Kibana ile veri görselleştirmesinden bahsetmek istiyorum.

Kibana, ELK Stack’in içinde yer alan, Elastic Search’e kaydedilen logları anlık olarak izlemenizi sağlayan ve istendiği takdirde grafiksel istatistikler çıkarabilen bir görselleştirme aracıdır.

ELK (ElasticSearch, LogStash, Kibana) açık kaynak kodlu 3 ürünün bir araya gelerek oluşturduğu bir koleksiyondur. Asıl amacı loglamayı ileri derecede kolaylaştırmak ve bir çok girdi ve çıktıya destek verebilmektir.

ElasticSearch: ElasticSearch açık kaynak kodlu NoSQL bir veritabanıdır.

LogStash: Logstash bir veri toplama pipeline aracıdır. Topladığı bu verileri anlamlı hale getirir ve ElasticSearch’ü besler. Bunun yanı sıra topladığı verileri mail adresine, endpoint’e ya da bir başka NoSQL veritabanına gönderebilir.

Kibana: Kibana, ElasticSearch’te bulunan verileri görselleştirip grafik olarak çıktı almamıza olanak tanır.

ELK Stack Yapısı

ElasticSearch’ün relational database ile arasında ki farkları gösteren bir tablo oluşturmak istersek:

ElastiscSearch NOSQL bir yapıya sahip olsa da, relational data’yı farklı yöntemlerle store edebiliyoruz.

Ben, Kibana ile Veri Görselleştirme’yi Udemy’den almış olduğum kurs ve içeriğindeki örnek data seti ile gerçekleştirdim. (Kursun linki: https://www.udemy.com/course/data-visualization-with-kibana/ ) Bu veri seti internetten hırdavat eşyaları satışı yapan bir mağazaya ait. Bu mağazanın 3 aylık satışlarına yönelik loglar mevcut. Bu logları ElasticSearch’e 3 farklı index olacak şekilde gruplandırdım. (Ocak ayı, şubat ayı, mart ayı)

2 adet log kaydı bulunmakta, bunlar:

1- Access-logs

2- Orders

(https://github.com/codingexplained/data-visualization-with-kibana/blob/master/test-data.zip adresinden erişim sağlayabilirsiniz.)

Dataları import edebilmek için cURL kullandım. Windows komut satırına aşağıdaki komutları yapıştırdım. Dosya tipleri json formatındaydı.

Kibana İçeriği

Index Management

ElasticSearch, indexlerini otomatik olarak kendisi oluşturmaktadır. Aşağıda indisler görülmektedir. Her aya ait acces-log’lar mevcuttur ve ayrıca sipariş loglarının olduğu orders indisi mevcuttur.

Örneğin orders’a ait mappingleri inceleyelim.(Elasticsearch’de mapping, verilerin index’lerde nasıl tutulacağını belirleyen yapılardır.) Elasticsearch’ün en güzel özelliklerinden birisi hızlıca verilerini oluşturabilmenizi ve erişebilmenizi sağlar. Bir dokümanı index’lemek için bir index oluşturmanıza ya da bir mapping type belirlemenize, alanlarınızı tanımlamanıza gerek yoktur. ES, otomatik olarak anlayacaktır ve bir index bir type ve alanlarınız otomatik olarak tiplerinize göre oluşturacaktır.

ES tarafından oluşturulan orders mappingi

Discover

İşte bu kısım esas görselleştirmenin yapıldığı kısımdır.

Access-logs: Buradan toplam 144,652 tane log olduğunu ve genel bir dağılımlarını görebiliyoruz. Search kısmında KQL (Kibana Query Language) yazarak logları ilgili kısımlarda filtreleyebiliyoruz.

access-logs sayfası

Orders: Buradan da toplam 5,152 adet siparişler için loglar olduğunu görebiliriz. Aynı zamanda “available fields kısmından orders loglarının mevcut başlıklarını da görebiliriz: “channel, customer.age ..”

@timestap per day yazan kısımda logların detaylarını inceleyebiliriz.

Sütun Grafikleri:

  1. Access loglarda http status code’u 200 olan logları çizgi grafiğiyle görselleştirdim.

2. Zamana göre sipariş sayılarını gösteren bir çizgi grafiği oluşturdum. Günlere göre en çok ne zamanlarda sipariş verilmiş görebiliyoruz. Örneğin, 2020–01–16 tarihinde 98 adet sipariş verilmiştir. Grafik çiziminde aşağıda sağ tarafta “data” kısmından Metrics’te y-ekseninde “Count” olacak şekilde, Buckets’da da x-ekseninde “timestamp per day” olacak şekilde eklenmiştir.

Alan Grafikleri

  1. Bu grafikte de, access-loglarının http status code’larına göre filtreleyerek alan grafiği oluşturdum. Sağ tarafta bulunan 2 adet sorgu bu durumla ilgilidir. http status code’lari 2xx ve 4xx olanları karşılaştırmış oldum.

2. Bu grafikte de, http status code’larının çeşitlerine göre filtreleme yaptım. 200, 404 ve 500 kodlarına ayırdım. Buradan 2020–02–12 tarihinde (500 kodunun olduğu gün-mavi renkli) web sitesinin sunucusunun cevap veremediğini söyleyebiliriz.

Daire Grafikleri

Sipariş loglarına göre en çok satış yapılan 5 şehri daire grafiğinde gösterdim.

Heat Map

En çok ziyaret edilen 5 sayfanın, en çok hangi saatlerde ziyaret edildiğini gösteren bir heat map oluşturdum. Ziyaret sayısı arttıkça rengin koyulaştığını gözlemleyebiliriz.

Çizgi Grafiği

En çok ziyaret edilen 5 sayfanın loglarını gösteren çizgi grafiği oluşturdum. Resimde görünmüyor ancak örneğin ilk çizgi grafiği craftman v20 ürününe ait olan logları gösteriyor. Grafiğe bakınca ilk gözlemlediğimiz şey anomali tespiti olacaktır. 2020–01–30 tarihinde 747 log kaydı bulunmaktadır. Bununla alakalı o gün bu üründe indirim yapıldığı yorumu yapılabilir.

Metrikler

Sayı görselleştirmesi amacıyla online satışlarla alakalı aşağıdaki sayıları hesapladım. Her üründen ortalama kaç adet satıldığı görülmektedir.

Tag Cloud

Müşterilerin en çok erişim sağladıkları şehirler, sıklıklarına göre ölçeklendirilerek büyüklükleri sağlanmıştır.

Dashboards

Bunların yanında, daha düzenli bir görünüm için yukarıda hazırladığım grafikleri, tabloları vb. ortak sunabilen bir dashboard imkanı da bulunmaktadır.

Daha detaylı bilgi için ElasticSearch’ün kendi dokümantasyonuna ulaşabilirsiniz: https://www.elastic.co/guide/index.html

--

--