İçeriğe geç
Muhammet Şafak
Araçlar & Teknolojiler 3 dk okuma

ElasticSearch ve Kibana ile Büyük Veriye Giriş

Elasticsearch ve Kibana ile büyük veriye giriş: metin arama, analiz ve görselleştirmenin temelleri.


Bir noktada her uygulamanın veritabanı araması yetmez hale gelir. LIKE '%...%' ile gelen performans sorunu, log verilerini sorgulama ihtiyacı ya da milyonlarca kayıt üzerinde anlık filtreleme talebi — bunların hepsinin arkasında aynı gerçek yatar: ilişkisel veritabanları tam metin araması ve büyük veri analizi için tasarlanmamıştır. Elasticsearch bu boşluğu doldurmak için var.

Elasticsearch, açık kaynaklı bir arama ve analiz motorudur. Temelinde Apache Lucene yatar; Lucene’in güçlü indeksleme altyapısını, HTTP üzerinden JSON tabanlı bir API’ye, dağıtık ve yatay ölçeklenebilir bir mimari üzerine oturtur. Yapılandırılmamış metin, log kayıtları, zaman serisi verileri ve coğrafi koordinatlar gibi farklı veri türlerini aynı sistem altında depolayıp sorgulayabilirsiniz.

Elasticsearch Veriyi Nasıl Saklar?

İlişkisel veritabanında “tablo” ve “satır” olan şeyler Elasticsearch’te index ve document olarak karşınıza çıkar. Bir index, belirli türdeki belgeleri barındıran mantıksal bir birimdir; bir document ise JSON formatındaki tek bir veri kaydıdır.

Büyük ölçekte çalışmasını sağlayan dağıtık yapı şöyle işler: her index, shard adı verilen parçalara bölünür. Her shard aslında bağımsız bir Lucene instance’ıdır ve farklı düğümler üzerine dağıtılır. Shard’ların replica’ları hem yüksek erişilebilirlik için yedek görevi görür hem de okuma yükünü dağıtır.

Bu mimarinin pratik sonucu: bir düğüm arızalandığında replica shard’lar devreye girer, veri kaybı olmaz ve sistem çalışmaya devam eder. Geliştirme ortamında tek düğüm yeterlidir; production’da bu yapıyı doğru boyutlandırmak önemli.

Elasticsearch’ün Asıl Güçlü Olduğu Yerler

Elasticsearch her iş için değil, belirli problemler için doğru araç:

Tam metin araması: Basit string eşleştirmenin ötesinde, metni analiz eder — kök bulma, eş anlamlı genişletme, alakalılık skoru hesaplama. Bir e-ticaret sitesinde “koşu ayakkabı” araması yapıldığında “koşu ayakkabıları” sonuçlarının gelmesi bu analiz katmanının işi.

Log ve izleme analizi: Saniyede binlerce log satırını yazmak ve üzerinde gerçek zamanlı sorgu çalıştırmak için kullanılır. ELK stack — Elasticsearch, Logstash, Kibana — bu kullanım senaryosunun klasik kombinasyonudur.

Zaman serisi verileri: Her kayda zaman damgası iliştirip “son bir saatin en yoğun dakikası hangisi” gibi sorular sormak, zaman bazlı histogram almak için optimize edilmiştir.

Coğrafi sorgular: Koordinat tabanlı veriyi depolayıp “bu konuma X km yakın kayıtları getir” gibi geo-distance sorgularını çalıştırmak kutu dışı desteklenen bir özellik.

İlişkisel veritabanının yaptığı işi yapmaz — transaction, foreign key, join. Bu ikisi rakip değil, tamamlayıcı: uygulama verisi MySQL/PostgreSQL’de, arama ve analiz katmanı Elasticsearch’te.

Kibana: Veriyi Okumak

Kibana, Elasticsearch verisini görselleştiren arayüzdür. Elasticsearch’e doğrudan curl ile ya da istemci kütüphanesi üzerinden ulaşmak mümkün, ama Kibana bu veriyi insan gözü için düzenler.

Birkaç temel kullanım alanı:

  • Discover: Veriyi sorgulayıp ham belgeleri incelemek için. Log araştırması burada yapılır.
  • Visualize/Dashboard: Metriklerden grafik oluşturup bir araya getirmek. Çizgi grafik, pasta, ısı haritası, sayaç — tümü sürükle-bırak ile.
  • Dev Tools: Kibana’nın içinden doğrudan Elasticsearch’e Query DSL göndermek için. API’yi öğrenirken vazgeçilmez.

Kibana ayrıca Machine Learning eklentileri ve Alerting ile birlikte gelir; bunlar paid tier’a taşınmış olsa da temel görselleştirme özellikleri ücretsiz.

Docker ile Kurulum

Geliştirme ortamı için en pratik yol Docker Compose. Her iki sürümün de eşleşmesi gerekiyor:

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.8.1
docker run -d --name kibana --net somenetwork -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" kibana:8.8.1

Ya da docker-compose.yml ile:

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.8.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - somenetwork

  kibana:
    image: docker.elastic.co/kibana/kibana:8.8.1
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    networks:
      - somenetwork

networks:
  somenetwork:
    driver: bridge
docker-compose up -d

Kurulum tamamlandıktan sonra Elasticsearch http://localhost:9200, Kibana ise http://localhost:5601 adresinden erişilebilir.

Elasticsearch 8.x ile birlikte güvenlik varsayılan olarak etkin geldi — HTTP Basic Auth ve TLS kutu dışı aktif. Geliştirme ortamında bunu devre dışı bırakmak için xpack.security.enabled=false ortam değişkeni eklemek gerekiyor; aksi hâlde 401 ile karşılaşırsınız.

Bir Sonraki Adım

Bu yazı Elasticsearch ve Kibana’nın temel kavramlarını ve kurulumunu kapsıyor. Gerçek kullanımda ilk takıldığınız yer büyük olasılıkla Query DSL olacak — Elasticsearch’in JSON tabanlı sorgu dili başlangıçta alışılmadık görünür ama bir kez oturduğunda çok güçlü. Mapping tanımı, analyzer seçimi ve aggregation’lar da ilerleyen adımlarda değineceğim konular.

Etiketler: #ElasticSearch
Paylaş:

İlgili Yazılar

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi