Micrometer ile Prometheus Metrikleri Oluşturma

Rohat Şahin
Trendyol Tech
Published in
3 min readMay 20, 2020

Merhaba. Bu yazıda prometheus ve micrometer kullanarak nasıl metrikler oluşturacağımızı ve bunların kullanım alanları ile ilgili küçük bilgiler vereceğim.

Öncelikle prometheus ve micrometer hakkında küçük bilgiler vererek başlayalım. Prometheus geliştirdiğimiz uygulamarı ya da rabbitMQ, SQL server ve daha birçok infrastructure sistemlerimizi exporter libraries ile entegre edip sistem metriklerini gözlemleyebileceğimiz veya alert tanımlamaları yapabileceğimiz bir monitoring çözümüdür.

Micrometer ise java uygulamalarımız için çalışma zamanındaki veya kendi oluşturabileceğimiz metrikleri prometheus, newrelic vb monitoring sistemlerine aktarabileceğimiz formata dönüştüren bir client olarak tanımlayabiliriz.

Yazımızda ilerleyeceğimiz örnek uygulama aşağıda paylaşmış olduğum diagramdaki gibi olacak.

Sql server veya elasticsearch’dan topladığımız datalarımızı metic collector uygulamamızda micrometer yardımı ile prometheus serverimizi besleyeceğimiz formata çevireceğiz ve grafana ile prometheus’u datasource olarak kullanıp datamızı görselleştireceğiz.

Kısaca bunu yapma amacımızın üzerinden geçecek olursak Trendyol’da pim ekibi olarak kampanya ve satışa sunulan içeriklerin oluşturulması ve yönetilmesinden sorumlu olan takımız. Business ekibimizden gelen ihtiyaç doğrultusunda, satışta olan kampanyaları görebilecekleri ve pim kullanıcılarının süreçlerini takip edebilecekleri ekranları tasarlamaya başladık.

Burada açıklayacağımız örnek üzerinde “Önümüzdeki yirmi dört saatte kaç adet kampanya açılacak” sorusuna yanıt bulacağız.

  • Metrics collector uygulamamızda elasticseach’e bağlanıp oluşturduğumuz seach query ile o an için yirmi dört saat içinde açılacak kampanyalarımızı bulacağız, örnek kod parçacığımız aşağıdaki gibi olacak
get opening campaigns counts
  • Datamızı oluşturduktan sonra micrometer yardımı ile prometheus’u besleyeceğimiz data formatını oluşturabiliriz. Micrometer burada bize MeterBinder arayüzünü sağlıyor. Bunun ile kendi özelleştirdiğimiz metriklerimizi tanımlayacağız, örnek kod parçacığımız aşağıdaki gibi olacak
sample meter binder

Burada kısaca Prometheus’daki metric tiplerinin üzerinden geçecek olursak:

  • Gauge, ile zaman içinde artıp azalan metriklerimizi tanımlayabiliriz. Bizim örnegimizdeki kampanya sayısı artıp azalan bir metrik örnegidir ya da anlık olarak işlenen excel sayısı vb.
  • Counter, ile zaman içinde artacak sayısı sürekli artacak metrikleri tanımlayabiliriz. Bir kuyrukta işlenen mesaj sayısı ya işlenen sipariş sayısı gibi zaman içinde sürekli artacak işlem sayısı olarak düşünebiliriz
  • Histogram, ile iki zaman aralığı içindeki işlem sayılarımızı ve limitler belirleyerek yüzdelerini ölçebiliriz. Bir kuyruktaki işlemlerin error yüzdesi ya da apdex score ve http request süreleri(median, average, %95) olarak düşünebiliriz.
  • Summary ile histogramda ki benzer metrikleri oluşturabiliriz.İki metrik tipi arasındaki en önemli fark histogram da metriklerimizi prometheus server da oluşturur iken summary de metric oluşturmak istenirse client de anlık istek yapılarak oluşturulur. daha detaylı karşılaştırmaya buradan ulaşabilirsiniz.

Uygulama üzerinden aldığımız datalar ile oluşturduğumuz metrikleri artık prometheus’a besleyebiliriz. Spring boot ile geliştirdiğimiz uygulamamız da micrometer ile oluşturduğumuz prometheus metriklerimizi http olarak dışarı açıp prometheus server a uygulamamızı target olarak göstererek metrikleri beslemeye başlayabiliriz.

Ardından grafana’ya prometheus serverimizi datasource olarak göstererek beslediğimiz metrikleri görseleştirebilir ya zaman içinde ki değişimlerini izleyebiliriz.

Metriklerimizi görselleştirdiğimiz, alert tanımları yapabildiğimiz ayrıca değişimlerini sorgulayabileceğimiz grafana ise açık kaynaklı bir analitik ve görselleştirme uygulaması, en önemli özelliği ise birden fazla datasource ile uyumlu olabilmesi, buradan demo uygulama ile kendi dashboard ve alert tanımlarımızı yaparak güzel bir başlangıç deneyimi elde edebiliriz.

pim metrics dashboard small showcase

Son olarak kendi oluşturacağımız metrikleri nasıl kullancacağımızın örnekler ile belirtecek olursak:

  • Tanımlayacağımız metrikler ile sistem alert leri tanımlayabiliriz.Örnegin son 5 dk içinde hiç kampanya açılmaması veya hiç sipariş oluşmaması gibi sistem down olasa da süreci durduran herhangi bir konu hakkında daha erken bilgi sahibi olabiliriz.
  • Son yirmi dört saat içinde açılacak kampanya sayısı fazla ise ve bu açılacak kampanyalar belirli bir saat aralığına toplanmış ise, örnegin 8 -9 saatleri gibi anlık bir yük olacağını önceden tahmin edebilir sistemlerimizi alert ler ile önceden scale işlemlerini gerçekleştirerek oluşabilecek anlık sistem yüklerini engelleyebiliriz.
  • Sistem kullanıcılarına işlem sonuçlarını veya anlık durumları görebileceği bilgilendirme ekranları tasarlayarak süreçleri hakkında bilgilendirmeler sunabiliriz.

Umarım faydalı bir yazı olmuştur.

--

--