Disk ve I/O Performansını Netdata ile Takip Etme

Sunucunuzda bir şeyler yavaşladığında ilk şüphelendiğiniz yer genellikle CPU ya da RAM olur. Ama çoğu zaman asıl suçlu disktir. Yavaş I/O, yüksek bekleme süreleri, dolmaya yüz tutmuş diskler… Bunların hepsini zamanında fark etmezseniz, gece yarısı bir prodüksiyion sunucusu çöküşüyle yüz yüze gelirsiniz. Netdata tam da bu noktada devreye giriyor. Gerçek zamanlı, saniyelik çözünürlükte disk ve I/O metriklerini görsel olarak sunan Netdata, sysadmin hayatını ciddi ölçüde kolaylaştırıyor. Bu yazıda disk performansını Netdata ile nasıl takip edeceğinizi, hangi metriklere bakmanız gerektiğini ve gerçek senaryolarda nasıl yorumlama yapacağınızı ele alacağız.

Netdata Disk Monitoring’e Neden İhtiyaç Duyarız?

Klasik araçlarla, örneğin iostat ya da df ile disk durumuna bakabilirsiniz. Ama bu araçlar size anlık bir fotoğraf sunar. Netdata ise bir video gibi sürekli akan veriyi size gösterir. Saniyeden saniyeye ne olduğunu görmek, özellikle aralıklı I/O problemlerini yakalamak için kritiktir.

Bir veritabanı sunucusunda zaman zaman yaşanan yavaşlamayı düşünün. Kullanıcılar şikayet ediyor ama siz kontrol ettiğinizde her şey normal görünüyor. İşte burada Netdata’nın tarihsel veri tutma özelliği devreye giriyor. Sorunun yaşandığı zaman dilimine gidip disk I/O grafiğine bakıyorsunuz ve o anda yaşanan bir write spike’ı görüyorsunuz. Sorun bulundu.

Netdata şu disk metriklerini varsayılan olarak toplar:

  • Disk okuma/yazma hızı: MB/s cinsinden anlık throughput
  • I/O işlem sayısı: Saniyede kaç işlem yapıldığı (IOPS)
  • I/O bekleme süresi: Ortalama ve maksimum latency değerleri
  • Disk kullanım oranı: Diskin ne kadar süre meşgul olduğu (utilization %)
  • Dosya sistemi doluluk oranı: Kalan alan yüzdesi
  • Inode kullanımı: Dosya sayısı limitleri
  • Disk sıcaklığı ve SMART verileri: Fiziksel disk sağlığı

Netdata Kurulumu ve Temel Yapılandırma

Eğer Netdata henüz kurulu değilse, tek satır ile kurabilirsiniz:

wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
sh /tmp/netdata-kickstart.sh

Kurulum tamamlandıktan sonra servis durumunu kontrol edin:

systemctl status netdata

Netdata varsayılan olarak 19999 portunda çalışır. Tarayıcınızdan http://sunucu-ip:19999 adresine giderek arayüze erişebilirsiniz.

Disk metriklerini toplamaktan sorumlu plugin’lerin aktif olup olmadığını kontrol etmek için:

grep -r "disk" /etc/netdata/netdata.conf
ls /usr/lib/netdata/plugins.d/ | grep -i disk

/proc/diskstats dosyasından veri toplayan modül varsayılan olarak aktiftir. Herhangi bir ek ayar yapmanıza gerek yoktur.

netdata.conf Üzerinden Disk Takip Aralığını Ayarlama

Varsayılan olarak Netdata her saniye veri toplar. Disk I/O için bu çözünürlük genellikle yeterlidir. Ancak çok sayıda diskli bir sunucuda bu yükü hafifletmek isteyebilirsiniz:

nano /etc/netdata/netdata.conf

İlgili bölümü bulup düzenleyin:

[plugin:proc:/proc/diskstats]
    # update every = 1
    # enable new disks detected at runtime = yes
    # performance metrics for physical disks = auto
    # performance metrics for virtual disks = auto
    # performance metrics for partitions = no

Buradaki update every değerini artırırsanız, örneğin 2 yaparsanız, her 2 saniyede bir veri toplanır. Bu kaynak kullanımını düşürür ama çözünürlüğü de azaltır. Prodüksiyon ortamları için 1 saniye önerilir.

Değişiklikten sonra Netdata’yı yeniden başlatın:

systemctl restart netdata

Arayüzde Disk Metriklerini Bulmak

Netdata web arayüzüne girdiğinizde sol menüde “Disk” kategorisini göreceksiniz. Her fiziksel disk ve partition için ayrı grafikler oluşturulur.

Ana disk metrikleri şu başlıklar altında gruplanır:

  • disk.io: Okuma ve yazma throughput değerleri (KB/s)
  • disk.ops: Saniyede gerçekleştirilen okuma/yazma operasyonları
  • disk.util: Diskin meşgul olduğu sürenin yüzdesi
  • disk.mops: Birleştirilmiş (merged) operasyon sayısı
  • disk.svctm: Ortalama servis süresi (ms)
  • disk.await: I/O işlemlerinin ortalama bekleme süresi (ms)
  • disk.backlog: Bekleyen I/O işlemi sayısı
  • disk_space: Dosya sistemi doluluk durumu
  • disk_inodes: Inode kullanım durumu

Kritik Metrikler ve Yorumlama

disk.util: Disk Kullanım Yüzdesi

Bu metrik, diskin ne kadar süre aktif olduğunu gösterir. %100 değeri diskin sürekli meşgul olduğu anlamına gelir ve bu ciddi bir uyarı işaretidir.

Genel eşik değerleri:

  • %0-60: Normal, disk rahat çalışıyor
  • %60-80: Dikkat, yük artmaya başlıyor
  • %80-95: Yüksek yük, izleme sıklığını artırın
  • %95-100: Kritik, disk darboğazı yaşanıyor

Özellikle HDD’lerde %80 üzeri değerler latency artışına yol açar. SSD’lerde bu eşik biraz daha yüksektir ama %95’i aşan değerlerde yine de sorun yaşarsınız.

disk.await: I/O Bekleme Süresi

Bu değer, bir I/O isteğinin kuyrukta beklemesi dahil toplam süreyi milisaniye cinsinden gösterir. Normal değerler:

  • HDD için: 5-10ms normal, 20ms üzeri sorunlu
  • SSD için: 0.1-1ms normal, 5ms üzeri sorunlu
  • NVMe için: 0.05ms altı beklenir, 1ms üzeri sorunlu

Eğer disk.await değeri aniden sıçradıysa, o anda disk üzerinde yoğun bir işlem gerçekleşiyor demektir.

disk.svctm: Servis Süresi

Kuyruk bekleme süresi hariç, sadece I/O işleminin diskte geçirdiği süredir. disk.await ile disk.svctm arasındaki fark büyüdüğünde, disk kuyruğunun dolduğunu anlayabilirsiniz. Bu durum ciddi bir I/O darboğazına işaret eder.

Alert Yapılandırması

Netdata’nın en güçlü özelliklerinden biri esnek alarm sistemidir. Disk metrikleri için alarm tanımlayalım.

Önce mevcut disk alarmlarına bakalım:

ls /etc/netdata/health.d/
cat /usr/lib/netdata/conf.d/health.d/disks.conf

Özel alarm oluşturmak için:

nano /etc/netdata/health.d/custom-disk-alerts.conf

Dosyaya şunları ekleyin:

# Disk doluluk uyarısı
alarm: disk_space_warning
    on: disk_space._
    lookup: average -10m unaligned of used
    units: %
    every: 1m
    warn: $this > 80
    crit: $this > 90
    info: Disk alanı kritik seviyede doldu
    to: sysadmin

# Disk I/O utilization uyarısı
alarm: disk_util_warning
    on: disk.util
    lookup: average -10m unaligned of utilization
    units: %
    every: 1m
    warn: $this > 80
    crit: $this > 95
    info: Disk kullanımı kritik seviyeye ulaştı
    to: sysadmin

# Yüksek I/O latency uyarısı
alarm: disk_await_warning
    on: disk.await
    lookup: average -5m unaligned of reads,writes
    units: ms
    every: 1m
    warn: $this > 50
    crit: $this > 200
    info: Disk I/O latency çok yüksek
    to: sysadmin

Alarm konfigürasyonunu test etmek için:

netdatacli reload-health

Gerçek Dünya Senaryosu: Veritabanı Sunucusunda I/O Sorunu

Bir e-ticaret platformu düşünün. Hafta sonu yoğun saatlerde sistem yavaşlıyor. Müşteriler ödeme sayfasında takılı kalıyor. Standart kontroller yapıyorsunuz: CPU normal, RAM yeterli, ağ bant genişliği sorun değil. Netdata’ya bakıyorsunuz.

Disk metriklerine gittiğinizde şunu görüyorsunuz: disk.await değeri normal zamanlarda 3-5ms iken yoğun saatlerde 150ms’e kadar çıkıyor. disk.util ise %95 ile %100 arasında geziniyor. Bu klasik bir I/O darboğazı.

Sorunu daha derinlemesine analiz etmek için terminalde şunu çalıştırın:

iostat -xz 2 10

Bu komut, 2 saniye aralıklarla 10 kez disk istatistiklerini gösterir. Çıktıda await, util ve %iowait sütunlarına odaklanın.

Peki neden böyle bir spike yaşanıyor? MySQL binary log yazmaları, checkpoint operasyonları ya da büyük bir export işlemi olabilir. Bunu anlamak için:

iotop -ao

Bu komut, disk I/O kullanan prosesleri listeler. -a kümülatif değerleri, -o sadece aktif prosesleri gösterir. Burada MySQL’in binary log yazmalarının yoğun olduğunu görüyorsunuz.

Çözüm: innodb_io_capacity değerini düşürüp, binary log’ları ayrı bir SSD’ye taşıyarak problemi çözebilirsiniz.

Netdata ile SMART Disk Sağlığı İzleme

Netdata, smartd entegrasyonu sayesinde disk sağlığını da izleyebilir. Bu özelliği etkinleştirmek için:

apt install smartmontools    # Debian/Ubuntu
yum install smartmontools    # RHEL/CentOS

Netdata’nın SMART plugin konfigürasyonunu düzenleyin:

nano /etc/netdata/go.d/smartctl.conf

İçeriği şu şekilde ayarlayın:

jobs:
  - name: smartctl
    devices:
      - /dev/sda
      - /dev/sdb
      - /dev/nvme0n1
    every: 60

Değişiklikten sonra Netdata’yı yeniden başlatın:

systemctl restart netdata

Artık arayüzde “smartctl” başlığı altında her diskin yeniden tahsis edilen sektör sayısı, bekleyen sektörler, güç açılma sayısı, çalışma saatleri gibi kritik SMART değerlerini görebilirsiniz.

Özellikle Reallocated Sectors Count (yeniden tahsis edilen sektörler) sıfırın üzerine çıkmaya başladıysa, o disk kısa süre içinde bozulacak demektir. Bunu önceden görmek, veri kaybını önlemenizi sağlar.

Inode Tükenmesi Senaryosu

Disk doluluk izlemesinde çoğu sysadmin sadece kullanılan alan yüzdesine bakar. Ama inode tükenmesi de aynı derecede kritik bir sorundur ve genellikle gözden kaçar.

Bir mail sunucusunda düşünün: Binlerce küçük geçici dosya birikiyor. Disk alanı olarak hala %60 boşluk var ama yeni dosya oluşturulamıyor. Neden? Çünkü inode’lar tükenmiş.

Netdata bu durumu disk_inodes metriği ile gösterir. İnode kullanımı için de alarm ekleyelim:

nano /etc/netdata/health.d/custom-disk-alerts.conf

Mevcut dosyaya şunu ekleyin:

# Inode kullanım uyarısı
alarm: disk_inode_warning
    on: disk_inodes._
    lookup: average -10m unaligned of used
    units: %
    every: 1m
    warn: $this > 70
    crit: $this > 90
    info: Inode kullanımı kritik seviyeye ulaştı
    to: sysadmin

Mevcut inode durumunu terminalde kontrol etmek için:

df -i
find /tmp -type f | wc -l
find /var/spool/postfix -type f | wc -l

NFS ve Network Dosya Sistemi İzleme

Eğer NFS mount’larınız varsa, bunları da Netdata ile izleyebilirsiniz. NFS performans metrikleri nfsd ve nfs başlıkları altında görünür.

NFS istatistiklerini aktif etmek için:

nano /etc/netdata/netdata.conf

Şu satırı kontrol edin ve aktif olduğundan emin olun:

[plugin:proc:/proc/net/rpc/nfs]
    # update every = 1
    nfs3 = yes
    nfs4 = yes

NFS mount performansını terminal üzerinden de inceleyebilirsiniz:

nfsstat -c
mountstats

mountstats komutu özellikle faydalıdır. Her NFS mount için ortalama okuma/yazma süresi, RPC çağrı sayısı ve yeniden deneme sayısını gösterir. Yüksek retry sayısı ağ veya NFS sunucu sorununa işaret eder.

Disk I/O Performansını Artırmak İçin Pratik Öneriler

Netdata ile sorunu tespit ettikten sonra ne yapacaksınız? İşte en sık başvurulan yöntemler:

I/O Scheduler Optimizasyonu

Linux’ta disk I/O scheduler, disk isteklerinin nasıl sıralanacağını belirler. Farklı iş yükleri için farklı scheduler’lar önerilir.

Mevcut scheduler’ı kontrol edin:

cat /sys/block/sda/queue/scheduler

SSD için mq-deadline veya none, HDD için bfq önerilir. Scheduler’ı değiştirmek için:

echo mq-deadline > /sys/block/sda/queue/scheduler

Kalıcı hale getirmek için /etc/udev/rules.d/ altına kural ekleyin:

nano /etc/udev/rules.d/60-ioscheduler.rules

İçeriğe şunu ekleyin:

# SSD için
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"

# HDD için
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq"

Değişikliği yaptıktan sonra Netdata üzerinden disk.await değerinin düşüp düşmediğini kontrol edin. Bu optimizasyonun etkisini gerçek zamanlı olarak görebilirsiniz.

Read-Ahead Değeri Ayarlama

Büyük dosyaları sıralı okuyan uygulamalar için read-ahead değerini artırmak performansı artırabilir:

blockdev --getra /dev/sda
blockdev --setra 4096 /dev/sda

Bunun etkisini yine Netdata üzerinden disk.io grafiğini izleyerek ölçebilirsiniz.

Netdata API ile Disk Metriklerini Otomatik Raporlama

Netdata bir REST API sunar. Bu API ile özel scriptler yazarak disk metriklerini alabilir ve raporlayabilirsiniz.

Belirli bir diskin güncel utilization değerini çekmek için:

curl -s "http://localhost:19999/api/v1/data?chart=disk.util&after=-300&points=5&format=json" | python3 -m json.tool

Bu komut son 5 dakikanın 5 veri noktasını JSON olarak döndürür. Bunu bir cronjob’a bağlayarak günlük özet rapor oluşturabilirsiniz:

#!/bin/bash
DISK="sda"
THRESHOLD=80
UTIL=$(curl -s "http://localhost:19999/api/v1/data?chart=disk.util&after=-3600&points=1&format=json" | python3 -c "import sys,json; d=json.load(sys.stdin); print(round(d['data'][0][1],2))")

echo "Son 1 saatte $DISK ortalama kullanımı: $UTIL%"

if (( $(echo "$UTIL > $THRESHOLD" | bc -l) )); then
    echo "UYARI: Disk kullanımı eşik değerini aştı!"
fi

Bu script’i /usr/local/bin/disk-report.sh olarak kaydedip çalıştırılabilir yapın:

chmod +x /usr/local/bin/disk-report.sh

Crontab’a ekleyin:

0 8 * * * /usr/local/bin/disk-report.sh | mail -s "Günlük Disk Raporu" [email protected]

Grafana ile Netdata Dashboard Entegrasyonu

Netdata’nın kendi arayüzü çok yeterlidir, ama kurumsal ortamlarda tüm metrikleri tek bir Grafana dashboard’unda görmek isteyebilirsiniz. Netdata, Prometheus uyumlu metrik endpoint’i sunar:

curl http://localhost:19999/api/v1/allmetrics?format=prometheus | grep disk

Prometheus konfigürasyonuna şunu ekleyin:

scrape_configs:
  - job_name: 'netdata'
    metrics_path: '/api/v1/allmetrics'
    params:
      format: ['prometheus']
    static_configs:
      - targets: ['sunucu-ip:19999']

Ardından Grafana’da Prometheus datasource’u seçip disk metriklerini sorgulayabilirsiniz. netdata_disk_util_percentage_average gibi metrik adlarını kullanarak güzel görselleştirmeler oluşturabilirsiniz.

Sonuç

Disk ve I/O performansı, sunucu yönetiminin en kritik ama en çok ihmal edilen alanlarından biridir. Netdata bu konuda gerçekten güçlü bir araç: saniyelik çözünürlük, kolay kurulum, esnek alarm sistemi ve geniş entegrasyon seçenekleri. Sadece disk doluluk takibi değil, IOPS, latency, utilization, SMART verileri ve inode kullanımını da tek bir platformdan izlemek ciddi bir avantaj.

Bu yazıda anlattıklarımı şu şekilde özetleyebiliriz: Önce Netdata’yı doğru yapılandırın ve disk plugin’lerinin aktif olduğundan emin olun. Ardından disk.await, disk.util ve disk.ops metriklerine düzenli olarak göz atın. Kritik eşik değerleri için mutlaka alarm tanımlayın. SMART izlemeyi aktif edin ki disk arızalarını önceden görebilin. Inode kullanımını da doluluk takibinin yanına ekleyin. Ve son olarak, bir sorun yaşandığında Netdata’nın geçmişe dönük veri görüntüleme özelliğini kullanarak olayı retrospektif analiz edin.

Disk sorunları genellikle sessiz sedasız büyür. Küçük bir I/O yavaşlığı, zamanla tüm sistemi çökertebilir. Netdata ile bu süreci proaktif olarak yönetmek, reaktif kriz çözümünden çok daha az stresli ve çok daha profesyoneldir.

Benzer Konular

Bir yanıt yazın

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