İlişkisel Veritabanından Elasticsearch Servisine Logstash ile Veri Aktarımı

Umutcan Karakaş
4 min readNov 2, 2022

--

Photo by Robin Pierre on Unsplash

Selamlar,

Bu yazımda ilişkisel bir veritabanından, ki bu yazıda MySQL üzerinden anlatacağım, Elasticsearch servisine Logstash ile nasıl veri aktarabileceğimizi anlatacağım. Bu konuda bazı kaynaklar bulunmakta, direkt olarak Elastic’in bile bir dökümanı bulunmakta. Fakat bu kaynaklar biraz kafa karıştırıcı olabilmekte, en azından ben düzgün bir kaynak bulmakta zorlandım. Dolayısıyla derli toplu Türkçe bir kaynak oluşturmak istedim. Umarım işinize yarar. Başlayalım.

Bu yazımda her şeyi sıfırdan lokale kurarak yapacağım. Eğer elinizde hazır hali varsa ilgili bölümü atlayabilirsiniz.

1- Kurulumlar

1.a- MySQL Kurulumu

Kendi bilgisayarınıza MySQL sunucunuzu kurup veritabanı oluşturabilmeniz için bu yazımı okuyabilirsiniz.

Eğer okuyup geldiyseniz süper, bilgisayarımızı ufak bir MySQL sunucusuna çevirdik ve yeni bir veritabanı yaratıp içini veriyle doldurduk. Sırada Elasticsearch ve Kibana kurulumumuz var.

1.b- Elasticsearch ve Kibana Kurulumu

İkinci olarak bilgisayarınızda Elasticsearch ve Kibana kullanabilmek için bu yazımı okuyabilirsiniz.

Eğer bu aşama da bittiyse artık Logstash bölümüne geçebiliriz.

2- Logstash

Logstash yine bir Elastic ürünü olup Elastic Stack’in önemli bileşenlerinden birisidir. MySQL tarafından Elasticsearch servisine veri aktarımı için kullanacağımız Logstash’te spesifik olarak belirtmek gerekirse JDBC (Java Database Connectivity) girdi eklentisini kullanacağız.

2.a- Logstash İndiriyoruz

Öncelikle bu linkten Logstash’i indirip zipten çıkarıyoruz. Daha sonra bu çıkardığımız dosyaya geri döneceğiz.

2.b- Veritabanı Bağlantı Sürücüsü İndiriyoruz

Logstash herhangi bir veritabanı bağlantı sürücüsü içermediğinden dolayı bir sürücü (Connector/J) de indirmemiz gerekecek. Onu da ya bu linkten indirebilirsiniz ya da daha önce bilgisayarınıza kurduğunuz MySQL Installer içerisinden ekleyebilirsiniz. Ben ikinci seçenekten ilerliyorum:

Burada Add… butonuna tıklayıp şu şekilde seçimimi yaptım:

Geri kalan adımları da ilerleyerek yüklememizi tamamlıyoruz:

2.c- JDBC Giriş Eklentisiyle Bir Logstash Veri Akış Hattı (Pipeline) Hazırlıyoruz

Şu anda MySQL ile çalışıyoruz ama bu işlemleri JDBC destekleyen herhangi bir veritabanı ile yapabilirsiniz. Bu bilgiyi de verdikten sonra devam ediyorum:

  1. Öncelikle 2.a adımında zipten çıkardığımız Logstash dosyasını açıyoruz.
  2. Daha sonra bu dosyanın içerisindejdbc.conf adında yeni bir metin dosyası yaratıyoruz ve aşağıdaki kodu bu metin dosyasının içine kopyalıyoruz:

3. jdbc_driver_library bölümüne versiyon numarasıyla birlikte JDBC sürücüsünün .jar dosyasının bilgisayarınızdaki tam yolunu vermeniz gerekmekte. MySQL Installer içerisinden bu yolu bulabilirsiniz:

4. jdbc_connection_string bölümüne MySQL bağlantımızla ilgili bağlantı dizimizi giriyoruz:

MySQL Workbench’te yarattığımız lokal veritabanı

5. jdbc_user ve jdbc_password bölümlerine de veritabanına giriş yaparken kullandığımız kullanıcı adı ve şifreyi giriyoruz. Bendeki son hali şöyle görünüyor:

6. Logstash dosyasının içerisinde şu komutu çalıştırıyoruz:

bin\logstash -f jdbc.conf

Sonuç olarak şu anda veri tabanındaki tüm müşteri bilgilerini çıktı olarak hazırlayıp gösteriyor:

7- jdbc.conf dosyamızın output bölümünü de ekleyip kendi elastic bilgilerimize göre güncelliyoruz. Bendeki conf dosyasının son hali:

Bu yazıyı yazarken aynı zamanda kendim de adım adım denediğim için yaşadığım birkaç soruna göre düzenlemeler yaptım. Örneğin çalışır bir hale getirmek için filtreleri düzenledim, tracking_column’u kendi veritabanıma göre değiştirdim ve sertifikayla ilgili sıkıntılar çıktığı için ssl ve ssl_certificate_verification bölümlerini ekleyip hosts bölümüne de url’yi “https” şeklinde ekledim. Dolayısıyla siz yukarıdaki halini kullandığınız zaman sorun yaşamıyor olmalısınız :) -jdbc_password kısmını yine de kendinize göre değiştirmeniz lazım tabii ki-

8- Tekrar logstash komutumuzu çalıştırıyoruz:

bin\logstash -f jdbc.conf

MySQL verilerimizin akışını görebiliyoruz:

9- Şimdi Kibana tarafına geçip dev tools bölümünden indeximizin içerisinde aramamızı yapabiliriz:

Bu şekilde verilerimizi MySQL tarafından Elasticsearch tarafına geçirmeyi başarabildik. İyi çalışmalar dilerim.

--

--

Umutcan Karakaş

İstanbul’da yaşayan bir yazılım geliştiriciyim. Üzerinde çalıştığım konularda ilginizi çekebilecek Türkçe kaynak oluşturmak için yazıyorum.