JENKINS — PROMETHEUS -GRAFANA ENTEGRASYONU

Pınar Örmeci
automatedladies
Published in
4 min readMay 26, 2020

Merhaba arkadaşlar,

Başlık uzun ve biraz karışık gibi görünse de aslında o kadar da karmaşık olmadığını göreceksiniz.

Haydi başlayalım ve Jenkins, Prometheus, Grafana birlikteyken bizim için neler sağlıyor beraber görelim :)

Pekiii, Grafana nedir ve ne işe yarar ?

Grafana, web uygulaması olarak çalışan, açık kaynak kodlu, genel olarak metrik analiz ve görselleştirme için kullanılan pano ve grafik programıdır. Yani daha özetle elimizde olan bazı sayısal veriler, Grafana sayesinde görsel hale gelir ve böylece anlaşılması çok daha kolay olur.

Grafana, görselleştirmek için kullanacağı verileri çekebilmek için bir çok veritabanını destekler. Bunlara örnek olarak InfluxDb, Opentsdb, Prometheus verilebilir.

İşleyişi ise şu şekilde kafamızda canlandırabiliriz. Veritabanından bilgileri alıyor, bizim için görselleştiriyor ve kolay şekilde sorgulama yapmamıza imkan sağlıyor.

Bizim bu projeye başlamamızdaki amaç ise testlerimizi otomatik olarak koştuktan sonra periyodik olarak sonuçlarını takip etmek ve Grafana sayesinde bunun herkes tarafından daha anlaşılır şekilde görülmesini sağlamaktı. Bunun için de Jenkins’ teki verilerimizi Grafana ile okunabilir ve analiz edilebilir bir hale getirmek istedik.

Şirket genelinde Prometheus veritabanı mevcutta kullanıldığı için biz de Prometheus tercih ettik; yani basitçe dataları Jenkins’ten alıp Prometheus veritabanında okunabilir hale getirdik ve Grafana sayesinde Prometheus veritabanında bulunan verilerimizi görsel olarak anlaşılmasına ve kolay olarak analiz edilmesine olanak sağladık.

Docker containerları — Prometheus — Grafana ilişki şeması

İlk olarak Prometheus, Jenkins ve Grafana Server’larını ayağa kaldırmamız gerekli ve bunun için Docker container larından yararlanıyoruz.

docker run -d — name prometheus -p 9090:9090 prom/prometheus
docker run -d — name grafana -p 3000:3000 grafana/grafana

Docker ile Prometheus ve Grafana container’ları yarattık, hali hazırda bir Jenkins olduğu için bunun için tekrar ayrı bir container yaratmaya gerek yoktu. Ancak mevcutta bir jenkinsiniz yok ise lokalinizde bir Jenkins container’ ı ayağa kaldırmak gerekli.

Bunun için :

docker run -d — name jenkins -p 8080:8080 -p 50000:50000 jenkins

çalıştırabiliriz.

Prometheus dataları default olarak 1 gün tutuyor ve buna retention time deniyor. Maximum ise 14 gün tutabiliyor. Eğer biz bu süreyi kendimiz belirlemek istersek, Prometheus container ını ayağa kaldırırken spesifik olarak bunu belirtmemiz gerekli. Prometheus container ını ayağa kaldırırken şu şekilde bir komut ile çalıştırmalıyız :

Çalıştırmış olduğumuz tüm container’ları ve container id’ lerini listeleyip görebilmek için aşağıdaki komutu çalıştırmalıyız.

docker ps

Jenkins ile Prometheus’a aktarılan verilerimizi görebilmek için Jenkins’e bir plugin eklemeliyiz.

Jenkins plugin ekleme ekranı

Jenkinste ‘Manage Jenkins’ sekmesine ardından ‘Manage Plugins’ sekmesine giderek Prometheus Metrics Plugin’i kolayca indirebilirsiniz. https://plugins.jenkins.io/prometheus/

Bu plugin, Jenkins Server’ından dataları metrikler ile birlikte alır ve /prometheus endpointi ile de görüntüleyebilmemizi sağlar.

Plugin‘ in outputları için http://Jenkins_HOST:PORT/prometheus linkine bakılabilir.

Jenkins’ten Alınan Metriklerin Prometheus’ta Konfigüre Edilmesi

Prometheus’u konfigüre edebilmek için prometheus.yml dosyasını editlememiz gerekiyor.

Bunu yapabilmemiz için :

docker exec -it {prometheus_container_id} sh

id’ si verilen container içine girer ve sh çalıştırmamızı sağlar.

vi /prometheus/prometheus.yml

Bu şekilde, bizim prometheus containerımızın içindeki yml dosyamıza gidip konfigürasyonu düzenlememiz gerekmekte.

Burada yapmamız gereken, Prometheus’un dataları toplayabilmesi için bizim Jenkins makinemize yönlenmesini sağlamak.

yml dosyasında scrape_configs kısmına Jenkins Server’ ı için yeni bir job eklememiz gerekmekte.

Burada belirtilen ‘Jenkins_Url’ sizin Jenkins Server’ınız olmalıdır.

Dipnot : yml dosyanızın düzgün çalışması için bir yml editör kullanmanızda fayda var. Çünkü indentation hataları önemli.

Bu job eklendikten sonra Prometheus container ı restart edilmelidir.

docker stop {my_prometheus_container}
docker start {my_prometheus_container}

Prometheus container’ ı restart sonrası Jenkins ve Prometheus target’ı ‘UP’ durumda olmalı. Bunun için <Prometheus_container’ını_kurduğumuz_host:9090> da kontrol sağlamalı ve ‘UP’ durumda olduğunu görmeliyiz.

Prometheus Targets ekranı

Burada Prometheus*la başlayan datalar, Prometheus’un monitor etmek için kullandığı datalarken, Jenkins* ve vm*la başlayan datalar Jenkins Server’ından çektiğimiz datalardır.

Prometheus veri gösterimi

Plugin‘ in outputları için http://Jenkins_HOST:PORT/prometheus linkine bakılabileceğinden bahsetmiştik. Konfigürasyon sonrası, dataları şu şekilde görebilmeliyiz:

prometheus dataları

Şimdi sıra geldi, bu dataları Grafana’da analiz edilebilir hale getirmeye.

Grafana’ da Verileri Göstermeyi Nasıl Yaparız ?

Grafana’ ya erişmek için <localhost:3000> linkine gitmeliyiz ve login olmalıyız. Default kullanıcı bilgileri : admin/admin

İlk olarak data source oluşturmamız gerekli.

‘Home Dashboard’ -> ‘Add data source’ ile verileri nereden çekeceğimizi belirtiriz. Bu sebeple Prometheus seçtik.

Url alanına <prometheus_container_id:9090> yazıp diğer alanları default değerinde bırakıp kaydediyoruz. Artık dashboard oluşturabiliriz!

Dashboards -> Manage’e gittikten sonra ‘+Dashboard’ a tıklanır ve yeni bir dashboard oluşturulur.

Grafana dashboard oluşturma ekranı

Add panel’e tıklanarak yeni bir panel oluşturulur. İstenilen tipte panel oluşturulabilir.

Grafana ekranı, tablo seçenekleri

Oluşturduğumuz panelde verilere göre threshold değerleri ekleyebilir, farklı görsel şekiller seçebiliriz. Biz kendimize göre threshold değerleri belirledik ve bazı panel çeşitlerini göstermek adına seçim yaptık. Örnek dashboard’ umuz aşağıdaki gibidir :

Dashboard

Umarız paylaşımımız faydalı olmuştur, başka bir yazıda görüşmek üzere :)

Pınar Örmeci Demiray — Nisan Derman

--

--