Bir sunucuda log, kuyruk, API, veritabanı ve sistem metriklerini aynı anda izlemek bazen dedektiflik oyunu gibidir: ipucu bir yerde akar, hata başka yerde patlar. Bu yazıda kabuk betikleri ve tmux kullanarak ekranı satranç tahtası gibi bölen, her bölmede ayrı bir sürecin canlı çıktısını gösteren eğlenceli ama işe yarar bir izleme konsolu hazırlayacağız. ``
Fikir: Terminali Tahtaya Çevirmek
tmux, tek terminal içinde birden fazla pencere ve bölme yönetmemizi sağlayan terminal multiplexer aracıdır. Mantık basittir: bir tmux oturumu açarız, ekranı satır ve sütunlara böleriz, sonra her bölmeye farklı komut göndeririz.
Bir satranç tahtası 8x8 olabilir ama izleme konsolunda genelde 2x2, 2x3 veya 3x3 daha okunabilirdir. Matematiksel olarak toplam panel sayısını şöyle düşünebiliriz:
$P = r \times c$
Burada $r$ satır sayısı, $c$ sütun sayısıdır. Örneğin 3 satır ve 2 sütun için $P = 3 \times 2 = 6$ panel elde ederiz. Panel sayısı arttıkça görünürlük azalır; bu yüzden amaç “her şeyi göstermek” değil, “kritik şeyleri aynı anda okumak” olmalıdır.
| Düzen | Panel Sayısı | Kullanım Senaryosu | Okunabilirlik |
|---|---|---|---|
| 2x2 | 4 | Küçük servis izleme | Çok iyi |
| 2x3 | 6 | API + worker + DB + log | İyi |
| 3x3 | 9 | Yoğun geliştirme ortamı | Orta |
| 4x4 | 16 | Gösterişli demo | Zayıf |
İzlenecek Süreçleri Tanımlamak
Önce her panelde çalışacak komutları düşünelim. Bunlar gerçek servis komutları olabileceği gibi geliştirme sırasında kullanılan basit izleyiciler de olabilir.
| Panel | Komut | Amaç |
|---|---|---|
| API Log | tail -f logs/api.log |
HTTP isteklerini izleme |
| Worker | npm run worker |
Kuyruk tüketicisini çalıştırma |
| Sistem | htop |
CPU ve RAM gözlemi |
| Docker | docker stats |
Container kaynak kullanımı |
| Test | watch -n 2 npm test |
Testleri periyodik koşturma |
| Disk | watch -n 5 df -h |
Disk doluluğu kontrolü |
Bu yaklaşımın güzelliği şudur: tmux sadece ekranı böler; asıl zeka kabuk betiğinde hangi komutun nereye gideceğini tarif etmektedir.
Betik: monitor.sh
Aşağıdaki betik 2x3 benzeri karo düzeninde bir tmux oturumu oluşturur ve her bölmeye ayrı komut yollar. Kod orta seviyededir: tmux komutlarını fonksiyonlaştırır, oturum zaten varsa yeniden bağlanır.
#!/usr/bin/env bash
set -euo pipefail
SESSION='watchboard'
commands=(
'echo API log; tail -f logs/api.log'
'echo Worker; npm run worker'
'echo System; htop'
'echo Docker; docker stats'
'echo Tests; watch -n 2 npm test'
'echo Disk; watch -n 5 df -h'
)
if tmux has-session -t "$SESSION" 2>/dev/null; then
tmux attach -t "$SESSION"
exit 0
fi
tmux new-session -d -s "$SESSION" -n board
# İlk panel zaten var. Diğer panelleri oluştur.
for i in 1 2 3 4 5; do
tmux split-window -t "$SESSION":0
tmux select-layout -t "$SESSION":0 tiled
done
# Komutları panellere gönder.
for i in "${!commands[@]}"; do
tmux send-keys -t "$SESSION":0.$i "${commands[$i]}" C-m
done
tmux select-layout -t "$SESSION":0 tiled
tmux attach -t "$SESSION"
Çalıştırmak için:
chmod +x monitor.sh
./monitor.sh
Burada split-window yeni bölme açar, select-layout tiled bölmeleri otomatik olarak karo düzene sokar, send-keys ise seçilen bölmeye klavyeden yazıyormuşuz gibi komut gönderir. Yani betik aslında görünmez bir operatör gibi davranır.
Neden tmux, Neden Sadece Terminal Değil?
Normalde altı terminal penceresi açabilirsiniz; fakat bu hem dağınıktır hem de uzak sunucuda çalışırken kullanışsızdır. tmux tek SSH bağlantısı içinde bütün panelleri korur. Bağlantınız koparsa süreçler yaşamaya devam eder.
| Özellik | Çoklu Terminal | tmux Konsolu |
|---|---|---|
| SSH kopunca durum | Genelde kaybolur | Oturum korunur |
| Düzen tekrarı | Elle yapılır | Betikle otomatik |
| Taşınabilirlik | Düşük | Yüksek |
| Klavye odaklı kullanım | Orta | Çok iyi |
Küçük İyileştirmeler
Panel başlıklarını renklendirmek için komutların başına printf ekleyebilirsiniz. Ayrıca kritik loglarda grep --line-buffered ERROR kullanarak sadece hataları gösterebilirsiniz. Eğer panel sayınız $P > 9$ oluyorsa, okunabilirlik maliyeti artar; bunu kabaca $O(P)$ dikkat yükü gibi düşünebiliriz. Yani panel sayısı arttıkça beyninizin sekme yönetimi de artar.
Sonuç
Kabuk betikleri ve tmux birleşince terminal basit bir siyah ekran olmaktan çıkıp canlı bir kontrol paneline dönüşür. Bu yapı özellikle mikroservis geliştirme, worker takibi, Docker izleme ve hızlı hata ayıklama için harikadır. En güzel tarafı da şu: Bir kez yazarsınız, sonra her sabah kahvenizi alıp ./monitor.sh dersiniz; satranç tahtanız açılır ve hamle sırası artık sizdedir.
Yorumlar