İç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.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.
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!