Kubernetes ELK Stack Kurulumu HELM Chart
Ubuntu 20.04 & Helm Chart
Merhabalar,
Bu yazımda Helm chart ile Kubernetes Clusterımıza ELK kurulumunu inceliycez
ElasticSearch: Adından da anlaşılacağı gibi içerik arama, veri analizi ve veri sorgulama işlemlerinde özellikle performans kabiliyetleri, güçlü ve esnek olmasından dolayı tercih ettiği bir search engine’dir. ElasticSearch, java dili ile geliştirilmiş, “Lucene” altyapısı üzerine oturtulmuş open-source bir arama motorudur.
Logstash: Kaynaklardan veri toplayan, farklı dönüşümler ve geliştirmeler gerçekleştiren ve ardından verileri desteklenen çeşitli çıkış hedeflerine gönderen bir log toplayıcıdır. Kısaca, Toplanan verilerin düzenlenip, anlamlı hale gelebilmesini sağlayan araçtır. Birçok farklı kanallardan konuşabilme yeteneği vardır. (Rest service , tcp , udp vs). Uygulamanız ve ElasticSearch arasında adeta bir köprü görevi gören bir yazılımdır. Konfigürasyon dosyası 3’e ayrılır. Input, Filter ve Output dur.
FileBeat: Veri iletme platformudur. Tek amacı loglarınızı hedeflediğiniz yere değişimsiz taşınmasını sağlamasıdır. Sisteme ek yükte bulunmadan agent görevi gören yüzlerce veya binlerce makinadan Logstash veya Elasticsearch’e veri gönderimini sağlayan ‘Beat’leri içerir.
Kibana: Elasticsearch’ün üstünde çalışır. Kullanıcılara verileri analiz etme ve görselleştirme olanağı sağlayan bir monitor aracıdır. ElasticSearch’e bağlanarak, buradaki datayı anlık olarak izlemeye, incelemeye, sorgular yapmaya ve içeriğe göre grafikler çıkarmamısı sağlar.
Helm: Helm, Kubernetes için bir paket yöneticisidir. Yani , Kubernetes üzerine uygulamaların kurulmasını, yönetilmesini ve konfigürasyonlarının yapılmasına yardımcı olur . Helm “Chart” adı verilen Kubernetes kaynakları için genel bir format ve klasör yapısı sağlar ve bu kaynakların depolanabilmesi ve paylaşılabilmesi için bir public bir repository sağlar.
İlk olarak Helm kurulumu yapalım. Aşağıdaki linkten işletim sistemimize göre kurulum yapabilirsiniz.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.shhelm version
Elk Stackimizi minikube ortamımızdaki kubernetes clusterında gerçekleştircez. Eğer minikube sisteminizde yüklü değil ise aşağıdaki linkten yükleyebilirsiniz.
minikube start --cpus=4 --memory=8000
Kibana Ingress olarak dışarı açacağımız için minikube den ingress aktifleştirmemiz gerekiyor.
minikube addons listminikube addons enable ingress
ilk olarak monitoring adında bir tane namespace oluşturuyoruz.
kubectl create ns monitoring
Kurulum yapacağımız ELK-Stach github repository den kurulum yapacağımız makineye indiriyoruz. Aşağıdaki linkten indirebilirsiniz.
git clone https://github.com/elastic/helm-charts.git
ilgili klasöre giderek elasticsearch klasörüne açıyoruz. İlk olarak elasticsearch kurulumu gerçekleştircez.
helm ile kurduğumuz için repositorysinden elastic stack eklememiz gerekiyor.
helm repo add elastic https://helm.elastic.cohelm repo updatehelm repo list
Elasticsearch klasöründe bulunan “values.yml” service düzenleyerek istersek elasticsearch servisini dışarıya açabiliriz. Elasticsearch görmek için values.yml aşağıdaki gibi düzenliyorum.
Elasticsearch deploymentını gerçekleştirmek için,
helm install elasticsearch elastic/elasticsearch -f values.yaml -n monitoringkubectl get pods -n monitoringkubectl logs -f -n monitoring elasticsearch-master-0
Note: Internet hızınıza göre image çektikten sonra loglara bakarak elasticsearh running state geçtiğine bakabilirsiniz.
Service NodePort olarak ayarladğımız için kurulum yaptığınız makinenin ip adresi ve nodeport adresi ile erişebilirsiniz.
kubectl get pods,svc -n monitoring
Tarayıcıdan “192.168.49.2:30200” gittiğimizde,
Elasticsearch çalışıyor. Şimdide logstash kurulumu yapalım.
Note: Aslında kişisel düşüncem logstash ELK stack performans sorununa yol açıyor. Çünkü filebeat aldığımız dataları elasticsearch anlayacağı formata çevirmek için logstash kullanıyoruz. Eğer filebeat aldığımız logları kendi içerisinde formatlama imkanımız bulunuyor. Bu konuyu diğer bir yazımda detaylı şekilde anlatacağım.
helm install logstash elastic/logstash -f values.yaml -n monitoringkubectl get pods -n monitoring
Logstash kurulumuda başarılı. “logstash-values.yml” bilmemiz gerekenler,
- logstashPipeline: output,input ve filter var. Burada logların 5044 portundan yani filebeat ten geleceğini ve elasticsearch yazacağını tanımlıyoruz. Ayrıca filter ekleyerek logların formatını belirtiyoruz.
Şimdide logları ilgili folderlardan alacağımız Filebeat kurulumuna geçelim.
ilk olarak bir tanesecret oluşturuyoruz.
ve filebeat-values.yaml
kubectl apply -f secret.ymlhelm install filebeat elastic/filebeat -f values.yaml -n monitoringkubectl get pods -n monitoring
Filebeat bilmemiz gerekenler,
- 36 ile 53 satır daki kodlardır.
- 39 ile 48 arasındaki kod parçacığında Type ve hangi path logları alcağımız ve ilgili foldera match edeceğimizi söylüyoruz.
- 49 ile 53 arasındaki kod parçacığında ise ilgili klasördeki logları elasticsearch aktarcağımızı belirliyoruz.
Not: Hangi klasördeki logları monitör etmek istiyorsanız burada Type,path ve match klasörünü tam path(yol) olarak girmeniz gerekiyor. Eğer klasörün içinde birden fazla klasör var ise de Joker Karakter (*) ile ilgili klasörün altındaki tüm logları alabilirsiniz.
Son olarak da kibanayı kurulumunu yaparak ilgili klasörden alddğımız logları kibana da “index” yaratarak monitör edelim.
kubectl apply -f kibana-ingress.yaml
Tarayıcından “web.kibana.com” gittiğimizde,
Buradan, hamburger menüden
Stack Management -> Kibana Index Pattern -> filebeat-* -> create Index
Note: Kibana Index patterns altında kurulumda yaptığımız indexleri hepsi gelmektedir.
Discovery den loglarımıza baktığımızda gelmektedir.
Dilerseniz loglarınıza add filter diyerek istediğiniz filter dahil olan logları görüntüleyebilirsiniz. Örneğin message ile ilgili bir filter eklediğimizde ilgili logları görebiliriz,
Bu yazımızın da sonuna gelmiş bulunmaktayız. Araştırmalarım ve sektörde karşılaştığım senaryolar üzerine yazılarımı yazmaya devam edeceğim. Umarım faydalı bir yazı olmuştur. Yazımı okuduğunuz için teşekkürler.
Referanslar;