top of page
Yazarın fotoğrafıAlperen ÜLKÜ

Elastic Stack & Monitör Uygulaması



Merhaba arkadaşlar, bu yazımda sistem verilerinin gerçek zamanlı toplanarak görselleştirilip analiz edilebileceği bir monitör uygulaması yapacağız. Gereken Elastic Stack teknolojilerinin güncel olan 8.2.0 versiyonu ile çalışacağız. Keyifli okumalar dilerim...


Elastic (ELK) Stack Nedir?


Elastic Stack, kullanıcıların herhangi bir biçimde her türlü kaynaktan veri alabilmelerine ve bu verilerde gerçek zamanlı olarak arama, analiz ve görselleştirme yapabilmelerine yardımcı olmak üzere tasarlanan Elastic'e ait ürünlerden oluşan açık kaynaklı bir ürün grubudur.



Kibana: Kibana, günlük ve zaman serisi analizleri, uygulama izleme ve operasyonel zeka kullanım örnekleri için kullanılan bir veri görselleştirme ve keşif aracıdır. Histogramlar, çizgi grafikleri, dilim grafikleri, ısı haritaları ve yerleşik coğrafi mekansal destek gibi güçlü ve kullanımı kolay özellikler sunar. Ayrıca, popüler bir analiz ve arama altyapısı olan Elasticsearch ile sıkı bir entegrasyona sahiptir ve bu, Kibana'yı Elasticsearch'te depolanan verileri görselleştirmek için varsayılan seçenek haline getirir.


Elasticsearch: Elasticsearch, Apache Lucene üzerinde geliştirilmiş dağıtılmış bir arama ve analiz altyapısıdır. Elasticsearch, yayımlandığı 2010 yılından itibaren en popüler arama altyapısı haline gelmiştir ve genellikle günlük analitiği, tam metin (full text) arama, güvenlik zekası, iş analitiği ve operasyonel zeka kullanım örnekleri için tercih edilmektedir.


Logstash: Logstash, çeşitli kaynaklardan veri toplamanıza, anında dönüştürmenize ve istediğiniz hedefe göndermenize olanak tanıyan hafif, açık kaynaklı, sunucu tarafı bir veri işleme hattıdır. Genellikle açık kaynaklı bir analiz ve arama altyapısı olan Elasticsearch için bir veri hattı olarak kullanılır. Elasticsearch ile sıkı entegrasyonu, güçlü günlük işleme özellikleri ve verilerinizi kolayca dizinlemenize yardımcı olabilecek 200'den fazla önceden oluşturulmuş açık kaynaklı eklenti sayesinde Logstash, Elasticsearch'e veri yüklemek için popüler bir seçenektir.


Beats: Beat verilerin Elasticsearch platformuna taşınmasını sağlayan açık kaynak ve hafif bir platformdur.


Yukarıda görülen mimaride çeşitli beat'ler ile Elasticsearch'e veriler doğrudan gönderilebildiği gibi, logstash'e gönderilip burada parse edildikten sonra da Elasticsearch'e gönderilebilir. Bu veriler Kibana üzerinden özelleştirilmiş dashboard'lar ile görselleştilir.



Yukarıda Beat çeşitlerini görebilirsiniz. Bu kılavuzda sistem verilerini toplamak için MetricBeat kullanacağız.


Monitör Uygulaması için Kullanılacak Envanter


Bu yazıda Elastic Stack kurulumunu tek node (non-cluster) Oracle Linux 7.9 işletim sistemi üzerine yapacağız. RedHat 7.x ve CentOS 7.x versiyonları için bu kılavuzdaki komutları birebir takip edebilirsiniz. Elasticsearch - Kibana - MetricBeat için güncel olan 8.2.0 versiyonlarını tercih ettik.

  • Oracle Linux 7.9

  • Elasticsearch 8.2.0

  • Kibana 8.2.0

  • MetricBeat 8.2.0

  • JDK 1.8

Farklı ortamlarda kurulum yapacaklar için Elastic'te yayınlanan güncel Support Matrix'e buradan ulaşabilirsiniz.


Elastic Stack Kurulumu ve Monitör Uygulaması


Bu kurulum esnasında tüm konfigürasyonlar localhost'ta çalışacak şekilde yapılacaktır. Fakat aynı veya farklı networklerde birden çok sunucumuz var ve tüm sunucuların sistem verilerini tek bir merkezi monitör sunucusuna toplayacağımız senaryolarda neler yapmamız gerektiğinden de bahsedeceğiz.


Öncelikle firewall ve selinux stop/disable edilir. Bunun sebebi farklı sunucularda çalışan Beat'lerin bu sunucuya veri göndereceği sırada problem yaşamamasıdır.

# systemctl disable firewalld.service
# systemctl stop firewalld.service
# vi /etc/selinux/config 


Dosyada belirtilen satıra "disabled" yazılır.

SELINUX=disabled


Elasticsearch 8.2.0 RPM'i indirilir.

# curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.2.0-x86_64.rpm


RPM kurulur ve elastic şifresi not edilir. RPM kurulduktan şifre sıfırlamak için aşağıdaki görselde belirtilen sh çalıştırılabilir. Kibana'nın Elasticsearch ile konfigürasyonu için gereken enrollment token'ın üretilmesinde belirtilen diğer sh çalıştırılabilir ki bunu ileriki adımlarda çalıştıracağız. Elastic Cluster'a node eklemek için gereken enrollment token ise diğer sh ile elde edilir. Biz tek node üzerine çalıştığımız için bu sh ile şimdilik işimiz yok.

# rpm -vi elasticsearch-8.2.0-x86_64.rpm
# echo vvjwC7p5nYlEnIPWrks= > elasticpw


Kurulumda kullandığım şifre auto-generate ve test amaçlı olduğu için gizleme gereği duymadım.


Kurulum bitince servisi başlatmadan önce elasticsearch.yml dosyasında gerekli konfigürasyonlar yapılır.

# vi /etc/elasticsearch/elasticsearch.yml

Aşağıda kendi dosyamın ekran görüntülerini paylaştım. Burada path.data, sizin Elasticsearch'te depoladığınız verilerin lokasyonudur. Eğer verileri harici bir diskte depolamak isterseniz bu diski mount edip path'ini yazabilirsiniz. Dikkat edilmesi gereken husus, bu dizinin sahipliği elasticsearch kullanıcısına ait olmalıdır! path.logs dizini logların bulunduğu dizindir ve aynı şekilde sahipliği elasticsearch'e ait olmalıdır.


Bu kılavuzda network.host değeri yorum satırı olduğundan varsayılan değer olan localhost şeklinde çalışır ve Elasticsearch'e sadece localhost bağlanabilir. Eğer Elasticsearch'e tüm networkten ulaşılabilsin istiyorsak bu değeri "0.0.0.0" olarak tanımlamak gerekir.


Bir önceki versiyon olan Elasticsearch 8.1.3'te http.host değeri defaultta sadece localhost ve local network'lere izin verdiğinden HTTP API bağlantılarına her yerden erişim için ek olarak bu değerin ayarlanması gerekiyordu. 8.2.0 versiyonunda default olarak "connection from anywhere (her yerden bağlantı)" geldiğinden aşağıda olduğu gibi bırakıyoruz.


Konfigürasyon dosyasındaki ayarlamalar bittikten sonra kaydedilir ve kapatılır.


Daemon reload edildikten sonra Elasticsearch servisi başlatılır ve aşağıdaki curl komutu ile test edilir.

# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200 


Tarayıcıdan "https://localhost:9200" adresine giderek, elastic kullanıcı adı ve şifresi ile giriş yapılır. Şifreyi yukarıda Elasticsearch RPM kurulumu yaptıktan sonra not almıştık.


Görüldüğü gibi Elasticsearch kuruldu ve localhost üzerinde çalışır durumda. Eğer konfigürasyon dosyasında Elasticsearch'e her yerden erişim izni verdiyseniz ve erişimi yapacak sunucunun, elastic sunucusunda 9200 portuna erişim izni var ise adres çubuğunda localhost yerine IP veya DNS'te kayıtlı olan hostname'i yazarak erişim sağlayabilirsiniz.


Kibana 8.2.0 RPM'i indirilir ve kurulur.

# curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-8.2.0-x86_64.rpm
# rpm -vi kibana-8.2.0-x86_64.rpm


Kibana servisi başlatılmadan önce kibana.yml dosyasında gerekli düzenlemeler yapılır.

# vi /etc/kibana/kibana.yml

Dosya içerisinde ilk bakılacak kısım server.host parametresidir. Bu parametre defaultta "localhost" olarak ayarlanmıştır. Bu demek oluyor ki Kibana'ya sadece bu sunucu üzerinden erişim sağlayabilirsiniz. Eğer uzaktaki sunuculardan Kibana'ya bağlanabilmek istiyorsanız buraya IP adresi veya DNS'e kayıtlı olan hostname'i yazmanız gerekmektedir. Bu kılavuz localhost üzerinden devam edeceği için default bırakıyoruz.


Eğer Kibana'yı Elasticsearch'ten farklı bir sunucuya kurduysanız bu parametreyi düzeltmeniz gerekecektir. Biz aynı sunucu üzerinde default olan 9200 portunu kullandığımız için ek bir ayar yapmayacağız. Bu parametreyi set ederken Elasticsearch'in çalıştığı http/https ayrımına dikkat edin!


Daemon reload edilir ve Kibana servisi başlatılır. Kibana başladıktan sonra Elasticsearch'e bağlanabilmek için bir enrollment token ve bir verification code üretilir.

# systemctl daemon-reload
# systemctl enable kibana.service
# systemctl start kibana.service

# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
# sh /usr/share/kibana/bin/kibana-verification-code


Tarayıcı üzerinden "http://localhost:5601" adresine gidilir. Önceki adımda üretilen enrollment token değeri buraya girilerek Kibana ile Elasticsearch arasındaki konfigürasyon yapılır.


NOT: Eğer uzaktaki bir sunucudan Kibana'ya bağlanmak istiyorsanız adres çubuğunda localhost yerine kibana.yml'de verdiğiniz server.host değerini yazabilirsiniz. server.host parametresi girilmediyse sadece localhost üzerinden Kibana'ya bağlanılabilir!


Doğrulama için önceki adımda üretilen 6 haneli verification code girilir.


Sisteme elastic kullanıcısı ve şifresi ile giriş yapılır.


"Explore on my own" seçilir.


Aşağıdaki ekrana geldiysek Kibana kurulum ve konfigürasyonunu tamamladık diyebiliriz. Burada "Try sample data" ile örnek veriler yükleyebiliriz. "Upload a file" ile elimizde bulunan bir veri dosyasını sürükle&bırak yöntemi ile içe aktarabilir ve analiz yapabiliriz.


Şimdi gelelim sistem verilerini çekmemizi sağlayacak olan MetricBeat'i kurma işine. MetricBeat sistem verileri çekilecek olan bütün sunuculara kurulmalı ve bu sunucuların Elasticsearch kurulu olan sunucuda 9200 portuna erişim yetkisi olmalıdır. Bu kurulumda sadece localhost'un verileri ile çalışılacak.


MetricBeat RPM'i indirilir, kurulur ve sistem modülü aktif edilir.

# curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.2.0-x86_64.rpm
# rpm -vi metricbeat-8.2.0-x86_64.rpm
# metricbeat modules enable system

MetricBeat'in en temel konfigürasyon ayarlarını yapmak için metricbeat.yml dosyasına girilir.

# vi /etc/metricbeat/metricbeat.yml

"output.elasticsearch:" kısmı altında üretilen metric verilerinin gönderileceği sunucu bilgisi bulunur. Eğer uzaktaki bir sunucudan Elasticsearch'e bağlanılacaksa localhost yerine Elasticsearch IP adresi veya DNS'e tanımlı olan hostname'i yazılmalıdır ve MetricBeat'in kurulu olduğu sunucunun, Elasticsearch sunucusunda 9200 portuna erişim yetkisi olmalıdır.


Diğer önemli kısım ise username, password ve ssl kısmıdır. Burada kendi elastic şifremizi ve altındaki ssl bilgilerini yazarak devam etmeliyiz. Burada yapılacak hatalar metric verilerinin Elasticsearch sunucusuna erişmesinde problem yaşanmasına sebep olacağından dikkat edilmelidir!

  username: "elastic"
  password: "YOUR_PASSWORD"
  ssl:
  enabled: true
  verification_mode: "none"


Burada logging.level default olarak debug modundadır, her bir olay /var/log/messages'ta log ürettiği için gereksiz şişmeye sebep olabiliyor. Bu sebeple log level'i error seviyesine getirmenizi tavsiye ederim.


Daemon reload edilir ve MetricBeat servisi başlatılır.

# systemctl daemon-reload
# systemctl enable metricbeat.service
# systemctl start metricbeat.service


MetricBeat dashboard'ının Kibana'da kurulması için bir seferlik bu komut çalıştırılır, daha sonra yeni gelen her sunucu verisi bu arayüzde görüntülenir. Kurulumu yapabilmek için MetricBeat'in Kibana'ya erişebilir durumda olması lazımdır.

# metricbeat setup -e



Kibana'ya tekrar dönerek. Seçeneklerden "Dashboard"a girelim.


Burada MetricBeat ile çeşitli ortamlardan çektiğiniz verileri görselleştirebileceğiniz arayüzler yüklenmiştir. Biz [Metricbeat System] başlığında "Host Overview" ve "System Overview" kısımlarını inceleyeceğiz.


"System Overview" kısmında verisi çekilen tüm sunucuların genel görünümünü görmüş olacağız.



"Host Overview" kısmından istediğimiz sunucuyu sorgulayarak tüm sistem verilerine ulaşabiliriz. Aşağıda uygulama sonunda elde edilen monitör uygulamasının görüntülerini paylaştım.


Böylece envanterimizdeki sunucu verilerini Elasticsearch'te uzun süre depolayarak sunucularımızın genel sağlık durumunu takip edebilir, ileride geçmişe yönelik veya problem yaşanan zaman aralığına dönerek sorunun kaynağını tespit edebiliriz.


Kaynak:


Gelecek yazılarımızda görüşmek üzere, sağlıcakla kalın...

418 görüntüleme0 yorum

Son Yazılar

Hepsini Gör

Коментарі

Оцінка: 0 з 5 зірок.
Ще немає оцінок

Додайте оцінку
bottom of page