Kibana Kurulumu ve Web Arayüzü Yapılandırması
Elasticsearch kurulumunu tamamladıktan sonra sıra geldi görsel katmana. Kibana olmadan ELK Stack’in yarısı eksik kalır; logları sorgulamak için komut satırına güvenmek zorunda kalmak, özellikle production ortamlarında bir felakete davetiye çıkarmak demektir. Bu yazıda Kibana’yı sıfırdan kurup, web arayüzünü production’a hazır hale getirene kadar her adımı elimden geldiğince detaylı anlatacağım.
Kibana Nedir ve ELK Stack’taki Yeri
Kibana, Elasticsearch üzerindeki verileri görselleştirmek için kullanılan açık kaynaklı bir web arayüzüdür. Elasticsearch’e gelen logları, metrikleri veya herhangi bir veriyi interaktif dashboard’lar, grafikler ve tablolar aracılığıyla anlamlı hale getirir. Sysadmin perspektifinden bakıldığında Kibana’nın asıl değeri şurada yatar: Gece 2’de bir servis çöktüğünde, loglar arasında komut satırıyla kurcalamak yerine birkaç tıklamayla olayın tam zaman çizelgesini çıkarabilirsiniz.
Mimari açıdan Kibana, doğrudan Elasticsearch’e bağlanır. Logstash veya Filebeat tarafından Elasticsearch’e gönderilen veriler, Kibana üzerinden sorgulanır ve görselleştirilir. Kibana hiçbir veriyi depolamaz; tamamen Elasticsearch’in bir ön yüzüdür.
Kurulum Öncesi Gereksinimler
Kibana versiyonunun Elasticsearch versiyonuyla birebir eşleşmesi gerekir. Elasticsearch 8.x kullanıyorsanız Kibana da 8.x olmalı. Farklı major/minor versiyonları bir arada kullanmaya çalışmak, deneyimlerimden bildiğim kadarıyla her zaman sessiz hatalara yol açar ve bu hataları debug etmek saatler alabilir.
Sistem gereksinimleri açısından minimum:
- RAM: 2 GB (production için 4 GB ve üzeri önerilir)
- CPU: 2 core
- Disk: 1 GB (uygulama için, log verileri hariç)
- İşletim sistemi: Ubuntu 20.04/22.04 veya RHEL/CentOS 7/8/9
Kibana’nın default olarak 5601 portunu kullandığını da unutmayın. Firewall kurallarını önceden ayarlamazsanız web arayüzüne erişemezsiniz.
Kibana Kurulumu
APT ile Ubuntu/Debian Üzerinde Kurulum
Elastic’in resmi repository’sini sisteme tanımlayarak başlayalım:
# Elastic GPG anahtarını içe aktar
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
# Repository tanımla
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
# Paket listesini güncelle ve Kibana'yı kur
sudo apt-get update && sudo apt-get install -y kibana
YUM/DNF ile RHEL/CentOS Üzerinde Kurulum
# /etc/yum.repos.d/kibana.repo dosyasını oluştur
sudo tee /etc/yum.repos.d/kibana.repo <<EOF
[kibana-8.x]
name=Kibana repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# Kibana'yı kur
sudo dnf install -y kibana
Kurulum tamamlandıktan sonra servisi başlatmadan önce yapılandırma dosyasını düzenlememiz gerekiyor.
Temel Yapılandırma
Kibana’nın ana yapılandırma dosyası /etc/kibana/kibana.yml konumunda bulunur. Default olarak neredeyse her şey yorum satırı içinde gelir; ihtiyacınıza göre açıp düzenlemeniz gerekir.
sudo nano /etc/kibana/kibana.yml
Minimum production yapılandırması için şunları ayarlamanız gerekir:
# Kibana'nın dinleyeceği port (default: 5601)
server.port: 5601
# Tüm interface'lerden erişim için 0.0.0.0, sadece localhost için 127.0.0.1
server.host: "0.0.0.0"
# Sunucu adı (monitoring'de görünür)
server.name: "kibana-prod-01"
# Elasticsearch bağlantısı
elasticsearch.hosts: ["https://localhost:9200"]
# Kibana'nın sistem verilerini sakladığı Elasticsearch index'i
kibana.index: ".kibana"
# Log dosyası konumu
logging.appenders.file.type: file
logging.appenders.file.fileName: /var/log/kibana/kibana.log
logging.appenders.file.layout.type: json
logging.root.appenders: [default, file]
Elasticsearch ile Güvenli Bağlantı Kurulumu
Elasticsearch 8.x ile birlikte TLS/SSL default olarak aktif geliyor. Bu yüzden Kibana’nın Elasticsearch’e bağlanırken kullanacağı kimlik bilgilerini ve sertifikaları da yapılandırmamız gerekiyor.
# Kibana için enrollment token oluştur (Elasticsearch sunucusunda çalıştırın)
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
# Çıktı şuna benzer bir token olacak:
# eyJ2ZXIiOiI4LjExLjAiLCJhZHIiOlsiMT...
Bu token’ı kullanarak Kibana’yı Elasticsearch’e bağlayabilirsiniz:
sudo /usr/share/kibana/bin/kibana-setup --enrollment-token <token_degeri>
Alternatif olarak, manuel sertifika yapılandırması tercih ediyorsanız:
# kibana.yml içine ekleyin
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/http_ca.crt"]
elasticsearch.ssl.verificationMode: certificate
# Service account token kullanımı (önerilen yöntem)
elasticsearch.serviceAccountToken: "AAEAAWVsYXN0aWMva2liYW5hL..."
Elasticsearch’teki http_ca.crt sertifikasını Kibana sunucusuna kopyalamak için:
# Elasticsearch sunucusundan sertifikayı kopyala
sudo scp /etc/elasticsearch/certs/http_ca.crt kibana-sunucu:/etc/kibana/certs/
sudo chown kibana:kibana /etc/kibana/certs/http_ca.crt
sudo chmod 640 /etc/kibana/certs/http_ca.crt
Kibana Servisini Başlatma
# Servisi etkinleştir ve başlat
sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana
# Servis durumunu kontrol et
sudo systemctl status kibana
# Logları takip et (başlangıç sorunlarını yakalamak için kritik)
sudo journalctl -u kibana -f
Kibana ilk başlangıçta birkaç dakika sürebilir. Özellikle Elasticsearch’e ilk kez bağlandığında .kibana index’ini oluşturması ve migration işlemlerini tamamlaması zaman alır. journalctl çıktısında "http server running" mesajını görene kadar beklemenizi tavsiye ederim.
Web Arayüzüne İlk Erişim
Kibana varsayılan olarak http://sunucu-ip:5601 adresinden erişilebilir. İlk girişte bir enrollment token veya verification code sorabilir. Bu kodu terminalde şu komutla alabilirsiniz:
sudo /usr/share/kibana/bin/kibana-verification-code
İlk giriş için Elasticsearch kurulumunda oluşturulan elastic kullanıcısını kullanabilirsiniz. Ancak production ortamında elastic superuser’ını günlük kullanım için kullanmak iyi bir pratik değil. Bunun yerine rol tabanlı kullanıcılar oluşturmanızı şiddetle tavsiye ederim.
Nginx ile Reverse Proxy Kurulumu
Kibana’yı doğrudan internete açmak yerine Nginx üzerinden reverse proxy kullanmak hem güvenlik hem de SSL sonlandırma açısından çok daha akıllıca bir yaklaşımdır. Özellikle birden fazla ekip üyesinin erişeceği ortamlarda bu adımı atlamayın.
sudo apt-get install -y nginx
Nginx yapılandırma dosyasını oluşturun:
# /etc/nginx/sites-available/kibana
server {
listen 80;
server_name kibana.sirketiniz.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name kibana.sirketiniz.com;
ssl_certificate /etc/ssl/certs/kibana.crt;
ssl_certificate_key /etc/ssl/private/kibana.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Temel HTTP auth (Kibana'nın kendi auth'u da aktifse isteğe bağlı)
auth_basic "Kibana Restricted";
auth_basic_user_file /etc/nginx/.kibana_users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 90;
}
}
# Konfigurasyon dosyasını etkinleştir
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# HTTP auth kullanıcısı oluştur (opsiyonel ek güvenlik katmanı)
sudo htpasswd -c /etc/nginx/.kibana_users kibana-admin
Kibana’nın reverse proxy arkasında doğru çalışması için kibana.yml‘e server.basePath ayarı gerekebilir:
# Eğer /kibana gibi bir subpath kullanıyorsanız
server.basePath: "/kibana"
server.rewriteBasePath: true
# Public URL'i belirt
server.publicBaseUrl: "https://kibana.sirketiniz.com"
Index Pattern Oluşturma
Kibana web arayüzüne giriş yaptıktan sonra yapmanız gereken ilk işlem, Elasticsearch’teki index’leri Kibana’ya tanıtmak. Bunun için Data View (eski adıyla Index Pattern) oluşturmanız gerekiyor.
Menüden Stack Management > Data Views > Create data view yolunu izleyin. Örneğin Filebeat logları için filebeat-* pattern’ını kullanabilirsiniz. Timestamp field olarak @timestamp seçin.
Eğer bu işlemi API üzerinden otomatikleştirmek istiyorsanız (CI/CD pipeline’larında çok işe yarar):
curl -X POST "https://kibana.sirketiniz.com/api/data_views/data_view"
-H "kbn-xsrf: true"
-H "Content-Type: application/json"
-u elastic:sifreniz
-d '{
"data_view": {
"title": "filebeat-*",
"timeFieldName": "@timestamp",
"name": "Filebeat Logs"
}
}'
Güvenlik Ayarları ve Kullanıcı Yönetimi
Production ortamında mutlaka yapmanız gerekenler listesinin başında kullanıcı ve rol yönetimi gelir. Kibana’nın Stack Management > Security > Users bölümünden kullanıcı oluşturabilirsiniz. Ancak birden fazla kullanıcı ve rol yönetiyorsanız Elasticsearch API’sini kullanmak çok daha verimli:
# Salt okunur Kibana kullanıcısı oluştur
curl -X POST "https://localhost:9200/_security/user/log-viewer"
-H "Content-Type: application/json"
-u elastic:sifreniz
--cacert /etc/elasticsearch/certs/http_ca.crt
-d '{
"password": "guclu-bir-sifre",
"roles": ["kibana_read_only"],
"full_name": "Log Viewer",
"email": "[email protected]"
}'
Kibana’ya özgü bazı önemli built-in roller:
- kibana_admin: Kibana’da tam yönetim yetkisi
- kibana_read_only: Sadece görüntüleme yetkisi
- monitoring_user: Cluster monitoring dashboard’larına erişim
- viewer: Tüm space’lerde okuma yetkisi
Space Kavramı ve Çok Ekipli Ortamlar
Kibana’nın en güçlü özelliklerinden biri Spaces (Alanlar) desteği. Tek bir Kibana instance’ında birden fazla izole ortam oluşturabilirsiniz. Örneğin “DevOps” space’i, “Security” space’i ve “Business Analytics” space’ini birbirinden bağımsız olarak yönetebilirsiniz.
Büyük bir medya şirketinde çalışırken bu özelliği yoğun kullandık. Editöryal ekip kendi dashboard’larını görürken altyapı ekibi sistem metriklerine bakıyordu. Hiçbir ekip diğerinin dashboard’larını karıştıramıyordu.
Stack Management > Spaces > Create a space yolunu izleyerek yeni bir space oluşturabilir, ardından kullanıcıları bu space’e atayabilirsiniz.
Performans Optimizasyonu
Kibana’nın yavaş çalışması genellikle iki sebepten kaynaklanır: Elasticsearch sorgu süresi uzunluğu veya Kibana’nın kendi bellek kullanımı. Kibana’nın Node.js üzerinde çalıştığını düşünürsek, heap memory ayarları kritik öneme sahip.
# /etc/default/kibana dosyasını düzenle (veya yoksa oluştur)
sudo tee /etc/default/kibana <<EOF
NODE_OPTIONS="--max-old-space-size=2048"
EOF
Ayrıca kibana.yml içinde birkaç performans ayarı daha yapabilirsiniz:
# Elasticsearch'e gönderilen istek zaman aşımı (ms)
elasticsearch.requestTimeout: 60000
# Ping zaman aşımı
elasticsearch.pingTimeout: 3000
# Maksimum payload boyutu
server.maxPayload: 10485760
# Kibana'nın önbellek boyutu
data.search.sessions.enabled: true
Sorun Giderme
Karşılaşılan en yaygın sorunlar ve çözümleri:
Kibana başlamıyor, “Unable to retrieve version information” hatası: Bu hata genellikle Elasticsearch’e bağlanamadığında çıkar. elasticsearch.hosts ayarını ve sertifika yollarını kontrol edin. Güvenlik duvarının 9200 portuna izin verdiğinden emin olun.
# Elasticsearch'e erişimi test et
curl -k -u elastic:sifreniz https://localhost:9200/_cluster/health
“Kibana server is not ready yet” mesajı uzun sürüyor: Kibana’nın Elasticsearch’te oluşturduğu .kibana index’inin durumunu kontrol edin:
curl -k -u elastic:sifreniz https://localhost:9200/.kibana/_stats?pretty | grep '"status"'
Port 5601 erişilemiyor:
# Portun dinlenip dinlenmediğini kontrol et
sudo ss -tlnp | grep 5601
# Firewall kuralını ekle (Ubuntu ufw için)
sudo ufw allow 5601/tcp
# RHEL/CentOS firewalld için
sudo firewall-cmd --permanent --add-port=5601/tcp
sudo firewall-cmd --reload
Dashboard’lar yüklenmiyor, sürekli “Loading” gösteriyor: Bu durum çoğunlukla Kibana ile Elasticsearch arasındaki versiyon uyumsuzluğundan kaynaklanır. Her iki servisi de aynı anda güncelleyin ve versiyonları kontrol edin:
sudo dpkg -l | grep -E "kibana|elasticsearch"
Backup ve Snapshot Stratejisi
Kibana’nın dashboard’larını, saved searches’larını ve visualizationlarını yedeklemek için Kibana Saved Objects export özelliğini kullanabilirsiniz. Bunu düzenli aralıklarla otomatikleştirmek iyi bir pratiktir:
#!/bin/bash
# Kibana objelerini yedekle
TARIH=$(date +%Y%m%d_%H%M%S)
YEDEK_DIZIN="/backup/kibana"
mkdir -p $YEDEK_DIZIN
curl -X POST "https://kibana.sirketiniz.com/api/saved_objects/_export"
-H "kbn-xsrf: true"
-H "Content-Type: application/json"
-u elastic:sifreniz
-d '{"type": ["dashboard","visualization","search","index-pattern"], "excludeExportDetails": false}'
-o "$YEDEK_DIZIN/kibana-backup-$TARIH.ndjson"
echo "Yedek tamamlandi: $YEDEK_DIZIN/kibana-backup-$TARIH.ndjson"
Bu scripti crontab’a ekleyerek günlük yedek alabilirsiniz:
0 2 * * * /usr/local/bin/kibana-backup.sh >> /var/log/kibana-backup.log 2>&1
Sonuç
Kibana kurulumu ve yapılandırması ilk bakışta karmaşık görünse de adım adım ilerlediğinizde son derece mantıklı bir yapıya kavuştuğunu görürsünüz. Benim için en kritik noktalar her zaman şunlar oldu: Elasticsearch ile versiyon uyumunu sağlamak, TLS yapılandırmasını atlamadan doğru yapmak ve mutlaka reverse proxy arkasına almak.
Production’a geçmeden önce şu kontrol listesini geçin: Kibana servisinin sistem açılışında otomatik başladığını doğrulayın, log dosyalarının rotate edildiğinden emin olun, en az bir adet superuser olmayan admin kullanıcısı oluşturun ve günlük yedek mekanizmasını test edin.
ELK Stack’in geri kalanıyla, özellikle Logstash ve Filebeat entegrasyonuyla birleşince Kibana gerçek gücünü gösteriyor. Dashboard’lara veri akmaya başladığında, özellikle ilk kez bir sistem anomalisini loglar üzerinde görselleştirerek yakaladığınızda, bu kurulum için harcadığınız zamanın değdiğini anlıyorsunuz.
