CentOS/RHEL 7'ye Elasticsearch, Logstash ve Kibana (ELK Stack) Nasıl Kurulur


Linux'ta sistem günlüklerini incelemek ve analiz etmekten sorumlu olan veya geçmişte sorumlu olan bir kişiyseniz, birden fazla hizmet aynı anda izleniyorsa bu görevin ne kadar kabusa dönüşebileceğini bilirsiniz.

Geçmişte bu görevin çoğunlukla manuel olarak yapılması gerekiyordu ve her günlük türü ayrı ayrı ele alınıyordu. Neyse ki sunucu tarafında Elasticsearch, Logstash ve Kibana'nın yanı sıra istemcide Filebeat kombinasyonu yandan, bir zamanlar zor olan bu görevi bugün parkta yürüyüşe benzetiyor.

İlk üç bileşen, ELK yığını olarak adlandırılan ve asıl amacı aynı anda birden fazla sunucudan günlükleri toplamak olan (merkezi günlük kaydı olarak da bilinir) bir yığın oluşturur.

Önerilen Okuma: Linux için 4 İyi Açık Kaynak Günlük İzleme ve Yönetim Aracı

Yerleşik Java tabanlı web arayüzü, daha kolay karşılaştırma ve sorun giderme için günlükleri bir bakışta hızlı bir şekilde incelemenize olanak tanır. Bu istemci günlükleri, günlük nakliye acentesi olarak tanımlanabilecek Filebeat tarafından merkezi bir sunucuya gönderilir.

Tüm bu parçaların birbirine nasıl uyduğunu görelim. Test ortamımız aşağıdaki makinelerden oluşacaktır:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Burada sağlanan RAM değerlerinin kesin önkoşullar olmadığını, ancak ELK yığınının merkezi sunucuda başarılı bir şekilde uygulanması için önerilen değerler olduğunu lütfen unutmayın. İstemcilerde daha az RAM olması pek bir fark yaratmayacaktır.

ELK Stack'in Sunucuya Kurulumu

Her bileşenin ne işe yaradığına dair kısa bir açıklamayla birlikte ELK yığınını sunucuya yükleyerek başlayalım:

  1. Elasticsearch, istemciler tarafından gönderilen günlükleri saklar.
  2. Logstash bu günlükleri işler.
  3. Kibana, günlükleri incelememize ve analiz etmemize yardımcı olacak web arayüzünü sağlar.

Aşağıdaki paketleri merkezi sunucuya kurunuz. Öncelikle, bir bağımlılık olan Java JDK sürümünün 8'i (güncelleme 102, bu yazının yazıldığı tarihteki en son sürüm) yükleyeceğiz. ELK bileşenlerinden biridir.

Daha yeni bir güncelleme olup olmadığını görmek için öncelikle buradaki Java indirme sayfasını kontrol etmek isteyebilirsiniz.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

Kurulumun başarıyla tamamlanıp tamamlanmadığını kontrol etme zamanı:

java -version

Elasticsearch, Logstash ve Kibana'nın en son sürümlerini yüklemek için yum depolarını manuel olarak oluşturmamız gerekecek aşağıdaki gibi:

Elasticsearch Deposunu Etkinleştir

1. Elasticsearch genel GPG anahtarını rpm paket yöneticisine aktarın:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Aşağıdaki satırları elasticsearch.repo depo yapılandırma dosyasına ekleyin:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Elasticsearch paketini yükleyin.

yum install elasticsearch

Kurulum tamamlandığında, elasticsearch'ü başlatmanız ve etkinleştirmeniz istenecektir:

4. Hizmeti başlatın ve etkinleştirin.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Güvenlik duvarınızda 9200 TCP bağlantı noktası üzerinden trafiğe izin verin:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Elasticsearch'ün HTTP üzerinden basit isteklere yanıt verip vermediğini kontrol edin:

curl -X GET http://localhost:9200

Yukarıdaki komutun çıktısı şuna benzer olmalıdır:

Yukarıdaki adımları tamamladığınızdan emin olun ve ardından Logstash ile devam edin. Hem Logstash hem de Kibana Elasticsearch GPG anahtarını paylaştığından, paketleri yüklemeden önce onu yeniden içe aktarmaya gerek yoktur.

Önerilen Okuma: CentOS 7'de Sistem Günlüklerini Yönetin (Yapılandırın, Döndürün ve Veritabanına İçe Aktarın)

Logstash Deposunu Etkinleştir

7. Aşağıdaki satırları logstash.repo depo yapılandırma dosyasına ekleyin:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Logstash paketini yükleyin:

yum install logstash

9. [ v3_ca ] bölümünün altındaki aşağıdaki satıra ELK sunucusunun IP adresine dayalı bir SSL sertifikası ekleyin. >/etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. 365 gün boyunca geçerli, kendinden imzalı bir sertifika oluşturun:

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Logstash giriş, çıkış ve filtre dosyalarını yapılandırın:

Giriş: /etc/logstash/conf.d/input.conf dosyasını oluşturun ve içine aşağıdaki satırları ekleyin. Bu, Logstash'ın istemcilerden gelen vuruşların nasıl işleneceğini "öğrenmesi" için gereklidir. Sertifikaya ve anahtara giden yolun, önceki adımda özetlendiği gibi doğru yollarla eşleştiğinden emin olun:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Çıkış (/etc/logstash/conf.d/output.conf) dosyası:


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Filtre (/etc/logstash/conf.d/filter.conf) dosyası. Kolaylık olması açısından sistem günlüğü mesajlarını günlüğe kaydedeceğiz:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Logstash yapılandırma dosyalarını doğrulayın.

service logstash configtest

13. Logstash'ı başlatın ve etkinleştirin:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Güvenlik duvarını Logstash'ın istemcilerden günlükleri almasına izin verecek şekilde yapılandırın (TCP bağlantı noktası 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Kibana Deposunu Etkinleştir

14. Aşağıdaki satırları kibana.repo depo yapılandırma dosyasına ekleyin:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Kibana paketini yükleyin:

yum install kibana

16. Kibana'yı başlatın ve etkinleştirin.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Kibana'nın web arayüzüne başka bir bilgisayardan erişebildiğinizden emin olun (5601 TCP bağlantı noktasındaki trafiğe izin verin):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Web arayüzüne erişebildiğinizi doğrulamak için Kibana'yı (http://192.168.0.29:5601) başlatın:

İstemcilere Filebeat'i kurup yapılandırdıktan sonra buraya geri döneceğiz.

Önerilen Okuma: Linux'taki “Log.io ” Aracıyla Sunucu Günlüklerini Gerçek Zamanlı Olarak İzleyin

Filebeat'i İstemci Sunucularına Kurun

Bunu Müşteri #1 için nasıl yapacağınızı göstereceğiz (daha sonra Müşteri #2 için tekrarlayın, dağıtımınız için uygunsa yolları değiştirin).

1. SSL sertifikasını sunucudan istemcilere kopyalayın:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Elasticsearch genel GPG anahtarını rpm paket yöneticisine aktarın:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. CentOSFilebeat (/etc/yum.repos.d/filebeat.repo) için bir depo oluşturun. > tabanlı dağıtımlar:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Filebeat'i Debian ve türevlerine yüklemek için kaynağı yapılandırın:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Filebeat paketini yükleyin:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Filebeat'i başlatın ve etkinleştirin:

systemctl start filebeat
systemctl enable filebeat

Filebeat'i Yapılandır

Burada bir uyarı. Filebeat yapılandırması, katı girinti gerektiren bir YAML dosyasında depolanır. /etc/filebeat/filebeat.yml dosyasını aşağıdaki gibi düzenlerken buna dikkat edin:

  1. Yollar altında, hangi günlük dosyalarının ELK sunucusuna "gönderilmesi" gerektiğini belirtin.
  2. Arayanlar altında:
input_type: log
document_type: syslog
  1. Çıktı altında:

    1. logstash ile başlayan satırın açıklamasını kaldırın.
    2. ELK sunucunuzun IP adresini ve Logstash'ın ana bilgisayarlarda dinlediği bağlantı noktasını belirtin.
    3. Sertifika yolunun, yukarıdaki I. Adımda (Logstash bölümü) oluşturduğunuz gerçek dosyayı gösterdiğinden emin olun.

Yukarıdaki adımlar aşağıdaki resimde gösterilmektedir:

Değişiklikleri kaydedin ve ardından istemcilerde Filebeat'i yeniden başlatın:

systemctl restart filebeat

İstemcilerle ilgili yukarıdaki adımları tamamladıktan sonra devam etmekten çekinmeyin.

Filebeat'i test etme

İstemcilerden gelen günlüklerin başarıyla gönderilip alınabildiğini doğrulamak için ELK sunucusunda aşağıdaki komutu çalıştırın:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Çıktı şuna benzer olmalıdır: (/var/log/messages ve /var/log/secure'dan gelen iletilerin client1'den nasıl alındığına dikkat edin ve istemci2):

Aksi halde Filebeat yapılandırma dosyasında hatalar olup olmadığını kontrol edin.

journalctl -xe

Filebeat yeniden başlatmayı denedikten sonra sizi rahatsız eden satırlara yönlendirecektir.

Kibana'yı test etmek

Günlüklerin istemciler tarafından gönderildiğini ve sunucuya başarıyla alındığını doğruladıktan sonra. Kibana'da yapmamız gereken ilk şey bir dizin modeli yapılandırıp onu varsayılan olarak ayarlamaktır.

Bir dizini ilişkisel veritabanı bağlamında tam bir veritabanı olarak tanımlayabilirsiniz. filebeat-* ile gideceğiz (veya resmi belgelerde açıklandığı gibi daha kesin bir arama kriteri kullanabilirsiniz).

Dizin adı veya desen alanına filebeat-* yazın ve ardından Oluştur'u tıklayın:

Lütfen daha sonra daha ayrıntılı bir arama kriteri girmenize izin verileceğini unutmayın. Ardından, varsayılan dizin deseni olarak yapılandırmak için yeşil dikdörtgenin içindeki yıldızı tıklayın:

Son olarak, Keşfet menüsünde günlük görselleştirme raporuna ekleyebileceğiniz birkaç alan bulacaksınız. Fareyle bunların üzerine gelip Ekle'yi tıklamanız yeterli:

Sonuçlar yukarıda gösterildiği gibi ekranın orta alanında gösterilecektir. Kibana'yı tanımak için biraz deneme yapmaktan (günlük raporuna alanlar ekleyip çıkarmak) çekinmeyin.

Varsayılan olarak Kibana, son 15 dakika içinde işlenen kayıtları görüntüler (sağ üst köşeye bakın), ancak başka bir zaman dilimi seçerek bu davranışı değiştirebilirsiniz:

Özet

Bu yazıda CentOS 7 ve Debian 8 olmak üzere iki istemci tarafından gönderilen sistem günlüklerini toplamak için ELK yığınının nasıl kurulacağını açıkladık.

Artık resmi Elasticsearch belgelerine başvurabilir ve günlüklerinizi daha verimli bir şekilde incelemek ve analiz etmek için bu kurulumun nasıl kullanılacağı hakkında daha fazla ayrıntı bulabilirsiniz.

Sorularınız varsa sormaya çekinmeyin. Sizden haber almak için sabırsızlanıyoruz.