İlişkisel Veritabanından Elasticsearch Servisine Logstash ile Veri Aktarımı
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:
- Öncelikle 2.a adımında zipten çıkardığımız Logstash dosyasını açıyoruz.
- Daha sonra bu dosyanın içerisinde
jdbc.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:
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.