Terminator ile Çoklu Terminal Oturumlarında Süreç İzleme Düzeni Oluşturma
Üretim ortamında bir şeyler ters gittiğinde, ekranın başında hangi terminale bakacağını bilememek kadar sinir bozucu bir şey yoktur. Birden fazla SSH bağlantısı, farklı sunucularda koşan servisler, log takibi, kaynak izleme… Hepsi aynı anda. İşte tam burada Terminator devreye giriyor ve masaüstü ortamını gerçek bir izleme merkezine dönüştürüyor.
Terminator Nedir ve Neden Buna İhtiyacımız Var
Terminator, GTK tabanlı bir terminal emülatörü olup tek pencereyi yatay ve dikey olarak istediğiniz kadar bölmenize olanak tanıyor. tmux veya screen gibi araçlara kıyasla görsel olarak daha sezgisel çalışıyor; bölmeleri fare ile yeniden boyutlandırabiliyorsunuz, profil kaydedebiliyorsunuz, hatta birden fazla panele aynı anda komut gönderebiliyorsunuz.
Üretim ortamı izleme söz konusu olduğunda Terminator’ı tercih etmemin temel nedeni şu: Müdahale anında mümkün olduğunca az bilişsel yük taşımak istiyorum. Her şeyin nerede olduğunu önceden kurgulamak, kriz anında zihinsel bant genişliğimi asıl sorunun çözümüne ayırmamı sağlıyor.
Kurulum oldukça basit:
# Debian/Ubuntu tabanlı sistemler
sudo apt update && sudo apt install terminator
# RHEL/CentOS/Fedora tabanlı sistemler
sudo dnf install terminator
# Arch tabanlı sistemler
sudo pacman -S terminator
Kurulumun ardından masaüstü uygulamalar menüsünden veya doğrudan terminalden terminator komutuyla açabilirsiniz.
Temel Bölme Mantığını Kavramak
Terminator’ın güzelliği bölme (split) modelinde yatıyor. Her terminal penceresi, birbirinden bağımsız çalışan panellere ayrılabiliyor. Bölme işlemleri için klavye kısayolları:
- Ctrl+Shift+E: Dikey bölme (yan yana iki panel)
- Ctrl+Shift+O: Yatay bölme (alt alta iki panel)
- Ctrl+Shift+W: Aktif paneli kapatma
- Ctrl+Shift+Q: Terminator’ı tamamen kapatma
- Ctrl+Tab: Sonraki panele geçme
- Alt+Ok tuşları: Paneller arası gezinme
Paneller arasındaki çizgiyi fare ile sürükleyerek istediğiniz boyuta ayarlayabilirsiniz. Bu özelliği özellikle log çıktısı yoğun olan panelleri biraz daha geniş tutmak için sık kullanıyorum.
Süreç İzleme için Düzen Tasarımı
İzleme düzenini kurmadan önce neyi izleyeceğinizi net tanımlamanız gerekiyor. Tipik bir web uygulaması altyapısı için şu bilgilere ihtiyaç duyulur:
- Sistem kaynak kullanımı (CPU, RAM, disk I/O)
- Ağ trafiği
- Uygulama logları
- Veritabanı bağlantı sayısı ve sorgu performansı
- Servis durumu
Bu gereksinimleri göz önünde bulundurarak 2×2 veya 3×2 gibi bir panel düzeni oluşturmak mantıklı. Ben genellikle şu düzeni kullanıyorum:
+---------------------------+---------------------------+
| | |
| htop / sistem kaynakları| ağ trafiği izleme |
| | |
+---------------------------+---------------------------+
| | |
| uygulama logları | veritabanı izleme |
| | |
+---------------------------+---------------------------+
| |
| komut paneli (müdahale için) |
+-------------------------------------------------------+
Bu düzeni manuel olarak her açılışta kurmak can sıkıcı olduğundan Terminator’ın layout kaydetme özelliğini kullanıyoruz.
Layout Dosyası Oluşturma ve Yapılandırma
Terminator, yapılandırmasını ~/.config/terminator/config dosyasında tutuyor. Bu dosyayı doğrudan düzenleyerek özel layout’lar tanımlayabilirsiniz.
mkdir -p ~/.config/terminator
nano ~/.config/terminator/config
Temel bir izleme layout’u için örnek yapılandırma:
[global_config]
title_transmit_bg_color = "#ff0000"
title_receive_bg_color = "#0076c9"
[keybindings]
[profiles]
[[default]]
background_color = "#1a1a2e"
foreground_color = "#e0e0e0"
font = Monospace 10
scrollback_lines = 5000
[[monitor]]
background_color = "#0d0d0d"
foreground_color = "#00ff41"
font = Monospace 9
scrollback_lines = 10000
[layouts]
[[monitoring_layout]]
[[[root]]]
type = VPaned
ratio = 0.7
[[[top]]]
parent = root
type = HPaned
ratio = 0.5
[[[top_left]]]
parent = top
type = Terminal
profile = monitor
command = htop
[[[top_right]]]
parent = top
type = Terminal
profile = monitor
[[[bottom]]]
parent = root
type = Terminal
profile = default
[plugins]
Bu yapılandırmayı kaydettikten sonra layout’u şu şekilde açabilirsiniz:
terminator -l monitoring_layout
Panellere Otomatik Komut Gönderme
Layout açıldığında her panelde ne çalıştırılacağını önceden belirlemek istiyorsunuz. Bunun için iki yöntem var: config dosyasındaki command parametresi veya bir shell script aracılığıyla otomatik komut enjeksiyonu.
Config dosyası yöntemiyle her panele başlangıç komutu atayabilirsiniz:
[[[kaynak_izleme]]]
parent = top_left
type = Terminal
profile = monitor
command = htop
Ancak daha esnek bir kurulum için bash scripti tercih ediyorum. xdotool veya wmctrl gibi araçlarla pencere ve klavye olaylarını simüle etmek mümkün, fakat en temiz yöntem Terminator’ın --execute seçeneğini kullanmak:
#!/bin/bash
# monitoring_start.sh
terminator
--layout=monitoring_layout
&
sleep 2
# Terminator penceresi açıldıktan sonra
# belirli bir panele odaklanıp komut göndermek için
# xdotool kullanılabilir
Daha pratik bir yaklaşım olarak layout config’inde command alanlarını doldurmak:
# Config'deki terminal tanımlamasına ekle:
# command = bash -c 'ssh kullanici@sunucu1 "watch -n2 df -h"; bash'
# command = bash -c 'ssh kullanici@sunucu2 "tail -f /var/log/nginx/access.log"; bash'
Gerçek Dünya Senaryosu: Web Sunucusu İzleme Düzeni
Diyelim ki nginx ile çalışan bir web sunucusunu, arkasındaki PHP-FPM servisini ve PostgreSQL veritabanını izlemeniz gerekiyor. Şöyle bir script hazırlayalım:
#!/bin/bash
# webstack_monitor.sh
# Kullanim: ./webstack_monitor.sh [sunucu_ip]
SUNUCU=${1:-"192.168.1.100"}
KULLANICI="sysadmin"
terminator --geometry 1920x1080 &
TERMINATOR_PID=$!
sleep 1.5
# Sol üst panel - sistem kaynak izleme
# Sağ üst panel - nginx log takibi
# Sol alt panel - php-fpm durumu
# Sağ alt panel - postgresql bağlantı sayısı
# Bu panellere SSH üzerinden bağlantı kurulacak
# ve ilgili komutlar çalıştırılacak
echo "Terminator PID: $TERMINATOR_PID"
echo "İzleme düzeni hazırlandı."
Birden fazla sunucuyu izleyecekseniz her sunucu için ayrı bir Terminator sekmesi oluşturabilirsiniz. Sekmeler için kısayollar:
- Ctrl+Shift+T: Yeni sekme
- Ctrl+PageUp/PageDown: Sekmeler arası geçiş
- Ctrl+Shift+PageUp/PageDown: Sekmeleri yeniden sıralama
Broadcast Özelliği ile Toplu Komut Gönderme
Terminator’ın en güçlü özelliklerinden biri tüm panellere veya seçili panellere aynı anda komut gönderebilmek. Bu özelliğe broadcast deniyor.
- Broadcast All: Tüm panellere aynı komutu gönderir
- Broadcast Group: Aynı gruptaki panellere gönderir
- Broadcast Off: Normal tekli mod
Sağ tık menüsünden veya şu kısayollarla erişebilirsiniz:
- Ctrl+Shift+A: Broadcast All
- Ctrl+Shift+G: Broadcast Group
Broadcast özelliği özellikle şu senaryolarda hayat kurtarıyor: Birden fazla web sunucusunda aynı anda log rotasyonu başlatmak, cluster node’larında servis yeniden başlatmak veya toplu paket güncellemesi yapmak. Ancak dikkatli olmak gerekiyor; broadcast açıkken yanlış bir komut göndermek felaket olabilir.
Süreç İzleme Komutlarını Panel Bazında Organize Etme
Her panelin sorumluluğunu net belirlemek gerekiyor. Şu kombinasyonu kullanıyorum:
Panel 1 – Sistem Kaynakları:
# htop yerine daha fazla bilgi için
top -d 2 -u www-data
# Veya disk I/O odaklı izleme için
iostat -x 2
# Ya da her ikisini birleştirmek için
watch -n 2 'echo "=== CPU/MEM ===" && vmstat 1 3 && echo "=== DISK I/O ===" && iostat -x 1 2'
Panel 2 – Ağ İzleme:
# Bağlantı sayısını canlı takip
watch -n 1 'ss -s && echo "---" && ss -tnp | grep ESTABLISHED | wc -l'
# Ağ arayüzü trafik istatistikleri
watch -n 2 'cat /proc/net/dev | grep -E "eth|ens|eno" | awk "{print $1, $2, $10}"'
# Ya da iftop kuruluysa
iftop -i eth0 -n
Panel 3 – Uygulama Logları:
# Nginx error log + access log birlikte
tail -f /var/log/nginx/error.log /var/log/nginx/access.log
# Sadece 4xx ve 5xx hataları filtrele
tail -f /var/log/nginx/access.log | grep -E '" [45][0-9]{2} '
# Systemd journal üzerinden servis logları
journalctl -fu nginx --no-pager
Panel 4 – Servis Durumu:
# Kritik servislerin durumunu periyodik kontrol
watch -n 5 'systemctl is-active nginx php8.1-fpm postgresql | paste - - - && systemctl status nginx --no-pager -n 3'
Renk Kodlaması ve Görsel Hiyerarşi
Terminator profilleri sayesinde her panele farklı renk teması atayabilirsiniz. Bu görsel ayrım, bakışta hangi panelin ne işe yaradığını hemen anlamanızı sağlıyor.
Config dosyasına şu profilleri ekleyebilirsiniz:
[profiles]
[[sistem_izleme]]
background_color = "#0a0a0a"
foreground_color = "#00d4ff"
cursor_color = "#00d4ff"
font = Monospace 10
[[log_takibi]]
background_color = "#1a0a00"
foreground_color = "#ffaa00"
cursor_color = "#ffaa00"
font = Monospace 9
[[kritik_uyari]]
background_color = "#1a0000"
foreground_color = "#ff4444"
cursor_color = "#ff4444"
font = Monospace 10
[[komut_paneli]]
background_color = "#001a0a"
foreground_color = "#44ff88"
cursor_color = "#44ff88"
font = Monospace 11
Mavi tonlu panel sistem izleme, turuncu panel log takibi, kırmızı tonlu panel kritik servisler için olduğunu görsel olarak anında ayırt edebiliyorsunuz.
Terminator ile watch Komutunun Entegrasyonu
watch komutu, Terminator panellerinde çok güçlü bir ikili oluşturuyor. Özellikle -d (değişen değerleri vurgula) ve -c (renk desteği) seçenekleriyle birlikte kullanıldığında:
# Değişen değerleri vurgulayarak disk kullanımını takip et
watch -n 5 -d 'df -h | grep -v tmpfs'
# Aktif TCP bağlantı sayısını duruma göre renklendir
watch -n 1 -c 'ss -tnp | awk "NR>1{print $1}" | sort | uniq -c | sort -rn'
# Process listesini CPU kullanımına göre sıralı izle
watch -n 2 -d 'ps aux --sort=-%cpu | head -15'
# Birden fazla servisi aynı anda izle
watch -n 3 '
echo "=== NGINX ===" && curl -s -o /dev/null -w "%{http_code} - %{time_total}s" http://localhost/
echo ""
echo "=== PHP-FPM ===" && systemctl is-active php8.1-fpm
echo ""
echo "=== DB CONNECTIONS ===" && psql -U postgres -c "SELECT count(*) FROM pg_stat_activity;" 2>/dev/null || echo "DB bağlantısı yok"
'
Oturum Kaydetme ve Acil Durum Hazırlığı
Bir olay yaşandığında izleme düzeninizi sıfırdan kurmak istemezsiniz. Terminator’ın mevcut layout’unu kaydetmek için:
# Mevcut layout'u dışa aktar
# Terminator GUI'de: Tercihler > Layouts > Save
# Config dosyasından yedek al
cp ~/.config/terminator/config ~/.config/terminator/config.backup.$(date +%Y%m%d)
Farklı senaryolar için birden fazla layout tanımlamak iyi bir alışkanlık:
- normal_izleme: Günlük rutin izleme
- incident_modu: Olay müdahalesi sırasında daha fazla log paneli
- performans_analizi: Detaylı kaynak izleme ve profiling araçları
- deployment_izleme: Deployment sırasında özel log ve metrik panelleri
Panel Başlıklarını Anlamlı Tutmak
Her panele başlık atanamak, çok sayıda panel açıkken neyin nerede olduğunu takip etmeyi kolaylaştırıyor. Terminator’da panel başlığını değiştirmek için:
- Panele sağ tıklayın
- “Set Custom Window Title” seçin
Ya da shell tarafından title set etmek için:
# Bash'te terminal başlığını dinamik olarak ayarla
echo -ne "33]0;Nginx Log - Sunucu107"
# Bu satırı izleme scriptinizin başına ekleyebilirsiniz
set_panel_title() {
echo -ne "33]0;${1}07"
}
# Kullanim:
set_panel_title "PostgreSQL Monitor - DB01"
watch -n 5 'psql -U postgres -c "SELECT count(*), state FROM pg_stat_activity GROUP BY state;"'
Yaygın Hatalar ve Dikkat Edilmesi Gerekenler
Terminator ile izleme düzeni kurarken karşılaşılan tipik sorunlar:
Broadcast modunun açık kalması: Broadcast All açıkken başka bir işlemle ilgilenirken yanlış terminal penceresine komut girebilirsiniz. Broadcast modunu aktif kullandığınız anlarda başlık çubuğu rengi değişiyor; buna dikkat edin.
Çok fazla panel açmak: 8-10 panelin üzerine çıkmak okunabilirliği düşürüyor. Her panel en az 80×24 karakter gösterebilecek boyutta olmalı.
watch aralıklarını düşük tutmak: Her panel 1 saniyede bir güncelliyorsa hem görsel karmaşa hem de sistem yükü artar. Kritik metrikler için 1-2 saniye, genel izleme için 5-10 saniye daha makul.
SSH bağlantılarını yönetmek: Panel başına bir SSH bağlantısı tutuyorsanız, SSH timeout ayarlarınızı gözden geçirin. ~/.ssh/config dosyasına şunu eklemek faydalı:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
ConnectTimeout 10
Sonuç
Terminator ile kurduğunuz izleme düzeni, sizi olay anında “hangi terminale bakacağım” telaşından kurtarır ve gerçek sorunun üzerine odaklanmanızı sağlar. Yatırım yaptığınız bu kurulum zamanı, ilk ciddi incident’ta kendini birkaç kat geri öder.
Burada anlattıklarım temel bir çerçeve; kendi altyapınızın gereksinimlerine göre bu düzeni şekillendirmeniz gerekiyor. Hangi servislerin kritik olduğu, hangi metriklerin sizin için anlam ifade ettiği tamamen size ve ekibinize özgü. Önemli olan bu kararları önceden vermek ve her şey yolunda giderken izleme düzeninizi test etmek.
Bir sonraki adım olarak bu yapıyı Grafana veya Netdata gibi araçlarla zenginleştirmeyi ve Terminator layout’larınızı git reponuzda takip etmeyi düşünebilirsiniz. Böylece yeni bir sunucuya geçtiğinizde veya takım arkadaşlarınızla paylaşmanız gerektiğinde her şey hazır olur.
