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.co

Namespace oluşturalım.

kubectl create ns efk

Elasticserach kurulumu

helm install elasticsearch elastic/elasticsearch --namespace efk

Rollout’un bitmesini bekle.

kubectl rollout status sts/elasticsearch-master --namespace=efk
Waiting 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 fluentd
fluentd-4m974            1/1     Running   0          79s
fluentd-d97g6            1/1     Running   0          79s
fluentd-hmpfw            1/1     Running   0          79s

Kibana kurulumu

helm install kibana elastic/kibana --set env.ELASTICSEARCH_URL=http://elasticsearch-master:9200 --namespace efk

Podları tekrar kontrol edelim.

kubectl get pods --namespace=efk | grep kibana
kibana-kibana-654ccb45bd-h7pmn   1/1     Running   0          2m50s

Nginx 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: Prefix

Test 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.

image 3

Kibana Ayarları

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

image 7

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

image 8

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

image 9

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

image 10

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

image 2

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

image 5

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

image 4

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