ELK ve Prometheus & Grafana Kurulumları, Temel Dashboard Hazırlama
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:
- 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.
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>
Grafana Kurulumu ve basic dashboard oluşturma
#docker run -d -p 3000:3000 grafana/grafana
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.