Elasticsearch – Kibana ve LogStash Kurulumu – Centos 7 üzerine

Bu makalemizin ana amacı Centos 7 işletim sistemi üzerine ES – Kibana ve Logstash kurulumlarını gerçekleştirmek.

Kuruluma geçmeden önce kurulum yapacağımız teknolojileri yüzeysel olarak hızlı bir şekilde anlatmak istiyorum. (Ayrı ayrı daha detaylı bir şekilde makalelerde ele alacağız bu teknolojileri.)

Elasticsearch : ElasticSearch, büyük veriler ile çalışan şirketlerin içerik arama (full text search), veri analizi, sorugulamalar ve öneriler gibi işlemlerde özellikle performans kabiliyetleri, güçlü ve esnek olmasından dolayı tercih ettiği bir search engine’ dir.  Java ile geliştirilmiştir ve Lucene alt yapılıdır. 
Elasticsearch’de hem Near Realtime (Gerçek zamana yakın) hem de Distributed(dağıtık) yapısıyla veriler içerisinden içerik aramaları, veri analizi ve sorgulamalar yapıyor. 

Kibana : Elastic Search’e kaydedilen logları anlık olarak izlemenizi sağlayan ve istendiği takdirde grafiksel istatistikler bile çıkarabilecek ciddi anlamda yetenekli bir web uygulaması.

Logstash : Log toplayan, ihtiyaca göre onları işleyen ve Elasticsearch’e bu logları indekslenmek üzere gönderen sistemdir. Konfigürasyon dosyası 3’e ayrılır. InputFilter ve Output.

İlk Önce ElasticSearch ‘ü kuracağız ama öncesinde Java Kurulumunu Gerçekleştirmemiz gerekmekte.

  • Java Kurulumu :
yum -y update
sudo yum install java-1.8.0-openjdk.x86_64
java -version
  • ES Kurulumu :
- ES Kurulumu :

# Key 'imizi import ediyoruz.
sudo rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

#Daha sonra Repo muzu ekleyip kaydediyoruz sayfamızı 

vi /etc/yum.repos.d/elasticsearch.repo

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

NOT : Kaydetmek için ESC + wq! 

ES Kurulumuna Başlıyoruz

sudo yum install elasticsearch -y 

Kurulum sonrası erişim için yml dosyasına gidip Config change yapmamız gerek.Burada network.host ve port kısımlarında değişiklikleri yapıp yml dosyamızı kaydediyoruz.

vi /etc/elasticsearch/elasticsearch.yml

Servisimizi başlatıp statusune bakıp enable a çekelim.

sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
sudo systemctl enable elasticsearch
  • Kibana Kurulumu :
sudo yum install kibana -y
sudo systemctl start kibana
sudo systemctl status kibana
sudo systemctl enable kibana
  • Logstash Kurulumu
 sudo yum install logstash -y

input.conf a gidip aşağıdaki parametreleri yapıştırıyoruz.

 vi /etc/logstash/conf.d/02-beats-input.conf

# Aşağıda kileri yapıştırın
 input {
beats {
port => 5044
}
}

Şimdi syslog filtresi için konfigürasyon oluşturalım. İnternet üzerinde çeşitli kombinasyonlar bulabilirsiniz bu konuda çok zengin.

vi /etc/logstash/conf.d/10-syslog-filter.conf 
#Config ler :

input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}
filter {
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add]}$",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
        pattern_definitions => {
          "GREEDYMULTILINE"=> "(.|\n)*"
        }
        remove_field => "message"
      }
      date {
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      geoip {
        source => "[system][auth][ssh][ip]"
        target => "[system][auth][ssh][geoip]"
      }
    }
    else if [fileset][name] == "syslog" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
        remove_field => "message"
      }
      date {
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
    }
  }
}
output {
  elasticsearch {
    hosts => localhost
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

output.conf içerisine değişiklikleri

vi /etc/logstash/conf.d/30-elasticsearch-output.conf

#aşağıdaki leri yapıştırın

output {
elasticsearch {
hosts => [“localhost:9200”]
manage_template => false
index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
}
}

Yukarıda ki işlemlerimiz tamam ise servisimizi açalım.

sudo systemctl start logstash
sudo systemctl status logstash
sudo systemctl enable logstash

Beat verilerinizi Elasticsearch platformuna taşımanızı sağlayan açık kaynak ve hafif bir platformdur. Hostumuzu izlemek için metric beat i kuracağız. Metricbeat ‘de periyodik olarak dış bir kaynaktan veri almanıza yardımcı olur. 

Metricbeat kuruyoruz.

yum -y install metricbeat -y

Şimdi de gerekli konfigürasyonları yapalım.

Konfigürasyon 1 :

vi /etc/metricbeat/metricbeat.yml

#Kibana bölümünde aşağıda ki config i açıp localhost bölümüne kibana sunucu ip sini giriniz.

host : "localhost:5601"

# Elasticsearch Output bölümünde de aynı şekilde config i açıp localhost bölümüne elasticsearch 'ünüzün IP bilgisini yazınız.

host : ["localhost:9200"]

Konfigürasyon 2 :

vi /etc/metricbeat/metricbeat.reference.yml

# Logstash Output bölümünde aşağıda ki config i açıp locakhost bölümünde logstash sunucu IP bilgisini yazınız.

host : ["localhost:5044"]

#Kibana bölümünde aşağıda ki config i açıp localhost bölümüne kibana sunucu ip sini giriniz.

host : "localhost:5601"

Servislerimizi start edip statusune bakıp herşey yolunda ise enable ‘a çekiyoruz.

systemctl start metricbeat
systemctl status metricbeat
systemctl enable metricbeat

Browser ‘ımızdan adresimize girip dashboard ‘umuzu açıyoruz.

Kibana Web Dashboard

İncelemek için Kibana WEB UI dan Sample data yükledim. Ben E-Commerce datasını yükledim. https://www.elastic.co/guide/en/kibana/current/add-sample-data.html

Yukarıda da bahsettiğim üzere tüm kullandığımız teknolojileri ayrı makalelerde inceleyeceğiz. Kibana dashboard ekranını detaylarına da bu makalelerde değineceğiz.

Bunların dışında yakında Elasticsearch te karşılaşılan performans problemleri çözümü için dikkat edilmesi gereken config leri ele alacağız.

Teşekkürler.

Kolay Gelsin.

Leave a Reply

Your email address will not be published. Required fields are marked *