38 poin oleh GN⁺ 2025-12-27 | 1 komentar | Bagikan ke WhatsApp
  • Witr (why-is-this-running) adalah alat yang dengan jelas menunjukkan mengapa proses, layanan, atau port tertentu berjalan di sistem Linux
  • Berbeda dari ps, top, lsof yang hanya menunjukkan “apa yang sedang berjalan”, alat ini menampilkan hubungan sebab-akibat dari “mengapa ini berjalan” dalam satu layar
  • Melalui analisis berbasis PID, alat ini melacak asal proses, jalur eksekusi, alasan proses tetap berjalan, dan konteks tempatnya berada
  • Menjelaskan penyebab eksekusi dengan terhubung ke berbagai sumber seperti systemd, docker, pm2, cron, shell, serta bekerja dalam mode read-only dan non-destruktif
  • Saat debugging dan penanganan gangguan, alat ini mempercepat waktu pemahaman dan membantu melihat struktur eksekusi sistem yang kompleks secara sekilas

Tujuan dan konsep

  • Pertanyaan inti Witr adalah “mengapa ini berjalan? (why-is-this-running)”
    • Melacak asal dan penyebab dari semua hal yang sedang berjalan seperti proses, layanan, dan port
    • Menunjukkan secara eksplisit penyebab eksekusi tidak langsung yang melintasi beberapa lapisan seperti supervisor, container, service, dan shell
  • Sementara alat yang ada hanya menyediakan status dan metadata, Witr mengekspresikan hubungan sebab-akibat dengan jelas
  • Hasilnya, alat ini menampilkan “apa yang berjalan, bagaimana dimulai, mengapa berjalan, dan dalam konteks apa” dalam bentuk yang mudah dibaca manusia

Tujuan utama

  • Menjelaskan alasan keberadaan proses dan memberikan informasi lebih dari sekadar status berjalan atau tidak
  • Memperpendek waktu debugging dan respons terhadap gangguan
  • Bisa langsung dipakai tanpa konfigurasi, read-only dan aman
  • Mengutamakan kejelasan dibanding kelengkapan
  • Tidak mencakup fitur monitoring, analisis performa, atau pemulihan otomatis

Cara kerja

  • Semua target ditafsirkan dengan berpusat pada proses (PID)
    • Port, layanan, container, dan perintah semuanya dihubungkan ke PID
    • Berdasarkan PID, alat ini menyusun causal chain eksekusi
  • Empat pertanyaan inti
    1. Apa yang sedang berjalan
    2. Bagaimana itu dimulai
    3. Apa yang menjaganya tetap berjalan
    4. Termasuk dalam konteks apa

Target yang didukung

  • Mendukung nama proses/layanan, PID, dan nomor port sebagai input
    • Jika input nama cocok dengan beberapa proses, pengguna akan diminta memilih PID
    • Dengan opsi --pid, --port, analisis bisa dilakukan berdasarkan proses atau port tertentu

Struktur output

  • Target: target yang ditentukan pengguna
  • Process: executable, PID, pengguna, perintah, waktu mulai, jumlah restart
  • Why It Exists: rantai asal-usul kausal (ancestry chain) proses
  • Source: sistem utama yang menjalankan proses (misalnya salah satu dari systemd, docker, pm2, cron, shell)
  • Context: direktori kerja, repositori Git, container Docker, informasi bind, dan sebagainya
  • Warnings: peringatan non-blocking seperti dijalankan dengan hak root, listening pada interface publik, berjalan terlalu lama, penggunaan memori berlebihan, dan sebagainya

Opsi baris perintah

  • --pid, --port: menganalisis PID atau port tertentu
  • --short: ringkasan satu baris
  • --tree: tampilkan seluruh process tree
  • --json: output dalam format JSON
  • --warnings: tampilkan hanya peringatan
  • --no-color: nonaktifkan warna
  • --env: tampilkan hanya environment variable
  • --help: tampilkan bantuan

Instalasi dan penghapusan

  • Didistribusikan sebagai binary Linux statis tunggal
  • Instalasi via skrip (disarankan)
  • Instalasi manual
    • Unduh langsung binary untuk amd64, arm64 dan verifikasi checksum
    • Beri izin eksekusi lalu pindahkan ke PATH
  • Verifikasi dan penghapusan
    • Cek dengan witr --version, man witr
    • Dapat dihapus dengan sudo rm -f /usr/local/bin/witr
  • Mendukung Nix Flake: dapat dijalankan dengan nix run github:pranshuparmar/witr -- --port 5000

Platform dan izin

  • Khusus Linux
  • Mengumpulkan informasi melalui akses /proc
    • Untuk memeriksa sebagian informasi proses, izin sudo diperlukan

1 komentar

 
GN⁺ 2025-12-27
Komentar Hacker News
  • Menyarankan bahwa loop GIF di README restart terlalu cepat sehingga sulit membaca seluruh output
    Akan lebih baik jika berhenti beberapa detik lebih lama

    • Sejujurnya saya rasa tangkapan layar lebih baik daripada GIF
      Hanya dengan melihat frame terakhir, semua informasi yang dibutuhkan sudah tersampaikan
    • Terima kasih atas masukannya! Awalnya terlihat baik-baik saja, tetapi dari sudut pandang pengguna memang cukup merepotkan
      Sudah diganti dengan gambar statis, dan terima kasih untuk semua saran yang diberikan
    • Saya juga rasa GIF sebenarnya tidak perlu
      Memang menunjukkan bahwa perintahnya cepat, tetapi semuanya sudah ada di frame terakhir dan efisiensi bandwidth-nya juga buruk
    • Sebenarnya solusi paling sederhana adalah menghapus animasinya sepenuhnya
      Cukup biarkan berhenti 100% di layar output. Semua orang sudah tahu seperti apa mengetik di terminal
    • Untuk membuat GIF seperti ini secara otomatis, utilitas seperti charmbracelet/vhs sangat berguna
  • Alat ini bukan untuk menggantikan alat monitoring/observabilitas yang sudah ada
    Ini ditujukan untuk cepat memahami “kenapa ini berjalan?” saat terhubung lewat SSH
    Ada niat untuk menyesuaikan arahnya berdasarkan masukan

    • Menurut saya ini ide yang benar-benar cerdas
      Saat suatu proses mulai memakai banyak resource, selalu sulit mengetahui tujuannya
      Awalnya saya kira alat ini juga menjelaskan fungsi proses itu sendiri, ternyata tidak
      Meski begitu tetap alat yang keren. Ke depannya mungkin bisa diperluas dengan menggabungkan halaman man + basis data proses
  • Terlihat berguna, tetapi output saat ini kebanyakan hanya menunjukkan ppid, jadi kita bisa tahu “siapa yang menjalankannya” tetapi sulit tahu “mengapa itu dijalankan”
    Mendukung beberapa format output itu bagus. Dengan mempertimbangkan lingkungan otomasi, akan lebih baik jika format JSON atau yang ramah grep dijadikan default

    • Terima kasih atas masukannya! Kami sedang meninjau arah untuk menampilkan perbedaan antara “siapa” dan “mengapa” dengan lebih jelas
      Output bawaan dirancang agar mudah dibaca manusia, tetapi otomasi juga sudah didukung lewat flag JSON
      Kami juga akan memikirkan bentuk yang lebih mudah untuk di-grep
  • Alat ini menarik, tetapi memasang biner lewat curl terasa kurang nyaman
    Nanti bisa muncul masalah seperti “ini dipasang bagaimana ya?” atau “apakah patch keamanannya sudah terbaru?”
    Akan bagus jika ada paket deb atau snap

    • Saya paham pemasangan via curl tidak cocok untuk semua orang
      Karena ini rilis pertama, saya memulainya sesederhana mungkin, tetapi jika mulai populer kami berencana menyediakan distribusi paket resmi
    • Sepertinya akan segera muncul perintah utilitas baru — wdtci: “what does this curl install?”
    • Sebagai catatan, banyak informasi juga bisa didapat dari perintah systemctl status $pid
  • Kalimat “witr dibangun atas dasar kepercayaan” dan penjelasan bahwa alat ini “dikembangkan dengan bantuan AI/LLM” terasa kontradiktif

    • Kalimat “sesekali diawasi manusia yang tahu apa yang sedang dilakukan” terdengar seperti candaan, tetapi jika dibaca serius terasa mengkhawatirkan
      Jika hasil LLM ditinjau dan code review dilakukan dengan benar, sepertinya tetap bisa dipercaya
      Meski begitu, saya menghargai keterbukaan soal penggunaan LLM
    • Benar, kalimat itu ditulis sebagai humor, dan LLM hanya berperan sebagai pendukung
      Keputusan nyata tetap dibuat oleh manusia
    • Bagi saya, kalau kodenya bekerja dengan baik itu sudah cukup
      Jika pengembangannya berfokus pada hasil, saya rasa tidak masalah
    • Hanya saja, malware yang memalsukan hubungan antarproses tetap masih mudah dibuat
    • Sejujurnya saya pikir LLM kadang bisa memahami situasi lebih baik daripada manusia
  • Ini alat yang sangat keren dan berguna
    Tetapi di lingkungan produksi, karena alasan yang disebut di atas, sulit untuk langsung memakainya
    Akan bagus jika ada paket Debian atau RPM

    • Terima kasih! Karena ini rilis pertama, saya memulainya dengan sederhana, tetapi jika mulai populer kami akan menyiapkan paket resmi
  • Untuk build langsung dari source, gunakan perintah berikut

    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
    

    Secara pribadi, jika ada install.sh, saya berharap instalasi dari source lokal diprioritaskan
    Inilah alasan alat-alat sederhana seperti ini membuat saya terus betah di terminal

    • Terima kasih! Berkat @sestep, dukungan Nix sudah ditambahkan sehingga tidak perlu khawatir soal biner
    • Atau bisa juga langsung memakai Nix PR
  • Saya penasaran apa yang dimaksud dengan “Git repository name and branch”
    Apakah ini fitur untuk mendeteksi apakah proses yang berjalan dijalankan di dalam repositori Git?

    • Betul, caranya dengan menelusuri ke atas dari direktori kerja proses untuk mencari direktori .git
      Tautan kode terkait
  • Idenya keren. Alias “whodis” yang pernah saya buat dulu dipakai untuk mencari PID yang membuka port, tetapi ini jauh lebih kuat

    • Terima kasih! Target kami adalah pisau Swiss Army untuk informasi PID
  • Ini alat yang benar-benar luar biasa. Terima kasih sudah membagikannya
    Apakah boleh kalau saya membuat paket AUR?

    • Tentu! Keren sekali mau mendaftarkannya ke AUR. Terima kasih banyak
    • Saya memang bukan pembuatnya, tetapi akan sangat bagus kalau ada versi AUR
      Kelebihan Arch adalah alat-alat menarik seperti ini masuk ke AUR dengan sangat cepat