ELK ve Prometheus & Grafana Kurulumları, Temel Dashboard Hazırlama

Yunus emre
SabancıDx
Published in
6 min readFeb 8, 2021

Merhabalar,

Monitoring sistemler ve araçlar uygulamalarınızın devamlılığı, destek verilebilirliği açısından en çok öneme sahip araçlar arasında gittikçe önemini artırmaktalar. Bu senaryoda Ubuntu yayılımlı sunucunuzda apache web server kurmayı ve uygulama loglarını (/var/log(access.log, error.log) ELK üzerinde logstash aracılığıyla görüntülemek; ayrıca bu sunucunun sistem loglarını docker olarak ayağa kaldırdığımız Prometheus’a aktarmak istiyoruz. En sonunda da kibana üzerinde oluşturulan dashboardlardan anlık takip sağlanabilecek.

Öncelikle biz Google Cloud’dan kiraladığımız 4 vCPU 18 GB kaynaklı Ubuntu 20.04 versiyonlu makina üzerinde çalıştık. Aynı adımları denerseniz RHEL/Centos ve Debian distrolarda bazı komutların muadillerini kullanmanız gerekebilir.

İlk önce ELK Stack kurulumuyla başlayalım.

İlk gereklilik Java:

#sudo su -

#apt update

#apt install default-jre

#apt install default-jdk

#javac -version && java -version

Beklenen Output:

  1. Elasticsearch

Elasticsearch GPG anahtarını apt’e bağlamak için:

#wget -qO — https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Ardından Elastic source listi sources.list.d’e eklemek için:

#echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

#apt update

#apt install elasticsearch

# vi/etc/elasticsearch/elasticsearch.yml

Aşağıdaki satırları yorumdan çıkarın. Herhangi bir değişiklik yapmanıza gerek kalmayacaktır.

cluster.name: my-application
node.name: node-1
network.host: localhost
http.port: 9200

#systemctl start elasticsearch

#systemctl status elasticsearch

veya #curl -X GET http://localhost:9200

2.Logstash

#apt install logstash

#systemctl start logstash

#systemctl status logstash

3.Kibana

Kibana, bu üçlü kombinde topladığımız verileri gerçek zamanlı analizle görsel arayüz üzerinde açıklamamıza yarayan araç.

#apt install kibana

#systemctl start kibana

#systemctl status kibana

Bu aşamada http://localhost:5601 üzerinden arayüze ulaşmaya çalıştığınızda muhtemelen hata alıp ulaşamayacaksınız. Burayı aşmak için stack toollarının konfigürasyon dosyalarında bazı yerlere ufaktan dokunmak gerekecektir.

#vi /etc/kibana/kibana.yml

server.host ve elasticsearch.host satırları ekran görüntüsündeki gibi ideal kabul edilir.

(default’da gelen “localhost” yerine “0.0.0.0” verdik çünkü bizim sunucumuz external ve internal (nic) IP’e sahib)

IP’nizi öğrenmek için

#hostname -I

(Benim dışarı çıktığım IP’im: 104.196.147.125)

#vi /etc/elasticsearch/elasticsearch.yml

network.host ve http.port satırlarını default değerlerinde comment out yapmanız yeterli olacaktır.

Apache Kurulumu:

Bazı paket güncellemeleri:

#apt update

#apt upgrade

#apt install apache2

#systemctl is-enabled apache2.service

#systemctl enable apache2.service

#systemctl start apache2.service

Optional olarak 80&443 TCP portlarını herkese açmak için:

#ufw allow 80/tcp comment ‘accept Apache’
#ufw allow 443/tcp comment ‘accept HTTPS connections’

Bunun yerine GCP konsolunda kendinize Firewall kuralları set edebilirsiniz.

Ayrıca sunucunuzu kurma aşamasında default bu değerleri enable’a çekebilme şansınız da var.

https://console.cloud.google.com/networking/firewalls/list

Apache access ve error loglarını logstash’a aktarmak için pipeline kurmak gerekiyor. Bunun için metricbeat veya filebeat benzeri bir uygulamaya daha ihtiyacınız var. Burada filebeat kullanıldı.

Filebeat Kurulumu

#wget -qO — https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Repository indirilir:

#echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo
tee -a /etc/apt/sources.list.d/elastic-7.x.list

Paket güncellemesi yapılır ve kurulum:

#apt-get update && sudo apt-get install filebeat

Apache modulü aktif edilir.

#filebeat modules enable apache

#filebeat setup -e

#service filebeat start

Healthcheck koşmak için:

#curl -X GET “localhost:9200/_cat/indices?v”

Beklenen output:

son olarak elastic yerine logstash’i aktif etmek için:

#vi /etc/filebeat/filebeat.yml

output.elasticsearch yoruma alınır ve logstash uncomment edilir.

#systemctl restart logstash

#systemctl restart kibana

http://localhsot:5601 veya bende http://my_external_IP:5601

2.Aşamada Prometheus ve Grafanayı Docker üzerinde ayağa kaldıracağız.

İlk önce docker kurulumunu gerçekleştirelim:

varsa eski sürümleri kaldırmak için:

#apt-get remove docker docker-engine docker.io containerd runc

#apt-get update

#apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

Docker resmi GPG keyi eklenir.

#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Doğrulanır.

apt-key fingerprint 0EBFCD88

x86_64 / amd64 için

#add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

Docker engine kurulumu:

#apt-get update

#apt-get install docker-ce docker-ce-cli containerd.io

#apt-get install docker-ce

Kaynak: https://docs.docker.com/engine/install/ubuntu/

(Bu adımdan sonra docker kurulumunuzu #docker run hello world koşarak çıktıda “Hello from Docker” gördükten sonra doğrulayabilirsiniz)

Prometheus kurulumu:

#docker pull /prom/prometheus

#mkdir /etc/prometheus

#vi /etc/prometheus/prometheus.yml

# A scrape configuration scraping a Node Exporter and the Prometheus server
# itself.
scrape_configs:
# Scrape Prometheus itself every 10 seconds.
- job_name: 'prometheus'
scrape_interval: 10s
target_groups:
- targets: ['localhost:9090']

Şimdilik sadece kendini monitor edecek.

#docker run -d -p 9090:9090 \--net=host \
-v /etc/prometheus/prometheus.yml \
-v /data/prometheus \
prom/prometheus \
--config.file="/etc/prometheus/prometheus.yml" \
--storage.tsdb.path="/data/prometheus"

ilk etapta container ayağa kalkmamış olabilir.

#docker images

#docker run <Image_ID>

#docker container ls veya docker ps -a

#docker container start <Container_ID>

http://my_external_ip:9090

Grafana Kurulumu ve basic dashboard oluşturma

#docker run -d -p 3000:3000 grafana/grafana

http://my_external_ip:3000

Add your first data source ->

Prometheus seçilir:

Save & Test

Ekran görüntüsündeki gibi soldaki panelden -> Import

Karşınızda temel bir performans dashboard’ı göreceksiniz.

Dilerseniz Google Cloud veya Azure’da çalışan Kubernetesleriniz, VMleriniz ve network ortamlarınızı da Data Source kısmında bizim örneğimizde Google Cloud Monitoring seçerek görselleştirebilirsiniz.

Servis account keyinizi json formatında indirmek için Cloud konsolda

IAM & Admin-> Servis Account -> Create key->

https://console.cloud.google.com/iam-admin/serviceaccounts

Cloud monitoringde ikinci seçenek olarak provider’ın kendi sunduğu platformdaki elk ve diğer toolları tercih edebilirsiniz:

Son olarak prometheus’u sunucunuza bağlamak ve performansını izlemek için Node Exporter kurulumu yapmalısınız.

#docker run -d -p 9100:9100 \
-v "/:/hostfs" \
--net="host" \
prom/node-exporter \
--path.rootfs=/hostfs

Node exporter’ın çalıştığından emin olmak için:

#curl http://localhost:9100/metrics

Prometheus ve Node exporter’ı bind etmek istereniz prometheus.yml’a

- job_name: 'node_exporter'
scrape_interval: 10s
target_groups:
- targets: ['localhost:9100']

satırlarını eklemelisiniz; restart gerektirmeyecektir.

Bu defa biraz uzunca oldu, yardımı olması dileklerimle. Bir sonrakinde görüşmek üzere. Sağlıkla hoşça kalın.

--

--

Yunus emre
SabancıDx

Devops || Middleware Engineer who is into cloud and Linux fundamentals. Learning Openshift & keeping on Google Cloud Platform.