Elasticsearch Nedir?
Last updated
Last updated
Elasticsearch, büyük ölçekli veri setlerini gerçek zamanlı olarak indekslemek ve aramak için tasarlanmış, açık kaynaklı bir arama ve analiz motorudur. Bu güçlü platform, Java programlama dili kullanılarak geliştirilmiştir ve yüksek ölçeklenebilirlik, hız ve verimlilik sunar. Elasticsearch, Apache Lucene tabanlıdır ve dağıtık mimarisi sayesinde birden fazla sunucuda çalışabilir, bu da büyük veri hacimlerini etkin bir şekilde yönetmesine olanak tanır.
Belgeler, Elasticsearch'te dizine eklenebilen temel bilgi birimleridir ve küresel internet veri değişim formatı olan JSON ile ifade edilirler. Bir belgeyi, aradığınız varlığı temsil eden bir satır olarak düşünebilirsiniz. Elasticsearch'te bir belge yalnızca metin değil, aynı zamanda JSON'da kodlanmış herhangi bir yapılandırılmış veri de olabilir. Bu veriler sayılar, dizeler ve tarihler gibi şeyler olabilir. Her belgenin benzersiz bir kimliği ve belgenin ne tür bir varlık olduğunu tanımlayan belirli bir veri türü vardır. Örneğin, bir belge bir ansiklopedi makalesini veya bir web sunucusundan alınan günlük girdilerini temsil edebilir.
Dizin, benzer özelliklere sahip belgelerden oluşan bir koleksiyondur. Elasticsearch'te sorgulayabileceğiniz en üst düzey varlık bir dizindir. Bir dizin genellikle mantıksal olarak ilişkili belgeler içerir. Örneğin, bir e-ticaret web sitesi bağlamında, Müşteriler için bir dizin, Ürünler için bir dizin, Siparişler için bir dizin vb. olabilir. Bir dizin, içindeki belgelerle ilgilenirken kullanılan bir adla tanımlanır.
Elasticsearch'teki bir dizin aslında "ters dizin" adı verilen bir mekanizmadır ve tüm arama motorları bu şekilde çalışır. Ters dizin, içerik gibi şeylerin bir belge veya belge kümesindeki konumlarına dönüştürülmesine olanak tanıyan bir veri yapısıdır. Temel olarak, bir kelimeyi bir belgedeki konumuna yönlendiren hashmap benzeri bir veri yapısıdır. Bir ters dizin, dizeleri doğrudan saklamaz ve bunun yerine her belgeyi ayrı arama terimlerine (yani her kelimeye) ayırır, ardından her arama terimini bu arama terimlerinin geçtiği belgelerle eşleştirir. Örneğin, aşağıdaki resimde "kelebek" terimi belge 1'de geçmektedir, bu nedenle bu belgeyle eşleştirilir. Bu, belirli bir belgedeki arama terimlerini bulmak için hızlı bir yol sağlar. Elasticsearch, dağıtılmış ters dizinleri kullanarak, çok büyük veri kümelerinden bile tam metin aramaları için en iyi eşleşmeleri hızlı bir şekilde bulabilir.
Elasticsearch kümesi, birbirine bağlı bir veya daha fazla düğüm örneğinden oluşan bir gruptur. Bir Elasticsearch kümesinin gücü, görevlerin, aramanın ve dizin oluşturmanın tüm düğümlere dağıtılmasında yatar.
Düğüm, bir kümenin parçası olan tek bir sunucudur. Bir düğüm verileri depolar ve kümenin indeksleme ve arama özelliklerine katılır. Bir Elasticsearch düğümü farklı şekillerde yapılandırılabilir:
Elasticsearch kümesini kontrol eder ve bir dizin oluşturma/silme ve düğüm ekleme/çıkarma gibi tüm küme genel işlemlerinden sorumludur.
Verileri depolar ve arama ve birleştirme gibi veriyle ilgili işlemleri gerçekleştirir.
Küme isteklerini ana düğüme ve verilerle ilgili istekleri veri düğümlerine ileten düğümdür.
Elasticsearch, dizini birden fazla parçaya veya "parçalara" bölmeye izin verir. Her bir parça, başında tamamen işlevsel ve bağımsız bir "dizin" bulunan bir parçadır ve bir kümenin herhangi bir düğmesinde barındırılabilir. Elasticsearch, bir dizindeki belgeleri birden fazla parçaya dağıtarak ve bu parçaları birden fazla düğmeye dağıtarak donanım arızalarına karşı koruma sağlar ve bir kümeye düğmeler eklendikçe sorgu kapasitesini artırır.
Elasticsearch, dizininizin parçacıklarının "replika parçacıkları" veya kısaca "replikalar" olarak adlandırılan bir veya daha fazla kopyasını oluşturmanıza olanak tanır. Temel olarak, bir replika shard birincil shard'ın bir kopyasıdır. Bir dizindeki her belge bir birincil parçaya aittir. Replikalar, donanım arızalarına karşı verilerinizin yedek kopyalarını sağlar ve arama veya belge alma gibi okuma isteklerinin kapasitesini artırır.
Elasticsearch, veri alımı, zenginleştirme, depolama, analiz ve görselleştirme için bir dizi açık kaynaklı araç olan Elastic Stack'in merkezi bileşenidir. Elasticsearch, Logstash ve Kibana bileşenlerinden sonra "ELK" yığını olarak adlandırılıyor ve şimdi Beats'i de içeriyor. Temelde bir arama motoru olmasına rağmen, kullanıcılar Elasticsearch'ü günlük verileri için kullanmaya başladılar ve bu verileri kolayca almanın ve görselleştirmenin bir yolunu istediler.
Kibana, Elasticsearch için gerçek zamanlı histogramlar, çizgi grafikler, pasta grafikler ve haritalar sağlayan bir veri görselleştirme ve yönetim aracıdır. Elasticsearch verilerinizi görselleştirmenize ve Elastic Stack'te gezinmenize olanak tanır. İnteraktif görselleştirme, nereye gittiğinizi bulmak için bir soru ile başlayarak verilerinize şekil verme seçeneğinizi seçmenize olanak tanır. Örneğin, Kibana genellikle günlük analizi için kullanıldığından, web hitlerinizin nereden geldiğini, dağıtım URL'lerinizi vb. bulmak için soruları yanıtlamanıza olanak tanır.
Elasticsearch üzerinde kendi uygulamanızı oluşturmuyorsanız, Kibana güçlü ve esnek bir kullanıcı arayüzü ile dizininizi aramak ve görselleştirmek için harika bir yoldur. Ancak, her görselleştirmenin yalnızca tek bir dizine/indeks modeline karşı çalışabilmesi gibi önemli bir dezavantajı vardır. Dolayısıyla, farklı verilere sahip dizinleriniz varsa, her biri için ayrı görselleştirmeler oluşturmanız gerekir. Daha gelişmiş kullanım durumları için Knowi iyi bir seçenektir. Elasticsearch, verilerinizi birden fazla dizinde birleştirebilir ve diğer SQL/NoSQL/REST-API veri kaynaklarıyla karıştırabilir ve ardından iş kullanıcı dostu bir kullanıcı arayüzünde bunlardan görselleştirmeler oluşturabilir.
Logstash, verileri toplamak, işlemek ve Elasticsearch'e göndermek için kullanılır. Eşzamanlı olarak farklı kaynaklardan veri toplayan, dönüştüren ve ardından toplamlar gönderen açık kaynaklı, sunucu tarafı bir veri işleme işlem hattıdır. Ayrıca, tanımlanmış alanları belirleyerek yapılar oluşturmak için farklı biçimlerdeki verileri dönüştürür ve hazırlar. Örneğin, veriler genellikle farklı sistemler arasında çeşitli biçimlerde dağılmış olduğundan, Logstash farklı sistemleri birleştirmenize olanak tanır - web sunucuları, veritabanları, Amazon hizmetleri vb. - ve verileri gitmesi gereken yere sürekli bir akış halinde göndermenizi sağlar.
Beats, yüzlerce veya binlerce makine ve sistemden veri göndermek ve bu verileri Logstash veya Elasticsearch'e göndermek için kullanılan hafif, tek amaçlı veri gönderme aracıları koleksiyonudur. Beats veri toplamak için harikadır çünkü sunucularınızda, kapsayıcılarınızda oturabilir veya işlev olarak dağıtılabilir ve verileri Elasticsearch'te merkezileştirebilirler. Örneğin, Filebeat sunucunuzda oturabilir, günlük dosyalarını geldikçe izleyebilir, ayrıştırabilir ve neredeyse gerçek zamanlı olarak Elasticsearch'e alabilir.
Elasticsearch, verileri JSON formatında dökümanlar halinde saklar ve bu dökümanlar, "indeks" adı verilen yapılar içinde organize edilir. İndeksler, verilerin saklanması ve sorgulanması için optimize edilmiştir. Bir indeks, bir veya daha fazla "shard" (parça) olarak bölünebilir. Her shard, bir Apache Lucene indeksi olarak işlev görür ve bu yapı, verinin depolanması ve arama sorgularının hızlıca işlenmesi için optimize edilmiştir. Ayrıca, her shard'ın bir veya daha fazla kopyası (replica) olabilir, bu da veri kaybını önlemek ve okuma işlemlerinin hızını artırmak için kullanılır.
DB-Engines sıralamasına göre, Elasticsearch en popüler kurumsal arama motorudur.
Artık Elasticsearch'ün ne olduğunu, mantıksal kavramlarını ve mimarisini anladığımıza göre, çeşitli kullanım durumları için neden ve nasıl kullanılabileceği hakkında daha iyi bir fikrimiz var. Aşağıda, Elasticsearch'ün başlıca kullanım alanlarından bazılarını inceleyecek ve şirketlerin günümüzde Elasticsearch'ü nasıl kullandıklarına dair örnekler sunacağız.
Veri erişimi, alma ve raporlama için bir arama platformuna büyük ölçüde güvenen uygulamalar için.
Çok sayıda içerik depolayan web siteleri, Elasticsearch'ü verimli ve doğru aramalar için çok kullanışlı bir araç olarak görmektedir. Elasticsearch'ün site arama alanında giderek daha popüler hale gelmesi şaşırtıcı değildir.
Elasticsearch, belge arama, e-ticaret ürün arama, blog arama, kişi arama ve aklınıza gelebilecek hemen her şey dahil olmak üzere kurumsal çapta aramalara olanak tanır. Aslında, popüler web sitelerinin çoğu genellikle kurumsal düzeyde arama çözümleri kullanır. Biraz daha kuruma özgü bir bakış açısıyla, Elasticsearch dahili ağlarda büyük bir başarıyla kullanılmaktadır.
Gördüğümüz gibi Elasticsearch, günlük verilerini neredeyse gerçek zamanlı ve ölçeklenebilir bir şekilde almak ve analiz etmek için yaygın olarak kullanılmaktadır. Ayrıca günlük metriklerle operasyonel içgörüler sağlayarak eylemleri tetikler.
Birçok şirket çeşitli metrikleri analiz etmek için ELK yığınını kullanır. Bu, kullanım durumuna göre değişen çeşitli performans parametrelerinden veri toplamayı içerebilir.
Elasticsearch'ün bir diğer önemli analitik uygulaması da güvenlik analitiğidir. Sistem güvenliğiyle ilgili erişim günlükleri ve benzeri günlükler, sistemlerinizde gerçek zamanlı olarak neler olup bittiğine dair daha eksiksiz bir resim sağlamak için ELK yığını ile analiz edilebilir.
ELK Stack'te bulunan birçok yerleşik özellik, onu bir iş analitiği aracı olarak iyi bir seçenek haline getirir. Bununla birlikte, kuruluşlarda bu ürünü uygulamak için biraz öğrenme eğrisi vardır. Bu özellikle Elasticsearch dışında birden fazla veri kaynağına sahip şirketler için geçerlidir, çünkü Kibana yalnızca Elasticsearch verileriyle çalışır. İşte bu noktada Knowi iyi bir seçenektir. Elasticsearch verilerinizin birden fazla dizin üzerinde birleştirilmesine ve diğer SQL/NoSQL/REST-API veri kaynaklarıyla karıştırılmasına olanak tanır ve daha sonra iş kullanıcı dostu bir arayüzde görselleştirmeler oluşturabilir.
Elasticsearch'e basit ve anlaşılır REST tabanlı API'ler aracılığıyla erişilebilir. Bu API'ler veri eklemeyi, güncellemeyi, aramayı ve silmeyi kolaylaştırır. RESTful API kullanmak, Elasticsearch'ü kullanmaya başlamak için önceden teknik bilgi gerektirmeyen ve hızlı sonuçlar sağlayan bir yoldur.
Elasticsearch kullanım kolaylığı sunar. Yeni başlayanlar bile ayrıntılı dokümantasyon ve geniş topluluk desteği sayesinde uygulamalarını hızla geliştirebilir ve test edebilir. Platform, çeşitli dillerdeki SDK'lar (Yazılım Geliştirme Kiti) ile entegre olarak farklı teknolojilere sahip geliştiriciler için erişilebilir hale gelir.
Elasticsearch, arama yaparken çok çeşitli seçenekler sunar: tam metin arama, otomatik tamamlama ve anında arama, kullanıcıların aradıklarını daha hızlı bulmalarını sağlar. Bu özellikler yazarken öneriler sunar ve hatta yazım hatalarını düzelterek kullanıcı deneyimini geliştirir.
Elasticsearch, Apache Lucene altyapısını kullanarak verileri hızlı bir şekilde işler. Bu, büyük veri setlerinde bile yüksek hızlı ve verimli aramalara olanak tanır.
Elasticsearch genellikle veri yazma ve okuma işlemlerini bir saniyeden daha kısa sürede gerçekleştirir. Bu, özellikle gerçek zamanlı veri analizi gerektiren uygulamalar için büyük bir avantajdır.
Elasticsearch verileri otomatik olarak birden fazla sunucuya dağıtarak işler. Bu hem veri güvenliği hem de yüksek kullanılabilirlik sağlar. Ayrıca sistemde bir arıza olması durumunda bile hizmet kesintisine neden olmaz.
Elasticsearch, herhangi bir veri kaybı durumunda bile kolayca kurtarılabilmesi için verilerin sürekli olarak yedeklenmesini sağlar. Çok düğümlü yapı, verilerin güvenliğini ve sistemin sürekli çalışma süresini garanti eder.
Geniş bir eklenti yelpazesi sunan Elasticsearch, çeşitli ihtiyaçlara göre özelleştirilerek işlevselliği artırılabilir. Bu eklentiler güvenlikten veri analizine kadar geniş bir kullanım alanı sunuyor.
Elasticsearch kullanırken güvenlik önlemleri son derece önemlidir. Kullanıcı kimlik doğrulaması, erişim kontrol listeleri ve veri şifreleme gibi özellikler hassas verilerin korunmasını sağlar.
Elasticsearch paket deposunun güvenlik anahtarını ekleyerek başlayalım.
Elasticsearch paketlerini almak için depo kaynaklarını ekleyin.
Sistem paketlerini güncelleyerek ve Elasticsearch paketini kurarak işlemi tamamlayın
Kurulum tamamlandıktan sonra, Elasticsearch'ü yapılandırmak için bazı temel ayarları yapmanız gerekecek.
Elasticsearch yapılandırma dosyasını düzenleyerek cluster adı ve node adını belirleyin. Bu dosya genellikle /etc/elasticsearch/elasticsearch.yml yolunda bulunur.
Aşağıdaki örnek ayarlar, temel bir Elasticsearch yapılandırmasını gösterir:
Cluster Adı:
Node Adı:
JVM bellek ayarlarını optimize edin. Bu ayarlar, Elasticsearch'ün performansını doğrudan etkiler. JVM ayarları /etc/elasticsearch/jvm.options dosyasında düzenlenebilir.
Aşağıdaki ayarlar, JVM'ye 1 GB bellek tahsis eder:
Elasticsearch hizmetini başlatın ve sistem yeniden başlatıldığında otomatik olarak başlamasını sağlayın.
Elasticsearch'ün doğru bir şekilde çalıştığını doğrulamak için aşağıdaki komutu kullanın. Bu komut, Elasticsearch'ün çalıştığını ve istekleri kabul ettiğini kontrol eder.
Başarılı bir yanıt aşağıdakine benzer olacaktır:
Kurulumun ardından, Elasticsearch'ü daha verimli kullanabilmek için ileri seviye yapılandırmalar yapabilirsiniz.
Elasticsearch'ü bir tersine proxy (reverse proxy) arkasında çalıştırmak isteyebilirsiniz. Bu, özellikle güvenlik ve yük dengeleme amaçlarıyla yaygın bir uygulamadır. Örneğin, Nginx kullanarak bir tersine proxy ayarlayabilirsiniz.
Elasticsearch, veri güvenliği için çeşitli özellikler sunar. Aşağıdaki ayarları yaparak Elasticsearch'ü daha güvenli hale getirebilirsiniz:
Kullanıcı Kimlik Doğrulaması ve Yetkilendirme: X-Pack güvenlik özelliklerini etkinleştirin.
TLS/SSL Konfigürasyonu: Veri trafiğini şifreleyin.
Erişim Kontrol Listeleri (ACL): Belirli kullanıcılar için erişim izinleri belirleyin.
Büyük veri kümeleri ve yüksek sorgu trafiği için performans optimizasyonları yapabilirsiniz:
Indeks Ayarları: İndeks oluştururken optimize edin.
Shard Yönetimi: Shard ve replika sayılarını optimize edin.
Heap Belleği Ayarları: JVM heap boyutlarını doğru ayarlayın.
Elasticsearch'ü kurarken ve yapılandırırken bu adımları izlemek, sisteminizin düzgün çalışmasını ve en yüksek performansı sağlamasına olanak tanır.