Elasticsearch, Logstash ve Kibana (Elastic Stack) CentOS 7 Üzerine Kurulum Rehberi
Elastic Stack, daha yaygın bilinen adıyla ELK Stack, log yönetimi, arama, analiz ve görselleştirme için güçlü bir araç setidir. Sistem yöneticileri, DevOps mühendisleri ve geliştiriciler için, uygulama ve sistem loglarını merkezi bir konumda toplamak, depolamak, analiz etmek ve görselleştirmek kritik öneme sahiptir. Bu makalede, Elastic Stack’in temel bileşenleri olan Elasticsearch, Logstash ve Kibana’yı CentOS 7 işletim sistemi üzerine adım adım nasıl kuracağınızı detaylı bir şekilde açıklayacağız.
1. Giriş: Elastic Stack Nedir ve Neden Önemlidir?
Elastic Stack, farklı veri türlerini (loglar, metrikler, güvenlik olayları vb.) gerçek zamanlı olarak alıp, işleyip, depolayıp ve analiz edip görselleştirmek için tasarlanmış açık kaynaklı bir yazılım yığınıdır. Her bir bileşenin belirli bir rolü vardır:
* Elasticsearch: Dağıtık, RESTful bir arama ve analiz motorudur. Tüm veriler burada depolanır ve indekslenir. Büyük veri kümeleri üzerinde hızlı arama ve karmaşık analiz yetenekleri sunar. Ölçeklenebilirliği ve performansı ile bilinir.
* Logstash: Veri toplama, dönüştürme ve zenginleştirme için kullanılan sunucu tarafı bir veri işleme pipeline’ıdır. Çeşitli kaynaklardan (dosyalar, veritabanları, ağ cihazları vb.) veri alabilir, bu verileri filtreleyebilir, ayrıştırabilir ve ardından Elasticsearch gibi bir hedefe gönderebilir.
* Kibana: Elasticsearch’te depolanan verileri keşfetmek, analiz etmek ve görselleştirmek için kullanılan bir web arayüzüdür. Logları, metrikleri ve diğer verileri interaktif grafikler, panolar ve raporlar aracılığıyla sunar.
Elastic Stack’in önemi, modern BT ortamlarında artan veri hacmiyle başa çıkma yeteneğinden gelmektedir. Uygulama hatalarını ayıklamak, güvenlik ihlallerini tespit etmek, sistem performansını izlemek ve iş zekası için değerli içgörüler elde etmek için merkezi bir log yönetim sistemine sahip olmak vazgeçilmezdir.
Bu rehberde, Elastic Stack’in 7.17.x sürümünü kuracağız. Bu sürüm, kararlılığı ve CentOS 7 ile uyumluluğu nedeniyle tercih edilmektedir.
2. Ön Gereksinimler ve Sistem Hazırlığı
Kuruluma başlamadan önce CentOS 7 sunucunuzun belirli gereksinimleri karşıladığından ve bazı temel yapılandırmaların yapıldığından emin olmalıyız. Bu adımlar, sorunsuz bir kurulum ve optimum performans için kritik öneme sahiptir.
2.1. Sistem Güncellemesi
İlk olarak, sistemdeki tüm paketleri güncelleyelim. Bu, olası bağımlılık sorunlarını çözmeye yardımcı olur ve en son güvenlik yamalarını uygular.
sudo yum update -y
2.2. Java (OpenJDK) Kurulumu
Elasticsearch ve Logstash, Java Runtime Environment (JRE) gerektirir. Elastic Stack 7.17.x için OpenJDK 8 veya OpenJDK 11 önerilir. CentOS 7 üzerinde OpenJDK 8 kurulumunu tercih edeceğiz, zira daha geniş uyumluluk sunar.
sudo yum install java-1.8.0-openjdk -y
Kurulumdan sonra Java sürümünü kontrol edelim:
java -version
Çıktı aşağıdaki gibi olmalıdır:
openjdk version "1.8.0_..."
OpenJDK Runtime Environment (build 1.8.0_...)
OpenJDK 64-Bit Server VM (build 25.xxx-bxx, mixed mode)
2.3. Sistem Çekirdek Parametrelerinin Ayarlanması (vm.max_map_count)
Elasticsearch, mmapfs dizin depolama türünü kullanarak dizinlerini yönetir ve varsayılan Linux sanal bellek ayarları bazen yetersiz kalabilir. Özellikle vm.max_map_count değeri düşükse, Elasticsearch başlatılırken sorunlar yaşanabilir. Bu değeri artırmamız gerekiyor.
sudo sysctl -w vm.max_map_count=262144
Bu değişiklik yeniden başlatmada kalıcı değildir. Kalıcı hale getirmek için /etc/sysctl.conf dosyasına eklemeliyiz:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
2.4. SELinux’u Devre Dışı Bırakma (Önerilir)
SELinux, güvenlik için önemli bir bileşen olsa da, Elastic Stack bileşenlerinin kurulumu ve çalışması sırasında izin sorunlarına yol açabilir. Basitlik açısından, bu rehberde SELinux’u geçici veya kalıcı olarak devre dışı bırakmayı tercih ediyoruz. Üretim ortamlarında SELinux’u tamamen devre dışı bırakmak yerine, gerekli izinleri yapılandırmanız önerilir.
Geçici olarak devre dışı bırakmak için:
sudo setenforce 0
Kalıcı olarak devre dışı bırakmak için /etc/selinux/config dosyasını düzenleyin:
sudo vi /etc/selinux/config
SELINUX=enforcing satırını SELINUX=disabled olarak değiştirin.
# This file controls the state of SELinux on the system.
SELINUX= can take one of these three values:
enforcing - SELinux security policy is enforced.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
SELINUXTYPE= can take one of these two values:
targeted - Targeted processes are protected,
mls - Multi Level Security protection.
SELINUXTYPE=targeted
Değişikliğin etkili olması için sunucuyu yeniden başlatmanız gerekebilir (sudo reboot).
2.5. Firewall Ayarları
CentOS 7’de varsayılan olarak firewalld etkindir. Elastic Stack bileşenlerinin birbirleriyle ve dış dünyayla iletişim kurabilmesi için gerekli portları açmamız veya güvenlik duvarını devre dışı bırakmamız gerekebilir. Bu rehberde, basitlik adına gerekli portları açmayı tercih edeceğiz.
* Elasticsearch: Varsayılan olarak 9200 (HTTP) ve 9300 (transport) portlarını kullanır.
* Kibana: Varsayılan olarak 5601 portunu kullanır.
* Logstash: Genellikle 5044 (Beats input) veya özel bir port kullanır.
sudo firewall-cmd --add-port=9200/tcp --permanent
sudo firewall-cmd --add-port=5601/tcp --permanent
Eğer Logstash için Beats input kullanacaksanız:
sudo firewall-cmd --add-port=5044/tcp --permanent
sudo firewall-cmd --reload
Eğer güvenlik duvarını tamamen devre dışı bırakmak isterseniz (üretim ortamlarında önerilmez):
sudo systemctl stop firewalld
sudo systemctl disable firewalld
2.6. Elastic YUM Deposu Ekleme
Elastic Stack bileşenlerini kolayca kurmak ve güncellemek için Elastic’in resmi YUM deposunu sistemimize eklemeliyiz. İlk olarak, Elastic’in GPG anahtarını içe aktaralım:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ardından, Elastic YUM deposu yapılandırma dosyasını oluşturalım:
sudo vi /etc/yum.repos.d/elastic.repo
İçeriği aşağıdaki gibi ekleyin:
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[logstash-7.x]
name=Logstash repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Depoyu ekledikten sonra, yum önbelleğini temizleyip güncelleyebiliriz:
sudo yum clean all
sudo yum makecache
Artık Elastic Stack bileşenlerini kurmaya hazırız.
3. Elasticsearch Kurulumu ve Yapılandırması
Elasticsearch, Elastic Stack’in kalbidir ve tüm verilerin depolandığı yerdir.
3.1. Elasticsearch Kurulumu
Elasticsearch paketini YUM kullanarak kuralım:
sudo yum install elasticsearch -y
3.2. Elasticsearch Yapılandırması
Elasticsearch’in ana yapılandırma dosyası /etc/elasticsearch/elasticsearch.yml adresindedir. Bu dosyayı düzenleyerek temel ayarları yapalım.
sudo vi /etc/elasticsearch/elasticsearch.yml
Aşağıdaki satırları bulup veya ekleyip düzenleyin. Yorum satırlarını (#) kaldırın ve değerleri ayarlayın:
# Cluster adını belirleyin. Tek düğümlü bir kurulum için bile önemlidir.
cluster.name: my-elastic-cluster
Bu düğüm için bir ad belirleyin.
node.name: node-1
Elasticsearch'in dinleyeceği ağ arayüzünü belirtin.
Sadece localhost'tan erişim için 127.0.0.1, tüm arayüzlerden erişim için 0.0.0.0 kullanın.
Eğer sunucunuzun belirli bir IP adresi varsa onu da kullanabilirsiniz.
network.host: 0.0.0.0
Elasticsearch HTTP portu. Varsayılan 9200'dür.
http.port: 9200
Keşif ayarları. Tek düğümlü bir kurulum için bu satırı ekleyin.
Birden fazla düğümünüz varsa, diğer düğümlerin IP adreslerini buraya eklemelisiniz.
discovery.seed_hosts: ["127.0.0.1"]
Başlangıçtaki ana düğüm adayları. Tek düğümlü kurulum için kendi düğüm adınızı kullanın.
cluster.initial_master_nodes: ["node-1"]
X-Pack güvenlik varsayılan olarak etkin gelir. Eğer güvenliksiz bir kurulum istiyorsanız,
bu satırı ekleyip false yapabilirsiniz, ancak üretim ortamlarında önerilmez.
xpack.security.enabled: false
Bellek Ayarları (JVM Heap Size):
Elasticsearch, JVM üzerinde çalıştığı için belleğin önemli bir kısmını kullanır. /etc/elasticsearch/jvm.options dosyasında JVM heap boyutunu ayarlayabilirsiniz. Varsayılan olarak, Elasticsearch mevcut RAM’in yarısını (ancak 32 GB’ı geçmeyecek şekilde) kullanmaya çalışır. Sunucunuzun RAM miktarına göre bu değeri ayarlamanız önemlidir. Genellikle fiziksel RAM’in %50’si kadar bir değer ayarlanır. Örneğin, 8 GB RAM’e sahip bir sunucu için 4 GB ayırabiliriz.
sudo vi /etc/elasticsearch/jvm.options
Aşağıdaki satırları bulun ve Xms (başlangıç boyutu) ve Xmx (maksimum boyut) değerlerini ayarlayın. Bu değerler aynı olmalıdır:
-Xms4g
-Xmx4g
4g yerine sunucunuzun RAM’ine uygun bir değer (örneğin 2g veya 8g) yazın.
3.3. Elasticsearch Servisini Başlatma
Yapılandırmaları yaptıktan sonra Elasticsearch servisini etkinleştirelim ve başlatalım:
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Servisin durumunu kontrol edelim:
sudo systemctl status elasticsearch
Durum active (running) olmalıdır.
3.4. Elasticsearch’in Çalıştığını Doğrulama
Elasticsearch’in HTTP API’sini kullanarak çalıştığını doğrulayabiliriz:
curl -X GET "http://localhost:9200/"
Veya eğer network.host olarak 0.0.0.0 ayarladıysanız, sunucunuzun IP adresi üzerinden:
curl -X GET "http://:9200/"
Başarılı bir kurulumda, Elasticsearch küme ve düğüm bilgileriyle birlikte bir JSON çıktısı almalısınız.
{
"name" : "node-1",
"cluster_name" : "my-elastic-cluster",
"cluster_uuid" : "...",
"version" : {
"number" : "7.17.x",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "...",
"build_date" : "...",
"build_snapshot" : false,
"lucene_version" : "8.11.x",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
4. Kibana Kurulumu ve Yapılandırması
Kibana, Elasticsearch’teki verilerinizi görselleştirmek ve yönetmek için kullanılan web arayüzüdür.
4.1. Kibana Kurulumu
Kibana paketini YUM kullanarak kuralım:
sudo yum install kibana -y
4.2. Kibana Yapılandırması
Kibana’nın ana yapılandırma dosyası /etc/kibana/kibana.yml adresindedir. Bu dosyayı düzenleyerek temel ayarları yapalım.
sudo vi /etc/kibana/kibana.yml
Aşağıdaki satırları bulup veya ekleyip düzenleyin:
# Kibana'nın dinleyeceği port. Varsayılan 5601'dir.
server.port: 5601
Kibana'nın dinleyeceği ağ arayüzü.
Sadece localhost'tan erişim için "localhost", tüm arayüzlerden erişim için "0.0.0.0" kullanın.
server.host: "0.0.0.0"
Elasticsearch instance'ınızın URL'si.
Eğer Elasticsearch aynı sunucudaysa localhost kullanabilirsiniz.
elasticsearch.hosts: ["http://localhost:9200"]
Türkçe dil desteği için (isteğe bağlı)
i18n.locale: "tr-TR"
4.3. Kibana Servisini Başlatma
Yapılandırmaları yaptıktan sonra Kibana servisini etkinleştirelim ve başlatalım:
sudo systemctl enable kibana
sudo systemctl start kibana
Servisin durumunu kontrol edelim:
sudo systemctl status kibana
Durum active (running) olmalıdır.
4.4. Kibana’ya Erişimi Doğrulama
Kibana’ya web tarayıcınızdan erişebilirsiniz. Sunucunuzun IP adresini ve Kibana portunu kullanarak adres çubuğuna yazın:
http://:5601
Kibana arayüzünü görmelisiniz. İlk açılışta biraz zaman alabilir.
5. Logstash Kurulumu ve Yapılandırması
Logstash, çeşitli kaynaklardan logları ve diğer verileri toplar, işler ve Elasticsearch’e gönderir.
5.1. Logstash Kurulumu
Logstash paketini YUM kullanarak kuralım:
sudo yum install logstash -y
5.2. Logstash Yapılandırması
Logstash, .conf uzantılı yapılandırma dosyaları aracılığıyla çalışır. Bu dosyalar, veri işleme pipeline’larını (input, filter, output) tanımlar. Logstash yapılandırma dosyaları /etc/logstash/conf.d/ dizininde bulunur.
Örnek olarak, sistem loglarını (/var/log/messages) toplayıp Elasticsearch’e gönderen basit bir pipeline oluşturalım.
sudo vi /etc/logstash/conf.d/system-logs.conf
İçeriği aşağıdaki gibi ekleyin:
input {
file {
path => "/var/log/messages"
type => "syslog"
start_position => "beginning"
sincedb_path => "/dev/null" # Test amaçlı, üretimde kullanmayın
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
target => "@timestamp"
}
# Eğer grok başarılı olmazsa, tag ekleyelim
if "_grokparsefailure" in [tags] {
drop {} # Hatalı parse edilenleri düşür
}
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "system-logs-%{+YYYY.MM.dd}"
}
# Konsola da çıktı almak için (hata ayıklama amaçlı)
# stdout { codec => rubydebug }
}
Açıklamalar:
* input: /var/log/messages dosyasını dinler. type alanı, filtreleme için kullanılır. start_position => "beginning" Logstash başlatıldığında dosyanın başından okumaya başlamasını sağlar. sincedb_path => "/dev/null" Logstash’in dosyanın neresinde kaldığını takip etmesini sağlayan sincedb dosyasını devre dışı bırakır, bu da her yeniden başlatmada tüm logları yeniden okumasına neden olur. Üretimde bu ayarı kaldırmalısınız ki Logstash sadece yeni logları okusun.
* filter: syslog türündeki logları grok filtresi ile ayrıştırır. grok, yapılandırılmamış log verilerini yapılandırılmış verilere dönüştürmek için güçlü bir araçtır. date filtresi, logdaki zaman damgasını Elasticsearch’in @timestamp alanına dönüştürür.
* output: İşlenmiş logları localhost:9200 adresindeki Elasticsearch’e gönderir. index ayarı, logların günlük olarak system-logs-YYYY.MM.dd formatında indekslenmesini sağlar.
5.3. Logstash Servisini Başlatma
Yapılandırmaları yaptıktan sonra Logstash servisini etkinleştirelim ve başlatalım:
sudo systemctl enable logstash
sudo systemctl start logstash
Servisin durumunu kontrol edelim:
sudo systemctl status logstash
Durum active (running) olmalıdır. Logstash’in ilk başlatılması biraz zaman alabilir, çünkü Java VM’i başlatır.
5.4. Logstash’in Çalıştığını Doğrulama
Logstash’in doğru çalıştığını ve logları Elasticsearch’e gönderdiğini doğrulamak için, Elasticsearch’teki indeksleri kontrol edebiliriz:
curl -X GET "http://localhost:9200/_cat/indices?v"
Birkaç dakika sonra, system-logs-YYYY.MM.dd formatında yeni bir indeks görmelisiniz.
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana_task_manager_1 ... 1 0 2 0 102.3kb 102.3kb
green open .apm-agent-configuration ... 1 0 0 0 208b 208b
green open .kibana_1 ... 1 0 3 0 18.6kb 18.6kb
green open system-logs-2023.10.27 ... 1 0 123 0 202.3kb 202.3kb
Ardından Kibana arayüzüne gidin (http://:5601).
* Sol menüden “Stack Management” -> “Index Patterns” (veya “Data Views” yeni Kibana sürümlerinde) seçeneğine tıklayın.
* “Create Index Pattern” (veya “Create data view”) düğmesine tıklayın.
“system-logs-” yazın ve “Next step” düğmesine tıklayın.
* Zaman damgası alanı olarak @timestamp seçin ve “Create index pattern” (veya “Create data view”) düğmesine tıklayın.
* Şimdi sol menüden “Analytics” -> “Discover” seçeneğine gidin. Loglarınızın burada listelendiğini görmelisiniz.
6. Güvenlik Önlemleri
Üretim ortamlarında Elastic Stack’i kurarken güvenlik kritik öneme sahiptir. Bu temel kurulum rehberinde güvenlik adımlarına tam olarak değinilmemiştir, ancak aşağıdakileri göz önünde bulundurmanız şiddetle tavsiye edilir:
* X-Pack Security: Elasticsearch, Kibana ve Logstash için kullanıcı kimlik doğrulaması, rol tabanlı erişim kontrolü, SSL/TLS şifrelemesi gibi güvenlik özelliklerini sunar. Üretim ortamlarında bu özellikleri etkinleştirmek zorunludur.
* Ağ Güvenliği: Elasticsearch, Kibana ve Logstash’in varsayılan portlarını yalnızca güvenli ağlardan erişilebilir hale getirin veya VPN üzerinden erişimi sağlayın. network.host: 0.0.0.0 ayarı, herhangi bir IP adresinden erişime izin verir ve güvenlik riski taşır. Mümkünse belirli IP adreslerine veya localhost‘a kısıtlayın.
* HTTPS/SSL: Kibana ve Elasticsearch arasındaki iletişimi ve Kibana’ya web tarayıcısı üzerinden erişimi HTTPS ile şifreleyin.
* Erişim Kontrolü: Sunucu seviyesinde güvenlik duvarı kuralları ile yalnızca yetkili IP adreslerinin Elastic Stack bileşenlerine erişmesine izin verin.
* Sistem Kullanıcıları: Her bir Elastic Stack bileşeni için ayrı, düşük yetkili sistem kullanıcıları oluşturmak ve bunları çalıştırmak daha güvenlidir.
7. İleri Konular ve En İyi Uygulamalar
* Filebeat ve Metricbeat: Logstash, doğrudan log dosyalarını okuyabilir, ancak genellikle sunuculardan log ve metrik toplamak için Filebeat ve Metricbeat gibi hafif veri toplayıcılar (shipper’lar) kullanılır. Bu toplayıcılar, hedef sunucularda çalışır ve verileri Logstash’e veya doğrudan Elasticsearch’e gönderir. Bu, Logstash üzerindeki yükü azaltır ve daha güvenilir veri iletimi sağlar.
* Veri Saklama Politikaları: Elasticsearch’te depolanan veriler hızla büyüyebilir. Index Lifecycle Management (ILM) kullanarak indekslerin yaşam döngüsünü (oluşturma, taşıma, silme) otomatik olarak yönetebilirsiniz.
* Performans Ayarlamaları: Elasticsearch için JVM heap boyutu, disk performansı (SSD kullanılması önerilir), CPU ve RAM kaynakları önemlidir. Logstash için pipeline’ların optimize edilmesi ve worker sayısının ayarlanması performansı etkiler.
* Monitoring: Elastic Stack’in kendi monitoring araçları (X-Pack Monitoring) ile kümenizin sağlığını ve performansını izleyebilirsiniz.
* Yüksek Erişilebilirlik ve Ölçeklenebilirlik: Üretim ortamlarında, tek bir düğüm yerine birden fazla Elasticsearch düğümü ile bir küme oluşturmak, veri yedekliliği ve yüksek erişilebilirlik sağlar.
8. Sonuç
Bu makalede, Elasticsearch, Logstash ve Kibana’yı (Elastic Stack) CentOS 7 işletim sistemi üzerine nasıl kuracağınızı adım adım öğrendiniz. Sistem hazırlığından başlayarak, her bir bileşenin kurulumunu, temel yapılandırmasını ve çalışıp çalışmadığını doğrulamayı detaylı bir şekilde ele aldık. Artık loglarınızı merkezi bir konumda toplayabilir, işleyebilir, depolayabilir ve Kibana’nın güçlü görselleştirme yetenekleri sayesinde analiz edebilirsiniz.
Kurulum tamamlandıktan sonra, Kibana’nın sunduğu zengin özellik setini keşfetmeye başlayabilirsiniz. Özel panolar oluşturarak, loglarınızdaki eğilimleri izleyebilir, anormallikleri tespit edebilir ve sistemlerinizin ve uygulamalarınızın sağlığı hakkında derinlemesine içgörüler elde edebilirsiniz. Unutmayın ki bu bir başlangıç noktasıdır; üretim ortamları için güvenlik, performans ve ölçeklenebilirlik konularında daha fazla araştırma ve yapılandırma yapmanız gerekecektir.
