Prometheus ve Grafana Mimarisi: Metrik Tabanlı İzleme ve Görselleştirme Mantığı
Modern sistem yönetiminde metrik toplama, saklama ve görselleştirme süreçlerini Prometheus ve Grafana ikilisi üzerinden inceleyin; temel mimari bileşenleri ve pratik ipuçlarını keşfedin.
Caner Serbest
Sistem ve Altyapı
4 min read
Prometheus ve Grafana Mimarisi: Metrik Tabanlı İzleme ve Görselleştirme Mantığı
Modern yazılım mimarileri ve bulut tabanlı altyapılar, geleneksel sunucu yönetim alışkanlıklarını kökten değiştirdi. Onlarca hatta yüzlerce mikro hizmetin, konteynerin ve dağıtık veritabanının çalıştığı ortamlarda “Sunucu ayakta mı?” sorusunun yanıtı artık tek başına yeterli değil. Uygulamanın yanıt süresi (latency), hata oranları (error rates), bellek sızıntıları ve CPU tüketim trendleri gibi detaylar, sistemin sağlığını anlamak için hayati önem taşır.
Bu karmaşık ekosistemde görünürlük (observability) sağlamak için endüstri standardı haline gelen Prometheus ve Grafana ikilisi, sistem yöneticilerinin ve DevOps mühendislerinin elindeki en güçlü araç setlerinden biridir. Bu yazıda, bu iki aracın çalışma mantığını, birbirleriyle nasıl entegre olduklarını ve sahada karşılaşılan pratik senaryoları ele alacağız.
Gözlemlenebilirlik Dünyasında Prometheus’un Rolü
Prometheus, açık kaynaklı bir sistem izleme ve uyarı (alerting) araç takımıdır. SoundCloud tarafından geliştirilen ve daha sonra Cloud Native Computing Foundation (CNCF) bünyesine katılan Prometheus, özellikle zaman serisi (time-series) verilerini depolama konusundaki başarısıyla öne çıkar.
Prometheus’u anlamak için onun geleneksel izleme araçlarından ayrıldığı temel noktayı bilmek gerekir: Pull (Çekme) Modeli.
Push vs. Pull Modeli
Nagios veya Zabbix gibi eski nesil araçlar genellikle push mantığıyla çalışır; yani izlenen sunucudaki bir ajan (agent), ana sunucuya düzenli olarak veri gönderir. Prometheus ise varsayılan olarak pull yaklaşımını benimser. Belirttiğiniz hedeflere (targets) belirli aralıklarla HTTP istekleri atarak metrikleri toplar (scraping).
Bu yaklaşımın sahada sağladığı avantajlar şunlardır:
- Merkezi Kontrol: Hangi servislerin izlendiği Prometheus konfigürasyon dosyasından merkezi olarak yönetilir.
- Kolay Hata Ayıklama: Hedef bir uygulamanın
/metricsendpoint’ine tarayıcıdan veyacurlile erişerek anlık verileri doğrudan görebilirsiniz. - Ajan Bağımlılığı Olmaması: Her uygulama için ağır ajanlar kurmak yerine, uygulamanın hafif bir kütüphane ile metrik sunması yeterlidir.
Prometheus Veri Modeli
Prometheus, topladığı tüm verileri zaman damgasıyla birlikte zaman serisi olarak kaydeder. Her metrik bir isim ve anahtar-değer çiftlerinden oluşan etiketlere (labels) sahiptir.
Örnek bir metrik şu şekildedir:
http_requests_total{method="POST", handler="/login", status="200"} 1027
Burada:
http_requests_total: Metrik adı.method,handler,status: Etiketler (Dimensions).1027: Metrik değeri.
Etiketlerin gücü, aynı metriği farklı boyutlarda filtreleyebilmenizi ve sorgulayabilmenizi sağlar. Örneğin, sadece /login endpoint’ine gelen POST isteklerini anlık olarak izlemek bu etiketler sayesinde çok kolaydır.
Veriden Anlam Çıkarmak: Grafana
Prometheus ham veriyi toplar, saklar ve PromQL (Prometheus Query Language) adı verilen kendi diliyle sorgulamanıza olanak tanır. Ancak bu verilerin ham hâli, bir operasyon ekibi için her zaman okunabilir veya operasyonel olarak pratik değildir. İşte bu noktada Grafana devreye girer.
Grafana, zaman serisi veritabanları başta olmak üzere birçok veri kaynağını (data source) destekleyen, esnek ve güçlü bir görselleştirme aracıdır. Grafana kendi başına veri saklamaz; veriyi Prometheus gibi kaynaklardan çeker ve zengin grafikler, panolar (dashboards) ve alarm mekanizmaları sunar.
Grafana ile Prometheus Entegrasyonu
Grafana’yı bir Prometheus sunucusuna bağlamak oldukça basittir:
- Grafana arayüzünden Configuration > Data Sources adımlarını izleyin.
- Prometheus seçeneğini seçin.
- Prometheus sunucunuzun HTTP adresini (örneğin:
http://localhost:9090) girip Save & test butonuna tıklayın.
Artık Grafana üzerinde paneller oluşturmaya ve PromQL kullanarak görselleştirmeler yapmaya başlayabilirsiniz.
Pratik Senaryo: Temel Bir İzleme Kurulumu
Teoriyi bir kenara bırakıp sahada uygulayabileceğimiz temel bir senaryo kuralım. Senaryomuzda bir Linux sunucu üzerinde çalışan bir uygulamanın CPU ve bellek kullanımını Prometheus ile toplayıp Grafana’da görselleştireceğiz.
Adım 1: Node Exporter Kurulumu
Linux sunucunun donanım ve işletim sistemi metriklerini toplamak için Prometheus ekosisteminin resmi aracı olan Node Exporter kullanılır.
Node Exporter’ı indirmek ve servis olarak çalıştırmak için şu adımları izleyebilirsiniz:
# Kullanıcı ve dizin oluşturma
useradd -M -r -s /bin/false node_exporter
cd /tmp
# İndirme (Sürüm numarasını güncelleyebilirsiniz)
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
chown node_exporter:node_exporter /usr/local/bin/node_exporter
Ardından sistem için bir systemd servisi oluşturalım (/etc/systemd/system/node_exporter.service):
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Servisi aktif edip başlatalım:
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
Adım 2: Prometheus Yapılandırması
Prometheus sunucusunun konfigürasyon dosyası (prometheus.yml) üzerinde Node Exporter’ı hedef olarak tanımlamamız gerekir:
global:
scrape_interval: 15s # Her 15 saniyede bir metrik çek
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'linux-sunucu'
static_configs:
- targets: ['<SUNUCU_IP_ADRESI>:9100']
Bu ayarı yaptıktan sonra Prometheus servisini yeniden başlatın. Prometheus arayüzüne (http://<PROMETHEUS_IP>:9090) giderek Status > Targets sekmesinden hedefinizin UP durumunda olduğunu doğrulayabilirsiniz.
Adım 3: Grafana Paneli Oluşturma
Grafana’ya giriş yaptıktan sonra yeni bir Dashboard oluşturun. CPU kullanım oranını yüzde olarak görmek için aşağıdaki PromQL sorgusunu bir Panel içerisine yazabilirsiniz:
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)
Bu sorgu, son 5 dakikalık dilimdeki boşta kalma (idle) sürelerini baz alarak sistemin genel CPU kullanım yüzdesini hesaplar. Bu paneli kaydederek kendi operasyonel ekranınızı oluşturmuş olursunuz.
Sahadan Notlar ve En İyi Uygulamalar
Sistem yöneticisi olarak bu araçları prodüksiyon ortamlarında çalıştırırken dikkat etmeniz gereken bazı kritik kurallar vardır:
- Kardinalite (Cardinality) Patlamasına Dikkat Edin: Etiketler çok güçlüdür ancak sınırsız sayıda benzersiz değer üreten etiketler (örneğin kullanıcı ID’leri, IP adresleri veya UUID’ler) Prometheus’un bellek tüketimini ciddi şekilde artırır. Metrik etiketlerini tasarlarken sınırlı kümesel değerler seçmeye özen gösterin.
- Saklama Süresi (Retention) Planlaması: Prometheus sınırsız veri depolamak için tasarlanmamıştır. Disk kapasitenize göre
--storage.tsdb.retention.timeparametresini doğru ayarlayın. Uzun vadeli analizler için Thanos veya Cortex gibi çözümleri değerlendirebilirsiniz. - Doğru Alarmlar Kurun: Her şey için alarm kurmak, “alarm yorgunluğuna” (alert fatigue) yol açar. Gerçekten müdahale edilmesi gereken durumlar (örneğin disk doluluk oranı > %90, servis yanıt süresi eşik aşımı) için Alertmanager entegrasyonu sağlayın.
- Hazır Panellerden Yararlanmayın, Özelleştirin: Grafana topluluğunda binlerce hazır şablon bulunur (Örn: Node Exporter için ID 1860). Ancak her sistemin ihtiyacı farklıdır. Hazır şablonları kullanmak başlangıç için harikadır, ancak bunları kendi altyapınızın gerçeklerine göre sadeleştirmek en iyisidir.
Sonuç
Prometheus ve Grafana, modern altyapıların arkasındaki görünmeyen kahramanlardır. Doğru kurgulanmış bir metrik toplama stratejisi, sistem yöneticilerine kriz anlarında tahmin yürütmek yerine veriyle hareket etme yeteneği kazandırır. Pull tabanlı esnek yapı, güçlü PromQL sorgu dili ve Grafana’nın sunduğu görsel zenginlik birleştiğinde, sistemlerinizdeki her dar boğazı erkenden fark edebilir ve proaktif önlemler alabilirsiniz.
Bu yazı Gemini ile otomatik oluşturulmuştur.