Netdata ile Grafana Entegrasyonu: Gelişmiş İzleme Panelleri Oluşturun

Sunucu izleme dünyasında Netdata tek başına zaten oldukça güçlü bir araç. Gerçek zamanlı metrikler, düşük kaynak tüketimi ve sıfır konfigürasyonla çalışabilme özelliği onu popüler yapıyor. Ancak uzun vadeli veri saklama, özelleştirilmiş dashboard’lar ve birden fazla sunucuyu tek ekrandan yönetme söz konusu olduğunda Grafana devreye giriyor. Bu ikiliyi bir araya getirdiğinizde gerçekten profesyonel bir izleme altyapısı elde ediyorsunuz.

Bu yazıda Netdata’yı Grafana ile nasıl entegre edeceğinizi, Prometheus exporter üzerinden metrikleri nasıl aktaracağınızı ve anlamlı dashboard’lar nasıl oluşturacağınızı adım adım anlatacağım. Yazıyı takip ederek 3-4 sunucunuzu merkezi bir noktadan izler hale gelebilirsiniz.

Mimariyi Anlamak

Önce büyük resme bakalım. Bu entegrasyonda üç katman var:

  • Netdata: Her sunucuda çalışan, anlık metrikleri toplayan agent
  • Prometheus: Netdata’dan metrikleri çekip saklayan time-series veritabanı
  • Grafana: Prometheus’taki verileri görselleştiren dashboard aracı

Netdata doğrudan Grafana’ya veri göndermiyor. Araya Prometheus giriyor çünkü Grafana’nın Netdata için native bir desteği yok, ama Prometheus datasource’u mükemmel çalışıyor. Netdata ise /api/v1/allmetrics?format=prometheus endpoint’i üzerinden tüm metriklerini Prometheus formatında sunuyor.

Alternatif olarak Netdata’nın kendi Prometheus exporter’ını da kullanabilirsiniz, ama built-in endpoint çoğu senaryo için yeterli.

Netdata Kurulumu

Eğer Netdata henüz kurulu değilse, hızlı kurulum şöyle:

# Tek satır kurulum scripti
wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry

# Servis durumunu kontrol et
systemctl status netdata

# Dinlediği portu doğrula
ss -tlnp | grep 19999

Netdata varsayılan olarak localhost:19999 adresinde çalışır. Güvenlik açısından bu portu dışarıya açmamak genellikle iyi bir pratik. Prometheus sunucunuzun bu porta erişmesi yeterli, Grafana doğrudan Netdata’ya bağlanmıyor zaten.

Netdata Konfigürasyonu

Prometheus scraping için Netdata’nın özel bir konfigürasyon gerektirmediğini söyledim ama bazı ayarları optimize etmek faydalı:

# Netdata konfigürasyon dosyasını düzenle
nano /etc/netdata/netdata.conf
[global]
    # Bellek modu - dbengine disk üzerinde saklar
    memory mode = dbengine
    
    # Disk üzerinde saklanacak veri miktarı (MB)
    dbengine multihost disk space = 1024
    
    # Update interval (saniye)
    update every = 1

[web]
    # Sadece localhost'tan erişime izin ver
    bind to = localhost
    
    # Prometheus endpoint için compression
    enable gzip compression = yes

Değişiklikleri uygulamak için:

systemctl restart netdata

# Prometheus endpoint'ini test et
curl -s "http://localhost:19999/api/v1/allmetrics?format=prometheus" | head -50

Bu komutun çıktısında onlarca metrik görmeniz gerekiyor. netdata_system_cpu_percentage_average gibi metrik adları göreceksiniz.

Prometheus Kurulumu ve Konfigürasyonu

Prometheus’u izleme sunucunuza kuruyorsunuz. Bu sunucu hem Netdata agent’lardan veri çekecek hem de Grafana’ya veri sunacak.

# Prometheus kullanıcısı oluştur
useradd --no-create-home --shell /bin/false prometheus

# Dizinleri hazırla
mkdir -p /etc/prometheus /var/lib/prometheus
chown prometheus:prometheus /var/lib/prometheus

# Güncel versiyonu indir (versiyon numarasını güncelleyin)
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz

# Binary'leri kopyala
cp prometheus-2.48.0.linux-amd64/prometheus /usr/local/bin/
cp prometheus-2.48.0.linux-amd64/promtool /usr/local/bin/
chown prometheus:prometheus /usr/local/bin/prometheus
chown prometheus:prometheus /usr/local/bin/promtool

Şimdi Prometheus konfigürasyon dosyasını oluşturalım. Burada birden fazla Netdata sunucusunu tanımlayacağız:

cat > /etc/prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 10s
  evaluation_interval: 10s
  scrape_timeout: 5s

scrape_configs:
  - job_name: 'netdata-web01'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: ['prometheus']
    honor_labels: true
    static_configs:
      - targets: ['web01.example.com:19999']
        labels:
          instance: 'web01'
          environment: 'production'

  - job_name: 'netdata-db01'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: ['prometheus']
    honor_labels: true
    static_configs:
      - targets: ['db01.example.com:19999']
        labels:
          instance: 'db01'
          environment: 'production'

  - job_name: 'netdata-staging'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: ['prometheus']
    honor_labels: true
    static_configs:
      - targets: ['staging.example.com:19999']
        labels:
          instance: 'staging01'
          environment: 'staging'
EOF

chown prometheus:prometheus /etc/prometheus/prometheus.yml

Prometheus için systemd servis dosyası:

cat > /etc/systemd/system/prometheus.service << 'EOF'
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus 
    --config.file /etc/prometheus/prometheus.yml 
    --storage.tsdb.path /var/lib/prometheus/ 
    --storage.tsdb.retention.time=30d 
    --web.console.templates=/etc/prometheus/consoles 
    --web.console.libraries=/etc/prometheus/console_libraries 
    --web.listen-address=0.0.0.0:9090 
    --web.enable-lifecycle

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus

--storage.tsdb.retention.time=30d parametresi önemli. Netdata’nın varsayılan disk üzerinde saklama süresi sınırlı olduğundan, Prometheus’ta 30 günlük veri tutarak tarihsel analiz yapabilirsiniz.

Prometheus arayüzüne http://prometheus-sunucu:9090 adresinden girip Status > Targets menüsünden tüm Netdata hedeflerinizin UP durumda olduğunu doğrulayın.

Grafana Kurulumu

# Grafana APT repository ekle
apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | apt-key add -
add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

apt-get update
apt-get install -y grafana

# Servisi başlat
systemctl enable grafana-server
systemctl start grafana-server

# Port kontrolü
ss -tlnp | grep 3000

Grafana 3000 portunda çalışıyor. İlk giriş için admin/admin kullanın ve hemen şifrenizi değiştirin.

Prometheus Datasource Ekleme

Grafana arayüzünde Configuration > Data Sources > Add data source yolunu izleyin. Prometheus seçin ve şu ayarları yapın:

  • URL: http://localhost:9090 (Grafana ve Prometheus aynı sunucudaysa)
  • Scrape interval: 10s
  • HTTP Method: GET

“Save & Test” butonuna tıklayın. Yeşil onay işareti görmeniz gerekiyor.

Grafana Dashboard Oluşturma

Şimdi işin eğlenceli kısmına geldik. Grafana’da Netdata metriklerini görselleştirecek paneller oluşturalım.

CPU Kullanımı Paneli

PromQL sorgusu ile web01 sunucusunun CPU kullanımını görmek için:

100 - (avg by (instance) (rate(netdata_system_cpu_percentage_average{instance="web01", dimension="idle"}[1m])) * 100)

Bu sorgu biraz karmaşık görünüyor ama açıklayayım:

  • netdata_system_cpu_percentage_average Netdata’nın CPU metriği
  • dimension="idle" boşta olan CPU yüzdesini alıyor
  • 100 - yaparak kullanım yüzdesine çeviriyoruz

Bellek Kullanımı Paneli

(netdata_system_ram_MB_average{instance="web01", dimension="used"} / 
netdata_system_ram_MB_average{instance="web01"}) * 100

Disk I/O Paneli

rate(netdata_disk_io_KiB_persec_average{instance="web01", dimension="reads"}[5m])
rate(netdata_disk_io_KiB_persec_average{instance="web01", dimension="writes"}[5m])

Reads ve Writes için ayrı sorgular yazıp aynı panelde göstererek güzel bir I/O grafiği elde edebilirsiniz.

Ağ Trafiği Paneli

rate(netdata_net_net_kilobits_persec_average{instance="web01", dimension="received"}[5m])

Gerçek Dünya Senaryosu: E-Ticaret Altyapısı İzleme

Diyelim ki 3 web sunucusu, 1 veritabanı ve 1 Redis sunucusundan oluşan bir e-ticaret altyapınız var. Prometheus konfigürasyonuna bu sunucuları ekledikten sonra Grafana’da ne tür dashboard’lar oluşturmalısınız?

Web Sunucuları için kritik metrikler:

  • CPU kullanımı (anlık ve 5 dakikalık ortalama)
  • RAM kullanımı ve swap aktivitesi
  • Nginx bağlantı sayısı ve istek hızı
  • Network bandwidth (inbound/outbound)

Veritabanı sunucusu için:

  • Disk I/O (özellikle write latency)
  • MySQL sorgu hızı (Netdata MySQL plugin ile)
  • Bağlantı sayısı
  • InnoDB buffer pool kullanımı

Redis sunucusu için:

  • Memory kullanımı
  • Hit/miss oranı
  • Connected clients
  • Komut işleme hızı

Bu metriklerin hepsini tek bir Grafana dashboard’ında row’lar halinde organize edebilirsiniz.

Alerting Konfigürasyonu

Grafana’nın alert özelliğini Prometheus ile birlikte kullanmak için Grafana’da alert kuralları tanımlayabilirsiniz. Alternatif olarak Prometheus’un kendi Alertmanager’ını kullanmak daha güçlü. Basit bir alert rule örneği:

cat > /etc/prometheus/alerts.yml << 'EOF'
groups:
  - name: netdata_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (rate(netdata_system_cpu_percentage_average{dimension="idle"}[5m])) * 100) > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Yüksek CPU kullanımı: {{ $labels.instance }}"
          description: "{{ $labels.instance }} sunucusunda CPU kullanımı son 5 dakikadır %85 üzerinde."

      - alert: CriticalMemoryUsage
        expr: (netdata_system_ram_MB_average{dimension="used"} / netdata_system_ram_MB_average) * 100 > 90
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Kritik bellek kullanımı: {{ $labels.instance }}"
          description: "{{ $labels.instance }} sunucusunda bellek kullanımı %90 üzerinde."
EOF

Bu dosyayı Prometheus konfigürasyonuna ekleyin:

# prometheus.yml dosyasına rule_files ekle
sed -i '/^global:/a rule_files:n  - "alerts.yml"' /etc/prometheus/prometheus.yml

# Konfigürasyonu doğrula
promtool check config /etc/prometheus/prometheus.yml

# Prometheus'u reload et (process yeniden başlatmadan)
curl -X POST http://localhost:9090/-/reload

Netdata Cloud ile Karşılaştırma

“Neden bu kadar uğraşayım, Netdata Cloud kullanayım?” diyebilirsiniz. Haklı bir soru.

Netdata Cloud ücretsiz tier ile temel izleme yapabilirsiniz ama veri dışarıya çıkıyor. Banka, sağlık veya devlet sistemleri gibi compliance gereksinimleri olan ortamlarda bu seçenek genellikle mümkün değil. Ayrıca on-premise Prometheus+Grafana stack’i tamamen özelleştirilebilir.

Öte yandan küçük ekipler veya kişisel projeler için Netdata Cloud son derece pratik. Kurulum gerektirmiyor, mobil uyumlu ve alerting built-in geliyor.

Sık Karşılaşılan Sorunlar

Prometheus Hedefler DOWN Görünüyor

# Netdata portuna erişimi test et
curl -v "http://hedef-sunucu:19999/api/v1/allmetrics?format=prometheus" | head -20

# Firewall kurallarını kontrol et
iptables -L INPUT -n | grep 19999

# Ya da ufw kullanıyorsanız
ufw status | grep 19999

Eğer Netdata sadece localhost’a bind edilmişse ve Prometheus farklı bir sunucudan bağlanıyorsa, ya Netdata’nın bind adresini değiştirin ya da SSH tunnel kullanın.

SSH Tunnel Yöntemi

Güvenlik açısından önerdiğim yaklaşım, Netdata portlarını dışarıya açmak yerine SSH tunnel kullanmak:

# Prometheus sunucusundan web01'deki Netdata'ya tunnel aç
ssh -N -L 19991:localhost:19999 [email protected] &

# db01 için farklı local port kullan
ssh -N -L 19992:localhost:19999 [email protected] &

Prometheus konfigürasyonunda bu durumda hedefleri şöyle yazarsınız:

# prometheus.yml içinde
static_configs:
  - targets: ['localhost:19991']
    labels:
      instance: 'web01'
  - targets: ['localhost:19992']
    labels:
      instance: 'db01'

Production ortamında bu tunnel’ları systemd servisi olarak çalıştırmanızı öneririm.

Metrik İsim Uyuşmazlıkları

Netdata versiyonuna göre metrik isimleri değişebilir. Eğer bir metrik bulamıyorsanız:

# Netdata'nın sunduğu tüm metrikleri listele
curl -s "http://localhost:19999/api/v1/allmetrics?format=prometheus" | grep "^netdata_system" | head -30

# Belirli bir metrik ara
curl -s "http://localhost:19999/api/v1/allmetrics?format=prometheus" | grep "cpu" | grep -v "^#" | cut -d'{' -f1 | sort -u

Bu komutlar mevcut metrik isimlerini görmenizi sağlar. Prometheus UI’da da Graph sekmesinde metrik adını yazmaya başlayınca autocomplete çalışıyor.

Dashboard Template’leri

Grafana’nın community dashboard’larından yararlanmak çok zaman kazandırır. grafana.com/grafana/dashboards adresinde “Netdata” araması yaparak hazır template’ler bulabilirsiniz. Dashboard ID’sini kopyalayıp Grafana’da Import seçeneğiyle yükleyebilirsiniz.

Popüler Netdata dashboard ID’leri:

  • 7107: Netdata Overview Dashboard
  • 2701: Genel sistem metrikleri

Bu template’leri import ettikten sonra datasource olarak Prometheus’unuzu seçin ve metrik prefix’lerini kendi ortamınıza göre düzenleyin.

Performans ve Kaynak Tüketimi

Bu stack’in kendisi de kaynak tüketiyor, bunu göz ardı etmeyin:

  • Netdata agent: Sunucu başına ~50-100 MB RAM, CPU etkisi minimal
  • Prometheus: Sakladığı veri ve scrape sayısına göre 500 MB – 2 GB RAM arası
  • Grafana: ~200-300 MB RAM

10’dan fazla sunucu izleyecekseniz Prometheus için en az 4 GB RAM’li bir sunucu ayırın. Prometheus’un storage ayarlarını da dikkate alın, 30 günlük veri için sunucu başına ortalama 2-3 GB disk alanı hesaplayabilirsiniz.

Prometheus scrape interval’ini çok düşük tutmayın. Netdata zaten 1 saniyelik granülarite sunuyor ama Prometheus’ta 10 saniye iyi bir denge noktası. Her scrape hem Netdata’ya hem ağa hem de Prometheus’a yük bindiriyor.

Sonuç

Netdata + Prometheus + Grafana üçlüsü başlangıçta kurulum efor gerektirse de elde ettiğiniz altyapı son derece güçlü. Netdata’nın düşük kaynak tüketimli gerçek zamanlı izleme özelliğini, Prometheus’un güvenilir uzun vadeli veri saklama kapasitesiyle ve Grafana’nın zengin görselleştirme yetenekleriyle birleştiriyorsunuz.

Özellikle birden fazla sunucu yönetiyorsanız bu yapıya geçiş yapmanızı şiddetle tavsiye ederim. Her sunucuya ayrı ayrı bağlanıp top veya htop çalıştırmak yerine tek bir Grafana ekranından tüm altyapınızın durumunu görmenin getirdiği rahatlık çok değerli. Alerting ekleyince de sorunları siz fark etmeden önce sistem sizi uyarıyor, bu da gece yarısı panik wakeupcall’larını ciddi ölçüde azaltıyor.

Başlangıç için tek bir sunucuyla deneyin, çalıştığını görün ve sonra diğer sunucuları Prometheus konfigürasyonuna ekleyin. Stack bir kez ayağa kalktıktan sonra yeni sunucu eklemek beş dakikadan fazla almıyor.

Benzer Konular

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir