dstat Komutu ile Sistem Kaynaklarını Tek Ekranda Kapsamlı İzleme

Yıllarca farklı monitoring araçlarıyla boğuştuktan sonra şunu anladım: bazen tek bir terminal penceresine sığan, her şeyi bir arada gösteren bir araç, onlarca farklı komut çalıştırmaktan çok daha değerlidir. dstat tam olarak o araç. CPU, bellek, disk I/O, ağ trafiği ve çok daha fazlasını tek seferde, gerçek zamanlı olarak görmek istiyorsanız, dstat hayatınızı ciddi ölçüde kolaylaştıracak.

dstat Nedir ve Neden Kullanmalısınız?

dstat, vmstat, iostat, netstat ve ifstat gibi klasik araçların yeteneklerini tek bir çatı altında toplayan çok yönlü bir sistem izleme aracıdır. Python ile yazılmış olması ona büyük bir esneklik kazandırır: plugin sistemi sayesinde istediğiniz metriği ekleyebilir, çıktıyı CSV formatında kaydedebilir, hatta kendi eklentilerinizi yazabilirsiniz.

Bir performans sorunu yaşandığında genellikle şu senaryoyla karşılaşırsınız: top açarsınız CPU’ya bakarsınız, sonra iostat açarsınız diske bakarsınız, sonra netstat ile ağa bakarsınız. Bu süreçte bağlantıları kafanızda kurmanız gerekir. dstat ile tüm bu bilgileri aynı anda, yan yana görebilirsiniz.

Kurulum

Çoğu modern Linux dağıtımında dstat varsayılan olarak gelmez ama paket depolarında mevcuttur:

# Debian/Ubuntu tabanlı sistemler
sudo apt-get install dstat

# RHEL/CentOS/Fedora
sudo yum install dstat
# ya da
sudo dnf install dstat

# Arch Linux
sudo pacman -S dstat

Kurulum sonrası versiyon kontrolü yapın:

dstat --version

Bazı yeni dağıtımlarda dstat yerine pcp-system-tools paketinin içinde gelen dool kullanılmaya başlandı. Temel kullanım neredeyse aynı, bu yüzden buradaki örnekler her ikisi için de geçerlidir.

Temel Kullanım ve Çıktıyı Okumak

dstat komutunu argümansız çalıştırdığınızda varsayılan görünümü açılır:

dstat

Bu komut size şu bilgileri gösterir: CPU kullanımı (user, system, idle, wait), disk I/O (read, write), ağ trafiği (receive, send), sayfalama (page in/out) ve sistem kesmeleri (interrupts, context switches).

Çıktıyı ilk kez gördüğünüzde biraz kalabalık gelebilir. Sol tarafta CPU sütunları, ortada disk ve ağ, sağda sistem istatistikleri bulunur. Her satır bir saniyelik anlık veriyi temsil eder. İlk satır genellikle boot’tan bu yana hesaplanan ortalamayı gösterir, sonraki satırlar ise gerçek zamanlı verileri yansıtır.

Güncelleme aralığını ve kaç satır görüntüleneceğini de belirleyebilirsiniz:

# Her 2 saniyede bir güncelle, 10 satır göster
dstat 2 10

Temel Parametreler

dstat‘ın zengin parametre seti onu bu kadar güçlü kılan şeydir:

  • -c: Sadece CPU istatistiklerini gösterir (user, system, idle, wait, hardware interrupt, software interrupt)
  • -d: Sadece disk istatistiklerini gösterir (read, write)
  • -n: Sadece ağ istatistiklerini gösterir (receive, send)
  • -m: Bellek kullanımını gösterir (used, buffers, cache, free)
  • -p: Süreç istatistiklerini gösterir (runnable, uninterruptible, new)
  • -s: Swap kullanımını gösterir (used, free)
  • -r: I/O request istatistikleri (read, write request sayısı)
  • -l: Yük ortalamasını (load average) gösterir
  • -g: Sayfalama istatistikleri (page in, page out)
  • -y: Sistem istatistikleri (interrupts, context switches)
  • –top-cpu: En fazla CPU kullanan süreci gösterir
  • –top-io: En fazla I/O yapan süreci gösterir
  • –top-mem: En fazla bellek kullanan süreci gösterir
  • –top-bio: En fazla blok I/O yapan süreci gösterir
  • –nocolor: Renklendirmeyi kapatır (log dosyasına yazarken kullanışlı)
  • –noheaders: Başlıkları tekrar yazdırmaz (uzun çalışmalarda temiz çıktı için)
  • –output dosyaadi.csv: Çıktıyı CSV formatında dosyaya kaydeder

Gerçek Dünya Senaryoları

Senaryo 1: Sunucu Yavaşlaması Analizi

Bir web sunucunuz yavaşlamaya başladı. Kullanıcılar şikayet ediyor ama neden olduğunu bilmiyorsunuz. İşte bu durumda çalıştıracağınız komut:

dstat -cdnm --top-cpu --top-io 5 60

Bu komut her 5 saniyede bir, 60 satır (yani 5 dakika) boyunca CPU, disk, ağ ve bellek bilgilerini en fazla kaynak kullanan süreçlerle birlikte gösterir. Bir süre izlediğinizde hangi sürecin sistemi zorladığını net bir şekilde görebilirsiniz.

Diyelim ki --top-cpu sütununda sürekli olarak mysqld görüyorsunuz ve aynı anda disk write değerleri de yüksek. Bu size doğrudan MySQL’in hem CPU hem disk yoğun işlemler yaptığını söyler. Bir sonraki adımda SHOW PROCESSLIST ile sorguları incelemeye başlarsınız.

Senaryo 2: Disk I/O Darboğazı Tespiti

Bir batch işlemi çalışırken sistemin genel olarak yavaşladığını fark ettiniz. Sorunun disk kaynaklı olup olmadığını anlamak için:

dstat -d -r --top-bio 1

Bu komut disk okuma/yazma miktarını ve istek sayısını, en fazla blok I/O yapan süreçle birlikte gösterir. Eğer await değerleri yüksekse (bunu iostat -x ile teyit edebilirsiniz) ve yüksek disk yazma gösteren tek bir süreç varsa, o süreç sizin darboğazınızdır.

Senaryo 3: Ağ Trafiği İzleme

Bir ağ ekipmanı değişikliği sonrasında bandwidth kullanımını izlemek istiyorsunuz:

dstat -n -N eth0,eth1 2

Belirli ağ arayüzlerini izlemek için -N parametresini kullanabilirsiniz. Birden fazla arayüzü virgülle ayırarak belirtebilirsiniz. Çıktıda receive ve send değerleri byte cinsinden gösterilir, büyük değerler otomatik olarak KB, MB, GB formatına çevrilir.

Senaryo 4: Kapsamlı Performans Kaydı

Bir bakım penceresi sırasında ya da kapasitelerin yakından takip edilmesi gereken kritik bir işlem sırasında uzun süreli veri toplamak istiyorsunuz:

dstat --nocolor --noheaders -cdnmspy --output /var/log/perf/sistem_$(date +%Y%m%d_%H%M).csv 5 &

Bu komut arka planda çalışır, her 5 saniyede bir tüm temel metrikleri CSV dosyasına kaydeder. --nocolor parametresi ANSI renk kodlarının dosyaya yazılmasını engeller. Daha sonra bu CSV dosyasını Excel ya da Python ile analiz edebilirsiniz.

CSV çıktısı özellikle retrospektif analizlerde çok işe yarar. “Dün gece 02:30’da sistem neden yavaşladı?” sorusuna cevap vermek için o saatlere ait kayıtlara bakabilirsiniz.

Plugin Sistemi ile Genişletme

dstat‘ı gerçekten güçlü yapan şeylerden biri de plugin sistemidir. Mevcut pluginleri listelemek için:

dstat --list

Bu komut hem dahili hem harici pluginleri listeler. Bazı önemli pluginler:

  • –disk-util: Her disk için kullanım yüzdesini gösterir
  • –disk-tps: Disk transfer sayısını gösterir
  • –net-packets: Paket sayısını gösterir
  • –tcp: TCP bağlantı istatistikleri
  • –udp: UDP istatistikleri
  • –socket: Socket istatistikleri
  • –vm: Sanal bellek istatistikleri
  • –ipc: IPC çağrı istatistikleri
  • –lock: Dosya kilitleme istatistikleri

TCP bağlantı durumlarını izlemek için:

dstat --tcp --udp --socket 2

Bu çıktıda listen, established, syn, time_wait, close sütunlarını göreceksiniz. Özellikle time_wait değeri yüksekse TCP bağlantı havuzlaması (connection pooling) ya da SO_REUSEADDR ayarlarını gözden geçirmeniz gerekebilir.

Belirli Disk Aygıtlarını İzleme

Birden fazla disk veya partition olan sistemlerde hepsini tek tek izleyebilirsiniz:

dstat -d -D sda,sdb,sdc 2

Ya da sadece toplam değerleri görmek istiyorsanız:

dstat -d -D total 2

RAID ya da LVM yapılandırmalarında bu özellik özellikle değerlidir. Hangi fiziksel diskin daha fazla yük aldığını görerek yük dengeleme kararları alabilirsiniz.

CPU Çekirdeklerini Ayrı Ayrı İzleme

Çok çekirdekli sistemlerde bazen tek bir çekirdek doyarken diğerleri boşta olabilir. Bu durumu tespit etmek için:

dstat -C 0,1,2,3 2
# ya da tüm çekirdekler için
dstat -C total,0,1,2,3 2

Eğer --top-cpu çıktısında belirli bir süreç görüyorsanız ve bu süreç thread-safe değilse, tek çekirdek üzerinde çalışıyor olabilir. Bu durumda o süreci ya yeniden yapılandırmanız ya da iş yükünü farklı bir şekilde dağıtmanız gerekebilir.

Yoğun İzleme için Birleşik Komutlar

Aşağıdaki komut, kritik bir sistem izlemesi için kişisel favorilerimden biridir:

dstat -tcdnmpl --top-cpu --top-mem 2
  • -t: Zaman damgası ekler (hangi saatte ne olduğunu sonradan takip etmek için kritik)
  • -c: CPU
  • -d: Disk
  • -n: Ağ
  • -m: Bellek
  • -p: Süreç
  • -l: Yük ortalaması
  • –top-cpu: En fazla CPU kullanan süreç
  • –top-mem: En fazla bellek kullanan süreç

Zaman damgasını eklemeyi genellikle unutulur ama sorun analizi yaparken hangi metriğin ne zaman yükseldiğini bilmek çok kritiktir.

Çıktıyı Daha Okunabilir Hale Getirme

Bazı durumlarda terminal genişliği çıktının tamamını göstermeye yetmeyebilir. Bu durumda sadece ihtiyacınız olan metrikleri seçin:

# Sadece CPU ve disk
dstat -cd 2

# Sadece ağ ve bellek
dstat -nm 2

# Sadece kritik metrikler + zaman damgası
dstat -tcdnm 2

Uzak sunuculara SSH ile bağlandığınızda terminal boyutu bazen sorun yaratır. -t ile zaman damgası ekleyip çıktıyı daraltmak sorunu çözer.

Grafana ve Prometheus ile Entegrasyon

Modern bir monitoring stack kullanıyorsanız dstat‘ı doğrudan Prometheus ile entegre etmek yerine genellikle node_exporter tercih edilir. Ancak dstat‘ın CSV çıktısını basit bir script ile parse edip kendi monitoring sisteminize besleyebilirsiniz:

#!/bin/bash
# dstat çıktısını CSV olarak kaydet
dstat --nocolor --noheaders -cdnm --output /tmp/dstat_output.csv 5 &
DSTAT_PID=$!

# 1 saat sonra durdur
sleep 3600
kill $DSTAT_PID

echo "Veri toplama tamamlandi: /tmp/dstat_output.csv"

Bu yaklaşım özellikle geçici izleme ihtiyaçları için, tam bir monitoring altyapısı kurmadan hızlı veri toplama yapmak istediğinizde işe yarar.

dstat ile Alarm Mantığı

dstat‘ın çıktısını awk ile parse ederek basit eşik bazlı alarmlar oluşturabilirsiniz:

dstat --nocolor --noheaders -c 1 | awk '{
    idle = $4
    if (idle+0 < 10) {
        print "UYARI: CPU kullanimi %90 uzerinde! Idle: " idle "%"
    }
}'

Bu yaklaşım production ortamında tam teşekküllü bir monitoring sisteminin yerini tutmaz elbette. Ancak hızlı geçici çözümler için, özellikle monitoring sisteminiz çöktüğünde ya da erişilemez olduğunda oldukça kullanışlıdır.

dstat ve Performans Kıyaslamaları

Bir donanım değişikliği ya da yazılım güncellemesi öncesi ve sonrasında performans karşılaştırması yapmak için dstat çok pratik bir araçtır:

# Değişiklik öncesi - 5 dakika veri topla
dstat --nocolor --noheaders -cdnm --output /tmp/oncesi.csv 5 60

# Değişiklik sonrası - aynı yük altında 5 dakika veri topla
dstat --nocolor --noheaders -cdnm --output /tmp/sonrasi.csv 5 60

Sonra bu iki CSV dosyasını basit bir Python scripti ya da hatta Excel ile karşılaştırabilirsiniz. Disk I/O iyileştirmesi yaptıysanız read ve write değerlerindeki fark size iyileştirmenin ne kadar etkili olduğunu net olarak gösterir.

Yaygın Hatalar ve Çözümleri

dstat çalışmıyor, komut bulunamıyor: Bazı minimal kurulumlu sistemlerde dstat paket deposunda olmayabilir. pip install dstat ile kurabilir ya da yukarıda belirtilen dool alternatifine başvurabilirsiniz.

Çıktı terminal genişliğine sığmıyor: Daha az plugin kullanın ya da terminal pencerenizi genişletin. SSH üzerinde çalışıyorsanız export COLUMNS=220 komutuyla terminal genişliğini ayarlayabilirsiniz.

CSV dosyasında ANSI renk kodları görünüyor: --nocolor parametresini eklediğinizden emin olun. Bunu unutmak çok yaygın bir hatadır.

İlk satır tutarsız görünüyor: Bu normaldir. dstat‘ın ilk satırı sistem başlangıcından bu yana hesaplanan ortalamayı gösterir. Gerçek zamanlı veriler ikinci satırdan itibaren başlar.

Sonuç

dstat, sistem yöneticilerinin araç kutusunda olması gereken, az bilinen ama inanılmaz değerli araçlardan biridir. Tek başına vmstat, iostat, netstat ve top‘ın yaptığı işin büyük bir kısmını üstlenebilir. Özellikle bir sorun anında hızlıca bütüncül bir bakış açısı kazanmak istediğinizde, birden fazla araç arasında geçiş yapmak yerine tek bir dstat komutuyla işe başlamak çok daha verimlidir.

Temel kullanımı öğrendikten sonra plugin sistemini keşfedin ve kendi izleme ihtiyaçlarınıza göre özelleştirilmiş komutlar oluşturun. CSV çıktısı özelliği ise özellikle kapasite planlama ve performans kıyaslamaları için vazgeçilmez bir özellik haline gelecektir.

Bir sonraki kez sunucunuzda bir yavaşlama yaşandığında, refleks olarak dstat -tcdnmpl --top-cpu --top-mem 2 komutunu çalıştırın. Büyük ihtimalle sorunun kaynağını ilk birkaç satırda tespit edeceksiniz.

Bir yanıt yazın

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