Quando sentes que o sistema está estranho — CPU aos saltos, swap a encher, ventoinhas a rodar sem motivo — o mais provável é abrires o htop, depois o iostat, talvez o nettop, e ires juntando peças. O SysWatch mete tudo no mesmo sítio: doze tabs, uma para cada subsistema, com uma camada de deteção de anomalias por cima.

O terminal que abres quando sentes que algo está errado — antes de ires buscar htop, iostat, nettop, powermetrics e um bloco de notas cheio de one-liners.


O Problema

O htop mostra-te o que está a correr. O SysWatch mostra-te o que está a acontecer. CPU, memória, IO, GPU, energia, serviços — e diz-te porquê, em linguagem natural, quando algo está anómalo.

Foi desenhado para machine-local diagnostics. O autor tem também o NetWatch (rede) e o DiskWatch (disco) — partilham o mesmo “chrome” e paleta de cores.


As 12 Tabs

# Tab Substitui
1 Overview Dashboard de todos os subsistemas
2 CPU panel CPU do htop, top -d, mpstat
3 Memory free, vm_stat, panel mem do htop
4 Disks iostat, iotop (agregado)
5 Filesystems df -h, df -i, mount
6 Procs htop, ps auxf, pstree
7 GPU ioreg AGXAccelerator / sysfs DRM
8 Power pmset, ioreg AppleSmartBattery
9 Services launchctl list / systemctl list-units
0 Net nettop, iftop
- Timeline Sessão gravada com scrubber temporal
+ Insights Cartões de anomalia em linguagem natural

Funcionalidades Distintivas


Insights Tab

Deteção heurística de anomalias em cima da sessão atual. Swap thrash, runaway processes, disk full, memory pressure, high load, zombie parties — tudo apresentado como cartões em inglês simples com uma sugestão de tab para investigar. A Overview tem uma strip na parte inferior e a tab bar mostra [+] quando há algo novo.


Session Scrubbing

A Timeline tab permite fazer rewind (←/→) de toda a aplicação — todos os painéis mostram o estado histórico de forma transparente. R grava uma sessão para ficheiro .swr; depois podes usar --replay ficheiro.swr para reproduzir offline. S faz dump do snapshot atual para disco.


Honesto Sobre Limitações

Onde os dados precisam de sudo (powermetrics para fans, GPU util em Apple Silicon), a tab mostra o que consegue obter sem privilégios e uma nota sobre o que está bloqueado. Nada é inventado, nada pede permissões.


Instalação


macOS (Homebrew)
brew install matthart1983/tap/syswatch

Debian / Ubuntu (Cargo)

Primeiro instala o Rust (se não tiveres):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Depois:

cargo install syswatch

A partir do Fonte
git clone https://github.com/matthart1983/syswatch.git
cd syswatch
cargo build --release
./target/release/syswatch

Pré-requisitos: Rust 1.75+. No Linux não há dependências de sistema. No macOS usa os frameworks do sistema (IOKit, CoreFoundation).


Primeiros Passos

syswatch                    # 1Hz tick rate (padrão)
syswatch --tick 500         # 2Hz (mais responsivo)
syswatch --tab procs        # arrancar diretamente na tab de processos
syswatch --replay sessao.swr  # reproduzir sessão gravada

Atalhos de Teclado
1 2 3 4 5 6 7 8 9        Overview / CPU / Mem / Disks / FS / Procs / GPU / Power / Services
0 - +                     Net / Timeline / Insights
Tab / Shift-Tab           Cycle tabs
 /                      Select row (Procs, Services)
s                         Cycle sort (Procs, Services)
/                         Filter processos
 /                      Scrub sessão backward / forward
Home / End                Amostra mais antiga / live
p                         Pausa
g                         Estilo de gráfico (barras / pontos)
t                         Cycle theme
,                         Settings (tick, theme, fade)
S / R                     Snapshot para disco / gravar sessão
?                         Help
q / Ctrl-C                Sair

Arquitetura

src/
├── main.rs              CLI + entry point
├── app.rs               Event loop, tab state, scrub
├── collect/             Collectors por subsistema
   ├── collector.rs     sysinfo (CPU/Mem/Procs/Net)
   ├── gpu.rs           ioreg / sysfs DRM / nvml
   ├── macos_sampler.rs IOReport + SMC (GPU/power)
   ├── power.rs         ioreg / pmset
   ├── services.rs      launchctl / systemctl
   └── ring.rs          Bounded history + scrub
├── insights/            Funções puras sobre (History, Snapshot)
├── tabs/                Um ficheiro por tab
└── ui/
    ├── chrome.rs        Header, tab bar, footer
    ├── palette.rs       Cores
    └── widgets.rs       block_bar, sparkline, panel

Modelo de Refresh

Um loop rápido a 1Hz lê CPU/Mem/Net/IO a cada tick. Os collectors mais pesados correm com intervalos maiores:

  • Processos: ~1.5s
  • Power/Services: ~5s
  • Largura de banda por processo: thread separada

A UI redesenha ao tick ou a cada keypress, o que significa que o loop se mantém leve independentemente do tick rate.


Experiência no MacBook

A versão 0.7.3 instalada via Homebrew corre nativamente em ARM64 (2.2MB de binário). Arranca instantaneamente sem qualquer configuração extra.

A interface é composta por:

  • Header: Nome “SysWatch” à esquerda, métricas de resumo à direita
  • Tab bar: As 12 tabs numeradas, com a tab ativa destacada
  • Painel principal: Muda por completo conforme a tab
  • Footer: Atalhos rápidos e estado

A tab Overview mostra um dashboard compacto com sparklines de CPU, memória e IO, tudo codificado a cores (verde para OK, amarelo para warning, vermelho para crítico). A tab CPU mostra uso por núcleo com barras horizontais. A tab Memory mostra pressão de memória, swap usado, e breakdown por tipo. A tab Procs lista processos em árvore com %CPU, %MEM, número de threads e PID.

O suporte a rato não está presente (ao contrário do Alwide), mas a navegação por teclado é rápida e intuitiva. A tecla ? abre um ecrã de ajuda com todos os comandos.


Anti-objetivos (declarados pelo autor)

  • Não é multi-host — para fleet view, usa o NetWatch
  • Não é um daemon — não há collector persistente, a sessão é a base de dados
  • Não é interativo — read-only deliberadamente. Não mata processos, não faz renice, não unmount
  • Não é logging — mostra OOM kills como sinal, não é UI de log search

Família de Ferramentas

O SysWatch faz parte de uma tríade do mesmo autor (matthart1983):

Ferramenta Foco Repo
SysWatch Diagnóstico de sistema github.com/matthart1983/syswatch
NetWatch Diagnóstico de rede github.com/matthart1983/netwatch
DiskWatch Diagnóstico de disco github.com/matthart1983/diskwatch

Partilham o mesmo “chrome” visual e a paleta de cores, pelo que se usares um, os outros sentem-se familiares.


Considerações Finais

O SysWatch não substitui o htop para uso diário — para uma olhadela rápida aos processos, o htop é mais imediato. Mas para diagnóstico de problemas, quando precisas de cruzamento de informação entre CPU, memória, IO e GPU ao mesmo tempo, com histórico temporal e deteção de anomalias, é uma ferramenta muito competente.

O melhor: não precisa de sudo para nada, o binário é leve, e funciona igual em macOS e Linux. O pior: para utilizadores avançados, a falta de modo interativo (não podes matar processos) pode ser frustrante — mas é uma escolha de desenho deliberada.

Projeto: github.com/matthart1983/syswatch (MIT)

Comentários (0)

Nenhum comentário ainda. Seja o primeiro!

Deixar comentário