İçindekiler
TogglePrometheus’a Giriş: Temel Kavramlar ve Mimari
Prometheus, temelinde açık kaynak kodlu bir sistem izleme ve uyarı (alerting) aracıdır. Ancak bu basit tanım, onun modern altyapılardaki dönüştürücü etkisini tam olarak yansıtmaz. Prometheus, sistemlerinizin anlık durumu hakkında zengin ve çok boyutlu veriler toplayarak, bu verileri analiz etmenize ve potansiyel sorunları henüz kullanıcıları etkilemeden önce tespit etmenize olanak tanır.
Prometheus Nedir? Modern Gözetim (Monitoring) Anlayışındaki Yeri
Prometheus, SoundCloud’da geliştirilmeye başlanmış ve kısa sürede popülerlik kazanarak izleme alanında yeni bir standart belirlemiştir. Geleneksel izleme araçlarının aksine, Prometheus’un temel felsefesi “metrikler” üzerine kuruludur. Bir sistemin herhangi bir anda ölçülebilen sayısal bir değeri olan metrikler (örneğin, CPU kullanımı, gelen istek sayısı, veritabanı sorgu süresi), Prometheus tarafından düzenli aralıklarla toplanır ve bir zaman serisi veritabanında saklanır. Bu yaklaşım, sistemlerin anlık durumunu görmenin yanı sıra, zaman içindeki davranışlarını ve trendlerini analiz etmeyi de mümkün kılar. Bu sayede ekipler, sadece “sistem çalışıyor mu?” sorusuna değil, “sistem ne kadar verimli çalışıyor?”, “gelecekte hangi sorunlarla karşılaşabiliriz?” gibi daha derin sorulara da yanıt bulabilir.
Prometheus’un Tarihçesi ve Cloud Native Ekosistemindeki Rolü (CNCF)
2012 yılında SoundCloud mühendisleri tarafından geliştirilen Prometheus, Google’ın dahili izleme sistemi olan Borgmon’dan ilham almıştır. Projenin açık kaynak olarak yayınlanmasıyla birlikte geniş bir topluluk tarafından benimsendi ve hızla gelişti. 2016 yılında, Kubernetes‘ten sonra Cloud Native Computing Foundation’a (CNCF) katılan ikinci proje olması, onun bulut tabanlı ekosistemdeki önemini pekiştirmiştir. Bugün Prometheus, konteynerleştirilmiş ortamlar ve mikroservis mimarileri için fiili izleme standardı olarak kabul edilmekte ve CNCF ekosisteminin vazgeçilmez bir parçası olarak görülmektedir.
Prometheus Mimarisi ve Bileşenleri
Prometheus’un gücü, modüler ve esnek mimarisinden gelir. Her biri belirli bir görevi yerine getiren bileşenlerden oluşur. Bu bileşenler bir araya gelerek uçtan uca bir izleme ve uyarı çözümü sunar.
Prometheus Sunucusu (Zaman Serisi Veritabanı ve Sorgulama Motoru)
Mimarinin kalbinde yer alan Prometheus sunucusu, hedeflerden metrikleri toplama (scraping), bu metrikleri verimli bir zaman serisi veritabanında (TSDB) saklama ve PromQL adı verilen güçlü bir sorgu diliyle bu verileri sorgulama görevlerini üstlenir.
Exporter’lar (Veri Toplama Ajanları)
Prometheus, izlemek istediği sistemlerin metriklerini doğrudan anlayamaz. Bu noktada “exporter” adı verilen ajanlar devreye girer. Exporter’lar, üçüncü parti sistemlerin (örneğin, bir veritabanı, bir web sunucusu veya işletim sistemi) metriklerini Prometheus’un anlayabileceği formata dönüştüren küçük yazılımlardır. Her teknoloji için genellikle özelleşmiş bir exporter bulunur.
Client Kütüphaneleri (Uygulama Enstrümantasyonu)
Kendi geliştirdiğiniz uygulamaların iç işleyişi hakkında metrikler toplamak için client kütüphaneleri kullanılır. Popüler programlama dilleri için mevcut olan bu kütüphaneler, uygulamanızın koduna eklenerek özel metrikler (örneğin, işlenen sipariş sayısı, belirli bir fonksiyonun çalışma süresi) yayınlamanızı sağlar.
Pushgateway (Kısa Ömürlü İşler İçin Veri Toplama)
Prometheus’un ana veri toplama modeli “çekme” (pull) esasına dayansa da, çok kısa süre çalışıp sonlanan (örneğin, bir cron job) ve Prometheus’un metrik toplamak için zaman bulamayacağı işler için Pushgateway kullanılır. Bu işler, metriklerini Pushgateway’e “iter” (push), Prometheus da bu metrikleri periyodik olarak Pushgateway’den çeker.
Alertmanager (Alarmların Yönetimi ve Yönlendirilmesi)
Prometheus sunucusu, tanımlanan kurallara göre alarmları tetikler, ancak bu alarmların yönetimi (gruplama, susturma, bildirim gönderme) Alertmanager tarafından yapılır. Alertmanager, alarmları Slack, PagerDuty, e-posta gibi farklı kanallara yönlendirerek doğru kişilerin zamanında bilgilendirilmesini sağlar.
Service Discovery (Hedeflerin Dinamik Olarak Keşfi)
Özellikle Kubernetes gibi dinamik ortamlarda, izlenecek hedeflerin (servislerin, pod’ların) IP adresleri sürekli değişebilir. Service discovery mekanizması, Prometheus’un bu hedefleri otomatik olarak keşfetmesini ve izleme yapılandırmasını manuel müdahaleye gerek kalmadan güncel tutmasını sağlar.
Temel Kavramlar ve Veri Modeli
Prometheus’u etkili kullanabilmek için temel veri modelini anlamak önemlidir. Tüm veriler zaman serisi formatında saklanır ve metrikler ile etiketler bu modelin temelini oluşturur.
Zaman Serisi (Time Series) Verisi
Bir zaman serisi, zaman damgalı bir dizi değerden oluşan bir akıştır. Prometheus’ta her zaman serisi, bir metrik adı ve o seriyi benzersiz kılan bir dizi anahtar-değer çifti (etiket) ile tanımlanır.
Metrikler (Metrics) ve Etiketler (Labels)
Metrik Adı: İzlenen sistemin genel özelliğini belirtir. Örneğin, `http_requests_total` (toplam HTTP istek sayısı).
Etiketler (Labels): Metriğe çok boyutluluk kazandıran anahtar-değer çiftleridir. Örneğin, `http_requests_total{method=”POST”, handler=”/api/users”}` metriği, sadece toplam istek sayısını değil, aynı zamanda `/api/users` yoluna yapılan POST isteklerinin sayısını özel olarak izlemeyi sağlar. Bu etiketleme sistemi, verileri filtreleme, gruplama ve analiz etme konusunda muazzam bir esneklik sunar.
Çekme (Pull) Modeli vs. İtme (Push) Modeli
Prometheus’un temel veri toplama yöntemi çekme (pull) modelidir. Bu modelde Prometheus sunucusu, belirli aralıklarla izlenecek hedeflere (exporter’lara) bir HTTP isteği göndererek metrikleri aktif olarak çeker. Bu yaklaşım, merkezi yapılandırma, hedef sağlığının kolayca kontrol edilebilmesi ve izleme yükünün hedefler yerine Prometheus sunucusu tarafından yönetilmesi gibi avantajlar sunar. İtme (push) modeli ise, hedefin metrikleri merkezi bir toplayıcıya gönderdiği modeldir ve Prometheus ekosisteminde genellikle Pushgateway aracılığıyla kısa ömürlü işler için kullanılır.
DevOps için Prometheus Neden Kritik Öneme Sahiptir?
Prometheus’un popülaritesi sadece teknik özelliklerinden değil, aynı zamanda DevOps kültürünün temel prensipleriyle olan derin uyumundan kaynaklanmaktadır. Hız, otomasyon, iş birliği ve proaktiflik gibi DevOps değerlerini doğrudan destekleyen bir araçtır.
Geleneksel Gözetim Araçlarından Farkları
Geleneksel izleme araçları genellikle statik altyapılar için tasarlanmıştır. Genellikle basit “up/down” kontrolleri yaparlar ve esnek sorgulama yeteneklerinden yoksundurlar. Prometheus ise dinamik, bulut tabanlı ortamlar için doğmuştur. Etiket tabanlı veri modeli, güçlü sorgulama dili (PromQL), service discovery yetenekleri ve mikroservis mimarileriyle olan uyumu, onu geleneksel araçlardan ayıran en önemli özelliklerdir.
DevOps Döngüsündeki Yeri ve Katkıları
Prometheus, CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) boru hattının her aşamasında değer yaratır.
Sürekli Entegrasyon ve Dağıtım (CI/CD) Süreçlerinin İzlenmesi
Yeni bir sürüm dağıtıldığında, Prometheus ile uygulamanın performansı (gecikme süresi, hata oranları, kaynak tüketimi) anında izlenebilir. Dağıtım sonrası ortaya çıkan anormal bir durum (örneğin, hata oranlarında ani bir artış) hızla tespit edilerek geri alma (rollback) kararı verilebilir. Bu, “hızlı başarısız ol” (fail fast) prensibini destekler.
Proaktif Sorun Tespiti ve Hızlı Hata Giderme (MTTR)
Prometheus, sadece mevcut sorunları değil, gelecekteki sorunları da öngörmeye yardımcı olur. Örneğin, bir disk alanının dolma hızını `predict_linear()` gibi PromQL fonksiyonlarıyla tahmin ederek, disk tamamen dolmadan ve sistem kesintiye uğramadan önce uyarı alabilirsiniz. Bu proaktif yaklaşım, Ortalama Tamir Süresini (Mean Time to Resolution – MTTR) önemli ölçüde düşürür.
Güvenilirlik ve Performans Optimizasyonu
Toplanan zengin metrikler, sistemin darboğazlarını ve performans sorunlarını belirlemek için paha biçilmezdir. Hangi veritabanı sorgusunun yavaşladığını, hangi servisin aşırı CPU tükettiğini veya ağ gecikmelerinin nerede yaşandığını Prometheus metrikleri sayesinde analiz edebilir ve optimizasyon çalışmalarını doğru noktalara odaklayabilirsiniz.
Mikroservis ve Konteyner Mimarileri İçin Uygunluğu
Prometheus’un tasarımı, doğası gereği dinamik ve dağıtık olan mikroservis ve konteyner mimarileri için biçilmiş kaftandır.
Dinamik Ortamlar ve Service Discovery Yetenekleri
Kubernetes gibi bir ortamda, uygulamaları çalıştıran konteynerler (pod’lar) sürekli olarak oluşturulur, yok edilir ve farklı sunuculara taşınır. Prometheus’un Kubernetes API’si ile entegre çalışabilen service discovery özelliği, bu dinamikliği sorunsuz bir şekilde yönetir. Yeni bir servis deploy edildiğinde, Prometheus onu otomatik olarak keşfeder ve izlemeye başlar.
Kubernetes ile Derin Entegrasyon
Prometheus, Kubernetes ekosisteminin izlenmesi için endüstri standardı haline gelmiştir. Kubernetes’in kendi bileşenleri (API Server, Kubelet, vb.) dahi Prometheus formatında metrikler yayınlar. Bu sayede, sadece uygulamalarınızı değil, altyapıyı oluşturan Kubernetes platformunun kendisini de derinlemesine izleyebilirsiniz.
Güçlü Sorgulama Dili: PromQL
PromQL (Prometheus Query Language), Prometheus’u diğer izleme araçlarından ayıran en güçlü özelliklerden biridir. Sadece basit metrikleri çekmekle kalmaz, aynı zamanda bu metrikler üzerinde anlık olarak karmaşık matematiksel ve istatistiksel işlemler yapmanızı sağlar.
Operasyonel Zeka ve Anlık Analiz
PromQL ile “son 5 dakikadaki 95. persentil istek gecikme süresi”, “her bir servis örneği için saniye başına düşen hata oranı” veya “geçen haftaya göre CPU kullanımındaki artış yüzdesi” gibi karmaşık sorulara anında yanıt alabilirsiniz. Bu, operasyonel zekayı artırır ve veri odaklı kararlar almanızı kolaylaştırır.
Karmaşık Alarmlar ve SLI/SLO Tanımlamaları
PromQL’in esnekliği, basit eşik değerlerinin ötesinde, çok daha akıllı alarm kuralları oluşturmanıza olanak tanır. Örneğin, sadece CPU %90’ı geçtiğinde değil, “gelecek 4 saat içinde diskin dolacağı tahmin ediliyorsa” alarm ver diyebilirsiniz. Bu yetenek, Hizmet Seviyesi Göstergeleri (SLI) ve Hedefleri (SLO) tanımlamak ve izlemek için de kritik öneme sahiptir.
Prometheus ile İlk Adımlar: Kurulum ve Yapılandırma
Prometheus’u kullanmaya başlamak oldukça basittir. Farklı ortamlar için çeşitli kurulum yöntemleri mevcuttur ve temel yapılandırması kolayca anlaşılabilir.
Kurulum Yöntemleri
Ortamınıza ve ihtiyacınıza en uygun kurulum yöntemini seçebilirsiniz.
Binary Dosyalar ile Manuel Kurulum
En temel yöntem, Prometheus’un resmi web sitesinden işletim sisteminize uygun binary dosyaları indirip çalıştırmaktır. Bu yöntem, aracı tanımak ve basit testler yapmak için idealdir.
Docker ile Hızlı Başlangıç
Prometheus’u bir Docker konteyneri olarak çalıştırmak, bağımlılık sorunlarını ortadan kaldırır ve kurulumu tek bir komuta indirger. Geliştirme ve test ortamları için popüler bir yöntemdir.
Kubernetes Ortamında Kurulum (Prometheus Operator)
Kubernetes ortamlarında Prometheus ve ekosistemindeki diğer bileşenleri (Alertmanager, Grafana vb.) yönetmek için en yaygın ve önerilen yöntem Prometheus Operator kullanmaktır. Operator, Prometheus kurulumunu, yapılandırmasını ve yaşam döngüsünü Kubernetes’e özgü kaynaklar (Custom Resource Definitions) ile otomatize ederek süreci büyük ölçüde basitleştirir.
Temel Yapılandırma Dosyası: prometheus.yml
Prometheus’un davranışını `prometheus.yml` adlı bir YAML dosyası belirler. Bu dosya, temel olarak Prometheus’a hangi hedefleri, ne sıklıkla ve nasıl izleyeceğini söyler.
Global Ayarlar (scrape_interval, evaluation_interval)
Dosyanın `global` bölümünde, tüm hedefler için geçerli olacak varsayılan ayarlar bulunur.
- scrape_interval: Prometheus’un hedeflerden metrikleri ne sıklıkla çekeceğini belirler (örneğin, `15s`).
- evaluation_interval: Tanımlanan alarm kurallarının ne sıklıkla değerlendirileceğini belirler (örneğin, `1m`).
Scrape Configs: Statik ve Dinamik Hedeflerin Tanımlanması
`scrape_configs` bölümü, izlenecek hedeflerin (job’ların) tanımlandığı yerdir. Her `job` belirli bir hedef grubunu temsil eder.
- Statik Hedefler: IP adresleri ve portları sabit olan hedefler için `static_configs` kullanılır.
- Dinamik Hedefler: Kubernetes gibi ortamlarda, hedefleri otomatik olarak keşfetmek için `kubernetes_sd_config` gibi service discovery mekanizmaları kullanılır.
İlk Metriklerin Toplanması: Node Exporter
Pratik bir başlangıç yapmak için en iyi yollardan biri, bir sunucunun temel işletim sistemi metriklerini toplamaktır. Bu görev için Node Exporter kullanılır.
Node Exporter’ın Kurulumu ve Çalıştırılması
Node Exporter da Prometheus gibi tek bir binary dosyadan oluşur. İzlenmek istenen her sunucu üzerine kurulur ve çalıştırıldığında varsayılan olarak 9100 portunda bir HTTP endpoint’i üzerinden makine metriklerini yayınlamaya başlar.
Sunucu (CPU, RAM, Disk) Metriklerinin İzlenmesi
Node Exporter’ı çalıştırdıktan sonra, `prometheus.yml` dosyasına bu exporter’ı hedef olarak eklemeniz gerekir.
Örneğin:
scrape_configs: - job_name: 'node' static_configs: - targets: ['sunucu_ip_adresi:9100']
Bu yapılandırmadan sonra Prometheus’u yeniden başlattığınızda, web arayüzüne giderek `node_cpu_seconds_total`, `node_memory_MemAvailable_bytes` gibi metrikleri sorgulayabilir ve sunucunuzun kaynak kullanımını izlemeye başlayabilirsiniz.
Uygulama ve Servislerin İzlenmesi (Enstrümantasyon)
Altyapı metriklerini izlemek önemli bir ilk adımdır, ancak asıl değer, uygulamalarınızın ve servislerinizin iç işleyişini anlamaktan gelir. Bu sürece “enstrümantasyon” denir.
Enstrümantasyon Nedir? “Beyaz Kutu” ve “Siyah Kutu” İzleme
- Siyah Kutu (Black-box) İzleme: Sistemin dışarıdan nasıl davrandığını gözlemlemektir. Örneğin, bir web sitesine dışarıdan HTTP isteği gönderip yanıt süresini ve durum kodunu kontrol etmek. Bu, sistemin “ayakta” olup olmadığını anlamak için kullanışlıdır ancak neden yavaşladığı hakkında bilgi vermez.
- Beyaz Kutu (White-box) İzleme: Sistemin iç metriklerini dışarıya açarak davranışını içeriden gözlemlemektir. Prometheus’un temel felsefesi budur. Enstrümantasyon, uygulamanızın koduna eklediğiniz metrikler aracılığıyla “beyaz kutu” izleme yapmanızı sağlar.
Uygulama Kodu Seviyesinde Metrik Toplama
Kendi yazdığınız uygulamaların performansını ve davranışını izlemek için Prometheus client kütüphanelerini kullanabilirsiniz.
Popüler Diller için Client Kütüphaneleri (Go, Python, Java, Node.js)
Prometheus, Go, Python, Java, Node.js, Ruby gibi birçok popüler dil için resmi veya topluluk tarafından desteklenen client kütüphaneleri sunar. Bu kütüphaneler, uygulamanıza metrikleri tanımlamayı ve bu metrikleri `/metrics` adında bir HTTP endpoint’i üzerinden yayınlamayı kolaylaştırır.
Metrik Türleri ve Kullanım Alanları
Prometheus dört temel metrik türü sunar. Doğru metrik türünü seçmek, verileri daha anlamlı hale getirir.
Counter: Artan Değerler (Örn: HTTP İstek Sayısı)
Sadece artan bir sayaçtır. Hiçbir zaman azalmaz, sadece sıfırlanabilir (örneğin, servis yeniden başladığında). Toplam istek sayısı, tamamlanan görev sayısı gibi değerleri izlemek için idealdir. Genellikle `rate()` fonksiyonu ile birlikte kullanılarak zaman içindeki artış hızı hesaplanır.
Gauge: Anlık Değişen Değerler (Örn: Aktif Kullanıcı Sayısı)
Hem artabilen hem de azalabilen anlık bir değeri temsil eder. Anlık bellek kullanımı, işlemci yükü, bir kuyruktaki bekleyen iş sayısı veya anlık aktif kullanıcı sayısı gibi metrikler için kullanılır.
Histogram: Gözlemlerin Dağılımı (Örn: İstek Gecikme Süreleri)
Gözlemlenen değerleri (genellikle istek süreleri veya yanıt boyutları gibi) yapılandırılabilir aralıklara (bucket) ayırarak sayar. Bu, verinin dağılımını anlamak için çok güçlüdür. Örneğin, “isteklerin %95’i 200ms altında tamamlandı” gibi persentil (quantile) hesaplamaları yapmanızı sağlar.
Summary: Histogram’a Benzer, Quantile Bilgisi Sunar
Histogram gibi gözlemlerin dağılımını izler ancak persentil (quantile) değerlerini doğrudan client tarafında hesaplar. Histogram’a göre daha az esnektir çünkü persentil değerleri önceden tanımlanmalıdır, ancak kullanımı daha basit olabilir.
Yaygın Kullanılan Exporter’lar ve Entegrasyonlar
Kendi uygulamanız olmayan ancak altyapınızda kullandığınız veritabanları, mesaj kuyrukları gibi üçüncü parti sistemleri izlemek için topluluk tarafından geliştirilmiş yüzlerce exporter bulunmaktadır.
- Veritabanları için Exporter’lar (PostgreSQL, MySQL, Redis): Veritabanının anlık bağlantı sayısı, sorgu performansı, replikasyon durumu gibi kritik metriklerini izlemenizi sağlar.
- Mesaj Kuyrukları için Exporter’lar (RabbitMQ, Kafka): Kuyruktaki mesaj sayısı, tüketici (consumer) gecikmesi, mesaj yayınlama hızı gibi metrikleri toplar.
- Web Sunucuları için Exporter’lar (Nginx, Apache): Aktif bağlantı sayısı, saniye başına istek, okuma/yazma durumları gibi web sunucusu performans metriklerini dışarıya açar.
Verileri Anlamlandırma: PromQL ve Görselleştirme
Metrikleri toplamak denklemin sadece bir yarısıdır. Asıl güç, bu verileri PromQL ile sorgulayarak ve Grafana gibi araçlarla görselleştirerek anlamlı bilgilere dönüştürmekten gelir.
PromQL’e Giriş: Temel Sorgular
PromQL, zaman serisi verilerini seçmek, filtrelemek ve üzerinde işlem yapmak için tasarlanmış fonksiyonel bir sorgu dilidir.
Metrik Seçimi ve Etiketlerle Filtreleme
En basit sorgu, bir metrik adını seçmektir: `http_requests_total`. Bu, bu isme sahip tüm zaman serilerini döndürür. Veriyi daraltmak için etiket filtreleri kullanılır: `http_requests_total{job=”api-server”, status_code=~”5..”}`. Bu sorgu, `api-server` işinden gelen ve durum kodu 500 ile başlayan (sunucu hatası) tüm istekleri seçer.
Zaman Aralığı Vektörleri (Range Vectors)
Bir zaman aralığındaki tüm değerleri seçmek için metrik adının sonuna `[5m]` gibi bir süre eklenir. `http_requests_total[5m]` ifadesi, son 5 dakikadaki tüm `http_requests_total` değerlerini içeren bir aralık vektörü döndürür. Bu, özellikle `rate()` gibi fonksiyonlarla birlikte artış hızını hesaplamak için kullanılır.
Yaygın Kullanılan PromQL Fonksiyonları ve Operatörleri
PromQL’in gücü, zengin fonksiyon ve operatör setinden gelir.
`rate()` ve `irate()` ile Artış Hızını Hesaplama
`rate(http_requests_total[5m])` sorgusu, son 5 dakika boyunca saniye başına düşen ortalama HTTP isteği artış hızını hesaplar. Bu, sayaç (counter) tipi metrikleri anlamlandırmak için en temel ve en sık kullanılan fonksiyondur. `irate()` ise daha anlık bir artış hızı verir.
`sum()`, `avg()`, `count()` gibi Agregasyon Fonksiyonları
Bu fonksiyonlar, birden fazla zaman serisini tek bir seride birleştirmek için kullanılır. Örneğin, `sum(rate(http_requests_total[5m]))` tüm hedeflerden gelen toplam istek oranını verirken, `sum by (job) (rate(http_requests_total[5m]))` her bir iş (job) için ayrı ayrı toplam istek oranını hesaplar.
`topk()` ve `sort()` ile Sıralama ve Filtreleme
`topk(3, node_memory_usage_bytes)` sorgusu, en çok bellek kullanan ilk 3 sunucuyu döndürür. Bu fonksiyonlar, anormallikleri veya en çok kaynak tüketen hedefleri hızlıca belirlemek için kullanışlıdır.
Grafana ile Görselleştirme
Prometheus’un kendi web arayüzü temel sorgulamalar ve anlık kontroller için yeterli olsa da, kalıcı ve zengin dashboard’lar oluşturmak için en popüler araç Grafana’dır.
Prometheus’u Grafana’ya Veri Kaynağı Olarak Ekleme
Grafana arayüzünden, “Configuration > Data Sources” bölümüne giderek yeni bir Prometheus veri kaynağı eklemek oldukça basittir. Tek yapmanız gereken Prometheus sunucunuzun URL’sini girmektir.
İlk Dashboard’un Oluşturulması
Veri kaynağını ekledikten sonra, yeni bir dashboard oluşturup paneller eklemeye başlayabilirsiniz. Her panel, bir veya daha fazla PromQL sorgusunun sonucunu görselleştiren bir bileşendir.
Grafik Türleri ve Panel Ayarları
Grafana; zaman serisi grafikleri, tekil değerler (singlestat), göstergeler (gauge), tablolar ve ısı haritaları (heatmap) gibi çok çeşitli görselleştirme seçenekleri sunar. Her panelin başlığını, birimini, renklerini ve eksen ayarlarını özelleştirerek okunması kolay ve bilgilendirici dashboard’lar oluşturabilirsiniz.
Proaktif Uyarı Mekanizmaları: Alertmanager
İzlemenin amacı sadece güzel grafikler oluşturmak değil, aynı zamanda sistemlerde bir sorun olduğunda veya olmak üzereyken harekete geçmektir. Bu noktada Prometheus’un alarm kuralları ve Alertmanager devreye girer.
Prometheus’ta Alarm Kurallarının Tanımlanması (`rules.yml`)
Alarm kuralları, Prometheus’ta ayrı bir YAML dosyasında tanımlanır ve `prometheus.yml` üzerinden bu dosyanın yolu belirtilir. Her kural aşağıdaki temel bileşenlerden oluşur:
- alert: Alarmın adı.
- expr: Alarmın tetiklenmesi için sürekli olarak değerlendirilen bir PromQL sorgusu. Bu sorgu bir sonuç döndürdüğü sürece alarm “pending” (beklemede) durumuna geçer.
- for: Alarmın “pending” durumunda ne kadar kalması gerektiğini belirtir. Bu süre sonunda hala aktifse “firing” (tetiklendi) durumuna geçer. Bu, kısa süreli anlık yükselmeler için gereksiz alarm oluşmasını engeller.
- labels: Alarma eklenecek ek etiketler (örneğin, önem derecesi: `severity: critical`).
- annotations: Alarm hakkında daha açıklayıcı bilgiler içeren etiketler (örneğin, `summary` ve `description`).
Alertmanager’ın Kurulumu ve Yapılandırılması (`alertmanager.yml`)
Alertmanager, Prometheus’tan ayrı bir bileşendir ve kendi yapılandırma dosyasına (`alertmanager.yml`) sahiptir. Prometheus, tetiklediği alarmları Alertmanager’a gönderir. Alertmanager’ın görevi ise bu alarmları işleyip doğru kanallara iletmektir.
Alarmların Gruplanması, Susturulması ve Yönlendirilmesi
Alertmanager’ın asıl gücü, ham alarmları akıllı bir şekilde yönetme yeteneğidir.
Alıcı (Receiver) Tanımlamaları (Slack, PagerDuty, E-posta)
`alertmanager.yml` dosyasında, alarmların gönderileceği kanallar “receiver” olarak tanımlanır. Her receiver için Slack, PagerDuty, OpsGenie, e-posta gibi farklı entegrasyonlar yapılandırılabilir.
Yönlendirme (Routing) Kuralları ile Doğru Ekiplere Bildirim
Routing ağacı, gelen alarmların etiketlerine bakarak hangi receiver’a gönderileceğini belirler. Örneğin, `team: frontend` etiketine sahip alarmları frontend ekibinin Slack kanalına, `severity: critical` etiketine sahip alarmları ise PagerDuty üzerinden vardiyadaki mühendise yönlendirebilirsiniz. Bu, alarm yorgunluğunu önler ve alarmların sadece ilgili kişiler tarafından görülmesini sağlar.
Susturma (Silencing) ile Bakım ve Bilinen Hataların Yönetimi
Planlı bir bakım çalışması sırasında veya üzerinde çalışılan bilinen bir sorun nedeniyle oluşacak alarmları geçici olarak susturmak için “silence” oluşturulabilir. Alertmanager arayüzünden oluşturulan bu susturmalar, belirli etiketlere uyan alarmların belirli bir süre boyunca bildirim göndermesini engeller.
İleri Seviye Konular ve En İyi Uygulamalar
Prometheus’un temellerini öğrendikten sonra, onu büyük ölçekli ve kritik sistemlerde daha etkili kullanmak için bazı ileri seviye konuları ve en iyi uygulamaları anlamak önemlidir.
Yüksek Erişilebilirlik (High Availability) ve Federasyon
İzleme sisteminizin kendisi de kritik bir bileşen olduğu için, tek bir Prometheus sunucusunun çökmesine karşı önlem almak gerekir. Bunun için en yaygın yöntem, aynı yapılandırmaya sahip iki Prometheus sunucusunu paralel olarak çalıştırmaktır (HA pair). Federasyon ise, bir Prometheus sunucusunun başka Prometheus sunucularından seçilmiş metrikleri toplamasına olanak tanır. Bu, hiyerarşik veya çok bölgeli izleme mimarileri kurmak için kullanılır.
Uzun Süreli Veri Saklama Çözümleri (Thanos, Cortex)
Prometheus, yerel diskinde verimli bir depolama yapsa da, varsayılan olarak uzun süreli (aylar, yıllar) veri saklama için tasarlanmamıştır. Bu ihtiyacı karşılamak için Thanos, Cortex ve M3DB gibi açık kaynak projeler geliştirilmiştir. Bu sistemler, birden fazla Prometheus sunucusundan gelen verileri birleştirir, tekilleştirir ve S3 gibi ucuz nesne depolama alanlarında uzun süreli olarak saklar.
Etiket (Label) Yönetimi ve Kardinalite Sorunları
Etiketler Prometheus’un en güçlü yanı olsa da, dikkatli kullanılmadığında bir soruna dönüşebilir. Her benzersiz etiket kombinasyonu yeni bir zaman serisi oluşturur. Eğer etiket değerleri çok sık değişiyorsa (örneğin, her bir isteğin ID’sini etiket olarak kullanmak), bu durum “yüksek kardinalite” sorununa yol açar. Yüksek kardinalite, Prometheus’un bellek ve CPU kullanımını aşırı artırarak performansını düşürebilir. Bu nedenle etiketler, düşük sayıda ve sabit değerlere sahip olmalıdır.
Prometheus Güvenliği: Erişim Kontrolü ve Kimlik Doğrulama
Prometheus ve bileşenleri, varsayılan kurulumlarında kimlik doğrulama veya şifreleme sunmazlar. Üretim ortamlarında, Prometheus endpoint’lerine erişimi kısıtlamak için bir ters proxy (reverse proxy) gibi Nginx veya bir API Gateway arkasına yerleştirerek temel kimlik doğrulama (basic auth) ve TLS şifrelemesi eklemek yaygın bir en iyi uygulamadır.
Prometheus Ekosisteminin Geleceği ve OpenTelemetry Entegrasyonu
Prometheus ekosistemi sürekli olarak gelişmektedir. Gelecekteki en önemli trendlerden biri de OpenTelemetry (OTel) ile olan entegrasyondur. OpenTelemetry, metrikler, loglar ve izler (traces) için standart bir enstrümantasyon kütüphanesi ve veri formatı sağlamayı amaçlayan bir CNCF projesidir. Uygulamalarınızı OpenTelemetry ile enstrümante ederek, topladığınız verileri hem Prometheus’a hem de diğer izleme ve gözlemlenebilirlik (observability) platformlarına kolayca gönderebilirsiniz. Bu, satıcı bağımlılığını azaltan ve daha esnek bir gözlemlenebilirlik stratejisi sunan bir yaklaşımdır.