Merhabalar;
Bildiğimiz gibi teknoloji hızla ilerliyor. Gün geçmiyor ki yeni bir teknoloji karşımıza çıkmasın. Kendim için söylüyorum. Bir şeyleri öğreniyorum. Ertesi gün bir bakıyorum aynı işi daha etkin, performanslı yaptığını söyleyen ve üstüne de yeni ek özellikler getiren yeni bir teknoloji konuşuluyor. Görünen o ki biz mühendislerin veya bilişim dünyasına gönül vermiş tüm dostların öğrenme süreci hiç bitmeyecek. Böylesi aslında daha güzel çünkü benim düşünceme göre gerçek yaşlanma, beyin öğrenme sürecini bıraktığında başlar. Yani en azından genç kalmak için öğrenmeye devam etmeliyiz.
Bugün sizlere “ELK Stack” olarak geçen yapının “Elasticsearch” bileşeni hakkında bilgi aktarmak istiyorum. “ELK” yığını (“stack”), genellikle birlikte kullanılan üç teknolojiden oluşur: “Elasticsearch”, “Logstash” ve “Kibana”. “Elasticsearch” yapısına, makine öğrenmesini de getiren X-Pack ve veri nakliyecilerin (“data shippers”) kolleksiyonundan oluşan Beats eklendiğinde, bu yapı, “Elastic Stack” olarak geçiyor. “ELK” yığını, aslında, “Elastic Stack” in bir alt kümesi oluyor. Bu yazımda ağırlıklı olarak “Elasticsearch” den bahsedeceğim.
“Elasticsearch”, açık kaynak kodlu, analitik ve tam-metin (tekst) arama motorudur. Özellikle uygulamaların, arama fonksiyonunu geliştirmek için kullanılır. Örneğin üzerinden satış yaptığınız bir web sitenizin olduğunu düşünün. Kullanıcıların sitenizde pek çok farklı veriyi arayabilmesini istersiniz. Arama kriterleriniz, filtreleme özellikleriniz ne kadar akıllıcaysa, kullanıcıyı sitenizde o kadar fazla tutabilir ve sitenizi daha sık ziyaret etmesini sağlarsınız. “Google” da arama yaptığınızda, otomatik kelime tamamlama, hatta otomatik cümle tamamlama, yazdığınız sentaks hatalarını düzeltme, eşanlamlı kelime algısı, ilişkiye göre görüntüleme gibi pek çok karmaşık arama fonksiyonunu “Elasticsearch” ile inşa edebilirsiniz. “Elasticsearch” sadece tam-metin arama moturu değildir. Sorgulama yapabilir ve “Elasticsearch”ü bir analitik platformu olarakta kullanabilirsiniz. Veriyi toplayan sorgular yazabilir, gelen sonuçlardan grafikler çıkarabilirsiniz. Elbette bir “Business Intelligence” ürünü değil ama “Elasticsearch” içinde tuttuğunuz veriden anlamlı sonuçlar çıkarabilirsiniz. Örneğin, uygulamalardan gelen log dosyalarını saklayabilir, farklı referans sistem metriklerini tutabilir ve sonrasında alarmlar oluşturabilirsiniz. Sunucuların CPU, bellek kullanımlarını takip edebilir, bu veriler üzerinden grafikler oluşturabilirsiniz. “Elasticsearch”e, olayları (“events”) gönderebilirsiniz. Mesela farklı fiziksel loaksyondaki dükkanlarınızdan, satış verisini çekebilir, gelen verilere göre hangi dükkanınız daha çok satış yapmış gibi analizleri yapabilirsiniz.
“Elasticsearch” veriyi, “dökümanlar” şeklinde tutar. “Elasticserach”de ifade edilen, “döküman”, ilişkisel veri tabanında, “satıra” karşılık gelir. Dökümanın içindeki alanlar ise, ilşkisel veri tabanında “kolonlara” karşılık gelir.
Döküman dediğimiz aslında bir JSON nesnesidir. Örneğin bir kişiyi, döküman olarak eklemek istediğinizde, bu kişiyi tanımlayan bir JSON nesnesini “Elasticsearch”e gönderirsiniz.
Dökümanları, “REST API” üzerinden sorgularsınız. “Elasticsearch”e gönderdiğiniz sorgular, JSON formatında yazılır. “Elasticsearch” elbette dağıtık bir yapıdadır ve dağıtık yapısından dolayı ölçeklenebilirdir. “ELK” yığınını oluşturan diğer bileşen “Kibana”, analitik ve görselleştirme platformudur. “Elasticsearch” den aldığı veriyi görselleştirir, yani verinin anlamlandırılmasını sağlar. “Kibana”yı, “Elasticsearch”ün görselleri (mesela grafikler) oluşturabileceğiniz bir panosu, kontrol paneli gibi düşünebilirsiniz. Mesela, web sayfanızı ziyaret edenleri bir harita üzerine konumlayabilir, sayfanıza gelen trafiği gerçek-zamanlı izleyebilirsiniz. “Kibana”, kimlik doğrulama, yetkilendirme gibi görevler içinde “Elasticsearch”e arabirim sağlar. “Kibana”, çok genel olarak, “Elasticsearch” de tutulan veriye web arayüzü sağlar. “ELK” yığınının diğer bileşeni, Logstash, uygulamalardan gelen log mesajlarını işleyerek “Elasticsearch”e gönderir. “Logstash” in aldığı veri, olaylar (“events”) olarak değerlendirilir. Gelen bu olaylar, “Logstash” tarafından işlenir ve farklı lokasyonlara gönderilebilir.
“Elasticsearch”ün mimarisine bir göz atalım. “Elasticsearch” mimarisinin temelini “node” ve “cluster” yapıları oluşturur. “Cluster”, “node” lardan oluşur. “Node” dediğimiz elbette sunuculardır. Her bir “node”, “cluster” verisinin bir parçasını oluşturur. “Node”ların toplamı, “cluster” için tüm veri seti anlamına gelir. Her “node”, “cluster”ın arama ve indeksleme işlemlerine katkıda bulunur. Yani, “node”, kendisine verilen bir arama sorgusunu, kendi üzerinde tuttuğu veri üzerinde yapar. “Node”lar, birbir varlıklarından haberdardırlar. Yapıda “master node” vardır. “Master node”, “cluster”daki değişiklikleri koordine eder. Örneğin, “cluster”a “node” eklenmesi, “cluster”dan “node” çıkarılması, indekslerin oluşturulması, indekslerin silinmesi gibi. “Cluster”ın hangi durumda olduğunu “master node” günceller.
“Sharding” yapısı mimaride önemli bir yer tutar. “Sharding” yapısına şöyle bir örnek verebilirim. Elinizde, boyutu 1 TB’a ulaşan pek çok dökümanın oluşturduğu bir indeks olsun. “Cluster” yapınızda üzerinde 512GB depolama alanı olan iki tane “node” olsun. Maalesef, bu durumda tam indeks tek bir “node” üzerinde tutulamayacaktır. Bu durumda indeks verinizi bölmek zorundasınız. İndeks boyutunun, sizin sahip olduğunuz donanım limitinden büyük olması durumunda, “sharding” yapısı kurtarıcı olarak karşımıza çıkar. “Sharding”, indeksleri, “shard” olarak isimlendiren küçük parçalara ayırır. Mesela, 1TB’lık indeksi, 256GB’dan oluşan 4 tane “shard” a ayırabilir ve bu “shard” ları iki “node” üzerine dağıtabilirsiniz (Şekil 1.). “Sharding”, datanızı ölçeklendirebilmenizi sağladığı için önemli. Yine bu sayede, operasyonu “node”lar üzerine yayabilir ve paralel işlem gücünü kullanabilirsiniz.
Şekil 1. “Sharding” özelliği.
Bu yapıda hata toleransını ve “failover” mekanizmasını nasıl sağlayacağız? İşte burada karşımıza replikasyon kavramı çıkmaktadır. “Elasticsearch”, “shard”ların replikasyonunu yapar. “Shard”ın replikasyonuna, “replika shard” veya kısaca “replika” denir. Replikasyonu yapılan “shard”lar, “primary shard” olarak isimlendirilir. “Primary shard” ve replikası, replikasyon grup olarak isimlendirilir (Şekil 2.).
Şekil 3. Veri replikasyonu.
Şu ana kadar oldukça teori anlattım. En azından şu an için teoriyi burda tamamlayıp kuruluma geçmek doğru olacaktır. Ben kurulumu “windows” sistemime yaptım. Öncelikle sistemde java’nın yüklü olması gerekiyor. Ardından, https://www.elastic.co/downloads/ sayfasından “Elasticsearch” ve “Kibana” yı indirdim.
elasticsearch-7.3.0-windows-x86_64 ve kibana-7.3.0-windows-x86_64 dosylarını indirdim. İlk olarak “Elasticsearch” ün çalıştırılması gerekiyor. Dosyayı kopyaladığınız yerde bin dizini altından elasticsearch.bat dosyasını çalıştırmanız gerekiyor. Servis çalışmaya başladıktan sonra, “Kibana”yı yüklediğiniz dizinde, “config” dizini altında, “kibana.yml” dosyasında,
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: [“http://localhost:9200”]
kısmında, ikinci satırın başından “#”i kaldırmanız gerekiyor.
Bu “url” in çalıştığını aşağıdaki gibi kontrol edebilirsiniz.
“Elasticsearch” ün çalıştığından emin olduktan ve “Kibana”da “config.yml”i düzenledikten sonra, “Kibana”yı yüklediğiniz dizinde bin altında kibana.bat dosyasını çalıştırın. Sonrasında, localhost:5601’den Kibana GUI’ye erişebilirsiniz.
Anlatacak daha çok şey var. Henüz teoriyi anlatmayı tamamlamadım. Yazının ikinci bölümünde yine biraz teori anlatacağım ardından kullanım alanlarıyla ilgili senaryolar üzerinde çalışacağız. Asiye Yiğit – 4 Agustos 2019 Pazar
Kaynaklar:
Complete Elasticsearch Masterclass with Logstash and Kibana – Imtiaz Ahmad
Complete Guide to Elasticsearch – Bo Andersen
Leave A Comment