Ana içeriğe atla

Fun With Docker..ELK Stack- ElasticSearch

Herkese Merhaba,

Fun with Docker yazı serisine ELK Stack kurulumunu aktaracak, yazı dizisi içerisinde yeni bir yazı dizisiyle devam etmeye karar verdim.

Bilmeyenler için ELK, 3 ayrı open source proje olan Elasticsearch, Logstash ve Kibana projelerinin birleşiminden oluşan yine open source olarak kullanıma sunulan ve bakımı Elastic tarafından  yürütülen bir proje.


Bu arada ELK Stack ile ilgili tüm detaylara https://www.elastic.co/elk-stack linkini kullanarak ulaşabilirsiniz. 

Peki biz yazı dizisi sırasında ELK Stack ile neler yapmaya çalışacağız?

Docker hostumuz (Windows 10) üzerinde File Beat kurarak, IIS Loglarını toparlayacağız. Topladığımız bu IIS loglarını container üzerinde koşan LogStash'e gönderecek ve LogStash üzerinde yaptığımız konfigürasyonlarla parse operasyonunu tamamlayıp, oluşan anlamlı datayı yine container üzeride koşan ElasticSearch 'e insert edeceğiz. Insert ettiğimiz tüm bu log datasını ise yine container imajı olarak ayağa kaldırıp, konfigürasyonunu yaptığımız Kibana ile görüntüleyeceğiz. 

Yazı dizisi tamamlandığında, docker açısından önemli challangelardan bir tanesi olarak karşımıza çıkabilecek containerlar arasındaki network iletişimi ve sytem adminler açısından büyük bir challange olan log toplama ve raporlama konularını containerlar üzerinde ELK sistemi ayağa kaldırarak bir çözüme kavuşturmuş olacağız. Umarım elime yüzüme bulaştırmadan çalışan bir sistem kurabilirim:)

Yazının ilk bölümüne tüm projenin ve yazı dizimizin depend ettiği ElasticSearch kurulumu ile başlayacağız. 

Herşeye başlamadan önce Docker for Windows ile yeni tanışıyorsanız, community (ce) edition ‘ı download ederek bilgisayarımıza kurmamız gerekiyor. https://www.docker.com/docker-windows

Docker for Windows kurulumunu tamamladıktan sonra repositoryde ihtiyacımız olan imajı local repositorye indirerek kuruluma devam edebiliriz.

Öncelikle komutlarımızı çalıştırabilmek için Powershell’i run as administrator moduyla açtığımızdan emin olalım ve Powershell admin modunda açıldıktan sonra aşağıdaki komut ile ElasticSearch imajını indirelim.

docker pull elastic/elasticsearch:6.2.2

Kullanacağım imaj uyum problemi olmaması için yine elastic tarafından maintain edilen imaj olacak. Pull işlemi tamamlanana kadar aşağıdaki linki kullanarak repository hakkında detaylı bilgi edinebilirsiniz.


Artık aksiyon aşamasına geçebiliriz.. Testlerim sırasında kullandığım imajlarımı, default olarak kullanılan bridge network yerine yine bridge driveri kullanarak oluşturduğum custom bir networkle çalıştırdım. Siz de benim gibi containerları static ipyle çalıştırmak istiyorsanız, aşağıdaki komutları takip etmenizi öneririm. Docker networking konusu detaylı olarak araştırmanız ve test etmeniz gereken bir konu. Bununla ilgili dilerseniz Docker dokümantasyonlarını inceleyebilirsiniz. Ben network layerın detaylarında boğulmadan hızlıca tanımları yapacağım;

Reklam içeren:) bu yeni networku oluşturmak için;

docker network create --driver bridge --subnet=172.18.0.0/24 ogretmenNw 

komutunu kullanmanız yeterli olacaktır. Eğer 172.18.0.0/24 subnetini kullanan başka custom bir  network tanımınız yok ise hata almadan yeni network oluşturma işlemini tamamlayabilirsiniz. Komutun işe yarayıp yaramadığını görmek için ise aşağıdaki komutu;

docker network ls

Havalı olsun isterseniz de;

(docker network ls)[-1]

komutunu kullanabilirsiniz.  Powershell çok güçlü bir scripting dili, [-1] ile dizinin son indexine ait değeri bizim için çekip getiriyor, sanırım Python'dan esinlenmişler:) Dağılmadan hemen ElasticSearch kurulumuyla devam edelim...

ElasticSearch kurulumu da Jenkins kurulumu kadar kolay, bu sefer kullanması gereken portu da önceden kontrol ettim ve aşağıdaki komutu çalıştırdım, işte Docker for Windows ile ElasticSearch kurulumu bu kadar kolay...

docker run -p 9200:9200 -p 9300:9300 --network ogretmenNw --name myElastic --hostname myElastic --ip 172.18.0.21 -e "discovery.type=single-node" elastic/elasticsearch:6.2.2 


Sonraki yazılarımızda kullanacağımız önemli konfigürasyon noktalarını da içeren bu komutla, myElastic isimli yeni bir container oluşturdum. Bu container'in hostname 'i de display name 'i gibi myElastic oldu. IP addressi 172.18.0.21 ve 9200-9300 portlarını docker hosta expose ediyor. 

Elbette ElasticSearch tek başına ELK Stack için yeterli değil ancak olmazsa olmazı. Peki bu ElasticSearch ü kurduk da ne oldu, nasıl bağlanırız, ne yaparız diyorsanız. Bu amçala kullanmak için Chrome extensionlar arasından ElasticSearch Head plugini kullanabilirsiniz.



Yukarıdaki bölüme http://localhost:9200 yazarak localhost üzerinden Elasticsearch'e bağlantı kurarak, dilediğiniz gibi ElasticSearch ü bozabilirsiniz:) İyi eğlenceler...


Yorumlar

Bu blogdaki popüler yayınlar

gMSA (group managed service account) and SQL Server

MSA (managed user account) teknolojisinin sorunlarından bir tanesi aynı MSA'i birden fazla computer objesinde kullanamamaktı. Bu nedenle de gMSA (group managed service account) duyuruldu. gMSA ile; Passwordler Active Directory tarafından yönetileceği için complex olurlar ve sık sık otomatik olarak değiştirilir (default 30 days). Passwordler 240 bytes uzunluğunda randomly şifrelenmiş olarak üretilir. Ek olarak interactive logon amaçlı kullanılamazlar, yanlış şifre girilmesi sonucunda meydana gelen lock-out olma durumuna yakalnmazlar. Şifre değişikliği sonrasında SQL Server Servisinin restart edilmesine gerek bulunmaz. Aşağıda belirtilen adımlar pre-reqlerin tamamlanmış olduğu varsayılarak step by step aktarılmıştır. Prerequisetlerle ilgili detaylı bilgilendirmeye  https://technet.microsoft.com/en-us/library/jj128431.aspx#BKMK_gMSA_Req  linkinden erişilebilir. 1-  Active Directory Users and Computers Altında Global Security Group Oluşturma gMSA 'i kullanacağım...

VbScript ile Local Kullanici Yönetimi (Change Local User Password)

Bu yazı Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 ve Windows Server 2016 işletim sistemleri üzerinde kullanılabilecek bilgiler içerir. Birden fazla sunucuda ya da bilgisayar üzerinde işlem yapmak otomasyon ve scripting gerektiren bir süreçtir. İhtiyaç dahilinde yazmış olduğum scriptle txt uzantılı bir dosyadan sunucu isimleri teker teker okunarak, loop döngüsü içerisinde sunuculara bağlantı kuruluyor ve şifresi değiştirilmek istenilen local kullanıcının sistemde tanımlı olup olmadığı kontrol ediliyor. Eğer local kullanıcı yok ise kullanıcı verilen şifre ile create edilerek administrators lokal grubuna dahil ediliyor, kullanıcı sistemde tanımlı ise şifresi yeni şifreyle değiştiriliyor. Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("D:\computerlist.txt", 1) myUserName = "myUser" myPassword = "myNewP@$$w0rd" Do Until objTextFile.AtEndOfStream ...

PWDCOMPARE() ile SQL Server'da NonCompliant Password kontrolü

Bu yazı SQL Server 2008 ve sonrasi için geçerli bir yazıdır. SQL Server üzerinde tanımlı SQL loginlerin şifrelerinin bazı çok bilinen şifrelerle aynı olup olmadığı kontrolü yapılır. Faydalı oması dileğiyle. İlgili Transact-SQL'in kullanım şekli (syntax) aşağıdaki gibidir. PWDCOMPARE ( 'clear_text_password', password_hash [ , version ] ) Kullanılabilecek argümanların açıklaması aşağıdaki gibidir.  clear_text_password: Kontrol edeceğimiz şifrelenmemiş (unecnrypted) password.   password_hash: Logine ait password encrption hash bilgisi.  version: İsteğe bağlı olarak kullanılabilen bu parametre ile SQL Server 2000 öncesinden  taşınan ancak yeni versiyona convert edilmemiş loginlerin password_hashlerinin kontrol  edilmesi imkanı tanınır. Aşağıdaki T-SQL ile şifresi boş olan loginler getirilir. SELECT name FROM sys . sql_logins    WHERE PWDCOMPARE ( '' , password_hash ) = 1   Aşağıdaki T-SQL ile şifresi passwo...