Docker Container’ı üzerine Grafana & Prometheus Kurulumu

Arda Batuhan Demir
5 min readOct 15, 2020

--

Selamlar, Bu yazıda Docker’da container üzerine Grafana & Prometheus metric tool’larının basit bir şekilde kurulumuna ve konfigürasyonuna değinmiş olacağız.

İlk etapta Grafana & Prometheus ile ilgili kabaca konuşabilmek gerekirse aslında; “yeni nesil monitoring tool”u ifadelerini sıklıkla gördüğümüz ve ufak bir projeden büyük ölçekli mimarilerde bile sıklıkla kullanılan bir teknoloji diyebiliriz..

Bir parça daha Prometheus ve Grafana’nın ne olduğuna değinebilmek gerekirse; Prometheus Google’ın Borgmon adındaki Monitoring çözümünden ilham alınarak orataya çıkan bir ‘Open-Source’ Monitoring uygulaması aslına bakarsanız…Proje 2012 yılında , her ikiside eski Google çalışanları olan Matt T.Proud ve Julius Volz tarafından SoundCloud şirketinde geliştirilmeye başlanmış bir proje…Henüz Ar-Ge aşamalarındayken C,C++,Java ve Go dilleri kullanılması ise dikkat çekici konulardan birisi…Veritabanları Cassandra ve Google ürünü olan LevelDB seçilmiş…LevelDB’nin ne olduğuna hızlıca değinebilmek gerekirse aslında;LevelDB hızlı bir ‘key-value’ store kütüphanesi diyebiliriz…

Grafana’ya değinebilmek gerekirse özetle;Prometheus üzerindeki metrikleri kullanarak dashboard için kullanılan ve en çok tercih edilen bir araçtır..Grafana açık kaynak kodlu gelişmiş bir ‘raporlama’ platformu aslında..30'dan fazla data source üzerinde çalışmayı hali hazırda destekliyor.Bunların içerisinde en çok tercih edilenler ise : graphite,influxdb,Prometheus,ElasticSearch,AWS CloudWatch listenin başında geliyor.

Özetleyebilmek gerekirse; Grafana ile pek çok farklı kaynaktan verileri tek bir gösterge tablosunda birleştirebiliyoruz.Uygulamayı açık kaynak olarak edinebileceğiniz gibi ‘cloud’ ve ‘enterprise’ seçenekleri üzerinden de belirlenen sınırlar çerçevesinde ve ücretlendirmeler çerçevesinde kullanabilirsiniz.

Bu noktada aslında değinmek istediğim bir konu var; ‘Black-Box Monitoring’ ve ‘White-Box Monitoring’ konuları…Bir varsayımda bulunalım ve bir host’u monitörize ettiğimizi varsayalım…Black-Box yaklaşımında,host’un ulaşılabilir durumda olup olmadığı ve Uzaktan erişime müsait olup olmadığı kontrol edilir(örnek :SSH).Aynı Host White-Box tekniği ile monitor edilebilseydi, anlık olarak CPU,Uptime,Load veya Memory metrikleri gibi değerleri toplanarak analiz edebilecektik.Fakat Black-Box yaklaşımına değinirsek; en yaygın olarak yöneltilen soru şu olacaktır belkide : “Bu sunucu ping’e cevap veriyor mu ?” vb gibi sorularla bir monitoring durumu yapılmış olur…Prometheus sisteminin ana yaklaşımı zaten bireysel sunucular ve uygulamalar yerine,dağıtık uygulamaların ve servislerin monitör edilebilmesi(..zaten SoundCloud ortamında da bu ihtiyaçtan dolayı ortaya çıkmış.)…Özetleyebilmek gerekirse, yüzlerce servisin yönetimi otonom bir yapı şeklinde olurken Monitoring yaklaşımının manuel olması, son kullanıcı tarafında yaşanan gecikme ve hata oranlarının servis bazında ölçülebilmesi için bir değer ihtiyaç ve eksiklik olarak görülüyor…

Grafana & Prometheus ile ilgili bilgilere değindikten sonra, hızlı ve basit bir şekilde docker container’ı üzerinde bu bahsini ettiğimiz tool’ların kurulumlarına göz atalım:

NOT:Ben macOs işletim sistemi ile beraber çalıştım ve çalışıyorum…İlgili komutlar her işletim sisteminde doğru bir şekilde çalışmayabilir..Lütfen internetten ihtiyacınız olan, ilgili komutları kontrol edin

İlk olarak docker yüklü bir işletim sisteminde, kullanacağımız/kullanmak isteyeceğimiz tool’ların docker’daki image’larını arayalım

İlk olarak ‘prometheus’u arayarak ve en çok hangi image’ının puan aldığına bakalım ve daha sonra ilgili image’ı kendi localimize çekelim…

docker search prometheusdocker pull prom/prometheus

Prometheus ile ilgili pull’lama işlemi bittiğinde, aynı işlemleri grafana içinde uygulayacağım

docker search grafanadocker pull grafana/grafana

Kullanacağımız docker image’larının localimize çektikten sonra, localimizdeki image’ları bir kontrol edelim…

docker images

Bir sonraki kısımda, localimizdeki docker folder’ımızın altına prometheus ile ilgili kullanacağımız konfigürasyon yml’ını ve folder’ını oluşturarak devam edelim

sudo mkdir -p /opt/docker/prometheussudo touch /opt/docker/prometheus/prometheus.yml

Config için oluşturduğumuz yml dosyasına erişip aşağıda paylaştığım configleri yazıyoruz ve kaydettikten sonra docker container’ımızı ayarladığımız port ve config dosyası ile beraber ayağa kaldırıyoruz.

İlk olarak oluşturduğumuz yml dosyamızın içine erişelim ve configleri ayarladıktan sonra kaydedelim

sudo nano /opt/docker/prometheus/prometheus.yml
# my global config
# prometheus.yml
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).external_labels:monitor: 'codelab-monitor'# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:# - "first.rules"# - "second.rules"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: 'prometheus'# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ['localhost:9090']- job_name: 'docker'# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ['<your-ip-address>:9323']

Yukarıdaki prometheus.yml ile konfigürasyonunuzu tamamladıktan sonra aşağıdaki adımları izleyebilirsiniz

Prometheus ile ilgili container’ı ayağa kaldırmadan önce localimizde bulunan Docker Engine’imizi konfigüre edelim ve aşadağıki gibi gerekli ayarları yapalım(Docker->Preferences->Docker Engine)

Bir sonraki adımda, oluşturduğumuz config ile beraber ilgili port ile prometheus’u ayağa kaldırıyoruz

docker run -it -d --name prometheus -p 9090:9090 -v /opt/docker/prometheus:/etc/prometheus prom/prometheus --config.file=/etc/prometheus/prometheus.yml

Container’ımız ayağa kalktıktan sonra, localhost:9090/targets’dan Prometheus’un WebUI’ına erişim sağlayalım

NOT: prometheus.yml’daki kendi local ip adresinizi değiştirmeyi unutmayın

localhost:9090/targets

Aşağadaki adresten localimdeki docker engine için kullanacağım kütüphaneyi çekip işleme koyuyoruz..

http://localhost:9090/graph

Arama bölümüne ‘engine_daemon_container_actions_seconds_bucket’ yazdıktan sonra execute butonuna tıklayıp ilgili grafiği getirebiliriz.

Aşağıdaki komutla beraber Prometheus için kullandığımız metricleri log şeklinde okuyabiliriz…Burada metricleri log gibi göstermesine karşın kendi DB’sine yazmakta…

localhost:9090/metrics

İkinci adımda, grafana’yı ayağa kaldıralım ve prometheus’u entegre edelim

docker run --name grafana -i -p 3000:3000 grafana/grafana

localhost:3000'den Grafana’nın login sayfasına ulaşıyor olacağız…Burada username ve password ilk kurulumda default olarak her ikisi içinde admin olarak gelecektir…Sonraki adımlarda siz yeni bir şifre belirleyebilirsiniz

Prometheus ile ilgili configleri oluşturalım ve save&test butonuna tıklayalım

Ardından Grafana’daki dashboard’umuza localimideki Docker Engine Metric’ini kurmak için Dashboard ID’sini girelim

NOT: Şu an için elimde monitörize edebileceğim bir app olmadığı için localimdeki docker engine’i örnek olarak kullanıyorum..

Docker Engine Metric için 1229 nolu ID’yi girelim

Ekleyeceğim dashboard geldikten sonra, import edelim

Ve finalde Localimizdeki Docker Engine’i monitörize etmiş oluyoruz

Keyifli olabilmesi dileğiyle..Takipte Kalın

Arda Batuhan Demir

--

--

Arda Batuhan Demir
Arda Batuhan Demir

Written by Arda Batuhan Demir

5x AWS Cert* | Senior DevOps Engineer | Cloud Architect | AWS Community Builder

No responses yet