Shop Projesi - Java Projesine Prometheus Entegre edelim.
https://prometheus.io
Shop projesinin Actuator modülü ekleyerek bazı bilgilere ulaşımı sağlamıştık.
buraya prometheus ile ilgili biraz bilgi ekleyeceğim.
Shop projesinin Prometheus tarafından dinlenilecek url bilgisini açmak için değişiklikleri uygulayalım.
Shop projesi gradle projesi olduğu için bağımlıkları ekleyelim.
build.gradle
dependencies {
implementation("io.micrometer:micrometer-registry-prometheus")
}
Projemizi çalıştırdığımızda şu çıktıyı alıyoruz.
http://localhost:8001/shop/actuator
{
_links: {
- prometheus: {
href: "http://localhost:8001/shop/actuator/prometheus",
templated: false
}
}
}
Shop projesine prometheus.yml adıyla bir dosya ekledim. Bu dosya prometheus bizden bilgi çekerken ihtiyacı olan formattır.
Örnek kullanımı burada mevcuttur.
https://prometheus.io/docs/introduction/first_steps/#using-the-expression-browser https://prometheus.io/docs/prometheus/latest/configuration/configuration/
Aşağıdaki gösterim ile prometheus üzerinden bakıldığında isminin ne olacağı ve hangi url üzerinden bilgilere ulaşacağı, ne kadar sürede Shop projesine ait son bilgilerin tekrar çekileceği mevcuttur.
prometheus.yml
- job_name: 'project-shop-prometheus'
metrics_path: '/shop/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ['CONTAINER_IP:8001']
Testtimize geçelim.
Prometheus un docker ile konteynerleştirilmiş hali ile çalışabiliriz.
docker pull prom/prometheus
docker run -d --name=prometheus-test -p 9090:9090 prom/prometheus --config.file=/etc/prometheus/prometheus.yml
open browser http://localhost:9090
http://localhost:9090/targets
docker stop prometheus-test
Prometheus arayüzüne ulaştık.
Prometheus un, Shop projemize özel hazırladığımız prometheus.yml dosyasını docker tarafından sağanan docker volume üzerinden çözebiliriz.
docker volume create volumeprometheus
Shop projemizi çalıştırırken bu volume parametre olarak geçildiğinde dosya farklı konteynerler tarafından okunabilicek.
Shop projemizi çalıştıralım.
docker run -d --name project-shop -v volumeprometheus:/prometheusfiles -p 8001:8001 keramiozsoy/image-shop:latest
prometheus.yml içinde CONTAINER_IP doldurmalıyız. Konteynerler dinamik olarak ip aldığından bu durumu bir kaç küçük adım ile çözelim.
docker exec -it project-shop /bin/sh
container_ip=$(awk 'END{print $1}' /etc/hosts)
echo $container_ip
sed -i "s/CONTAINER_IP/$container_ip/g" prometheusfiles/prometheus.yml
cat prometheusfiles/prometheus.yml
exit
Eğer Shop projesini konteyner ile çalıştırmayıp host makine üzerinden doğrudan çalıştırmış olsaydık CONTAINER_IP host ip bilgisini yazmalıydık.
Prometheus u oluşturduğumuz volume verisini okuyarak yeniden çalıştıralım.
docker run -d --name prometheus -v volumeprometheus:/prometheusfiles -p 9090:9090 prom/prometheus --config.file=/prometheusfiles/prometheus.yml
open browser http://localhost:9090/targets
Şimdi prometheus tarafındaki metrikleri inceleyelim.
http://localhost:9090/graph
Açılan sayfada execute butonu yanından ismi up olan metrik seçip execute butonuna basalım. graph bölümüne geçelim.
spring-actuator-project-shop isimli metriği inceleyeceğiz. Projemizin hangi anlarda çalışıp çalışmadığını görelim. 20 sn aralıklar ile aşağıdaki komutları çalıştıralım.
docker restart project-shop
docker restart project-shop
docker restart project-shop
Şimdi tekrar http://localhost:9090/graph bölümünde projemizin çalıştığı ve çalışmadığı anları görebiliriz.
Bu tarz bir çok metrik bilgisini inceleyebiliriz.
Bunların dışında prometheus bir service discovery özelliği de görmektedir. Bağlantı kurulabilen uygulamaları görebilmek için kullanabiliriz.
http://localhost:9090/service-discovery
Daha sonra bu grafikleri daha güzel görebilmek için https://grafana.com dan yardım alacağız.
ip set işlemini container dışından otomatik alacak şekilde geliştirme yapalmalıyım
Set your IP IP=$(ifconfig en0 | grep 'inet ' | awk '{print $2}') or manually IP=192.168.1.123