Proxmox ortamında bir şeyler ters gittiğinde ilk içgüdün ne olur? Büyük ihtimalle web arayüzünü açıp “Summary” sekmesine bakarsın. Ama o ekranda gördüğün anlık CPU ve RAM grafiği, gerçek sorunun yalnızca yüzeyini gösterir. Proxmox’un sunduğu izleme ve performans analizi araçlarını gerçek anlamda kullanmayı öğrendiğinde, hem sorunları önceden fark edersin hem de “bu VM neden bu kadar yavaş?” sorusuna somut bir cevap verebilirsin. Bu yazıda Proxmox’un yerleşik araçlarından, komut satırı yöntemlerine, RRD grafiklerinden özel izleme senaryolarına kadar her şeyi ele alacağız.
Proxmox’un Yerleşik İzleme Altyapısı
Proxmox VE, kaynak izleme için birkaç katmanlı bir yaklaşım kullanır. Web arayüzü (PVE Web UI), arka planda pvestatd adlı bir daemon üzerinden çalışan verileri görselleştirir. Bu daemon, her node ve VM/CT için düzenli aralıklarla istatistik toplar ve bunları RRD (Round Robin Database) formatında /var/lib/rrdcached/ dizininde saklar.
Proxmox’ta izleme yapabileceğin üç temel katman var:
- PVE Web UI: Anlık ve geçmişe dönük grafikler, node/VM/CT bazlı gösterimler
- Komut Satırı Araçları:
pvesh,qm,pct,pveperfve standart Linux araçları - API Erişimi: REST API üzerinden programatik veri çekme
pvestatd ve RRD Veri Saklama
pvestatd daemon’ı her 3 saniyede bir veri toplar ve bu verileri farklı zaman çözünürlüklerinde saklar. Saatlik, günlük, haftalık, aylık ve yıllık grafikler için ayrı ayrı ortalama hesaplamalar yapılır. Bu yüzden “son 1 saatteki” grafikle “son 1 yıllık” grafik arasındaki detay farkını anlayabilirsin.
# RRD veri dosyalarının nerede tutulduğunu görmek için
ls -la /var/lib/rrdcached/db/pve2-node/
ls -la /var/lib/rrdcached/db/pve2-vm/
# pvestatd servis durumu
systemctl status pvestatd
# Servis loglarını takip etmek
journalctl -u pvestatd -f
Komut Satırından Gerçek Zamanlı İzleme
Web arayüzü güzel görünür ama SSH üzerinden bir node’a bağlandığında, komut satırı araçları çok daha hızlı ve esnek bir izleme imkanı sunar.
pvesh ile API Sorguları
pvesh komutu, Proxmox REST API’sine doğrudan komut satırından erişmeni sağlar. İzleme açısından son derece kullanışlıdır.
# Belirli bir VM'in (VMID: 100) anlık kaynak kullanımını görme
pvesh get /nodes/pve1/qemu/100/status/current
# Tüm VM'lerin listesini ve durumlarını çekme
pvesh get /nodes/pve1/qemu --output-format json-pretty
# Node'un genel kaynak bilgileri
pvesh get /nodes/pve1/status
# Bir CT (LXC container) için kaynak kullanımı
pvesh get /nodes/pve1/lxc/101/status/current
pvesh çıktısı JSON formatında gelir ve jq ile birlikte kullanıldığında son derece güçlü hale gelir:
# Tüm çalışan VM'lerin CPU kullanımını listeleme
pvesh get /nodes/pve1/qemu --output-format json |
jq '.[] | select(.status=="running") | {vmid: .vmid, name: .name, cpu: .cpu, mem: .mem, maxmem: .maxmem}'
# RAM kullanım yüzdesini hesaplayarak gösterme
pvesh get /nodes/pve1/qemu --output-format json |
jq '.[] | select(.status=="running") | {
vmid: .vmid,
name: .name,
cpu_percent: (.cpu * 100 | round),
mem_percent: ((.mem / .maxmem) * 100 | round)
}'
qm ve pct ile VM/CT Yönetimi
qm (QEMU Manager) ve pct (Proxmox Container Toolkit) komutları, sanal makineler ve konteynerler için özel bilgi sağlar.
# VM'in ayrıntılı konfigürasyonunu görme
qm config 100
# VM'in anlık durumu
qm status 100 --verbose
# Belirli bir VM için RRD verisini çekme (son 1 saatlik)
qm rrd 100 --ds cpu,mem,netin,netout --timeframe hour
# LXC Container için benzer komutlar
pct config 101
pct status 101
pveperf ile Donanım Benchmark
pveperf komutu, node’un disk I/O ve CPU performansını test etmek için kullanılır. Özellikle yeni bir node kurulumunda veya depolama sistemini değiştirdiğinde baz performans ölçümü almak için idealdir.
# Varsayılan dizinde benchmark çalıştırma
pveperf
# Belirli bir dizinde (örneğin NFS mount noktası) benchmark
pveperf /mnt/pve/nfs-storage
# Belirli bir disk üzerinde test
pveperf /dev/sdb
pveperf çıktısı CPU hızı, kernel compile zamanı ve disk I/O değerlerini gösterir. Örneğin tipik bir çıktıda şunu görürsün:
- CPU BOGOMIPS: Hesaplama gücünün göstergesi
- REGEX/SECOND: String işleme performansı
- HD SIZE: Test edilen dizinin boyutu
- BUFFERED READS: Önbellekten okuma hızı (MB/sn)
- AVERAGE SEEK TIME: Ortalama disk seek süresi (ms)
- FSYNCS/SECOND: Disk yazma performansı (özellikle VM disk görüntüleri için kritik)
- DNS RESOLV: DNS çözümleme süresi
Disk I/O Performansı ve Depolama İzleme
Proxmox ortamlarında en sık karşılaşılan performans sorunlarının başında disk I/O darboğazları gelir. Özellikle birden fazla VM’in aynı depolama havuzunu kullandığı durumlarda bu sorun belirginleşir.
iostat ile Disk İzleme
# Tüm disk aygıtları için 2 saniyede bir istatistik göster
iostat -xz 2
# Sadece belirli bir diski izleme
iostat -xz 2 /dev/sda
# Daha okunabilir format ile (MB cinsinden)
iostat -xzm 2
# VM disk görüntülerinin bulunduğu LVM volume grubunu izleme
iostat -xz 2 dm-0 dm-1 dm-2
iostat çıktısında dikkat etmen gereken kritik metrikler:
- %util: Diskin ne kadarının kullanıldığı. %70 üzeri ciddi yük anlamına gelir.
- await: Ortalama I/O bekleme süresi (ms). SSD’lerde 1-5ms normal, HDD’lerde 10-20ms normal kabul edilir.
- svctm: Gerçek servis süresi. await ile arasındaki fark kuyruk süresini gösterir.
- r/s ve w/s: Saniyedeki okuma/yazma sayısı (IOPS)
iotop ile Hangi Proses Ne Kadar Disk Kullanıyor
# Interaktif mod
iotop
# Sadece aktif I/O yapan prosesleri göster
iotop -o
# VM proseslerini (kvm) filtrele
iotop -o -p $(pgrep -d, kvm)
# Batch modda log için
iotop -b -n 10 -o > /var/log/iotop_report.txt
Ceph Depolama İzleme (Hyper-Converged Kurulumlar İçin)
Eğer Ceph kullanıyorsan, Proxmox web arayüzü Ceph için özel bir izleme paneli sunar. Komut satırından ise:
# Ceph cluster durumu
ceph status
# OSD'lerin I/O istatistikleri
ceph osd perf
# Pool bazlı istatistikler
ceph df detail
# Anlık Ceph I/O izleme
watch -n 2 ceph -s
# OSD tree görüntüleme
ceph osd tree
Ağ Performansı İzleme
VM’ler arası ağ trafiği veya dış ağ bağlantısı, performans sorunlarının bir diğer sık kaynağıdır.
# Ağ arayüzlerinin anlık istatistikleri
ip -s link show
# Belirli arayüzü izleme (örneğin vmbr0)
watch -n 1 'ip -s link show vmbr0'
# iftop ile gerçek zamanlı bant genişliği kullanımı
iftop -i vmbr0
# nethogs ile hangi prosesin ne kadar ağ kullandığı
nethogs vmbr0
# VM'e atanmış sanal NIC üzerindeki trafiği görme
# tap arayüzleri VM'lere karşılık gelir
ip -s link show | grep -A5 "tap"
nload ile Grafik Ağ İzleme
# nload kurulumu (eğer yoksa)
apt-get install nload
# vmbr0 arayüzünü izleme
nload vmbr0
# Tüm arayüzleri gezmek için ok tuşlarını kullan
nload
Web Arayüzü Grafiklerini Etkin Kullanmak
Proxmox web arayüzünde her node, VM ve CT için farklı zaman dilimlerinde grafikler görüntüleyebilirsin. Bunu verimli kullanmak için bazı pratik ipuçları:
Node seviyesinde izleme: Datacenter > Node adı > Summary ekranında CPU, RAM, ağ ve disk trafiğini görebilirsin. Sağ üst köşedeki zaman aralığı seçicisiyle (Hour, Day, Week, Month, Year) geçmişe bakabilirsin.
VM/CT bazlı izleme: Her VM/CT’nin Summary sekmesi benzer grafikler sunar. Özellikle “I/O delay” grafiği disk sorunlarını tespit etmek için kritiktir.
Proxmox 8.x ile gelen iyileştirmeler: Proxmox 8.0 ve sonrasında firewall istatistikleri, daha detaylı NUMA topoloji bilgisi ve geliştirilmiş CPU/bellek grafikler sunulmaktadır.
Gerçek Dünya Senaryosu: VM Performans Sorununu Tespit Etmek
Bir üretim ortamında yaşadığım senaryoyu paylaşayım. Müşterinin şikayeti şuydu: “Veritabanı VM’imiz gece 02:00-04:00 arasında aşırı yavaşlıyor.”
Önce Proxmox web arayüzünden o saatlere ait grafiklere baktım. CPU grafiği normalken, I/O delay grafiğinde belirgin bir artış vardı. Ardından komut satırına geçtim:
# Gece yarısı cron job'larını kontrol etmek için
# Önce storage istatistiklerini loglayacak bir script hazırladım
cat > /root/monitor_io.sh << 'EOF'
#!/bin/bash
LOGFILE="/var/log/proxmox_io_monitor.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "=== $DATE ===" >> $LOGFILE
iostat -xz 1 3 >> $LOGFILE
echo "--- Top I/O Processes ---" >> $LOGFILE
iotop -b -n 3 -o >> $LOGFILE
echo "" >> $LOGFILE
EOF
chmod +x /root/monitor_io.sh
# Her 15 dakikada bir çalışacak cron job ekle
echo "*/15 * * * * root /root/monitor_io.sh" > /etc/cron.d/proxmox_io_monitor
Sabah logları incelediğimde, gece 02:30’da Proxmox’un otomatik backup işleminin (vzdump) çalıştığını ve tüm depolama sistemini kasıp kavurduğunu gördüm. Çözüm olarak backup zamanlamasını değiştirdik ve backup I/O önceliğini düşürdük:
# vzdump için I/O önceliğini düşürme
# /etc/vzdump.conf dosyasını düzenle
echo "ionice: 7" >> /etc/vzdump.conf
echo "bwlimit: 51200" >> /etc/vzdump.conf # 50MB/s ile sınırla
Kapsamlı Kaynak Özeti Script’i
Proxmox node’larını düzenli olarak izlemek için kullanabileceğin bir script:
#!/bin/bash
# proxmox_health_check.sh
# Node ve VM sağlık durumunu özetler
echo "========================================="
echo " PROXMOX NODE HEALTH CHECK"
echo " $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================="
echo ""
echo "### NODE KAYNAK KULLANIMI ###"
echo "CPU Çekirdek Sayısı: $(nproc)"
echo "Yük Ortalaması: $(uptime | awk -F'load average:' '{print $2}')"
echo "RAM Kullanımı:"
free -h | grep -E "Mem|Swap"
echo ""
echo "### ÇALIŞAN VM'LER VE KAYNAK KULLANIMI ###"
pvesh get /nodes/$(hostname)/qemu --output-format json 2>/dev/null |
jq -r '.[] | select(.status=="running") |
"VM (.vmid) [(.name)]: CPU=(.cpu*100|round)% MEM=((.mem/1024/1024)|round)MB/((.maxmem/1024/1024)|round)MB"'
echo ""
echo "### ÇALIŞAN KONTEYNERLER ###"
pvesh get /nodes/$(hostname)/lxc --output-format json 2>/dev/null |
jq -r '.[] | select(.status=="running") |
"CT (.vmid) [(.name)]: CPU=(.cpu*100|round)% MEM=((.mem/1024/1024)|round)MB"'
echo ""
echo "### DEPOLAMA DURUMU ###"
pvesh get /nodes/$(hostname)/storage --output-format json 2>/dev/null |
jq -r '.[] | select(.active==1) |
"Storage [(.storage)]: ((.used/1024/1024/1024)|round)GB / ((.total/1024/1024/1024)|round)GB kullanımda"'
echo ""
echo "### SON 5 DK DISK I/O ###"
iostat -xz 1 3 | grep -E "Device|sda|sdb|dm-" | tail -20
Prometheus ve Grafana ile Uzun Vadeli İzleme
Proxmox’un yerleşik araçları anlık ve kısa vadeli izleme için yeterliyken, uzun vadeli trend analizi için dışarıya veri aktarmak gerekir. Proxmox, influxdb ve graphite protokollerini destekler.
Datacenter > Options > Metric Server bölümünden InfluxDB veya Graphite sunucunuzu ekleyebilirsiniz. Prometheus için ise topluluk tarafından geliştirilen prometheus-pve-exporter kullanılabilir:
# pip ile prometheus-pve-exporter kurulumu
pip3 install prometheus-pve-exporter
# Konfigürasyon dosyası oluşturma
cat > /etc/pve_exporter.yml << EOF
default:
user: monitoring@pve
password: guclu_bir_sifre
verify_ssl: false
EOF
# Servisi başlatma
pve_exporter /etc/pve_exporter.yml 9221 &
# Prometheus'ta scrape config ekle (prometheus.yml)
# - job_name: 'proxmox'
# static_configs:
# - targets: ['pve-node-ip:9221']
# metrics_path: /pve
# params:
# module: [default]
Prometheus ve Grafana entegrasyonu kurulduktan sonra, Grafana Marketplace’teki “Proxmox VE” dashboard’larını kullanarak çok daha zengin görselleştirmeler elde edebilirsin.
CPU ve NUMA Topolojisi İzleme
Çok soketli sistemlerde veya yüksek çekirdek sayılı sunucularda NUMA mimarisi, VM performansını doğrudan etkiler. Proxmox bu konuda da yardımcı araçlar sunar:
# NUMA topolojisini görmek
numactl --hardware
# NUMA istatistiklerini izleme
numastat
# Belirli bir VM'in NUMA yerleşimini kontrol etme
qm config 100 | grep numa
# Bir VM için NUMA bağlamayı aktifleştirme (konfigürasyon)
# qm set 100 --numa 1
# qm set 100 --numa0 cpus=0-7,memory=0
# CPU pinning durumunu kontrol etme
taskset -cp $(pgrep -f "kvm.*100")
NUMA ipucu: Eğer VM’in vCPU sayısı tek bir NUMA node’undaki fiziksel çekirdek sayısını aşıyorsa, performans belirgin şekilde düşebilir. numactl --hardware çıktısında her node’daki çekirdek sayısını kontrol et.
Bellek Balon Sürücüsü (Memory Ballooning) İzleme
Proxmox’ta VM’lere varsayılan olarak memory ballooning aktiftir. Bu, VM’lerin ihtiyaç duymadıkları belleği host’a geri vermesini sağlar. Ancak bazen bu mekanizma sorunlara yol açabilir:
# Balloon driver durumunu kontrol etme
qm monitor 100
# Monitor konsolunda:
# info balloon
# Komut satırından balloon bilgisi
qm agent 100 get-memory-block-info 2>/dev/null || echo "QEMU Agent gerekli"
# Balloon'u belirli bir VM için devre dışı bırakma
# (performans kritik VM'ler için önerilir)
qm set 100 --balloon 0
# Tüm VM'lerin balloon ayarlarını listeleme
for vmid in $(qm list | awk 'NR>1 {print $1}'); do
balloon=$(qm config $vmid | grep "^balloon:" | awk '{print $2}')
name=$(qm config $vmid | grep "^name:" | awk '{print $2}')
echo "VM $vmid ($name): balloon=$balloon"
done
Proxmox Cluster Ortamında İzleme
Birden fazla node’dan oluşan bir cluster varsa, izleme biraz daha karmaşık hale gelir:
# Cluster durumunu kontrol etme
pvecm status
# Tüm node'ların kaynak bilgilerini listeleme
for node in $(pvecm nodes | awk 'NR>1 {print $3}'); do
echo "--- Node: $node ---"
pvesh get /nodes/$node/status 2>/dev/null |
jq '{cpu: .cpu, memory_used: (.memory.used/1024/1024/1024 | round),
memory_total: (.memory.total/1024/1024/1024 | round)}'
done
# Cluster genelinde VM dağılımını görme
pvesh get /cluster/resources --type vm --output-format json |
jq -r '.[] | "(.node) - (.type) (.vmid) [(.name)]: (.status)"' |
sort
Uyarı ve Alarm Kurulumu
İzleme yapmak tek başına yeterli değil; kritik eşikler aşıldığında bildirim almak da gerekir. Proxmox’un yerleşik bildirim sistemi sınırlı olduğundan, basit bir shell script ile email bildirimi kurabilirsin:
#!/bin/bash
# /usr/local/bin/pve_alert.sh
# Cron ile her 5 dakikada çalıştır
ALERT_EMAIL="[email protected]"
HOSTNAME=$(hostname)
ALERT=0
MESAJ=""
# CPU kontrolü (80% üzeri uyar)
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1 | cut -d',' -f1)
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
ALERT=1
MESAJ+="UYARI: CPU kullanimi yuksek: %$CPU_USAGEn"
fi
# RAM kontrolü (90% üzeri uyar)
RAM_PERCENT=$(free | grep Mem | awk '{print int($3/$2 * 100)}')
if [ $RAM_PERCENT -gt 90 ]; then
ALERT=1
MESAJ+="UYARI: RAM kullanimi yuksek: %$RAM_PERCENTn"
fi
# Disk doluluk kontrolü (%85 üzeri uyar)
while IFS= read -r line; do
KULLANIM=$(echo $line | awk '{print $5}' | tr -d '%')
MOUNT=$(echo $line | awk '{print $6}')
if [ "$KULLANIM" -gt 85 ] 2>/dev/null; then
ALERT=1
MESAJ+="UYARI: Disk doluluk: $MOUNT = %$KULLANIMn"
fi
done < <(df -h | grep -vE "tmpfs|udev|Filesystem")
# Alarm varsa email gönder
if [ $ALERT -eq 1 ]; then
echo -e "Node: $HOSTNAMEnZaman: $(date)nn$MESAJ" |
mail -s "[PROXMOX ALARM] $HOSTNAME" $ALERT_EMAIL
fi
Sonuç
Proxmox ortamında kaynak izleme ve performans analizi, tek bir araçla yapılacak bir iş değil. Web arayüzündeki RRD grafikleri hızlı bir genel bakış sunar, pvesh ve qm/pct komutları programatik erişim için mükemmeldir, iostat ve iotop disk sorunlarını tespit eder, pveperf ise temel benchmark ihtiyacını karşılar.
Gerçek üretim ortamlarında en kritik nokta şudur: Sorun çıkmadan önce normal davranışı bilmek. Baseline değerlerini kayıt altına almadan izleme yapmak, neyin anormal olduğunu anlayamamak demektir. Bu yüzden sistemi kurduğun ilk günden itibaren düzenli loglar tut, pveperf ile depolama benchmarkları al ve Prometheus/Grafana gibi uzun vadeli izleme araçlarına yatırım yap.
Cluster’ın büyüdükçe, manuel izlemenin sınırlarına çok hızlı çarparsın. O noktada harici izleme sistemlerine geçmek bir tercih değil, zorunluluk haline gelir. Ama bu yazıdaki araçlarla başlayarak, Proxmox altyapını ne kadar derinlemesine anlayabileceğini göreceksin.