- Witr (why-is-this-running), Linux sistemlerinde belirli bir süreç, servis veya portun neden çalıştığını açıkça gösteren bir araçtır
- Geleneksel
ps, top, lsof gibi araçlar yalnızca “neyin çalıştığını” gösterirken, bu araç “neden çalıştığına” dair nedensel ilişkiyi tek ekranda gösterir
- PID tabanlı analiz ile sürecin kökenini, çalışma yolunu, ayakta kalma nedenini ve ait olduğu bağlamı izler
- systemd, docker, pm2, cron, shell gibi çeşitli kaynaklarla ilişki kurarak çalışma nedenini açıklar ve salt okunur, yıkıcı olmayan şekilde çalışır
- Hata ayıklama ve arıza müdahalesi sırasında anlama süresini kısaltan, karmaşık sistemlerin çalışma yapısını tek bakışta kavramayı sağlayan bir araçtır
Amaç ve kavram
- Witr'ın temel sorusu “Bu neden çalışıyor? (why-is-this-running)”dır
- Süreç, servis, port gibi çalışan tüm öğelerin kökenini ve nedenini izler
- Birden çok katmana yayılan (supervisor, container, service, shell vb.) dolaylı çalışma nedenlerini açık biçimde gösterir
- Mevcut araçlar yalnızca durum ve meta veri sunarken, Witr nedensel ilişkiyi net biçimde ifade eder
- Sonuç olarak “neyin, nasıl, neden ve hangi bağlamda çalıştığını” insanların kolay okuyabileceği bir biçimde çıktı olarak verir
Başlıca hedefler
- Bir sürecin neden var olduğunu açıklamak ve yalnızca çalışıp çalışmadığı bilgisinin ötesine geçmek
- Hata ayıklama ve arıza müdahalesi süresini kısaltmak
- Yapılandırma gerektirmeden hemen kullanılabilmek, salt okunur ve güvenli olmak
- Tamlıktan çok açıklığı önceliklendirmek
- İzleme, performans analizi ve otomatik iyileştirme özellikleri içermez
Çalışma prensibi
- Tüm hedefleri süreç (PID) merkezli yorumlar
- Portlar, servisler, container'lar ve komutların tümü PID üzerinden bağlanır
- PID temelinde bir çalışma nedensellik zinciri (causal chain) kurar
- Dört temel soru
- Ne çalışıyor
- Nasıl başlatıldı
- Onu ayakta tutan nedir
- Hangi bağlama ait
Desteklenen hedefler
- Girdi olarak süreç/servis adı, PID ve port numarası desteklenir
- Ad girildiğinde birden fazla süreç eşleşirse PID seçmesi istenir
--pid, --port seçenekleriyle belirli bir süreç veya port üzerinden analiz yapılabilir
Çıktı yapısı
- Target: Kullanıcının belirttiği hedef
- Process: Çalıştırılabilir dosya, PID, kullanıcı, komut, başlangıç zamanı, yeniden başlatma sayısı
- Why It Exists: Sürecin nedensel soy zinciri (ancestry chain)
- Source: Çalıştırmadan sorumlu ana sistem (ör. systemd, docker, pm2, cron, shell'den biri)
- Context: Çalışma dizini, Git deposu, Docker container'ı, bind bilgileri vb.
- Warnings: root yetkisiyle çalışma, ortak arayüzde dinleme, uzun süre çalışma, aşırı bellek kullanımı gibi engelleyici olmayan uyarılar
Komut satırı seçenekleri
--pid, --port: Belirli PID veya portu analiz etme
--short: Tek satırlık özet
--tree: Tüm süreç ağacını gösterme
--json: JSON biçiminde çıktı
--warnings: Yalnızca uyarıları gösterme
--no-color: Renkleri devre dışı bırakma
--env: Yalnızca ortam değişkenlerini gösterme
--help: Yardımı gösterme
Kurulum ve kaldırma
- Tek bir statik Linux ikili dosyası olarak dağıtılır
- Betikle kurulum (önerilen)
- Elle kurulum
amd64, arm64 için ikili dosyaları doğrudan indirip sağlama toplamını doğrulama
- Çalıştırma izni verip PATH içine taşıma
- Doğrulama ve kaldırma
witr --version, man witr ile doğrulanabilir
sudo rm -f /usr/local/bin/witr ile kaldırılabilir
- Nix Flake desteği:
nix run github:pranshuparmar/witr -- --port 5000 ile çalıştırılabilir
Platform ve yetkiler
- Yalnızca Linux
- Bilgileri
/proc erişimi üzerinden toplar
- Bazı süreç bilgilerini görmek için sudo yetkisi gerekebilir
1 yorum
Hacker News yorumları
README'deki GIF döngüsünün çok hızlı yeniden başlaması nedeniyle çıktının tamamını okumak zor olduğuna dair bir öneri var
Birkaç saniye daha durması iyi olurdu
Sadece son kareye bakmak bile gereken tüm bilgiyi veriyor
Zaten statik görselle değiştirdim; önerdiğiniz tüm görüşler için teşekkürler
Komutun hızlı olduğunu gösteriyor ama her şey zaten son karede var ve bant genişliği verimliliği de düşük
Çıktı ekranında %100 durmuş halde bırakmak yeterli. Terminalde yazı yazmayı herkes zaten biliyor
Bu araç mevcut izleme/gözlem araçlarının yerine geçmeyi amaçlamıyor
SSH ile bağlandığınızda “bu neden çalışıyor?” sorusunu hızlıca anlamaya yarıyor
Geri bildirime göre yönünü ayarlamaya istekliyim
Bir sürecin yoğun kaynak kullanmaya başladığında amacını anlamak her zaman zordu
İlk başta sürecin işlevini de açıklıyor sandım ama öyle değilmiş
Yine de harika bir araç. İleride Man sayfası + süreç veritabanı birleşimiyle genişletilebilir bir şeye dönüşebilir
Faydalı görünüyor ama mevcut çıktı çoğunlukla sadece ppid gösterdiği için “kim başlattı”yı anlamak mümkünken “neden başladı”yı anlamak zor
Birden fazla çıktı formatını desteklemesi güzel. Otomasyon ortamları düşünülerek JSON veya grep-friendly formatın varsayılan olması daha iyi olabilir
Varsayılan çıktı insan tarafından okunabilir olacak şekilde tasarlandı ama JSON bayrağıyla otomasyon zaten destekleniyor
Daha kolay grep yapılabilen bir biçimi de düşüneceğim
İlginç bir araç ama binary'yi
curlile kurmak pek içime sinmiyorSonradan “bu nasıl kurulmuştu?” veya “güvenlik yamaları güncel mi?” gibi sorunlar çıkabilir
deb paketi veya snap olsa iyi olurdu
curlile kurulumun herkese uygun olmadığını anlıyorumİlk sürüm olduğu için basit başladım ama ilgi görürse resmî paket dağıtımı planlıyorum
wdtci: “what does this curl install?”systemctl status $pidkomutuyla da epey bilgi alınabiliyor“witr güvene dayanır” cümlesiyle “AI/LLM yardımıyla geliştirildi” açıklaması çelişkili hissettiriyor
LLM çıktıları gözden geçiriliyor ve kod incelemesi düzgün yapılıyorsa güven verici olabilir
Yine de LLM kullanımını şeffaf biçimde açıklamış olmasını olumlu buluyorum
Gerçek kararları insanlar verdi
Sonuç odaklı geliştirildiyse sorun değil diye düşünüyorum
Gerçekten harika ve kullanışlı bir araç
Ama yukarıda söylenen nedenlerden dolayı production ortamında hemen kullanmak zor
Debian veya RPM paketleri olsa iyi olurdu
Kaynaktan doğrudan derlemek için şu komut kullanılabilir
Şahsen
install.shvarsa önce yerel kaynaktan kurulum beklerimBöyle basit araçlar terminalde kalıcı olmayı bu yüzden başarıyor
“Git repository name and branch” ifadesinin ne anlama geldiğini merak ediyorum
Çalışan sürecin bir Git deposunun içinde çalıştırılıp çalıştırılmadığını algılayan bir özellik mi bu?
İlgili kod bağlantısı
Fikir çok hoş. Eskiden yaptığım “whodis” alias'ı açık portu tutan PID'yi bulmak içindi; bu ise çok daha güçlü
Gerçekten şaşırtıcı bir araç. Paylaştığınız için teşekkürler
İsterseniz ben AUR paketi hazırlayabilir miyim?
Arch'ın güzel yanı, böyle ilginç araçların inanılmaz hızlı şekilde AUR'a düşmesi