Sunucu Yönetimi & Linux

    Prometheus ve Grafana ile İzleme Kurulumu

    Prometheus, node_exporter ve Grafana ile metrik toplayıp panolar ve uyarılar kurmanın uçtan uca rehberi.

    12 dk okuma Güncellendi: 10 Temmuz 2026

    Bir sunucu gece yarısı yavaşladığında ya da RAM dolup uygulama çöktüğünde çoğu ekip olayı ancak müşteri şikayet edince fark eder. Oysa disk doluluğu, CPU yükü, bellek tüketimi ve ağ trafiği saatler öncesinden sinyal verir; onları görmek için sürekli çalışan bir izleme sistemi gerekir. İşte bu noktada açık kaynak dünyasının de-facto standardı olan Prometheus ve Grafana ikilisi devreye girer. Prometheus metrikleri toplayıp saklar, Grafana ise bu metrikleri anlaşılır panolara ve grafiklere dönüştürür.

    Bu rehberde sıfırdan çalışan bir izleme yığınını nasıl kuracağınızı adım adım ele alıyoruz. Prometheus'un pull mimarisini, sunucu metriklerini yayınlayan node_exporter'ı, scrape yapılandırmasını, Grafana kurulumunu ve veri kaynağı bağlamayı, hazır panoları içe aktarmayı ve Alertmanager ile disk dolduğunda size e-posta atacak uyarıları göreceksiniz. Sonda ise tüm bileşenleri tek komutla ayağa kaldıran bir Docker Compose örneği var; servisleri kalıcı hâle getirmek için systemd servis yönetimi yazımız da yardımcı olacaktır.

    Prometheus'un Pull Mimarisi ve Temel Kavramlar#

    Klasik izleme araçlarının çoğu "push" modeliyle çalışır: sunuculardaki ajanlar metrikleri merkezi bir toplayıcıya gönderir. Prometheus ise tersini yapar; kendisi belirlenen aralıklarla hedeflere HTTP üzerinden gider ve /metrics uç noktasından veriyi çeker. Bu yaklaşıma "pull mimarisi" denir. Avantajı, hedefin ayakta olup olmadığını Prometheus'un doğrudan bilmesidir; bir sunucu yanıt vermiyorsa scrape başarısız olur ve bu tek başına değerli bir sinyaldir.

    Prometheus verileri zaman serisi (time series) olarak saklar. Her metrik bir isimden ve etiketlerden (label) oluşur. Örneğin node_filesystem_avail_bytes{mountpoint="/", instance="web01:9100"} metriği, web01 sunucusunda kök dizinde kalan boş baytı temsil eder. Etiketler sayesinde aynı metriği farklı sunucular, disk bölümleri veya servisler için ayrı ayrı sorgulayabilirsiniz.

    Metrikleri sorgulamak için PromQL adlı özel bir dil kullanılır. Birkaç metrik türünü bilmek işinizi kolaylaştırır:

    Metrik türüAçıklamaÖrnek
    CounterSadece artan sayaç (yeniden başlayınca sıfırlanır)Toplam istek sayısı
    GaugeAnlık değer, artıp azalabilirBoş bellek, CPU sıcaklığı
    HistogramDeğerleri kovalara bölerek dağılımİstek süreleri
    Summaryİstemci tarafında hesaplanan yüzdeliklerYanıt süresi p95

    Mimarinin bileşenleri şöyle sıralanır: metrik üreten exporter'lar (node_exporter gibi), veriyi toplayıp saklayan Prometheus sunucusu, uyarıları yöneten Alertmanager ve görselleştirmeyi yapan Grafana. Şimdi bunları tek tek kuralım.

    node_exporter Kurulumu#

    Prometheus'un bir Linux sunucusunun CPU, bellek, disk ve ağ metriklerini görmesi için o sunucuda node_exporter çalışması gerekir. Bu küçük Go programı, 9100 portunda bir /metrics uç noktası açar ve sistem istatistiklerini Prometheus'un anlayacağı biçimde yayınlar. Önce en güncel sürümü indirip yerine koyalım.

    # node_exporter indir ve kur
    cd /tmp
    VER="1.8.2"
    wget https://github.com/prometheus/node_exporter/releases/download/v${VER}/node_exporter-${VER}.linux-amd64.tar.gz
    tar xzf node_exporter-${VER}.linux-amd64.tar.gz
    sudo cp node_exporter-${VER}.linux-amd64/node_exporter /usr/local/bin/
    sudo useradd --no-create-home --shell /usr/sbin/nologin node_exporter
    sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
    

    Programı kalıcı bir servis hâline getirmek için bir systemd unit dosyası yazıyoruz. Böylece sunucu yeniden başladığında node_exporter otomatik ayağa kalkar ve çökerse tekrar başlar.

    # /etc/systemd/system/node_exporter.service
    [Unit]
    Description=Prometheus Node Exporter
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    User=node_exporter
    Group=node_exporter
    Type=simple
    ExecStart=/usr/local/bin/node_exporter --collector.systemd
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    

    Servisi etkinleştirip başlatalım ve çalıştığını doğrulayalım.

    sudo systemctl daemon-reload
    sudo systemctl enable --now node_exporter
    # Metriklerin geldiğini test et
    curl -s http://localhost:9100/metrics | head -20
    

    curl çıktısında node_cpu_seconds_total, node_memory_MemAvailable_bytes gibi satırlar görüyorsanız exporter çalışıyor demektir. Güvenlik açısından 9100 portunu yalnızca Prometheus sunucusunun IP'sine açık tutmanızı, dışarıya kapatmanızı öneririz. Bir güvenlik duvarı katmanı eklemek isterseniz WAF ve DDoS koruma çözümlerimiz sunucu yüzeyinizi daraltmaya yardımcı olur.

    prometheus.yml ile Scrape Yapılandırması#

    Prometheus'un hangi hedefleri, hangi sıklıkla tarayacağını prometheus.yml dosyası belirler. Bu YAML dosyasının kalbi scrape_configs bölümüdür; her job bir hedef grubunu temsil eder. Aşağıdaki örnek hem Prometheus'un kendisini hem de iki node_exporter'ı tarar.

    # prometheus.yml
    global:
      scrape_interval: 15s
      evaluation_interval: 15s
    
    alerting:
      alertmanagers:
        - static_configs:
            - targets: ["alertmanager:9093"]
    
    rule_files:
      - "alert.rules.yml"
    
    scrape_configs:
      - job_name: "prometheus"
        static_configs:
          - targets: ["localhost:9090"]
    
      - job_name: "node"
        static_configs:
          - targets:
              - "web01:9100"
              - "db01:9100"
            labels:
              env: "production"
    

    scrape_interval değeri 15 saniye, yani Prometheus her hedeften on beş saniyede bir veri çeker. Çok sık tarama disk kullanımını artırır; çoğu senaryoda 15-30 saniye idealdir. Yapılandırmayı değiştirdikten sonra dosyayı diske kaydetmek yetmez, Prometheus'a yeniden okumasını söylemeniz gerekir.

    # Yapılandırmayı doğrula
    promtool check config prometheus.yml
    # Prometheus'a config'i yeniden yükle (yeniden başlatmadan)
    curl -X POST http://localhost:9090/-/reload
    

    Hedeflerin durumunu görmek için tarayıcıdan http://SUNUCU_IP:9090/targets adresine gidin. Her hedefin yanında yeşil bir UP etiketi görmelisiniz. Kırmızı DOWN görüyorsanız genellikle güvenlik duvarı 9100 portunu engelliyor ya da hostname çözülmüyordur.

    PromQL ile İlk Sorgular#

    Prometheus'un web arayüzündeki (:9090/graph) sorgu kutusu, verinizle konuşmanın en hızlı yoludur. Grafana panolarını kurmadan önce burada birkaç sorgu deneyerek metriklerin mantığını kavramak çok işe yarar. Örneğin bir sunucunun anlık boş bellek oranını yüzde olarak hesaplayalım.

    -- Boş bellek yüzdesi
    100 * node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes
    
    -- Son 5 dakikadaki ortalama CPU kullanımı (yüzde)
    100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
    
    -- Kök dizinde kalan boş disk yüzdesi
    100 * node_filesystem_avail_bytes{mountpoint="/"} 
      / node_filesystem_size_bytes{mountpoint="/"}
    

    CPU örneğindeki rate(...[5m]) ifadesi, sürekli artan bir counter'ın son beş dakikadaki saniyelik artış hızını verir; counter'lar için neredeyse her zaman rate veya irate kullanırsınız. avg by(instance) ise çok çekirdekli bir makinede tüm çekirdeklerin ortalamasını alarak instance başına tek bir değer üretir. Bu üç sorgu, birazdan kuracağımız uyarıların da temelini oluşturacak.

    Grafana Kurulumu ve Veri Kaynağı Bağlama#

    Prometheus verinizi tutar ama görselleştirmede zayıftır; işte Grafana tam da bu boşluğu doldurur. Kurulumu APT deposu üzerinden yapmak en temiz yöntemdir çünkü güncellemeleri paket yöneticinizden alırsınız.

    # Grafana APT deposunu ekle ve kur (Debian/Ubuntu)
    sudo apt-get install -y apt-transport-https software-properties-common
    wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg
    echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
      | sudo tee /etc/apt/sources.list.d/grafana.list
    sudo apt-get update && sudo apt-get install -y grafana
    sudo systemctl enable --now grafana-server
    

    Grafana varsayılan olarak 3000 portunda çalışır. Tarayıcıdan http://SUNUCU_IP:3000 adresine gidin; ilk giriş kullanıcı adı ve parolası admin / admin olup sizden hemen yeni bir parola belirlemenizi isteyecektir. Bu adımı atlamayın, çünkü açık kalan Grafana panoları altyapınız hakkında bilgi sızdırabilir.

    Giriş yaptıktan sonra sol menüden Connections → Data sources → Add data source → Prometheus yolunu izleyin. Tek yapmanız gereken Prometheus'un adresini yazmaktır:

    # Grafana içindeki Prometheus veri kaynağı ayarı
    URL: http://localhost:9090   # Prometheus aynı makinedeyse
    # Farklı sunucudaysa: http://PROMETHEUS_IP:9090
    

    Sayfanın altındaki Save & test düğmesine bastığınızda "Data source is working" mesajını görmelisiniz. Artık Grafana, Prometheus'a PromQL sorguları gönderebilir. Üretim ortamında Grafana'yı bir alan adı ve SSL sertifikası arkasına almanızı, 3000 portunu doğrudan internete açmak yerine bir ters proxy üzerinden yayınlamanızı tavsiye ederiz.

    Hazır Dashboard İçe Aktarma#

    Sıfırdan pano tasarlamak keyifli olsa da topluluk zaten mükemmel panolar hazırlamış durumda. node_exporter için en popüler pano, Grafana Labs kütüphanesindeki 1860 numaralı "Node Exporter Full" panosudur. Onu içe aktarmak birkaç saniye sürer.

    Grafana'da sol menüden Dashboards → New → Import yolunu izleyin, açılan kutuya 1860 yazıp Load deyin. Ardından veri kaynağı olarak az önce eklediğiniz Prometheus'u seçip Import düğmesine basın. Karşınıza CPU, bellek, disk, ağ ve dosya sistemi grafiklerinin bulunduğu zengin bir pano gelecek.

    # Sık kullanılan hazır dashboard ID'leri
    1860   # Node Exporter Full (sunucu metrikleri)
    7362   # MySQL Overview (mysqld_exporter ile)
    9628   # PostgreSQL (postgres_exporter ile)
    193    # Docker & container metrikleri (cAdvisor ile)
    

    Panonun üst kısmındaki değişken menüsünden (instance, job) hangi sunucuya bakacağınızı seçebilirsiniz. Böylece tek panoyla onlarca sunucuyu izlemek mümkün olur. Kendi grafiklerinizi eklemek isterseniz her panelin sorgu kutusuna bir önceki bölümdeki PromQL ifadelerini yapıştırmanız yeterli. Container tarafını da izlemek istiyorsanız cAdvisor exporter'ını ekleyip 193 numaralı panoyu içe aktarabilirsiniz; konteyner temelleri için Docker nedir rehberimize göz atın.

    Alertmanager ile Uyarı Kurma#

    Panolar güzel ama kimse ekrana 7/24 bakamaz; asıl değer, bir eşik aşıldığında sizi uyandıran uyarılardır. Prometheus uyarı kurallarını değerlendirir, tetiklenen uyarıları ise Alertmanager'a gönderir; Alertmanager da onları e-posta, Slack veya webhook olarak size iletir. Önce kuralları tanımlayalım.

    # alert.rules.yml
    groups:
      - name: sunucu-uyarilari
        rules:
          - alert: YuksekCpuKullanimi
            expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
            for: 10m
            labels:
              severity: warning
            annotations:
              summary: "{{ $labels.instance }} sunucusunda CPU %85 üzerinde"
    
          - alert: DiskDoluyor
            expr: 100 * node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} < 10
            for: 5m
            labels:
              severity: critical
            annotations:
              summary: "{{ $labels.instance }} kök diskinde %10'dan az yer kaldı"
    
          - alert: SunucuYanitVermiyor
            expr: up{job="node"} == 0
            for: 2m
            labels:
              severity: critical
            annotations:
              summary: "{{ $labels.instance }} node_exporter'a ulaşılamıyor"
    

    Buradaki for: 10m ifadesi önemlidir; koşulun tetiklenmesi için eşiğin on dakika boyunca kesintisiz aşılmasını bekler, böylece anlık dalgalanmalar gereksiz alarm üretmez. Şimdi Alertmanager'a bu uyarıları nasıl e-postaya çevireceğini anlatalım.

    # alertmanager.yml
    route:
      receiver: "eposta-ekip"
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 4h
    
    receivers:
      - name: "eposta-ekip"
        email_configs:
          - to: "[email protected]"
            from: "[email protected]"
            smarthost: "smtp.ornek-sirket.com:587"
            auth_username: "[email protected]"
            auth_password: "SMTP_PAROLASI"
            require_tls: true
    

    Kural dosyasını promtool check rules alert.rules.yml ile doğruladıktan sonra Prometheus'u yeniden yükleyin. Test etmek için bir sunucuda disk kullanımını yapay olarak yükseltebilir ya da node_exporter'ı durdurup SunucuYanitVermiyor uyarısının birkaç dakika içinde e-posta olarak gelmesini izleyebilirsiniz. Kendi altyapınızın yanında müşteri hizmetlerini de izlemek isterseniz, Clou.TR panelindeki dahili uptime uyarı sistemi hosting ve sunucularınız için hazır bir alternatif sunar.

    Docker Compose ile Toplu Kurulum#

    Her bileşeni ayrı ayrı kurmak öğreticidir ama üretimde tüm yığını tek komutla ayağa kaldırmak istersiniz. Docker Compose tam olarak bunu sağlar; Prometheus, Alertmanager, Grafana ve node_exporter'ı tek dosyada tanımlar, docker compose up ile hepsini başlatırsınız. Aşağıdaki yapılandırma başlangıç için sağlam bir temeldir.

    # docker-compose.yml
    services:
      prometheus:
        image: prom/prometheus:latest
        volumes:
          - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
          - ./alert.rules.yml:/etc/prometheus/alert.rules.yml:ro
          - prom_data:/prometheus
        ports:
          - "9090:9090"
        restart: unless-stopped
    
      node_exporter:
        image: prom/node-exporter:latest
        pid: host
        volumes:
          - /:/host:ro,rslave
        command:
          - "--path.rootfs=/host"
        ports:
          - "9100:9100"
        restart: unless-stopped
    
      alertmanager:
        image: prom/alertmanager:latest
        volumes:
          - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
        ports:
          - "9093:9093"
        restart: unless-stopped
    
      grafana:
        image: grafana/grafana:latest
        environment:
          - GF_SECURITY_ADMIN_PASSWORD=guclu-bir-parola
        volumes:
          - grafana_data:/var/lib/grafana
        ports:
          - "3000:3000"
        restart: unless-stopped
    
    volumes:
      prom_data:
      grafana_data:
    

    Bu dosyayı prometheus.yml, alert.rules.yml ve alertmanager.yml ile aynı klasöre koyup aşağıdaki komutları çalıştırmanız yeterli.

    docker compose up -d          # tüm yığını arka planda başlat
    docker compose ps             # servislerin durumu
    docker compose logs -f prometheus   # Prometheus loglarını izle
    

    prom_data ve grafana_data adlı volume'ler sayesinde konteynerleri silseniz bile metrik geçmişiniz ve Grafana panolarınız korunur. Bu izleme yığınının kendisini de sağlam bir sunucuda barındırmak gerekir; kaynak ihtiyacı büyüdükçe VDS sunucu veya sanal sunucu seçeneklerimiz yönetim kolaylığı ve garantili kaynak sunar. Kurulumu kendiniz üstlenmek istemiyorsanız sunucu yönetimi hizmetimizle izleme dâhil tüm bakımı ekibimize devredebilirsiniz.

    Yaygın Sorunlar ve İpuçları#

    En sık karşılaşılan sorun, 9090/targets sayfasında hedeflerin DOWN görünmesidir. Neredeyse her zaman sebep güvenlik duvarıdır: Prometheus sunucusunun node_exporter'ın 9100 portuna erişebildiğinden emin olun. İkinci sık hata, disk metriklerinin Compose kurulumunda görünmemesidir; node_exporter'a --path.rootfs=/host bayrağını ve host kök dizinini salt-okunur bağlamayı unutmayın.

    Zaman serisi verisi zamanla büyür. Varsayılan saklama süresi 15 gündür; bunu Prometheus'a --storage.tsdb.retention.time=30d bayrağıyla uzatabilirsiniz ama uzun süre saklamanın disk maliyeti olduğunu unutmayın. Uzun vadeli arşiv gerekiyorsa Thanos veya VictoriaMetrics gibi çözümlere bakabilirsiniz. Son olarak, izleme sunucunuzu düzenli yedeklemeyi ihmal etmeyin; Grafana panolarını JSON olarak dışa aktarıp bir kod deposunda tutmak, sunucu değişiminde saatlerce zaman kazandırır. Otomatik yedekleme çözümlerimiz bu veriyi güvence altına almanıza yardımcı olur.

    Sıkça Sorulan Sorular#

    Prometheus ve Grafana aynı sunucuda mı çalışmalı?#

    Küçük ve orta ölçekli kurulumlarda Prometheus, Grafana ve Alertmanager'ın hepsini tek bir sunucuda çalıştırmak tamamen normaldir ve kaynakları verimli kullanır. İzlediğiniz hedef sayısı yüzlerce sunucuya çıktığında ya da uzun metrik geçmişi tuttuğunuzda Prometheus'un disk ve bellek ihtiyacı artar; bu noktada onu ayrı bir makineye taşıyıp Grafana'yı daha hafif bir sunucuda tutmak mantıklı olur. Başlangıçta tek sunucuyla ilerleyip ihtiyaç doğdukça bölmenizi öneririz.

    node_exporter güvenli mi, portu internete açmalı mıyım?#

    node_exporter'ın yayınladığı /metrics uç noktası sunucunuzun donanım ve sistem bilgilerini içerir, dolayısıyla bu bilginin herkese açık olması istenmez. 9100 portunu asla doğrudan internete açmayın; yalnızca Prometheus sunucusunun IP adresine izin veren bir güvenlik duvarı kuralı yazın. Alternatif olarak node_exporter'ı bir özel ağ (VPN veya iç ağ) üzerinden yayınlayabilir ya da TLS ve temel kimlik doğrulamayı bir ters proxy ile ekleyebilirsiniz.

    Prometheus verileri ne kadar süre saklar ve disk maliyeti nedir?#

    Prometheus varsayılan olarak metrikleri 15 gün saklar ve bu süre --storage.tsdb.retention.time bayrağıyla değiştirilebilir. Disk kullanımı, izlediğiniz zaman serisi sayısına ve scrape aralığına bağlıdır; tipik bir node_exporter kurulumu sunucu başına günde birkaç yüz megabayt üretir. On sunucuyu 30 gün saklamak genellikle 10-20 GB civarında yer tutar. Daha uzun arşiv gerekiyorsa saklama süresini artırmak yerine Thanos gibi bir uzun vadeli depolama katmanı eklemek daha ölçeklenebilir bir çözümdür.

    Uyarı e-postaları gelmiyor, nereden başlamalıyım?#

    İlk olarak Prometheus arayüzündeki Alerts sekmesinde uyarının gerçekten firing durumunda olup olmadığına bakın; kural tetiklenmiyorsa sorun eşiktedir. Kural tetikleniyor ama e-posta gelmiyorsa sorun büyük olasılıkla Alertmanager'ın SMTP yapılandırmasındadır. docker compose logs alertmanager çıktısında kimlik doğrulama veya bağlantı hatası olup olmadığını kontrol edin, smarthost adresini ve port numarasını doğrulayın. Birçok sağlayıcı 587 portu ve STARTTLS gerektirir, bu yüzden require_tls: true ayarını unutmayın.

    PromQL öğrenmeden Grafana panolarını kullanabilir miyim?#

    Evet, hazır panoları içe aktararak PromQL yazmadan zengin grafiklere sahip olabilirsiniz; 1860 numaralı Node Exporter Full panosu bunun en iyi örneğidir. Ancak kendi özel metriklerinizi görselleştirmek, uyarı eşikleri belirlemek veya belirli bir soruya (örneğin son bir saatteki 5xx hata oranı) yanıt aramak istediğinizde temel PromQL bilgisi gerekir. rate, sum by ve avg by gibi birkaç fonksiyonu öğrenmek çoğu günlük ihtiyacı karşılar; bu rehberdeki örnekler iyi bir başlangıç noktasıdır.

    Bu izleme yığınını konteyner olarak mı yoksa doğrudan mı kurmalıyım?#

    İkisi de geçerli bir seçimdir ve tercihiniz mevcut altyapınıza bağlıdır. Docker'a aşinaysanız Compose yöntemi kurulumu ve güncellemeleri büyük ölçüde basitleştirir; tüm yapılandırma tek dosyada durur ve taşınması kolaydır. Öte yandan konteyner kullanmak istemiyorsanız veya kaynak kısıtınız varsa bileşenleri systemd servisleri olarak doğrudan kurmak da sağlamdır ve daha az katman içerir. Yeni başlayanlara, hızlı ve tekrarlanabilir olduğu için Docker Compose yaklaşımını öneririz.

    Kapanış#

    Prometheus ve Grafana ile kurduğunuz bu yığın, sunuculardaki sorunları müşteriniz fark etmeden önce görmenizi sağlar. node_exporter metrikleri yayınlar, Prometheus onları toplayıp saklar, Grafana anlaşılır panolara çevirir ve Alertmanager bir eşik aşıldığında sizi uyarır. Docker Compose örneğiyle tüm bunları dakikalar içinde ayağa kaldırabilir, systemd unit dosyalarıyla üretime hazır hâle getirebilirsiniz. En önemlisi, izleme bir kere kurup unutacağınız bir şey değildir; yeni servisler ekledikçe scrape hedeflerinizi ve uyarı kurallarınızı güncel tutun.

    Bu izleme altyapısını çalıştıracak güçlü ve garantili kaynaklara ihtiyacınız varsa Clou.TR olarak yanınızdayız. Yüksek performanslı VDS ve sanal sunucu paketlerimizle Prometheus yığınınızı rahatça barındırabilir, kurulum ve bakımı bize bırakmak isterseniz sunucu yönetimi hizmetimizden faydalanabilirsiniz. Web projeleriniz için hosting ve WordPress hosting çözümlerimize, uygulama kurulumları için ise App Center katalogumuza göz atabilirsiniz.

    PrometheusGrafanaİzleme

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.