Alptekin Yanık
Yazılım Geliştirme Uzmanı

Prometheus İzleme Aracı

Prometheus İzleme Aracı

Giriş

Günümüzün karmaşık ve dinamik sistemlerinde, işletmelerin hızla büyüyen altyapılarını izlemek ve yönetmek hayati öneme sahiptir. Bu noktada, Prometheus monitoring gibi güçlü bir araç devreye giriyor. Prometheus, modern bir açık kaynak tabanlı izleme ve alarm sistemi olarak, karmaşık sistemlerin performansını, kaynak kullanımını ve hataları etkin bir şekilde takip etmeyi sağlıyor. Bu blog yazısında, Prometheus monitoring’in ne olduğunu, nasıl çalıştığını ve neden günümüzün rekabetçi iş ortamında vazgeçilmez bir araç haline geldiğini keşfedeceğiz. Ayrıca, Prometheus’un sunduğu önemli özelliklere ve kullanım alanlarına da değineceğiz, böylece okuyucularımızın bu güçlü izleme aracını daha iyi anlamasına ve uygulamalarında nasıl kullanabileceklerine dair bir perspektif sunacağız. Hazırsanız, Prometheus monitoring’in dünyasına adım atalım ve bu heyecan verici teknolojinin nasıl işletmelere değer kattığını keşfedelim.

Kısaca tarihi

Prometheus, 2012 yılında SoundCloud adlı bir müzik paylaşım platformunda başlamıştır. Julius Volz, Matt T. Proud ve Björn Rabenstein tarafından geliştirilen Prometheus, SoundCloud’un karmaşık altyapısını etkin bir şekilde izlemek için oluşturulan bir projedir. İlerleyen yıllarda, Prometheus açık kaynak olarak yayınlanmış ve büyük bir topluluk tarafından benimsenmiştir. 2015 yılında Cloud Native Computing Foundation (CNCF) tarafından kabul edilen Prometheus, hızla popülerlik kazanarak bir endüstri standardı haline gelmiştir. Bugün, Prometheus monitoring, birçok önde gelen şirket ve organizasyon tarafından kullanılan güvenilir ve ölçeklenebilir bir izleme çözümüdür.

Mimari

Prometheus monitoring, bir istemci-sunucu mimarisi temelinde çalışan bir sistemdir. Bu mimaride, Prometheus sunucusu (Prometheus Server) veri toplama ve işleme işlevlerini yerine getirirken, Prometheus istemcileri (Prometheus Clients) ise hedef sistemlerden (uygulama, sunucu, veritabanı vb.) metrikleri toplar ve sunucuya ileterek izleme verilerini sağlar.

Prometheus sunucusu, belirli aralıklarla hedef sistemlere yönelik talepler göndererek metrikleri toplar. Bu metrikler, hedef sistemler tarafından önceden tanımlanan ölçümler, sayaçlar, histogramlar ve özetler şeklinde sunulur. Sunucu, bu metrikleri veritabanında saklar ve gerektiğinde sorgulara yanıt olarak istemcilere sunar.

Prometheus Server Bileşenleri

Prometheus sunucusu içerisinde bulunan TSDB (Time Series Database), retrieval (veri getirme) ve HTTP server, Prometheus’un temel işlevlerini yerine getiren önemli bileşenlerdir.

TSDB

Prometheus sunucusunun ana veritabanıdır ve zaman serisi verilerini depolar. TSDB, metriklerin zamana bağlı olarak değişen değerlerini sıkıştırır ve sıkıştırılmış verileri disk üzerinde optimize edilmiş bir şekilde saklar. Bu sayede büyük miktardaki zaman serisi verilerinin etkin bir şekilde yönetilmesi ve sorgulanması sağlanır. TSDB’nin içerisinde yer alan indeksleme mekanizması, sorguların hızlı bir şekilde gerçekleştirilmesine olanak tanır.

Retrieval

Prometheus sunucusunun hedef sistemlere yönelik metrik taleplerini işleme yeteneğini ifade eder. Prometheus sunucusu, belirli aralıklarla hedef sistemlere HTTP veya diğer protokoller üzerinden talepler gönderir ve metrikleri toplar. Retrieval süreci, hedef sistemlerin verilerini toplamak ve sunucuya iletme işlevini yerine getirir. Bu süreçte, hedef sistemlerde çalışan Prometheus istemcileri, metrikleri toplayarak sunucuya gönderir.

HTTP server

Prometheus sunucusunun dış dünyayla iletişim kurmasını sağlayan bir bileşendir. HTTP server, Prometheus’un sunduğu API’leri üzerinden kullanıcılara sorgulama ve metrik verilerini sunma işlevini yerine getirir. Kullanıcılar, HTTP üzerinden Prometheus sunucusuna sorgular göndererek belirli zaman aralıklarında metrik verilerini alabilir veya grafiksel olarak görselleştirebilir. HTTP server, Prometheus sunucusunun dış dünyaya açık bir arayüz sağlayarak kullanıcıların metrik verilerine erişmesini kolaylaştırır.

Bu bileşenler bir araya gelerek Prometheus sunucusunun çalışmasını sağlar. TSDB, zaman serisi verilerini depolar ve sorgulamaları optimize ederken, retrieval hedef sistemlerden veri toplar ve HTTP server ise dış dünyayla iletişim kurarak metrik verilerini sunar. Bu şekilde Prometheus, etkin bir izleme ve analiz çözümü olarak çalışır ve kullanıcılara sistemlerinin performansını izleme ve yönetme imkanı sağlar.

AlertManager

Prometheus monitoring’in önemli bir bileşeni olan Alertmanager, izleme verileri üzerinde otomatik alarm yönetimi sağlayan bir araçtır. Prometheus sunucusundan gelen alarm durumlarını alır, gruplandırır, filtreler ve düzenler. Daha sonra, bu alarm durumlarına ilişkin bildirimleri çeşitli hedeflere (e-posta, Slack, PagerDuty, Webhook vb.) iletebilir.

Alertmanager, karmaşık alarmları yönetmek ve kullanıcıların alarm bildirimlerini istedikleri şekilde yapılandırmak için esnek bir yapı sunar. Alarm gruplama özelliği, benzer veya ilişkili alarmları bir araya getirerek, kullanıcıların daha iyi bir bakış açısı elde etmesini sağlar. Örneğin, aynı hedef sunucudan gelen farklı hataların tek bir grup altında toplanması mümkündür.

Prometheus Web UI

Prometheus sunucusunun kullanıcı arayüzüdür ve izleme verilerini görselleştirme, sorgulama ve analiz etme imkanı sağlar. Web UI, kullanıcılara metriklerin grafiksel olarak görüntülenmesini, sorguların yapılmasını ve veri keşfinin gerçekleştirilmesini kolaylaştırır. Kullanıcılar, Web UI aracılığıyla metriklerin zaman serilerini görsel olarak inceleyebilir, farklı zaman aralıklarını karşılaştırabilir ve özel sorgularla daha derin analiz yapabilir.

Grafana ise Prometheus gibi bir izleme ve görselleştirme aracıdır, ancak daha geniş bir ekosisteme sahiptir. Grafana, çeşitli veri kaynaklarından (Prometheus, InfluxDB, Elasticsearch vb.) veri toplar ve kullanıcıların bu verileri görselleştirmesini sağlar. Grafana’nın temel amacı, birden çok veri kaynağını tek bir yerde birleştirerek kapsamlı bir izleme ve görselleştirme deneyimi sunmaktır.

Grafana’nın Prometheus Web UI’ye kıyasla birkaç önemli farkı vardır.

  • Grafana çoklu veri kaynaklarını destekleyerek daha geniş bir ekosistem sunar. Bu, farklı izleme sistemlerinden ve veritabanlarından veri alınmasını ve bir arayüzde birleştirilmesini sağlar.
  • Grafana kullanıcılarına daha gelişmiş grafikleme ve görselleştirme yetenekleri sunar. Grafana'nın geniş grafik paneli koleksiyonu ve özelleştirilebilirlik seçenekleri, kullanıcıların metrik verilerini daha esnek bir şekilde görselleştirmesine olanak tanır. Ayrıca, kullanıcılar interaktif panolar oluşturabilir, anlık durum tabloları ve gösterge panoları oluşturabilir, anlık uyarılar alabilir ve dashboard'ları paylaşabilir
  • Grafana, kullanıcıların genel sistem durumunu izlemek ve birden çok veri kaynağını entegre etmek için daha geniş bir çözüm sunar. Grafana ile birden çok Prometheus sunucusu veya farklı veritabanlarından gelen veriler bir araya getirilebilir ve tek bir görselleştirme platformu üzerinde yönetilebilir.

Metriclerin Toplanması

Prometheus, metrikleri toplamak için genellikle “pull” modelini kullanır. Bu, Prometheus sunucusunun, hedef sistemlere bir istek göndererek metrikleri toplamasını sağlar. Bununla birlikte, hedef sistemlerin Prometheus sunucusuna doğrudan metrikleri iletememesi durumunda, “exporter” adı verilen özel bileşenler kullanılır.

Exporter’lar, Prometheus sunucusunun metrikleri toplamasını sağlamak için hedef sistemlere yerleştirilen ajanlardır. Bu ajanlar, hedef sistemlerin durumunu, performansını veya özel metriklerini izler ve Prometheus sunucusunun anlayabileceği formatta metrikleri sunar.

Exporter’lar, çeşitli hedef sistemler için önceden hazırlanmış olarak mevcuttur. Örneğin, Node Exporter, Linux veya Unix tabanlı sistemlerdeki donanım, işletim sistemi ve ağ metriklerini toplamak için kullanılır. Prometheus’un resmi dökümantasyonunda (https://prometheus.io/docs/instrumenting/exporters/) daha fazla exporter örneği bulunabilir.

Exporter’lar, hedef sistemlerden topladıkları metrikleri Prometheus sunucusuna HTTP protokolü üzerinden sunar. Prometheus sunucusu, belirli bir aralıkta bu exporter’ları hedef sistemlere yönelik taleplerle tetikler ve metrikleri alır. Bu sayede, hedef sistemlerde çalışan farklı uygulamalar veya bileşenler için ayrı exporter’lar kullanarak, Prometheus sunucusu geniş bir metrik yelpazesini toplayabilir. Bu sayede, Prometheus pull modeli ve exporter’ları kullanarak geniş bir sistem ekosisteminde yaygın olarak kullanılan metrikleri toplamak ve izlemek mümkün hale gelir.

Pushgateway

Pushgateway, Prometheus izleme sistemine veri itme (push) yeteneği sağlayan bir bileşendir. Geleneksel istemci-sunucu modelinin aksine, istemcilerin metrikleri doğrudan Prometheus sunucusuna göndermek yerine, verileri Pushgateway aracılığıyla sunucuya itmesine olanak tanır.

Pushgateway, özellikle kısa süreli veya geçici iş yükleri için uygundur. Örneğin, iş parçacıkları, arka plan görevleri veya kısa süreli işlemler gibi durumlar, Prometheus’a sürekli olarak veri göndermek yerine Pushgateway üzerinden verileri sunucuya iletebilir. Böylece, geçici veya hızla değişen metriklerin takibi ve analizi yapılabilir.

Pushgateway, istemcilerin metrikleri HTTP POST istekleri aracılığıyla sunucuya göndermesini sağlar. İstemciler, Pushgateway’ye metrikleri ve ilgili etiketleri belirterek veri gönderir. Pushgateway, aldığı metrikleri geçici olarak bellekte saklar ve Prometheus sunucusundan talep geldiğinde bu verileri toplar.

Prometheus sunucusu, belirli aralıklarla Pushgateway’ye talepler gönderir ve mevcut metrik verilerini alır. Bu talepler, Pushgateway’nin sunucusuna bir hedef olarak kaydedilmesini sağlar. Prometheus, alınan verileri düzenli olarak scrape eder ve TSDB’ye depolar. Bu sayede, Pushgateway üzerinden gönderilen metrikler de Prometheus’un sorgulanabilir veritabanına dahil edilir.

Pushgateway’nin bir önemli özelliği, metrikleri gruplamak ve silmek için kullanılan etiketlerin değiştirilebilir olmasıdır. Bu sayede, Pushgateway üzerinden gönderilen metriklerin gruplandırılması ve yönetimi kolaylaşır.

Pushgateway, Prometheus izleme ekosisteminde özel durumlar için bir araç olarak kullanılır ve özellikle istemci odaklı metrik gönderimini sağlar. Ancak, uzun süreli ve kalıcı metriklerin toplanması için, doğrudan istemcilerin Prometheus sunucusuna metrikleri itmesi (push) önerilir.

Bu şekilde, Pushgateway, Prometheus izleme sistemine istemci tabanlı metrik gönderme yeteneği ekleyerek, geçici veya hızlı değişen metriklerin takibi ve analizini kolaylaştırır.

Konfigürasyon

Prometheus’un yapılandırmaları, Prometheus sunucusunun çalışma dizininde yer alan prometheus.yml dosyasında kaydedilir. Bu dosya, Prometheus’un çalışma zamanında nasıl davranacağını belirleyen temel yapılandırma dosyasıdır. Bu dosyayı konfigüre ederek prometheus’un kendisini izletmekte mümkündür.

Prometheus yapılandırma dosyası içerisinde aşağıdaki bölümler yer almaktadır:

  • global: Genel yapılandırma ayarlarını içerir. Bu bölümde, scrape_interval (metrikleri alma sıklığı), evaluation_interval (kural değerlendirme sıklığı), external_labels gibi ayarlar bulunur.
  • rule_files: Bu bölüm, ek olarak yüklenecek Prometheus kaynaklı kuralları içerir. Bu bölümde, Prometheus sunucusu tarafından uygulanacak özel kuralları tanımlayabilirsiniz.
  • scrape_configs: Bu bölüm, Prometheus'un metrikleri toplamak için hangi hedefleri izleyeceğini tanımlar. Her bir scrape konfigürasyonu, bir hedef sistem veya hizmetin metriklerini almak için gerekli olan bilgileri içerir.

Prometheus Operator ve kube-prometheus

Prometheus Operator, Kubernetes ortamlarında ölçeklenebilir ve yönetilebilir bir şekilde Prometheus ve diğer ek bileşenlerin kurulumunu sağlayan popüler araçlardır. kube-prometheus, Prometheus Operator’ü kullanarak Prometheus, Alertmanager, Grafana ve diğer bazı bileşenlerin birlikte çalışabilir bir şekilde Kubernetes üzerinde dağıtılmasını sağlar. Bu sayede, Kubernetes altyapınızdaki kaynakları izleyebilir, metrikleri toplayabilir, uyarılar oluşturabilir ve izleme panoları oluşturabilirsiniz. Bu sayede Prometheus ve diğer bileşenler kolay bir şekilde kurulabilir ve yönetilebilir.

Kurulum için tek gereken kubectl ile erişilebilen bir kubernetes kümesidir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# kube-prometheus projesini indiriyoruz.
git clone https://github.com/prometheus-operator/kube-prometheus.git

# Uygulamanın deploy olması için öncelikle aşağıdaki komutu uyguluyoruz. Bu komut ile küme içerisinde "monitoring" ns oluşacaktır.
kubectl create -f manifests/setup

# "servicemonitor oluştuktan sonra ekranda "No resources found" mesajı çıkacaktır. Bu mesajdan sonra aşağıdaki komut uygulanır.
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done

kubectl create -f manifests/

# Uygulama ayağa kalktıktan sonra prometheus'a erişim sağlamak için localimizde 9090 portuna yönlendirebiliriz.
kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

# Aynı şekilde aletmanager ve grafana içinde yönlendirmeler yapılabilir.
kubectl --namespace monitoring port-forward svc/alertmanager-main 9093
kubectl --namespace monitoring port-forward svc/grafana 3000
Referanslar
  • https://prometheus.io/docs/alerting/latest/alertmanager/
  • https://prometheus.io/docs/tutorials/getting_started/#basic-architecture-of-prometheus
  • https://prometheus.io/docs/instrumenting/exporters/
  • https://prometheus-operator.dev/docs/prologue/quick-start/