İçerik
EFK Stack Kurulumu Nedir?
EFK Stack: Elasticsearch, Fluentd, Kibana araçlarının birleşiminden oluşan kısaltmadır.
Elasticsearch Nedir?
Arama motorudur. Dağıtık olarak verileri tutmamızı sağlar. Text Search yapmamızı sağlayan bir yapıya sahiptir. Elasticsearch, verileri kaydederken kelimelerin göründüğü belgeler hakkındaki bilgileri indeksler.
- Logların toplandığı ve kaydedildiği yer.
 
Fluentd Nedir?
Containerların oluşturduğu logları toplar ve ElasticSearh’e gönderir.
- Logları toplamak için “Logstash” ‘te kullanabiliriz.
 - Deamonset olarak cluster’a deploy edeceğiz.
 
Kibana Nedir?
Elasticsearch üzerindeki tuttuğumuz bilgileri görselleştirmemize imkan sağlayan araçtır.
Özet
EFK ile tüm Kubernetes üzerinde tüm loglarınızı ortak bir paydada kategorilendirip, kibana ile web arayüzde görüntüleyebiliyorsunuz.
Kurulum Süreci
Kuruluma başlamadan önce Master sunucunuzda Helm paket yöneticisi kurulu değilse aşağıdaki yazımı takip ederek Helm paket yöneticisini kurun.
Tüm işlemler master sunucusu üzerinden yapılmaktadır.
Helm repolarımızı ekleyelim.
helm repo add fluent https://fluent.github.io/helm-charts
helm repo add elastic https://helm.elastic.coNamespace oluşturalım.
kubectl create ns efkElasticserach kurulumu
helm install elasticsearch elastic/elasticsearch --namespace efkRollout’un bitmesini bekle.
kubectl rollout status sts/elasticsearch-master --namespace=efkWaiting for 3 pods to be ready...
Waiting for 2 pods to be ready...
Waiting for 1 pods to be ready...
partitioned roll out complete: 3 new pods have been updated...Fluentd kurulumu
kubectl apply -f https://raw.githubusercontent.com/sezersanlikan/monitoring/master/fluentd.yaml --namespace efk
Podları kontrol edelim.
kubectl get pods --namespace=efk | grep fluentdfluentd-4m974            1/1     Running   0          79s
fluentd-d97g6            1/1     Running   0          79s
fluentd-hmpfw            1/1     Running   0          79sKibana kurulumu
helm install kibana elastic/kibana --set env.ELASTICSEARCH_URL=http://elasticsearch-master:9200 --namespace efkPodları tekrar kontrol edelim.
kubectl get pods --namespace=efk | grep kibanakibana-kibana-654ccb45bd-h7pmn   1/1     Running   0          2m50sNginx Ingress (Opsiyonel)
Doğrudan internal ip adresi ile bağlanacaksanız bunu yapmayın. Bu arayüzün dışarıya açılması anlamını taşır. Ayrıca güvenlik için adımları asla atlamayın. Buradan ulaşabilirsiniz. Ek olarak HTTPS üzerinden elasticsearch için xpack.security.enabled değerini true yapmayı ihmal etmeyin. HTTPS kullanmamanız durumunda nodelar arasında veri şifrelenmeden düz metin olarak iletilecektir. Son olarak bu linkteki parametre ile baseURL belirtebilirsiniz.
Daha önce kurmuş olduğum MetaLB üzerinden Ingress’i kibana web arayüz için Kubernetes’te kaldırıyorum. MetalLB kurulumuna aşağıdaki yazımdan erişebilirsiniz.
sezerkibana.test kısmını kendi domain name adresinize göre değiştirin.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  generation: 1
  name: kibana-web
  namespace: logging
spec:
  ingressClassName: nginx
  rules:
  - host: sezerkibana.test
    http:
      paths:
      - backend:
          service:
            name: kibana
            port:
              number: 80
        path: /
        pathType: PrefixTest LOG Podu Oluşturma
Kibana arayüzünde test için log araması yapabilmek adına aşağıdaki test podu kaldırın.
kubectl apply -f https://raw.githubusercontent.com/sezersanlikan/monitoring/master/test-log-pod.yaml --namespace efk
İlgili pod aşağıdaki gibi saniyede 1 defa log yazmaktadır.

Kibana Ayarları
Browser’dan ingress’e yazdığımız URL’ye gidelim. “Add integrations” butonuna basalım.

Sol menüden “Stack Management” seçeneğine tıklayalım.

Ardından “Index Patterns” seçeneğine tıklayalım.

“Create Index Pattern” butonuna tıklayalım.

Aşağıdaki biçimde ayarlarınızı yaparsanız tüm logları kibana arayüzünde gösterebileceksiniz.

Logları görmek için “Discover” menüsüne tıklayın.

Yukarıdan KQL sorguları yazabilirsiniz. Test podumuzun logunu aratmak için kutucuğa “Sezer” yazıyorum.

Gelecek yazılarımda KQL üzerinde duracağım. Logları nasıl efektif arayabileceğinize değinmek faydalı olacaktır. Error logsuz günler. Cheers!
