38 puan yazan GN⁺ 2025-12-27 | 1 yorum | WhatsApp'ta paylaş
  • 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
    1. Ne çalışıyor
    2. Nasıl başlatıldı
    3. Onu ayakta tutan nedir
    4. 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

 
GN⁺ 2025-12-27
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

    • Açıkçası GIF yerine ekran görüntüsünün daha iyi olduğunu düşünüyorum
      Sadece son kareye bakmak bile gereken tüm bilgiyi veriyor
    • Geri bildirim için teşekkürler! Başta iyi görünmüştü ama kullanıcı açısından bakınca oldukça rahatsız ediciydi
      Zaten statik görselle değiştirdim; önerdiğiniz tüm görüşler için teşekkürler
    • Ben de GIF'in pek gerekli olmadığını düşünüyorum
      Komutun hızlı olduğunu gösteriyor ama her şey zaten son karede var ve bant genişliği verimliliği de düşük
    • Aslında en basit çözüm animasyonu tamamen kaldırmak
      Çıktı ekranında %100 durmuş halde bırakmak yeterli. Terminalde yazı yazmayı herkes zaten biliyor
    • Böyle GIF'leri otomatik oluşturmak için charmbracelet/vhs gibi araçlar çok kullanışlı
  • 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

    • Bunun gerçekten zekice bir fikir olduğunu düşünüyorum
      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

    • Geri bildirim için teşekkürler! “Kim” ile “neden”i daha net ayırarak göstermeyi değerlendiriyorum
      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 curl ile kurmak pek içime sinmiyor
    Sonradan “bu nasıl kurulmuştu?” veya “güvenlik yamaları güncel mi?” gibi sorunlar çıkabilir
    deb paketi veya snap olsa iyi olurdu

    • curl ile 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
    • Yakında yeni bir yardımcı komut gelebilir — wdtci: “what does this curl install?”
    • Bu arada systemctl status $pid komutuyla da epey bilgi alınabiliyor
  • witr güvene dayanır” cümlesiyle “AI/LLM yardımıyla geliştirildi” açıklaması çelişkili hissettiriyor

    • “Bazen ne yaptığını bilen bir insan gözetim sağladı” cümlesi şaka gibi duruyor ama ciddi okununca tedirgin edici
      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
    • Evet, o ifade mizah amaçlıydı ve LLM sadece yardımcı roldeydi
      Gerçek kararları insanlar verdi
    • Benim için kod düzgün çalışıyorsa bu yeterli
      Sonuç odaklı geliştirildiyse sorun değil diye düşünüyorum
    • Yine de zararlı yazılımın süreç ilişkilerini sahteleştirmesi hâlâ kolay
    • Açıkçası LLM'nin durumu bazen insandan daha iyi anlayabileceğini de 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

    • Teşekkürler! İlk sürüm olduğu için basit başladım ama ilgi görürse resmî paketleri hazırlamayı planlıyorum
  • Kaynaktan doğrudan derlemek için şu komut kullanılabilir

    CGO_ENABLED=0 go build -ldflags "-X main.version=dev -X main.commit=$(git rev-parse --short HEAD) -X 'main.buildDate=$(date +%Y-%m-%d)'" -o witr ./cmd/witr
    

    Şahsen install.sh varsa önce yerel kaynaktan kurulum beklerim
    Böyle basit araçlar terminalde kalıcı olmayı bu yüzden başarıyor

    • Teşekkürler! @sestep sayesinde Nix desteği zaten eklendi, yani binary konusunda endişe yok
    • Ya da doğrudan Nix PR'ı kullanabilirsiniz
  • “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?

  • Fikir çok hoş. Eskiden yaptığım “whodis” alias'ı açık portu tutan PID'yi bulmak içindi; bu ise çok daha güçlü

    • Teşekkürler! Hedefim PID bilgileri için İsviçre çakısı olmak
  • Gerçekten şaşırtıcı bir araç. Paylaştığınız için teşekkürler
    İsterseniz ben AUR paketi hazırlayabilir miyim?

    • Elbette! AUR'a eklenmesi harika olur. Gerçekten teşekkürler
    • Ben yazarı değilim ama bir AUR sürümü olması gerçekten güzel olurdu
      Arch'ın güzel yanı, böyle ilginç araçların inanılmaz hızlı şekilde AUR'a düşmesi