Kubernetes’de Helm ile Prometheus Kurulumu

Kubernetes’de Helm ile Prometheus Kurulumu

Selamlar,
Yazımda Kubernetes üzerinde monitoring denince akla ilk gelen araçlardan olan Prometheus’un helm ile kurulumunu anlatacağım.

Prometheus açık kaynak sistem monitoring ve alerting uygulaması. 2012 yılında 2 eski google çalışanı olan Matt T. Proud ve Julius Volz tarafından Soundcloud şirketinde geliştirilmeye başlanmış. Şu anda geliştirilmesi ve bakımı herhangi bir firmadan bağımsız olarak community tarafından yapılıyor. 2016 yılında ise Kubernetes’den sonra ikinci hosted proje olarak Cloud Native Computing Foundation dahil olmuş.

Mimari yapısı ise şu şekilde;

Prometheus Mimari Yapısı

Prometheus, enstrümante edilmiş işlerin oluşturduğu metrikleri direkt olarak ya da Short-Lived görevler için, Push Gateway yolu ile topar. Daha sonra bütün bu toparlanan datalar lokal olarak saklanır.  Bu datalardan yeni time-serileri veya alarmlar oluşturmak için çeşitli kurallar uygulanır.
Grafana veya diğer API istemcileri toplanan ham dataları kullanarak görselleştirme yapar.

Birazda mimarisindeki bileşenleri yakından inceleyelim;

  • Mimarinin merkezinde bulunan Prometheus server time-series datayı toplar ve saklar.
  • Client libraries uygulama kodunu ölçmek için kullanılır.
    • Kendi servislerimiz üzerinden prometheus’a data göndermek için client libraries kullanılıyor.
    • Official olarak Go, Java veya Scala, Python, Ruby kütüphaneleri mevcutken Unofficial olarak da aralarında c# dahil olduğu birçok dil için desteği bulunuyor.
  • Push Gateway kısa süreli job’lar için dektek verir.
  • Özel amaçlı exporterlar. (HAProxy, MySQL Server, Graphite vb)
    • Experter için sistem veya yazılımların metriklerini Prometheus için özel olarak export ederek tüm metriklerin Prometheus toplamasına hazır hale getiriyor diyebiliriz.
    • Community tarafından geliştirilenlerin yanında third-party exporter’lar da mevcut. Güncel listeye buradan ulaşabilirsiniz.
  • Alert Manager ise isminden anlaşılacağı üzere ekosistemdeki tüm alertlerden sorumludur. Alertleri tekilleştirme, gruplama ve doğru alıcılara yönlendirmeyi sağlar.

Artık nasıl çalıştığını bildiğimize göre kuruluma geçebiliriz.

Kurulumu Azure Kubernetes Service (AKS) üzerinde manage olarak çalışan Kubernetes clusterında kuracağım. Eğer siz Google Kubernetes Engine (GKE), Amazon Elastic Container Service for Kubernetes (EKS) yada diğer manage Kubernetes servislerinden birini kullanıyorsanız AKS özel olarak değiştirdiğim adımlar için kullandığınız platform’a uygun olarak değiştirmeniz gerekiyor.

Kurulum için Helm package manager’ı kullanacağım. Eğer Helm ney şimdi diyenlerdenseniz detaylı bilgi için sizi şöyle alalım 🙂

Prometheus için Helm stable chart‘ı bulunuyor. Bu chart’ı kurarken bir kaç noktayı değiştirmemiz gerekiyor. Şu adresten güncel values.yaml indirip değişiklikleri yapmaya başlayabiliriz.

Alert Manager’a domain üzerinden erişebilmek için alertmanager.ingress.enabled değerini true ardından Alert Manager için bind edilmesini istediğimiz domain’i girmek için alertmanager.ingress.hosts değerini güncelliyoruz.

Alert Manager Ingress Ayarları

Sornasında Alert Manager için kullanılacak kalıcı disk boyutunu alertmanager.persistentVolume.size değeri üzerinden ihtiyacınıza göre arttırabilirsiniz. Kullanılacak storage tipi için alertmanager.persistentVolume.storageClass değeri üzerinden AKS içinmanaged-premium seçiyorum

Alert Manager Storage Ayarları

AKS için kullanılabilecek storage tipleri için “kubectl get sc” komutunu kullanabilirsiniz.

Prometheus‘a domain erişebilmek için Alert Manager’da olduğu gibi ingress’i enable etmemiz gerekiyor. Bunun için server.ingress.enabled değerini true yapıyoruz ardından bind edilmesini istediğimiz domaini server.ingress.hosts değerine giriyoruz.

Prometheus Server Ingress Ayarları

Sonrasında Prometheus server içinde kalıcı disk boyutunu server.persistentVolume.size değeri üzerinden ihtiyacınız ölçüsünde değiştrebilirsiniz. Storage boyutunu belirlerken Promethes’un toplayacağı tüm time series dataların bu storage’da saklanacağını dikkat ederek belirlemekte fayda var. AKS üzerinde kurulum yapacağım için server.persistentVolume.storageClass değerini managed-premium seçiyorum. Siz bu kısmı kendinize göre ayarlayabilirsiniz.

Prometheus Server Storage Ayarları

Son olarak Push Gateway için kullandığımız helm chart’da kalıcı bir disk oluşturulmamış durumda. Bu pod her öldüğünde her şeyin silinmesine yol açacağı için pushgateway.persistentVolume.enabled değerini true olarak değiştiriyoruz.

Ardından Alert Manager ve Prometheus server için yaptığımız size ve storageClass ayarlarını Push Gateway içinde yapmamız gerekiyor. Bunun için pushgateway.persistentVolume.size ve pushgateway.persistentVolume.storageClass değerini değiştirebiliriz.

Push Gateway Storage Ayarları

Push Gateway domain üzerinden erişmek ihtiyacım olmadığı için ingress’i enable edip herhangi bir domain bind etmedim. Eğer siz erişmek isterseniz. Alert Manager ve Prometheus‘da yaptığımız gibi pushgateway.ingress.enabled ve pushgateway.ingress.hosts değerlerini değiştirmeniz yeterli

Tüm bu işlemlerden sonra Helm chart için kullanacağımız values.yaml son halini aldı. Dosya çok uzun olduğu için burada paylaşamıyorum github gists üzerinden inceleyebilirsiniz

https://gist.github.com/mehmetcakmaz/7346dc027b56046002a7192c70f475a8

Şimdi sıra geldi kuruluma. Aşağıdaki komut ile kurulumu yapabiliriz

helm install stable/prometheus --name prometheus --namespace monitoring -f .\prod-prometheus-values.yml
Prometheus Kurulum Resim-1
Prometheus Kurulum Resim-2

Bir kaç dk sonra prometheus kullanıma hazır hale geliyor 🙂

Prometheus Açılış Sayfası

Kubernetes üzerinde Helm ile Prometheus kurulumu hakkında söyleyeceklerim bu kadar.

Prometheus üzerindeki toplanan metrikleri görselleştirmek için en çok kullanılan araçlardan biri olan Grafana‘nıyı kullanmak isterseniz Kubernetes’de Helm ile Grafana kurulumu yazımı okuyabilirsiniz

Görüşmek üzere !

Kaynak :
https://prometheus.io/docs/introduction/overview/
https://cliexperiences.wordpress.com/2017/06/24/metriklerin-efendisi-prometheus-episode-1/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Sonraki:

Azure Web App Instance Bazlı Restart (Recycle)

Azure Web App Instance Bazlı Restart (Recycle)