KUBERNETES üzerinde EFK stack ile Log Yönetimi

H. Alperen Selcuk
4 min readApr 1, 2021

--

Elasticsearch — Fluentd — Kibana ile log izleme

EFK

DevOps operasyonlarında en önemlilerden biri de uygulamalarınızdan gelen logların toplanması ve analiz edilmesidir. Kubernetes gibi bir ortamda çok sayıda containerdan gelen veriyi düzenli bir şekilde analiz etmek için kullanışlı bir yapı olan EFK stack anlatacağım. önceklikle EFK nın her birini kısa açıklayalım sonra kuruluma geçelim.

elasticsearch: opensource bir tam metin arama (full-text search) ve analiz motorudur. Elasticsearch’e bir veri kaydettiğimiz zaman bu veriyi indexler ve arama yapıldığında tüm veriler üzerinde arama yapmak yerine index listesi üzerinden sonuçları hızlıca getirir.

kibana: elasticsearch’ün UI yani arayüzüdür diyebiliriz. İçinde barındırdığı hazır grafikler ile kolaylıkla logları grafiklere dökerek anlamlandırabilir, arama ve filtreleme özellikleri sayesinde aranan log hızlıca ulaşabiliriz.

fluentd: birden fazla kaynaktan veri toplayabilen, farklı biçimde biçimlendirilmiş verileri JSON nesnelerine birleştiren ve farklı çıktı hedeflerine yönlendirmek için kullanırız.

INSTALLATION

Lab ı minikube üzerinde ya da kubernetes clusterınız varsa onun üzerinde yapabilirsiniz. Ben google cloud platform üzerinde yapacağım. Google size 3 aylık bedava 300$ bir bakiye vermektedir. lablarınızı çalışmalarınızı burada yapabilirsiniz.
ben GKE (google kubernetes engine) kullanacağım. elinizde sunucu varsa hard-way kurulum ile kendi clusterınızı da oluşturabilceğiniz yazımdan faydalanabilirsiniz Kubernetes Cluster Kurulum Hard-Way

Helm ile elasticsearch kuracağız. öncelikle elastic reposunu ekleyelim. ekledikten sonra search yaparak yükleyeceğimiz pakete ve versiyona bakabiliriz.

helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch

gerekli bileşenleri yüklemesi 10–15dk kadar sürebilir. (minikube için çalıştıracaksanız resourceları azaltmanız gerekiyor yoksa cpu hatası verebilir)
resource azaltmak için install u bu linkdeki yaml file ile yapabilirsiniz.)
(eğer helm ile kurduğunuzda cpu sıkıntısı yaşıyorsanıza podların yaml filenı çekerek cpu resourcelarını düşürebilirsiniz)

Sıradaki adımımız olarak Kibana kurulumu var helm ile kuracağız.

helm install kibana elastic/kibana

(localde kuruyorsanız kubectl port-forward deployment/kibana-kibana 5601 diyerek localhostdan kibana erişebilirsiniz, ben GKE de olduğundan loadbalancer ekleyip public IP ile erişeceğim)

yaml file içindeki ClusterIp kısmını LoadBalancer ile değiştirerek apply ettim.

Sonraki aşama olarak Daemonset olarak fluentd yi ekleyeceğiz bu ne demek yani cluster a dahil olacak her node için bu pod otomatik yüklenecek. bu sayede yeni bir node eklendiği zaman bunun için ayrıca installation yapmamış olacağız. fluentd için yaml file ı alabilirsiniz.

curl -O https://raw.githubusercontent.com/alperen-selcuk/efk/main/fluentd-daemonset-elasticsearch.yaml > fluentd.yaml

eğer lokalinize kurduysanız yaml içinde FLUENT_ELASTICSEARCH_HOST elasticsearch.svc.cluster.local yazmakta fluentd nin cluster-ip sini de direk yazabilirsiniz. clusterIP ile podlar birbirine erişebilir.

kibanaya 5601 den girerek sırasıyla kibana -> manage -> index pattern -> create index pattern

pattern olarak * ekliyoruz.

timefield olarak herhangi bir seçenek belirtmeden create ediyoruz.

tekrar home a gelerek — Kibanayı seçip Discovera geliyoruz. burada logların gelmeye başladığını görecekseniz. filtre seçerek mesela kubernetes.container.name fluentd seçerek poddan gelen logları görebilirsiniz.

hızlıca bir nginx isminde deployment yaratıp filtre olarak ismini verdiğimizde logları anlık olarak görebiliyormuyuz bakalım.

cluster a yeni bir worker node eklersek otomatik olarak daemonset sayesinde fluentd yüklenecek ve onun üzerindeki podlardan da logları almaya başlayacak.

umarım faydalı bir yazı olur, sağlıklar dilerim.

h.a.s.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response