Um painel para todas as suas máquinas Linux — sem servidor, sem banco, sem nuvem. Uma janela na sua área de trabalho que fica vermelha quando algum host esquenta, enche ou cai.
Assumo que você está no Windows e tem pelo menos um host Linux para monitorar. Leva uns cinco minutos.
1. No host Linux, instale o agente. Ele é um binário estático — sem runtime,
sem pip, sem root:
curl -LO https://github.com/9LEVEL/sysmon/releases/latest/download/sysmon-agent-linux-amd64.tar.gz
tar xzf sysmon-agent-linux-amd64.tar.gz
cd sysmon-agent-*-linux-amd64
sudo ./install.sh 192.168.0.10 # o IP da LAN deste hostNo fim ele imprime a url e o token. Copie os dois.
2. No Windows, baixe sysmon-windows-<versão>.zip, extraia numa
pasta e dê duplo clique em sysmon.exe.
3. A janela abre na tela de configuração. Cole a url e o token, clique em TESTAR, depois em SALVAR.
Pronto — é isso. Para os próximos hosts, repita o passo 1 e clique em + HOST.
Tem vários? O
deploy.shinstala em N máquinas por SSH de uma vez e já escreve o arquivo de configuração pronto.
sysmon 2 hosts · 1 alerta ▲ ⭳ 🔔 ⚠ ☰ ⌂ │ ─ ✕
⌄ PVE 9.1G de 14.9G · Core i7-9700K 52C · cpu 44% · ram 61%
DESEMPENHO
cpu 8 nucleos ▅▆▁▅▆▁▅▆ ███······ 44%
memoria 9.1G / 14.9G ▁▁▂▃▃▄▄▅ █████····· 61%
carga 5m 0.92 · 15m 1.10 0.84
DISCOS
nvme0n1 11% usado · 477G · Samsung SSD 970 EVO 43C
⌄ NAS 3.2G de 8.0G · Celeron J4125 41C · cpu 9% · ram 40%
! pve: disco /backup em 96%
- Um processo, na sua máquina. Nada roda "na nuvem": a janela é quem busca os dados, direto dos hosts, na sua LAN ou por um túnel (WireGuard/Tailscale).
- Fica na bandeja e muda de cor pelo pior host. Avisa quando a severidade sobe — e só quando sobe.
- Se atualiza sozinha. O botão ⭳ baixa a versão nova, confere o SHA256 e reinicia. Sem ir ao GitHub, sem descompactar nada.
- Também roda no terminal:
sysmon term --oncesai com código 0, 1 ou 2 conforme o pior estado da frota — serve direto num cron.
→ A janela em detalhe, e o que cada cor significa
O sysmon.exe é autocontido: a pasta onde ele está guarda o config.json e as
preferências de tela. Mover a pasta leva tudo junto.
| O que fazer | Como |
|---|---|
| Subir junto com o Windows | instalar-autostart.ps1, na pasta do zip — ele sobe minimizado na bandeja |
| Ver o erro quando algo não abre | .\sysmon.exe term --once num PowerShell: o executável é windowsgui, então sem console ele morre calado |
| Atualizar | o botão ⭳. Ele baixa, confere o SHA256 e reinicia sozinho |
| Mudar host, token ou intervalo | o ⌂ na janela — não precisa editar arquivo |
| Voltar do zero | limpar.ps1 apaga autostart e preferências, preservando o config.json |
Fechar a janela não encerra o programa: ele fica na bandeja, e é de lá que sai o menu com sair.
Ele é um serviço systemd que só lê /sys e /proc e responde HTTP. Não executa
comandos, não aceita escrita e roda sem root — com DynamicUser, sandbox do
systemd e CapabilityBoundingSet= vazio.
systemctl status sysmon-agent # está no ar?
journalctl -u sysmon-agent -n 30 # o que ele disse
ss -lntp | grep 9109 # está escutando onde eu mandei?
curl -s localhost:9109/health # responde? (não precisa de token)| O que fazer | Como |
|---|---|
| Atualizar | baixe o pacote novo e rode sudo ./install.sh <IP> de novo — o token é preservado |
| Mudar o IP ou a porta | sudo ./install.sh <IP_NOVO>, ou edite o ExecStart em /etc/systemd/system/sysmon-agent.service |
| Ver o token | sudo grep SYSMON_TOKEN /etc/sysmon/token.env |
| Remover | sudo ./uninstall.sh |
Feche a porta para o resto da rede. O transporte é HTTP puro e o token viaja em texto claro — ele protege contra leitura acidental, não contra quem está ouvindo o cabo. Numa LAN doméstica está de bom tamanho; entre redes, use um túnel (WireGuard, Tailscale):
iptables -A INPUT -p tcp --dport 9109 -s <IP_DO_CLIENTE> -j ACCEPT
iptables -A INPUT -p tcp --dport 9109 -j DROPDuas coisas opcionais que o instalador liga sozinho se achar:
smartmontools→ um timer rodasmartctlde hora em hora e alimenta as regras de disco. Sem ele, o campo fica vazio e o resto funciona. Vale instalar:apt install smartmontools.- LVM thin pool (Proxmox) → um timer coleta o uso de dados e metadados.
→ Instalação em vários hosts, e compilar do código
Fiz para 4 a 10 hosts. Acima disso ele perde o propósito: o valor está em ver a frota inteira junta, de relance, sem rolar — e trinta hosts não cabem numa tela nem numa cabeça.
Serve bem para:
| Caso | Como fica |
|---|---|
| Homelab — um Proxmox, um NAS, um Pi | janela estreita encostada na lateral, sempre à vista; os hosts ociosos recolhidos |
| Sysadmin solo — meia dúzia de VPS | bandeja no logon, notificação só quando a severidade sobe |
| Antes/depois de uma manutenção | F5 força a coleta em vez de esperar o ciclo |
| Vigiar um disco suspeito | gráfico do topo fixo naquele host, medida em temperatura |
| Cron / script | sysmon term --once e o código de saída |
| Conferir a máquina local | sysmon local lê /proc direto, sem agente nem token |
Não serve para: histórico longo com gráficos, alerta por e-mail ou webhook, múltiplos usuários, centenas de hosts. Para isso existem Zabbix, Prometheus e Grafana — e eles fazem melhor. O sysmon ocupa o espaço em que montar aquilo custa mais do que o problema que resolve.
Um SSD não avisa que vai morrer com um campo dizendo isso. Ele expõe umas trinta
contagens, e a maioria das ferramentas ou repassa a tabela crua — que ninguém lê
— ou reduz tudo a um PASSED que só vira FAILED quando já não há o que fazer.
Aqui as contagens passam por regras, e o agente guarda histórico. A diferença prática:
200 setores realocados, parados há um ano → silêncio (disco velho que funciona)
0 → 12 setores em uma semana → CRÍTICO (disco morrendo)
3 erros de CRC no barramento → "troque o CABO", não o disco
39 de 90 desligamentos inesperados → "olhe a ENERGIA", não o disco
E ele nunca diz "disco saudável": entre 23% e 36% dos discos que falharam não tinham nenhum indicador SMART. A frase honesta é "sem indicadores de falha", e é essa que aparece.
→ Como funciona, e como ajustar
Nem todo alerta tem conserto. "89 de 206 desligamentos foram inesperados" é um fato do hardware: verdadeiro, útil da primeira vez, e depois disso apenas repetido a cada 3 segundos. Alerta que não pode ser resolvido nem aceito acaba ignorado — e, a partir daí, todos são.
O sino aceita o alerta e guarda o valor que o disparou. Some do rodapé, a cor volta ao normal, e ele reaparece sozinho quando o valor muda: 89 aceito volta a avisar em 90.
→ Limiares, e o que dá para aceitar
| Assunto | Onde |
|---|---|
| Instalar em vários hosts, compilar do código | instalacao.md |
| A janela, o terminal, a bandeja, as cores | interface.md |
| O que dispara alerta, limiares, aceitar | alertas.md |
| Saúde de disco (SMART) | smart.md |
config.json, variáveis de ambiente, endpoints |
configuracao.md |
| Quando algo não bate | troubleshooting.md |
| Segurança | seguranca.md |
| Estrutura do código, como compilar | desenvolvimento.md |
Este projeto nasceu de uma coceira minha e cresceu com o uso. Se ele te serve, há várias formas de ajudar — e nenhuma delas exige escrever Go.
Abra uma issue. É o que mais ajuda, em especial sobre:
- Hardware que eu não tenho. As regras de SMART casam atributos por nome,
e cada fabricante escolhe os seus. Se um disco seu aparece com "coleta
falhou", com número estranho, ou com um atributo que o sysmon ignora, me mande
a saída de
smartctl -j -H -A -i /dev/sdX. Já corrigi dois casos assim: um WD que chamava o contador deUnexpected_Power_Loss, e outro em que o desgaste vinha num id diferente do esperado. - Um alerta que não fez sentido. Falso positivo é o defeito mais caro desta ferramenta: um alerta que você aprende a ignorar contamina todos os outros.
- Uma tela que ficou estranha no seu tamanho de janela ou no seu tema.
Mande um PR. O código é comentado explicando o porquê de cada decisão, e
os testes cobrem comportamento, não implementação. Rode make teste antes. Se
for mexer na interface, vale ler desenvolvimento.md
primeiro.
Fale dele. Um comentário num fórum de homelab, um print no Reddit, uma estrela aqui — é assim que gente com o mesmo problema descobre que existe solução.
Se o sysmon te economizou uma tarde — ou salvou um disco antes da hora —, você pode me pagar um café. Isso não muda nada no projeto: ele é e continua MIT, sem versão paga e sem recurso trancado.
O que muda é o ânimo de continuar mexendo nele num sábado à noite.
MIT. Faça o que quiser, inclusive vender — só não me responsabilize.