İçeriğe geç
NetDevOps
10 dk okuma DevOps

Prometheus ve Grafana: Sunucu İzleme Rehberi

Modern sistem yönetiminde sürekli izleme, altyapının sağlığını korumak ve olası sorunları erken tespit etmek için kritik bir bileşendir. Geleneksel komut satırı araçları anlık bilgi sağlasa da, geçmişe dönük analiz ve trend takibi için kalıcı bir izleme çözümü şartdır. Bu makalede, açık kaynak dünyasının en popüler izleme araçları olan Prometheus ve Grafana'nın kurulumunu, yapılandırmasını ve pratik kullanımını detaylı olarak inceleyeceğiz. Prometheus, metrik toplama ve zaman serisi veritabanı olarak görev yaparken, Grafana bu verileri görselleştiren güçlü bir dashboard arayüzü sunar. Birlikte kullanıldığında, sistem yöneticilerine gerçek zamanlı performans görünürlüğü, proaktif uyarı sistemleri ve detaylı analiz imkanı sağlarlar.

Prometheus ve Grafana Nedir?

Prometheus, Cloud Native Computing Foundation (CNCF) tarafından desteklenen açık kaynaklı bir izleme ve uyarı sistemidir. İlk olarak SoundCloud tarafından geliştirilen Prometheus, Pull modeli ile metrik toplar ve bu metrikleri zaman serisi veritabanında depolar. Bu yaklaşım, ölçeklenebilirlik ve basitlik açısından büyük avantaj sağlar. Prometheus'un temel özellikleri arasında çok boyutlu veri modeli, PromQL adlı güçlü sorgu dili, zamanında karşılaştırma ve dinamik hizmet keşfi bulunur. Yüzlerce dahili ve üçüncü parti exporterse, Prometheus'un kapsamını genişleterek Docker, Kubernetes, Nginx, MySQL ve daha birçok sistemden metrik toplamasına olanak tanır.

Grafana ise açık kaynaklı bir veri görselleştirme ve izleme platformudur. Prometheus dahil olmak üzere birçok veri kaynağına bağlanabilir ve bu verileri etkileşimli dashboard'lar halinde sunar. Grafana'nın güçlü panel sistemi, farklı görselleştirme türlerini (grafik, tablo, gauge, heatmap vb.) tek bir arayüzde birleştirir. Kullanıcı dostu sürükle-bırak arayüzü sayesinde, teknik olmayan kullanıcılar bile profesyonel dashboard'lar oluşturabilir. Ayrıca Grafana, uyarı bildirimlerini e-posta, Slack, Telegram, PagerDuty gibi çeşitli kanallar üzerinden gönderme yeteneğine sahiptir.

Bu iki aracın birlikte kullanılması, tam teşekküllü bir izleme altyapısı oluşturur. Prometheus metrikleri toplar ve depolar, Grafana ise bu verileri anlaşılır görsellere dönüştürür. Alertmanager entegrasyonu sayesinde, eşik değerleri aşıldığında otomatik uyarılar oluşturulabilir ve sistem yöneticileri sorunlardan haberdar edilir.

node_exporter Kurulumu

Her sunucuyu izlemek için o sunucuda bir exporter çalışması gerekir. node_exporter, Linux sistemlerden temel donanım ve işletim sistemi metriklerini toplayan en yaygın kullanılan exporter'dır. CPU kullanımı, bellek durumu, disk I/O, ağ trafiği ve dosya sistemi metrikleri gibi kritik verileri Prometheus'un anlayabileceği formatta sunar. Bu bölümde, node_exporter'ın güvenli ve doğru kurulum adımlarını detaylı olarak açıklayacağız.

Öncelikle node_exporter için ayrı bir sistem kullanıcısı oluşturmanızı öneriyorum. Bu sayede, olası bir güvenlik açığı durumunda saldırganın sistem üzerindeki erişimi sınırlı kalır. Aşağıdaki komutlarla kullanıcıyı oluşturabilirsiniz:

useradd --no-create-home --shell /usr/sbin/nologin node_exporter

Ardından, Prometheus'un resmi GitHub sayfasından en güncel sürümü indirin. Kurulum sırasında her zaman en son kararlı sürümü kullanmanızı öneririm çünkü her sürümde performans iyileştirmeleri ve güvenlik düzeltmeleri bulunur. İndirme işlemini /tmp klasöründe yapıp, ardından dosyaları uygun konumlara taşıyacağız:

cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/latest/download/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
chown node_exporter:node_exporter /usr/local/bin/node_exporter

Systemd servisi oluşturmak, node_exporter'ın sistem başlangıcında otomatik çalışmasını ve yönetilmesini kolaylaştırır. /etc/systemd/system/ dizinine node_exporter.service dosyasını oluşturun:

[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

Servisi etkinleştirip başlatmak için systemd'yi yeniden yükleyin ve servisi çalıştırın:

systemctl daemon-reload
systemctl enable --now node_exporter

Kurulumun başarılı olup olmadığını kontrol etmek için, node_exporter'ın metrik endpoint'ini sorgulayabilirsiniz:

curl http://localhost:9100/metrics | head -20

Bu komut, Prometheus'un anlayabileceği metrik formatında çıktı üretmelidir. Son olarak, güvenlik duvarı yapılandırmasında node_exporter portunu (9100) sadece Prometheus sunucusuna açık bırakın. Diğer tüm IP'lerden gelen istekleri engellemek, izleme altyapınızın güvenliğini artırır.

Prometheus Kurulumu ve Yapılandırması

Prometheus, izleme altyapısının merkezi bileşenidir. Tüm exporter'lardan metrikleri düzenli aralıklarla çeker, depolar ve sorgulanabilir hale getirir. Bu bölümde, Prometheus'un kurulumunu ve temel yapılandırmasını adım adım ele alacağız. Prometheus'u izleme sunucusu olarak kullanacağınız makineye kurmalısınız. Bu makine, tüm izlenen sunucuların metriklerini toplayacak ve Grafana'ya veri sağlayacaktır.

Prometheus için ayrı bir kullanıcı ve dizin yapısı oluşturun:

useradd --no-create-home --shell /usr/sbin/nologin prometheus
mkdir /etc/prometheus /var/lib/prometheus

En güncel Prometheus sürümünü indirin ve kurulum dosyalarını uygun konumlara kopyalayın:

cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/latest/download/prometheus-2.53.0.linux-amd64.tar.gz
tar xvf prometheus-2.53.0.linux-amd64.tar.gz
cp prometheus-2.53.0.linux-amd64/{prometheus,promtool} /usr/local/bin/
cp -r prometheus-2.53.0.linux-amd64/{consoles,console_libraries} /etc/prometheus/

Prometheus'un yapılandırma dosyası, hangi exporter'lardan veri çekeceğini belirler. /etc/prometheus/prometheus.yml dosyasını oluşturarak izlenecek hedefleri tanımlayın:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
          - '10.10.10.5:9100'
          - '10.10.10.11:9100'
          - '10.10.10.12:9100'

Bu yapılandırmada, Prometheus her 15 saniyede bir tanımlı IP adreslerindeki node_exporter'lardan metrik çeker. static_configs bölümünde izlenecek sunucuların IP adreslerini ve portlarını belirtirsiniz. Daha büyük ortamlarda, dinamik hizmet keşfi (service discovery) özelliğini kullanarak bu listeyi otomatik olarak güncelleyebilirsiniz.

Son olarak, dizin izinlerini ayarlayın ve Prometheus'u sistem servisi olarak çalıştırın:

chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
systemctl enable --now prometheus

Prometheus kurulduktan sonra, web arayüzüne http://prometheus-ip:9090 adresinden erişebilirsiniz. Bu arayüz üzerinden PromQL sorguları çalıştırarak anlık metrikleri sorgulayabilir ve grafikler oluşturabilirsiniz.

Grafana Kurulumu ve Dashboard Yapılandırması

Grafana, Prometheus'tan toplanan verileri görselleştiren son derece güçlü bir platformdur. Kurumsal düzeyde dashboard özellikleri, şablon sistemi ve uyarı entegrasyonları ile tam bir izleme çözümü sunar. Bu bölümde, Grafana'nın Ubuntu/Debian sistemlerde kurulumunu ve temel yapılandırmasını inceleyeceğiz.

Grafana'yı kurmak için önce gerekli paketleri yükleyin ve Grafana'nın resmi deposunu ekleyin:

sudo apt install -y apt-transport-https software-properties-common
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install grafana -y

Kurulum tamamlandıktan sonra Grafana servisini başlatın:

sudo systemctl enable --now grafana-server

Grafana'ya http://sunucu-ip:3000 adresinden erişebilirsiniz. İlk girişte varsayılan kullanıcı adı ve şifre "admin" dir. Güvenlik nedeniyle, ilk girişinizde şifreyi değiştirmenizi öneririm.

Grafana'yı Prometheus'a bağlamak için önce bir Data Source eklemeniz gerekir. Sol menüden "Settings" sekmesine tıklayın, ardından "Data Sources" seçeneğini seçin. "Add data source" butonuna tıklayın ve Prometheus'u seçin. Prometheus URL'sini girin; eğer Prometheus aynı makine üzerindeyse http://localhost:9090, farklı bir makineyse Prometheus sunucusunun IP adresini kullanın. "Save & Test" butonuna tıklayarak bağlantıyı doğrulayın.

Grafana'nın en güçlü özelliklerinden biri, hazır dashboard şablonlarını import edebilmektir. Node Exporter için en popüler şablon, ID 1860 olan "Node Exporter Full" dashboard'udur. Dashboards menüsünden "Import" seçeneğini seçin ve bu ID'yi girin. Data source olarak Prometheus'u seçtiğinizde, tüm sunucularınızın CPU, bellek, disk, ağ ve diğer metriklerini gösteren kapsamlı bir dashboard oluşacaktır.

Uyarı Sistemi ve Alertmanager

Proaktif izleme, sorunları oluştukları anda tespit etmek ve müdahale etmek anlamına gelir. Prometheus Alertmanager, belirli koşullar gerçekleştiğinde (örneğin disk doluluğu %90'ı aştığında) otomatik uyarılar oluşturur ve bu uyarıları e-posta, Slack, Telegram gibi kanallar üzerinden iletir. Bu bölümde, temel alarm kurallarının nasıl oluşturulacağını inceleyeceğiz.

Öncelikle alarm kurallarını tanımlayan bir dosya oluşturun. /etc/prometheus/rules/alert.rules.yml dosyasını oluşturun:

groups:
  - name: disk-alerts
    rules:
      - alert: DiskDoluyor
        expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100  10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Disk kullanımı %90'ı geçti: {{ $labels.instance }}"

Bu kural, disk kullanımının %90'ı aşması durumunda 5 dakika boyunca bu durum sürdüğünde "DiskDoluyor" uyarısı tetikler. Etiketler bölümünde uyarının kritik seviyede olduğunu belirtiriz. annotations bölümünde ise uyarı mesajının içeriğini özelleştiririz; {{ $labels.instance }} değişkeni, hangi sunucuda sorun olduğunu otomatik olarak ekler.

Alertmanager yapılandırması, uyarıların hangi kanallar üzerinden gönderileceğini belirler. E-posta, Slack, Telegram, PagerDuty ve daha birçok entegrasyon desteklenir. Telegram için bot token ve chat ID tanımlamanız gerekir.

Sonuç ve Öneriler

Prometheus ve Grafana, modern sunucu izleme altyapısının temel taşlarıdır. Bu makalede, node_exporter'dan metrik toplamayı, Prometheus ile merkezi depolamayı ve Grafana ile görselleştirmeyi detaylı olarak ele aldık. Doğru yapılandırıldığında, bu araçlar sistem yöneticilerine kritik sorunları erken tespit etme, kapasite planlaması yapma ve performans optimizasyonu gerçekleştirme imkanı sunar.

Kurulum sırasında dikkat edilmesi gereken önemli noktalardan biri güvenliktir. Prometheus (9090), node_exporter (9100) ve Grafana (3000) portlarını sadece güvenilir ağlara veya VPN üzerinden erişilebilir bırakın. İnternete açık bırakılan izleme arayüzleri, potansiyel bir güvenlik riski oluşturur. Wireguard VPN gibi güvenli bir erişim mekanizması kullanmanızı öneriyorum.

Başlangıçta hazır dashboard'lar ile başlayabilir, zamanla kendi özel dashboard'larınızı oluşturabilirsiniz. Önemli metrikleri belirleyin, normal davranışı anlayın ve anormal durumlar için uyarılar tanımlayın. İyi yapılandırılmış bir izleme sistemi, sadece sorunları tespit etmekle kalmaz, aynı zamanda altyapınızın sağlığı hakkında değerli içgörüler sağlar.