Gerçek Zamanlı Performans İzleme: dstat Kullanım Rehberi
Sunucu yönetiminde en sık karşılaştığım durumlardan biri şu: Gece 2’de telefon çalıyor, “sunucu yavaşladı” şikayeti geliyor ve sen SSH bağlantısını açıp sisteme ne olduğunu anlamaya çalışıyorsun. İşte tam bu noktada dstat gibi araçların değeri ortaya çıkıyor. Tek bir komutla CPU, bellek, disk I/O ve ağ trafiğini aynı anda görebilmek, sorun giderme süresini dramatik biçimde kısaltıyor.
dstat Nedir ve Neden Kullanmalısınız?
dstat, Dag Wieers tarafından geliştirilen ve vmstat, iostat, netstat, ifstat gibi klasik araçların yerini tek başına tutabilen bir sistem izleme aracıdır. Python ile yazılmış olması, plugin mimarisine sahip olması ve çıktısını hem insan gözüne hem de script’lere uygun şekilde sunabilmesi onu özel kılan özelliklerdir.
top veya htop kullanarak da genel bir fikir edinebilirsiniz, ancak disk I/O ve ağ trafiğini aynı ekranda görmek için ek araçlara başvurmanız gerekir. dstat ise bu parçaları tek çatı altında toplar.
Temel avantajları şunlardır:
- Birden fazla kaynağın verisini tek ekranda gösterir
- Renk kodlaması sayesinde verileri okumak kolaylaşır
- CSV formatında çıktı alarak log tutmaya olanak tanır
- Plugin sistemi ile genişletilebilir
- Düşük sistem kaynağı tüketir
Kurulum
Çoğu Linux dağıtımında dstat paket depolarında mevcuttur.
# Debian/Ubuntu tabanlı sistemler
sudo apt-get install dstat
# RHEL/CentOS/Fedora
sudo yum install dstat
# veya
sudo dnf install dstat
# Arch Linux
sudo pacman -S dstat
# Kurulumu doğrula
dstat --version
Bazı yeni sistemlerde dstat yerini pcp-dstat‘a bırakmış olabilir. Bu durumda pcp paketini kurmanız gerekir. Temel kullanım açısından fark yoktur.
Temel Kullanım
dstat‘ı parametresiz çalıştırdığınızda varsayılan görünümü alırsınız:
dstat
Bu komut CPU kullanımı, disk I/O, ağ trafiği, sayfalama (paging) ve sistem interrupt bilgilerini eş zamanlı gösterir. Her satır varsayılan olarak 1 saniyelik bir aralığı temsil eder.
Aralığı ve satır sayısını özelleştirebilirsiniz:
# Her 2 saniyede bir güncelle, 10 satır göster
dstat 2 10
# Her 5 saniyede bir güncelle, süresiz devam et
dstat 5
Temel Parametreler
dstat‘ın gücü parametre kombinasyonlarında yatmaktadır.
CPU ile ilgili parametreler:
- -c: Toplam CPU kullanımını gösterir (user, system, idle, wait)
- -C 0,1,total: Belirli CPU çekirdeklerini ve toplamı gösterir
- –cpu-use: Her CPU’nun kullanım yüzdesini ayrı ayrı gösterir
Bellek ile ilgili parametreler:
- -m: Bellek kullanımını gösterir (used, buffers, cache, free)
- –vm: Sanal bellek istatistiklerini gösterir
- -g: Sayfalama (paging) bilgisini gösterir
Disk ile ilgili parametreler:
- -d: Disk okuma/yazma istatistikleri
- -D total,sda,sdb: Belirli diskleri izler
- –io: I/O request sayısını gösterir
- –disk-util: Disk kullanım yüzdesini gösterir
Ağ ile ilgili parametreler:
- -n: Ağ alım/gönderim istatistikleri
- -N eth0,total: Belirli arayüzleri izler
- –net-packets: Saniyedeki paket sayısını gösterir
Sistem ile ilgili parametreler:
- -s: Swap kullanımını gösterir
- -p: Proses istatistiklerini gösterir (runnable, blocked, new)
- -y: Sistem interrupt ve context switch bilgileri
- -l: Sistem load average değerlerini gösterir
- -r: I/O request istatistikleri
- –top-cpu: En fazla CPU kullanan prosesi gösterir
- –top-mem: En fazla bellek kullanan prosesi gösterir
- –top-io: En fazla disk I/O yapan prosesi gösterir
- –top-bio: En fazla blok I/O yapan prosesi gösterir
Pratik Kombinasyonlar
Genel Sistem Sağlığı İzleme
Günlük rutin izleme için kullandığım temel kombinasyon şudur:
dstat -cdngy --top-cpu --top-mem 2
Bu komut CPU, disk, ağ, sayfalama ve sistem istatistiklerini gösterirken hangi prosesin en fazla CPU ve bellek tükettiğini de ekrana basar. Sorunlu bir prosesin varlığını saniyeler içinde tespit edebilirsiniz.
Disk I/O Odaklı İzleme
Bir uygulamanın disk performansından şikayet ettiği durumlarda şu kombinasyonu kullanıyorum:
dstat -d --disk-util --io --top-bio 1
Burada -d ile okuma/yazma hızlarını, --disk-util ile disk kullanım yüzdesini, --io ile I/O request sayısını ve --top-bio ile en fazla blok I/O yapan prosesi eş zamanlı izliyorum.
Ağ Trafiği Analizi
Web sunucusunun yavaşladığı durumlarda:
dstat -n --net-packets --top-io -c 1
Bu kombinasyon ağ trafiğini, paket sayısını, en fazla I/O yapan prosesi ve CPU kullanımını gösterir. DDoS belirtilerini veya aşırı ağ trafiğini hızlıca fark edebilirsiniz.
Bellek ve Swap Analizi
Bellek sorunlarını araştırırken:
dstat -m -s -g --top-mem 2
Burada bellek kullanımı, swap durumu ve sayfalama aktivitesini birlikte görüyorsunuz. Eğer swap kullanımı artıyorsa ve sayfalama yoğunsa, bellek yetersizliği sorununuz olduğunu hemen anlayabilirsiniz.
CSV Çıktısı ile Log Tutma
dstat‘ın en değerli özelliklerinden biri çıktıyı CSV formatında dosyaya yazabilmesidir. Bu sayede uzun süreli performans verisi toplayıp analiz edebilirsiniz.
# Çıktıyı CSV olarak kaydet
dstat --output /var/log/server_stats_$(date +%Y%m%d).csv -cdngy 5 720
Bu komut her 5 saniyede bir veri toplayarak 1 saat boyunca (720 x 5 saniye) log tutar. Sabah mesaiye geldiğinizde gece boyunca ne olduğunu bu dosyadan anlayabilirsiniz.
Birden fazla sunucu için otomatik log toplama scripti şöyle yazılabilir:
#!/bin/bash
# /usr/local/bin/dstat_logger.sh
LOG_DIR="/var/log/dstat"
DATE=$(date +%Y%m%d_%H%M)
HOSTNAME=$(hostname -s)
mkdir -p $LOG_DIR
dstat --output "${LOG_DIR}/${HOSTNAME}_${DATE}.csv"
-c -d -n -m -g -s
--top-cpu --top-mem
5 1440 &
echo "dstat logger started with PID $!"
Bu scripti cron ile çalıştırarak günlük otomatik performans logları elde edebilirsiniz:
# /etc/cron.d/dstat_logger
0 0 * * * root /usr/local/bin/dstat_logger.sh
Gerçek Dünya Senaryoları
Senaryo 1: Web Sunucusu Yavaşlama
Bir e-ticaret sitesinde, öğleden sonra belirli saatlerde sayfa yüklenme sürelerinin arttığına dair şikayet aldım. Önce genel bir bakış attım:
dstat -cdngy --top-cpu --top-mem 1
CPU kullanımının %90’ların üzerine çıktığını ve --top-cpu çıktısında PHP-FPM worker’larının göründüğünü fark ettim. Ardından hangi ağ bağlantısı hacminin bunu tetiklediğini anlamak için:
dstat -n --net-packets -C total --top-cpu 1
Ağ trafiğinin normalin 3 katına çıktığını gördüm. Sorun, bir marketing kampanyasının o saatte başlaması ve beklenenden 10 kat fazla trafik çekmesiydi. Çözüm olarak PHP-FPM worker sayısını artırdık ve önbellek mekanizmasını devreye aldık.
Senaryo 2: Veritabanı Sunucusu Disk I/O Sorunu
MySQL veritabanı sunucusunda yavaş sorgular raporlanmaya başlandığında ilk bakışım şu komutla oldu:
dstat -d --disk-util --io --top-bio -D total,sda 2
Disk kullanım yüzdesinin sürekli %95-100 arasında seyrettiğini ve --top-bio çıktısında mysqld‘nin göründüğünü gördüm. Ardından bellek durumunu kontrol ettim:
dstat -m -s -g 2
InnoDB buffer pool için ayrılan belleğin yetersiz olduğunu, bunun da çok fazla disk okumasına yol açtığını anladım. Buffer pool boyutunu artırdıktan sonra disk I/O yükü belirgin şekilde düştü.
Senaryo 3: Şüpheli Ağ Aktivitesi
Bir akşam log incelemesi sırasında bir sunucunun olağandışı miktarda ağ trafiği gönderdiğini fark ettim. Hemen şu komutu çalıştırdım:
dstat -n --net-packets --top-io -c 2
Giden trafik her saniye onlarca MB’ı buluyordu ve --top-io çıktısında tanımadığım bir proses görünüyordu. Bu şüpheli durumu daha ayrıntılı incelemek için netstat ile birlikte kullandım. Sonuçta sisteme sızmış bir cryptominer bulundu. dstat olmadan bu kadar hızlı tespit edemezdim.
Diğer Araçlarla Birlikte Kullanım
dstat tek başına güçlü olsa da diğer araçlarla birleştirildiğinde daha da değerli hale gelir.
dstat + grep ile Filtreleme
Belirli bir eşiği geçen durumlarda alert almak istiyorsanız:
dstat --nocolor -cdngy 1 | grep -E "([8-9][0-9]|100).[0-9]+ +[0-9]+.[0-9]+ +[0-9]"
Daha pratik bir yöntem olarak dstat çıktısını bir script içinde işleyebilirsiniz:
#!/bin/bash
# CPU kullanimi %80'i gecerse uyari ver
dstat --nocolor -c 1 | while read line; do
cpu_idle=$(echo $line | awk '{print $4}')
if [ ! -z "$cpu_idle" ] && [ "$cpu_idle" -lt 20 ] 2>/dev/null; then
echo "UYARI: CPU kullanimi yuksek! Idle: %${cpu_idle} - $(date)"
# Buraya email veya Slack notification eklenebilir
fi
done
Uzak Sunucuları İzleme
SSH üzerinden uzak bir sunucuyu izlemek için:
ssh kullanici@sunucu-ip "dstat -cdngy --top-cpu 1 20"
Birden fazla sunucuyu aynı anda terminal multiplexer ile izlemek için tmux veya screen kullanabilirsiniz:
# tmux ile 4 sunucuyu aynı anda izle
tmux new-session ;
send-keys "ssh admin@server1 'dstat -cdngy 2'" C-m ;
split-window -h ;
send-keys "ssh admin@server2 'dstat -cdngy 2'" C-m ;
split-window -v ;
send-keys "ssh admin@server3 'dstat -cdngy 2'" C-m ;
select-pane -t 0 ;
split-window -v ;
send-keys "ssh admin@server4 'dstat -cdngy 2'" C-m
Plugin Sistemi
dstat‘ın plugin sistemi, standart metriklerin ötesine geçmenizi sağlar. Yerleşik pluginlerin bir listesini görmek için:
dstat --list
Sık kullandığım bazı ek pluginler şunlardır:
# NTP istatistikleri
dstat --ntp
# Proc ve thread sayilari
dstat --proc-count
# Sistem uptime
dstat --uptime
# Entropy (kriptografik islemler için önemli)
dstat --entropy
# Tüm bunlari birlestirerek
dstat -cdngy --proc-count --uptime --top-cpu 2
Kendi plugin’inizi yazmak da mümkündür. Plugin’ler Python ile yazılır ve /usr/share/dstat/ dizinine yerleştirilir. Örneğin belirli bir servisin proses sayısını izleyen basit bir plugin oluşturabilirsiniz.
Performans Karşılaştırması: Baseline Oluşturma
Sorun gidermenin en kritik adımlarından biri, “normal” durumun ne olduğunu bilmektir. dstat ile sisteminizin baseline değerlerini belirleyebilirsiniz.
# Is saatlerinde 1 saatlik baseline
dstat --output /tmp/baseline_business_hours.csv
-c -d -n -m -s -g -y
--top-cpu --top-mem
10 360
# Gece saatlerinde 1 saatlik baseline
dstat --output /tmp/baseline_night.csv
-c -d -n -m -s -g -y
--top-cpu --top-mem
10 360
Bu CSV dosyalarını Excel veya Python pandas ile analiz ederek ortalama değerleri, peak noktaları ve anormal davranışları belirleyebilirsiniz. Sonraki sefer bir performans şikayeti geldiğinde baseline ile karşılaştırma yapma imkanınız olur.
dstat’ın Sınırlamaları
Her araç gibi dstat‘ın da sınırlamaları vardır. Bunları bilmek doğru aracı seçmenizi sağlar.
Bilmesi gereken kısıtlamalar:
- Proses bazlı detaylı analiz için
pidstatveyastracedaha uygundur - Ağ bağlantılarının detaylı analizi için
ssveyanetstatgereklidir - Uzun süreli tarihsel veri toplama için Prometheus, Grafana veya Zabbix gibi çözümler daha uygundur
- Python 2 bağımlılığı olan eski sürümlerde bazı dağıtımlarda sorun yaşanabilir
- Bazı yeni sistemlerde
dstatyerinepcp-dstatveyadooltercih edilmektedir
Faydalı Alias’lar
Sık kullandığım dstat komutlarını .bashrc veya .bash_aliases dosyasına ekleyerek zaman kazanabilirsiniz:
# ~/.bash_aliases dosyasina ekle
# Genel sistem izleme
alias ds='dstat -cdngy --top-cpu --top-mem 2'
# Disk odakli izleme
alias dsdisk='dstat -d --disk-util --io --top-bio 1'
# Ag odakli izleme
alias dsnet='dstat -n --net-packets --top-io -c 1'
# Bellek ve swap izleme
alias dsmem='dstat -m -s -g --top-mem 2'
# Tam izleme ve log kaydetme
alias dslog='dstat --output /tmp/dstat_$(date +%Y%m%d_%H%M).csv -cdngmy --top-cpu --top-mem 5'
Sonuç
dstat, her Linux sistem yöneticisinin araç kutusunda bulunması gereken, öğrenmesi kolay ama derinlemesine kullanılabilecek bir performans izleme aracıdır. Tek bir komutla sistemin nabzını tutmanızı sağlayan bu araç, özellikle acil durumlarda ilk müdahale aşamasında hayat kurtarıcı olmaktadır.
Pratik önerim şu yönde: dstat‘ı rutin kontrollerde kullanmaya başlayın, sisteminizin normal davranışını öğrenin ve baseline değerlerini kaydedin. Böylece bir sorun yaşandığında neyin anormal olduğunu çok daha hızlı tespit edebilirsiniz. Uzun süreli izleme ve alerting için dstat‘ı Prometheus gibi sistemlere entegre etmeyi düşünebilirsiniz, ancak hızlı analiz ve sorun giderme için dstat hala rakipsiz pratikliğini koruyor.
CSV çıktısı özelliğini mutlaka günlük log süreçlerinize ekleyin. Bir performans sorunu yaşandığında “o sırada ne oluyordu” sorusunun cevabını anında verebilmek, hem sizin hem de yöneticinizin hayatını kolaylaştıracaktır.
