Bir sunucunun ne zaman yavaşladığını, RAM'in hangi saatlerde dolduğunu ya da disk alanının kaç güne kadar biteceğini tahmin etmek, "acaba bir sorun mu var" hissiyle değil, gerçek verilerle yapılması gereken bir iştir. Çoğu ekip performans sorunlarını ancak site yavaşladığında ya da servis çöktüğünde fark eder; oysa doğru toplanmış metrikler, sorunu daha o oluşmadan işaret edecek eğilimleri (trend) size çok önceden gösterir. Prometheus, tam bu ihtiyaç için tasarlanmış, açık kaynaklı ve kendi sunucunuzda barındırabileceğiniz bir metrik toplama ve izleme sistemidir.
Bu rehberde Prometheus'un ne olduğunu, "pull tabanlı" metrik toplama modelinin neden farklı olduğunu, exporter mantığını ve en çok kullanılan node_exporter'ı, hedef tanımlamayı, PromQL sorgu dilini, Alertmanager ile uyarı üretmeyi ve Grafana ile görselleştirmeyi adım adım ele alacağız. Amaç, aracı gereğinden fazla parlatmadan; gerçekten kendi altyapınızda kurup çalıştırabileceğiniz, pratik ve örnek odaklı bir başlangıç noktası vermek.
Prometheus nedir, ne işe yarar?#
Prometheus, sunuculardan, uygulamalardan ve servislerden sayısal metrikleri (CPU kullanımı, bellek, disk, istek sayısı, gecikme süresi gibi) düzenli aralıklarla toplayan, bunları zaman damgasıyla birlikte saklayan ve üzerinde sorgu çalıştırmanıza izin veren bir sistemdir. 2012'de SoundCloud'da başlatılmış, sonrasında Cloud Native Computing Foundation (CNCF) bünyesine alınarak Kubernetes'ten sonra bu vakfın "mezun" (graduated) olan ikinci projesi hâline gelmiştir. Bugün bulut-doğal (cloud native) dünyanın fiili metrik izleme standardı sayılır.
Prometheus'un kalbinde bir zaman serisi veritabanı (time series database) yatar. Yani her metrik, "şu anda değeri şu" bilgisiyle değil, "şu saniyede şuydu, bir dakika sonra buydu" şeklinde zaman içindeki değişimiyle saklanır. Bu sayede "son 24 saatte bellek kullanımı nasıl seyretti", "istek gecikmesi hangi saatte zirve yaptı" gibi soruların yanıtını grafiklerle alırsınız. Prometheus tek başına bir gösterge paneli aracı değildir; asıl işi veriyi güvenilir biçimde toplayıp saklamak ve güçlü bir sorgu diliyle bu veriye erişilebilir kılmaktır. Görsel paneller için genellikle yanına Grafana koyulur.
Pull tabanlı metrik toplama modeli#
Prometheus'u benzerlerinden ayıran en belirgin özellik, metrikleri pull (çekme) modeliyle toplamasıdır. Klasik "push" tabanlı sistemlerde her sunucu, ürettiği metrikleri merkezi bir toplayıcıya kendisi gönderir. Prometheus ise tersini yapar: kendisi belirlediğiniz aralıklarla (örneğin her 15 saniyede bir) hedeflere gider, onların açtığı bir HTTP uç noktasından (/metrics) o anki değerleri okur. Bu işleme scrape (kazıma) denir.
Bu yaklaşımın pratik avantajları vardır. Birincisi, hangi hedeflerin izlendiğini merkezî olarak Prometheus bilir; bir hedef yanıt vermiyorsa bunu anında up metriğiyle görürsünüz (yani izleme sisteminin kendisi, izlenenin ayakta olup olmadığını da ölçer). İkincisi, hedeflerin merkezî sunucuyu nerede bulacağını bilmesine gerek yoktur; yapılandırma tek yerde, Prometheus tarafında toplanır. Bir hedefin /metrics çıktısı kabaca şöyle görünür:
# HELP node_memory_MemAvailable_bytes Kullanılabilir bellek (bayt)
# TYPE node_memory_MemAvailable_bytes gauge
node_memory_MemAvailable_bytes 2.147483648e+09
# HELP node_cpu_seconds_total İşlemci modlarındaki toplam saniye
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 51234.11
node_cpu_seconds_total{cpu="0",mode="user"} 3120.44
Buradaki her satır bir metriktir; süslü parantez içindeki cpu="0" ve mode="idle" gibi ifadeler ise etiketlerdir (label). Etiketler, aynı metriği farklı boyutlara göre (hangi CPU çekirdeği, hangi disk, hangi HTTP yolu) ayrıştırmanızı sağlar. Prometheus'un gücünün büyük kısmı bu çok boyutlu etiket modelinden gelir. Kısa ömürlü işler (batch job) için ise pull modeli uygun olmadığından, bu işler metriklerini bir "Pushgateway" bileşenine iterek istisnayı kapatır.
Exporter'lar ve node_exporter#
Prometheus sadece HTTP üzerinden /metrics biçiminde veri okuyabilir. Peki bir Linux sunucusunun CPU'su, belleği ya da MySQL'in sorgu sayısı doğrudan bu biçimde sunulmadığında ne yaparsınız? İşte burada exporter'lar devreye girer. Exporter, bir sistemin kendine özgü metriklerini alıp Prometheus'un anlayacağı biçime çeviren küçük bir aracı programdır. Her teknoloji için ayrı bir exporter vardır ve topluluk yüzlercesini üretmiştir.
En çok kullanılan exporter, sunucunun donanım ve işletim sistemi metriklerini sunan node_exporter'dır. Kurulumu son derece basittir; genellikle tek bir ikili dosya (binary) indirilir ve bir servis olarak çalıştırılır:
# node_exporter'ı indir ve çalıştır
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
cd node_exporter-1.8.2.linux-amd64
./node_exporter
Çalıştırdığınızda node_exporter varsayılan olarak 9100 portunu dinler ve http://sunucu-ip:9100/metrics adresinde CPU, bellek, disk, ağ, dosya sistemi ve yük ortalaması gibi yüzlerce metriği sunmaya başlar. Üretim ortamında bunu doğrudan elle değil, bir systemd servisi olarak, kendi kısıtlı kullanıcısıyla çalıştırmanız daha doğrudur. Sık kullanılan diğer exporter'lardan bazıları şunlardır:
| Exporter | İzlediği sistem | Varsayılan port |
|---|---|---|
| node_exporter | Linux sunucu (CPU, RAM, disk, ağ) | 9100 |
| blackbox_exporter | Dıştan HTTP, TCP, ICMP, DNS kontrolü | 9115 |
| mysqld_exporter | MySQL / MariaDB | 9104 |
| postgres_exporter | PostgreSQL | 9187 |
| nginx-prometheus-exporter | Nginx istek metrikleri | 9113 |
| cAdvisor | Docker konteyner metrikleri | 8080 |
Bu tabloya bakınca mantık netleşiyor: neyi izlemek istiyorsanız ona uygun exporter'ı kurar, Prometheus'a "şu adresi de kazı" dersiniz. Kendi yazdığınız uygulamalar için ise resmi istemci kütüphaneleri (Go, Python, Java, Node.js) vardır; uygulamanıza birkaç satır ekleyerek kendi iş metriklerinizi (örneğin "işlenen sipariş sayısı") doğrudan sunabilirsiniz.
Kurulum ve hedef tanımlama#
Prometheus'un kendisini kurmanın en temiz yolu genellikle Docker'dır; çünkü tüm bağımlılıkları tek imajda toplar ve güncellemeyi kolaylaştırır. Konteyner yönetimini görsel bir panelden yapmak isterseniz Portainer rehberimize göz atabilirsiniz. Prometheus'un tüm davranışı tek bir yapılandırma dosyası, prometheus.yml üzerinden yönetilir. Basit bir örnek şöyledir:
global:
scrape_interval: 15s # varsayılan kazıma aralığı
evaluation_interval: 15s # uyarı kurallarının değerlendirme sıklığı
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node"
static_configs:
- targets:
- "10.0.0.11:9100"
- "10.0.0.12:9100"
labels:
ortam: "uretim"
Bu dosyada scrape_configs altındaki her job_name, bir izleme grubudur. node işi, iki ayrı sunucudaki node_exporter'ı 15 saniyede bir kazır ve tüm metriklere ortam="uretim" etiketini ekler. Bu yapılandırmayla Prometheus'u çalıştırmak için tipik bir Docker komutu şöyle görünür:
docker run -d --name prometheus \
-p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v prometheus-data:/prometheus \
--restart=always \
prom/prometheus
Ardından tarayıcıdan http://sunucu-ip:9090 adresine giderek Prometheus'un kendi web arayüzünü açar, "Status → Targets" bölümünden tanımladığınız hedeflerin UP durumda olup olmadığını kontrol edersiniz. Statik hedef listesi küçük kurulumlar için yeterlidir; hedefler sürekli değişiyorsa (örneğin otomatik ölçeklenen bir ortam) Prometheus'un servis keşfi (service discovery) özelliğiyle hedefleri Consul, DNS ya da Kubernetes üzerinden dinamik olarak bulmasını sağlarsınız. Donanım açısından mütevazı bir başlangıç yeterlidir; birkaç sunucuyu izlemek için 1-2 vCPU ve 2 GB RAM'lik bir sanal sunucu (VDS) rahatça iş görür, izleme kapsamınız büyüdükçe kaynağı artırırsınız.
PromQL ile sorgulama#
Toplanan veriyi anlamlı hâle getiren asıl güç, Prometheus'un kendi sorgu dili PromQL'dir (Prometheus Query Language). PromQL, zaman serileri üzerinde filtreleme, matematiksel işlem ve toplama (aggregation) yapmanıza olanak tanır. Basit bir sorgu, belirli bir metriğin o anki değerini verir:
-- Kullanılabilir belleğin gigabayt cinsinden anlık değeri
node_memory_MemAvailable_bytes / 1024 / 1024 / 1024
PromQL'in asıl gücü, counter tipindeki sürekli artan sayaçları oran hâline getiren rate() fonksiyonunda ortaya çıkar. Örneğin CPU kullanımını yüzde olarak hesaplayan klasik sorgu, boşta (idle) geçen sürenin oranını 100'den çıkarır:
-- Sunucu başına CPU kullanım yüzdesi (son 5 dakika ortalaması)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Buradaki by (instance) ifadesi, sonucu her sunucu için ayrı ayrı gruplar; rate(...[5m]) ise son 5 dakikadaki saniyelik artış hızını hesaplar. Bu tür sorgularla "diskin dolmasına kaç saat kaldığını" tahmin eden predict_linear() gibi ileri fonksiyonlara kadar gidebilirsiniz. Başlangıçta PromQL biraz yabancı gelebilir; ancak birkaç temel kalıbı (rate, sum, avg, by) öğrendikten sonra çoğu ihtiyacınızı karşılayan sorguları hızla yazar hâle gelirsiniz. Bu sorguları hem Prometheus arayüzünde deneyebilir hem de doğrudan uyarı kurallarınızda ve Grafana panellerinizde kullanırsınız.
Alertmanager ile uyarı üretme#
Metrik toplamak tek başına yeterli değildir; asıl mesele bir eşik aşıldığında bundan haberdar olmaktır. Prometheus, tanımladığınız uyarı kurallarını (alerting rules) belirlediğiniz aralıklarla değerlendirir; bir kuralın koşulu belirli bir süre boyunca doğru kalırsa uyarıyı tetikler. Örnek bir kural dosyası şöyledir:
groups:
- name: sunucu-kurallari
rules:
- alert: YuksekBellekKullanimi
expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.90
for: 5m
labels:
severity: kritik
annotations:
summary: "{{ $labels.instance }} bellek kullanımı %90 üzerinde"
Buradaki for: 5m, koşulun anlık bir dalgalanmayla değil, gerçekten 5 dakika boyunca sürmesi hâlinde uyarının ateşlenmesini sağlar; bu, "gürültülü" yanlış alarmları büyük ölçüde azaltır. Prometheus tetiklenen uyarıyı doğrudan kullanıcıya göndermez; onu Alertmanager adlı ayrı bir bileşene iletir. Alertmanager uyarıları gruplar, tekrarları bastırır (deduplication), belirli zaman aralıklarında sessize alır (silence) ve nihayet doğru kanala (e-posta, Slack, Telegram, PagerDuty, genel webhook) yönlendirir. Bu görev ayrımı sayesinde, gece yarısı aynı olaydan onlarca ayrı mesaj yerine tek ve derli toplu bir bildirim alırsınız.
Grafana ile görselleştirme#
Prometheus'un yerleşik grafik arayüzü işlevseldir ama gösterge paneli (dashboard) olarak sınırlıdır. Sektörde neredeyse istisnasız tercih edilen eşlik aracı Grafana'dır. Grafana'yı Prometheus'a bir "veri kaynağı" (data source) olarak bağlar, ardından PromQL sorgularınızı zengin, etkileşimli grafiklere dönüştürürsünüz. En güzel yanı, sıfırdan panel çizmek zorunda olmamanızdır: Grafana topluluğu binlerce hazır panel şablonu paylaşır ve node_exporter için hazırlanmış popüler bir şablonu tek bir kimlik numarasıyla içe aktararak saniyeler içinde tüm sunucu metriklerinizi görselleştirebilirsiniz.
Grafana'yı da Docker ile kolayca ayağa kaldırabilirsiniz:
docker run -d --name grafana \
-p 3000:3000 \
-v grafana-data:/var/lib/grafana \
--restart=always \
grafana/grafana
Kurulumdan sonra http://sunucu-ip:3000 adresinden giriş yapar, "Connections → Data sources" bölümünden Prometheus adresini (http://prometheus:9090) tanımlar ve panellerinizi oluşturmaya başlarsınız. Pratikte "Prometheus + node_exporter + Grafana + Alertmanager" dörtlüsü, kendi kendine barındırılan (self-hosted) klasik izleme yığınını oluşturur: Prometheus toplar ve saklar, exporter'lar veriyi üretir, Alertmanager uyarır, Grafana gösterir. İzleme yığınınızın kendisini de yedeklemeyi ihmal etmeyin; Grafana panelleri ve uyarı kuralları emek isteyen yapılandırmalardır, düzenli yedekleme ile bunları güvence altına almak akıllıca olur.
Prometheus mu, basit uptime izleme mi?#
Prometheus güçlü bir araçtır, ama her senaryonun doğru yanıtı o değildir. Amacınız yalnızca "sitem ayakta mı, çöktüğünde bana haber ver" ise, Prometheus'un metrik toplama, PromQL ve exporter katmanları gereğinden ağır kalabilir. Böyle bir ihtiyaç için Uptime Kuma gibi sade bir kesinti izleme aracı çok daha hızlı kurulur ve yönetilir. Prometheus'un asıl değeri, "neden yavaşladı, hangi kaynak tükeniyor, eğilim nereye gidiyor" gibi derinlemesine sorulara yanıt aradığınızda ortaya çıkar. İkisi birbirinin rakibi değil, farklı katmanların araçlarıdır; birçok ekip her ikisini birden kullanır.
| Kriter | Prometheus | Basit uptime izleme |
|---|---|---|
| Amaç | Detaylı metrik ve eğilim analizi | Ayakta mı, çöktü mü kontrolü |
| Veri modeli | Zaman serisi + çok boyutlu etiket | Basit durum (UP/DOWN) |
| Öğrenme eğrisi | Orta-yüksek (PromQL, exporter) | Düşük |
| Görselleştirme | Grafana ile çok güçlü | Yerleşik, sade |
| İdeal kullanıcı | Sistem yöneticisi, DevOps ekibi | Küçük ekip, tekil site sahibi |
Sunucularınızın yapılandırması, güvenlik sertleştirmesi ve izleme yığınının kurulumu için uzman desteği isterseniz sunucu yönetimi hizmetimiz devreye girebilir; altyapıyı sıfırdan kurmak içinse sunucu çözümlerimizi inceleyebilirsiniz. Hazır uygulamalarla hızlı başlamak isteyenler ise App Center kataloğuna göz atabilir.
Sıkça Sorulan Sorular#
Prometheus tamamen ücretsiz mi?#
Evet. Prometheus açık kaynaklıdır ve Apache 2.0 lisansıyla ücretsiz dağıtılır; herhangi bir lisans veya abonelik bedeli yoktur. Yalnızca aracı çalıştıracağınız sunucunun maliyetini karşılarsınız. Aynı şekilde node_exporter, Alertmanager ve Grafana'nın açık kaynak sürümü de ücretsizdir.
Prometheus push değil de neden pull kullanıyor?#
Prometheus hedeflerden metrikleri kendisi çektiği (pull) için, hangi hedeflerin izlendiği bilgisi tek merkezde toplanır ve bir hedef yanıt vermediğinde bunu anında görebilirsiniz. Bu model, izlenen sunucuların merkezî toplayıcının adresini bilmesini gerektirmez ve yapılandırmayı sadeleştirir. Kısa ömürlü toplu işler gibi pull'a uygun olmayan durumlar için ise Pushgateway bileşeni kullanılır.
node_exporter ile neleri izleyebilirim?#
node_exporter, bir Linux sunucusunun işletim sistemi ve donanım düzeyindeki metriklerini sunar. CPU kullanımı, bellek, disk doluluğu ve giriş/çıkış hızı, ağ trafiği, sistem yük ortalaması ve çalışma süresi gibi yüzlerce metriği kutudan çıktığı gibi toplayabilirsiniz. Uygulamalarınıza özgü metrikler için ise ilgili exporter'ı veya istemci kütüphanesini kullanırsınız.
Prometheus verileri ne kadar süre saklıyor?#
Varsayılan olarak Prometheus, topladığı metrikleri yerel diskte 15 gün boyunca saklar; bu süreyi başlatma parametresiyle uzatabilir ya da kısaltabilirsiniz. Çok daha uzun vadeli saklama için verileri Thanos, Cortex veya Mimir gibi uzun süreli depolama çözümlerine aktarabilirsiniz. Uzun geçmiş tutacaksanız disk kapasitesini buna göre planlamanız gerekir.
Prometheus ile Grafana arasındaki fark nedir?#
Prometheus metrikleri toplayan, saklayan ve sorgulanabilir kılan sistemdir; Grafana ise bu metrikleri görsel panellere dönüştüren bir görselleştirme aracıdır. İkisi rakip değil, birbirini tamamlar. Prometheus veriyi üretir ve barındırır, Grafana ise o veriyi grafiklerle anlaşılır hâle getirir; pratikte neredeyse her zaman birlikte kurulurlar.
Küçük bir işletme için Prometheus abartı mı olur?#
Sadece "sitem çalışıyor mu" sorusuna yanıt arıyorsanız Prometheus kurulumu gereğinden ağır kalabilir; bu durumda daha sade bir kesinti izleme aracı yeterlidir. Ancak birkaç sunucunuz varsa, kaynak kullanımını zaman içinde takip etmek, kapasite planlaması yapmak veya performans sorunlarının kökenine inmek istiyorsanız Prometheus küçük ölçekte de fazlasıyla değerli olur. Karar, ihtiyacınızın "ayakta mı" ile mi yoksa "neden ve nasıl" ile mi ilgili olduğuna bağlıdır.
Kapanış#
Prometheus, sunucularınızı ve uygulamalarınızı tahminlerle değil gerçek verilerle yönetmenin en olgun açık kaynak yollarından biridir. Pull tabanlı toplama modeli, çok boyutlu etiketleri, güçlü PromQL sorgu dili ve Grafana ile kurduğu doğal ortaklık sayesinde; küçük bir VDS'ten büyük konteyner kümelerine kadar her ölçekte kendine yer bulur. Başlangıçta exporter'lar ve sorgu dili biraz emek istese de, bir kez oturttuğunuzda size sorunları oluşmadan gösteren bir erken uyarı sistemi kazandırır.
İzleme yığınınızı sağlam bir zemine kurmak isterseniz, ihtiyacınıza uygun performanslı sunucu ve VDS çözümlerimize göz atabilir, kurulum ve bakımı uzmana bırakmak için sunucu yönetimi hizmetimizden yararlanabilir veya hazır uygulamalarla hızlı başlamak için App Center'ı inceleyebilirsiniz. Doğru toplanmış tek bir metrik bile, bir sonraki gece yarısı kesintisini sizin için sessiz bir uyarıya dönüştürebilir.