DEV Community ­čĹęÔÇŹ­čĺ╗­čĹĘÔÇŹ­čĺ╗

Elasticsearch nedir?

1. Tan─▒m

Elasticsearch, b├╝y├╝k bir ├žo─čunlu─ču Java programlama dili ile yaz─▒lm─▒┼č, ├Âzg├╝r ve a├ž─▒k kaynak kodlu bir arama motorudur.

Arama motoru denilince muhtemelen akl─▒n─▒za web sayfalar─▒n─▒ aratan bir sistem gelse de asl─▒nda arkadaplan─▒nda "b├╝y├╝k" bir i├žeri─či "bar─▒nd─▒ran", bu bilgiler ├╝zerinde "arama" yap─▒labilen ve bu aramalara cevap verip "analiz" yap─▒labilen bir "veritaban─▒n─▒" bar─▒nd─▒rmaktad─▒r. Ayr─▒ca bu veritaban─▒ kendi i├žerisinde olduk├ža g├╝zel bir ┼čekilde da─č─▒t─▒k (distributed) ve k├╝me (cluster) ┼čeklinde ├žal─▒┼čabilmektedir.

2. Kullan─▒m ama├žlar─▒

Yukar─▒da bahsetti─čim ┼čekilde tasarlanm─▒┼č bir arama motoru (engine) ├že┼čitli ama├žlarla kullan─▒lmaktad─▒r. Kendi github sayfalar─▒nda belirtildi─či ┼čekilde en yo─čun 5 kullan─▒m amac─▒ a┼ča─č─▒daki gibi s─▒ralanabilir:

  • K├╝t├╝k kay─▒tlar─▒ (log)
  • ├ľl├ž├╝lebilen veriler (metric)
  • Arama altyap─▒s─▒ (search backend)
  • Uygulama izleme (monitoring)
  • U├žnokta g├╝venli─či (endpoint security)

3. Temel kavramlar

Elasticsearch i├žerisinde veri tutmas─▒ndan dolay─▒ tamamiyle bir veritaban─▒ olarak d├╝┼č├╝n├╝lebilir. Fakat i├žerisindeki kavramlar ili┼čkisel veritabanlar─▒na g├Âre olduk├ža farkl─▒d─▒r.

Klasik bir veritaban─▒nda sisteminde tablolar bulunmaktad─▒r. Elasticsearch'te ise bu tablolar yerine indice'ler kullan─▒lmaktad─▒r.

─░li┼čkisel veritabanlar─▒ndaki sat─▒r kavram─▒ yerine ise NoSQL yap─▒lar─▒nda kar┼č─▒m─▒za ├ž─▒kan document kavram─▒ ortaya ├ž─▒kmaktad─▒r. Ve tabi ki tahmin edildi─či gibi JSON olarak tutulmaktad─▒r.

─░li┼čkisel veritabanlar─▒ndaki sutun kavram─▒ ise elasticsearch'te field olarak kullan─▒lmaktad─▒r.

4. Ortam Haz─▒rlama

4.1. Kurulum

├ľrnek kurulumumuzu Ubuntu 20.04 sunucu ├╝zerinde yapaca─č─▒z. Bunun i├žin ├Âncelikle elasticsearch anahtar─▒n─▒ ekleyip, sunucumuza deposunu ekleyerek kurulumu yapabiliriz. Tabi ki a┼ča─č─▒daki komutlar─▒n uygulanmas─▒ i├žin yetkili bir kullan─▒c─▒ ile giri┼č yap─▒lmas─▒ gerekmektedir.

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch
Enter fullscreen mode Exit fullscreen mode

4.2. Yap─▒land─▒rma

Sevdi─činiz bir edit├Âr ile /etc/elasticsearch/elasticsearch.yml dosyas─▒n─▒ a├ž─▒p a┼ča─č─▒da belirtildi─či ┼čekilde d├╝zenlemeler yapman─▒z tavsiye edilir. A┼ča─č─▒daki ├Ârnekteki sat─▒rlar diyezle ba┼člamamal─▒ ve di─čer t├╝m sat─▒rlar diyez ile kapal─▒ olmal─▒d─▒r. ├çe┼čitli farkl─▒ kombinasyonlar da ├žal─▒┼čabilir fakat ilk denemenizse buna dikkat etmeniz gerekir.

cluster.name: kumeadi01
node.name: dugum01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
Enter fullscreen mode Exit fullscreen mode

Buradaki yap─▒land─▒rma elasticsearch'├╝ uzaktaki bir ortamdan da ├žal─▒┼čt─▒rabilmek ve tek node'luk bir sistemi olu┼čturmaktad─▒r. Daha detayl─▒ bilgi i├žin detayl─▒ dok├╝manlar─▒ inceleyebilirsiniz.

Bu yap─▒land─▒rma ayarlar─▒ ile birlikte 9200 portu ├╝zerinden t├╝m a─č ├╝zerinden REST API ile sorgu at─▒labilecek ┼čekilde ayarlar─▒ yap─▒lm─▒┼č olacakt─▒r.

4.3. Servisi ba┼člatma

Servisi ba┼člat─▒p, a├ž─▒l─▒┼čta hep ba┼člamas─▒ i├žin a┼ča─č─▒daki iki komut kullan─▒labilir. Servisin aya─ča kalkmas─▒ biraz zaman alacakt─▒r.

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
Enter fullscreen mode Exit fullscreen mode

4.4. Kontrol

Servisin aya─ča kalkt─▒─č─▒na emin olduktan sonra a┼ča─č─▒daki komut ile elasticsearch sunucusu ├╝zerinden sorgu at─▒p;

curl -X GET 'http://localhost:9200'
Enter fullscreen mode Exit fullscreen mode

A┼ča─č─▒daki gibi ├ž─▒kt─▒ alabilirsiniz:

{
  "name" : "dugum01",
  "cluster_name" : "kumeadi01",
  "cluster_uuid" : "TQuwevhrRvCCvfSAmz0Mxg",
  "version" : {
    "number" : "7.17.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
    "build_date" : "2022-02-23T22:20:54.153567231Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
Enter fullscreen mode Exit fullscreen mode

K├╝menin sa─čl─▒k durumu i├žin de a┼ča─č─▒daki komut kullan─▒labilir:

curl -XGET 'http://localhost:9200/_cluster/health?pretty'
Enter fullscreen mode Exit fullscreen mode
{
  "cluster_name" : "kumeadi01",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 15,
  "active_shards" : 15,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 5,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 75.0
}
Enter fullscreen mode Exit fullscreen mode

5. Basit Uygulama

├ľrnek bir uygulama yapmak i├žin a┼ča─č─▒daki komut kullan─▒labilir:

curl -XPOST 'http://localhost:9200/indis01/uygulama01' -H 'Content-Type: application/json' -d'
{
"timestamp": "2021-03-05 20:00:00",
"message": "├Ârnek bir mesaj",
"ustid": 4,
"deneme": false
}
'
Enter fullscreen mode Exit fullscreen mode

Bu uygulama ile basit bir indice ├╝zerinde (indis01) uygulama01 isimli bir type (uygulama01) olu┼čturulmu┼č oluyor. Bu tip i├žerisinde ise JSON format─▒ndaki i├žerikteki gibi document olu┼čturuluyor. Ve bu document i├žinde timestamp, massage, ustid, deneme gibi field'ler bulunmakta.

Bu sorgu a┼ča─č─▒daki gibi bir ├ž─▒kt─▒ vermi┼č olmas─▒ laz─▒m.

{"_index":"indis01","_type":"uygulama01","_id":"7UUHW38BvbmLU0LnqFFb","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1
Enter fullscreen mode Exit fullscreen mode

Ayr─▒ca indisinizin eklendi─čini g├Ârebilmek i├žin a┼ča─č─▒daki komutu ├žal─▒┼čt─▒rarak ├ž─▒kt─▒daki tablodan takip edebilmelisiniz ve indis01'i g├Ârebilmeniz gerekmekte.

curl -XGET 'http://localhost:9200/_cat/indices?v&pretty'
Enter fullscreen mode Exit fullscreen mode

5. Geli┼čmi┼č Uygulamalar

Bu ad─▒mdan sonra Elasticsearch'in API dok├╝mantasyonu ve ├že┼čitli tutoriallarla devam edilebilece─či gibi farkl─▒ se├ženekler bulunmaktad─▒r. Bunlardan en pop├╝ler 3 tanesi a┼ča─č─▒daki gibidir. Bu yap─▒lara Elastic Stack ad─▒ da verilebilmektedir.

  • Logstash
  • Fluentd
  • Filebeat

Logstash, ├že┼čitli ve farkl─▒ kaynaklardan beslenerek elasticsearch'├╝ ├žok geni┼čletebilmektedir. Ve bu yap─▒ya k─▒saca ELK ad─▒ veriliyor.

Fluent, ise benzer ┼čekilde elasticsearch'├╝ beslemek i├žin genellikle Kubernetes ortamlar─▒nda kullan─▒ld─▒─č─▒n─▒ g├Âr├╝yoruz. Ve bu yap─▒ya da EFK ad─▒ verilmektedir.

Filebeat'i ise hem logstash'i besleyecek ┼čekilde hem de direkt olarak elasticsearch'├╝ besleyecek ┼čekilde yap─▒land─▒rabiliyorsunuz.

├ťstte bahsetti─čimiz yap─▒lar─▒n g├Ârselle┼čtirilmesi i├žin de genellikle Kibana kullan─▒lmaktad─▒r ve geli┼čmi┼č se├ženekler sunmaktad─▒r. Fakat yaz─▒m─▒z─▒n konusu olmad─▒─č─▒ i├žin bu k─▒s─▒mlara pek girmedim.


Pax melior est quam iustissimum bellum

Top comments (2)

Collapse
 
sahinmehmetemre profile image
Mehmet ┼×ahin

├çok g├╝zel anlatm─▒┼čs─▒n─▒z, elinize sa─čl─▒k. Bizim yakla┼č─▒k 40bin kullan─▒c─▒l─▒ bir platformumuz mevcut. Arama ve filtreleme i┼člemlerini platformun altyap─▒s─▒n─▒ sa─člayan programlama dili ile yap─▒yoruz. Bu k─▒s─▒mda elastiksearch kullansak ne gibi art─▒lar─▒ olur, performans─▒ ├žok etkiler mi?

Collapse
 
aliorhun profile image
Ali Orhun Akkirman Author

─░li┼čkisel veritaban─▒ tipi sorgular at─▒yorsan─▒z pek bir faydas─▒ olmaz fakat "document"(json) bazl─▒ veriler ve bu veriler i├žerisinde "text" tipi aramalar yap─▒yorsan─▒z kesinlikle faydas─▒ olacakt─▒r.

­čîÜ Life is too short to browse without dark mode