Kubernetes EFK Stack Kurulumu

Deniz TÜRKMEN
4 min readDec 1, 2022

--

Merhabalar,

Bu yazımda EFK(Elasticsearch-Fluentd-Kibana) kurulumu inceliycez. İlk olarak EFK nedir buna bakalım.

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.

Fluentd: Açık kaynaklı(Open source) bir log toplama ve işleyicidir. Ruby’de yazılan Fluentd, birden fazla kaynaktan veri toplayabilen, farklı biçimde biçimlendirilmiş verileri JSON nesnelerine birleştiren ve farklı çıktı hedeflerine yönlendiren bir araç olarak kullanılır. En güçlü özelliği servis olarak çalışıp parse edilen logları Postgresql, MongoDB, Hadoop vs. gibi veri tabanı sistemlerinde saklayabilmektedir.

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.

Not: EFK, DevOps yaşam döngüsünde Monitoring kısmına hizmet ederler.

EFK Clusterımızı minikube üzerinde kurulumu gerçekleştircez. Bunun için eğer sisteminizde minikube ve kubectl yüklü değilse diğer yazımdan minikube kurulumunu okuyabilirsiniz.

Minikube kurulduktan sonra aşağıdaki komut ile clusterımızı aktifleştiriyoruz.

minikube start — memory=8000 — cpus=4

İlk olarak namespace oluşturalım.

kubectl apply -f efk-namespace.yamlkubectl get namespaces

Şimdi de Elasticsearch oluşturalım. Bunun için;

kubectl apply -f efk-elasticsearch.yamlkubectl get statefulset -n kube-loggingkubectş get pods -n kube-logging

Burada bilmemiz gerekenler;

  • Minikube ile kurulumu gerçekleştirdiğimiz için service tipini NodePort olarak ayarlıyoruz.
minikube service list

Komutu ile aldığı ip ve portu tarayıcından gittiğimizde elastic clusterımız hakkında bilgileri öğrenebiliriz.

  • Environmentlara bakacak olursak,ES_JAVA_OPTS : heap değeri için tanımlanması gerekir. Deafult değeri 1 Gi dır.
  • Minikube ile kurulum gerçekleştirdiğimiz için kendisi default bir tane ‘standard’ adında storageclass oluşturuyor. PVClaims objemizide bu storaga class bağlıyoruz.
kubectl exec -it es-cluster-0 -n kube-logging — bash

Komutu ile pod’umuza bağlanalım ve environment bakalım.

Şimdi de Elasticsearch Clusterımızı kontrol edelim. Bunun için,

minikube service list

Tarayıcıdan “192.168.49.2:31403” gittiğimizde,

Yukarıdaki şekilde gözüktüğü gibi elasticsearch clusterımız başarılı şekilde kurulmuştur. Şimdi de kibana kurulumu yapalım. Bunun için,

kubectl apply -f efk-kibana.yamlkubectl get services -n kube-loggingkubectl get pods -n kube-logging

Burada yaml dosyasına bakacak olursak,

  • environment alanında elasticsearch url tanımlamız gerekir.
kubectl exec -it kibana-5844c66546-w2xqv -n kube-logging — bash
minikube service list

Tarayıcıdan ‘192.168.49.2:30538’ gittiğimizde

Kibana da kurulumuda başarılı şekilde gerçekleşti. Şimdi de log toplaması için “Fluentd” kurulumu yapalım. Bunun için,

kubectl apply -f efk-fluentd.yamlkubectl get daemonset -n kube-loggingkubectl get pods -n kube-logging

Yukarıdaki yaml dosyasına bakacak olursak, ilk olarak kubernetes api server ile iletişim kurması için ServiceAccount tanımlıyoruz. Ardından bu service account objemizi cluster bazında role ve yetki tanımlaması yapıyoruz.

  • Fluentd objemizi DaemonSet olarak tanımlıyoruz ki clusterımıza eklenen her node için çalışacak bir pod ayağa oluşturuyoruz.

Son olarakta kibana dan bir index pattern oluşturalım ve toplanan logları monitör edelim. Bunun için

Kibana -> Discover -> Index Patterns Sekmesine gidelim.

Index Pattern olarak ‘*’

Time filter olarak da ‘@timestamp’ seçelim ve Create Index Pattern diyelim.

Son olarak tekrar discover sekmesine geldiğimizde fluentd ile loglarımızı listelenmiştir. İsterseniz sol sekmedi alandan filtreleme yaparakta istesiğiniz objenin loglarını monitör edebilirsiniz.

Clustremızın son durumu bakacak olursak,

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. Diğer yazımda Helm ile EFK Stack kurulunu inceliycez.

--

--