🔬 Ferramentas Avançadas. Este artigo reúne as ferramentas de diagnóstico mais avançadas para Linux — dstat para monitorização all-in-one, ferramentas eBPF para observabilidade com baixo overhead (sobrecarga), um script de diagnóstico automático pronto a usar, e tabelas completas de referência rápida para uso no campo.
1. dstat — Monitor All-in-One
# Instalar: apt install dstat / yum install dstat
# CPU, disco, rede e memória em simultâneo (a cada 2 segundos)
dstat -cdnmg 2
# Com nome do processo de maior I/O e maior consumo de rede
dstat -cdnmg --top-io --top-net 2
# Guardar para CSV (análise posterior)
dstat --output /tmp/dstat_$(hostname)_$(date +%Y%m%d_%H%M).csv -cdnmg 2 300
# 300 amostras = 10 minutos de dados
O dstat é especialmente útil quando não se sabe em que componente focar — mostra CPU, disco, rede e memória na mesma linha, facilitando a identificação de correlações (ex: pico de CPU sempre que há pico de I/O de rede).
dstat --output ficheiro.csv permite capturar dados durante um período de degradação e analisar depois em Excel ou Google Sheets — muito útil para apresentar evidências a equipas de infraestrutura ou hypervisor.2. eBPF — Observabilidade Avançada com Baixo Overhead (sobrecarga)
# Instalar (Ubuntu/Debian — kernel >= 4.1)
apt install bpfcc-tools linux-headers-$(uname -r)
# RHEL/Rocky
yum install bcc-tools kernel-devel
Ferramentas eBPF mais úteis para diagnóstico
# Latência de I/O de disco por processo (histograma)
biolatency-bpfcc
# Top de syscalls por processo
syscount-bpfcc -p <PID>
# Novas conexões TCP em tempo real (quem está a ligar a quê)
tcpconnect-bpfcc
# Cache hit rate do page cache do filesystem
cachestat-bpfcc 1
# Latência de chamadas de sistema em histograma
funclatency-bpfcc '__x64_sys_read'
# I/O de disco com nome do processo
biosnoop-bpfcc | head -30
uname -r. As ferramentas bpfcc têm overhead muito baixo comparado com strace e são seguras para usar em produção.3. Script de Diagnóstico Automático
Guardar como diagnostico_linux.sh, tornar executável com chmod +x diagnostico_linux.sh e executar com sudo ./diagnostico_linux.sh:
#!/bin/bash
# === SCRIPT DE DIAGNÓSTICO RÁPIDO — kbase.pt ===
# Executar com: sudo bash diagnostico_linux.sh
REPORT="/tmp/diagnostico_$(hostname)_$(date +%Y%m%d_%H%M).txt"
SEP="=========================================="
echo "$SEP" > $REPORT
echo "DIAGNÓSTICO LINUX — $(hostname)" >> $REPORT
echo "$(date)" >> $REPORT
echo "$SEP" >> $REPORT
echo -e "\n--- SISTEMA ---" >> $REPORT
uname -a >> $REPORT
cat /etc/os-release | grep PRETTY_NAME >> $REPORT
echo -e "\n--- UPTIME E LOAD AVERAGE ---" >> $REPORT
uptime >> $REPORT
echo "CPUs: $(nproc)" >> $REPORT
echo -e "\n--- CPU (3 amostras) ---" >> $REPORT
mpstat 1 3 >> $REPORT 2>/dev/null || \
top -bn3 | grep '%Cpu' >> $REPORT
echo -e "\n--- MEMÓRIA ---" >> $REPORT
free -h >> $REPORT
echo "" >> $REPORT
grep -E 'MemAvailable|SwapFree|Dirty' /proc/meminfo >> $REPORT
echo -e "\n--- TOP PROCESSOS CPU ---" >> $REPORT
ps aux --sort=-%cpu | head -10 >> $REPORT
echo -e "\n--- TOP PROCESSOS MEMÓRIA ---" >> $REPORT
ps aux --sort=-%mem | head -10 >> $REPORT
echo -e "\n--- DISCO (espaço) ---" >> $REPORT
df -h >> $REPORT
echo "" >> $REPORT
df -i >> $REPORT
echo -e "\n--- DISCO (I/O, 3 amostras) ---" >> $REPORT
iostat -xz 1 3 >> $REPORT 2>/dev/null
echo -e "\n--- REDE (interfaces) ---" >> $REPORT
ip -s link show >> $REPORT
echo -e "\n--- REDE (conexões TCP) ---" >> $REPORT
ss -s >> $REPORT
echo -e "\n--- ERROS KERNEL (últimas 30 linhas) ---" >> $REPORT
dmesg -T --level=err,warn 2>/dev/null | tail -30 >> $REPORT
echo -e "\n--- SERVIÇOS COM FALHA ---" >> $REPORT
systemctl --failed >> $REPORT 2>/dev/null
echo -e "\n--- ERROS SISTEMA (última hora) ---" >> $REPORT
journalctl -p err --since '1 hour ago' --no-pager 2>/dev/null | tail -20 >> $REPORT
echo ""
echo "✅ Relatório guardado em: $REPORT"
ls -lh $REPORT
4. Tabela Completa de Ferramentas Linux
| Ferramenta | Instalação | Uso principal |
|---|---|---|
| top / htop | htop: apt/yum install htop | Monitor interativo de CPU, memória e processos |
| vmstat | pré-instalado | CPU, memória, swap e I/O — visão sistémica |
| mpstat | sysstat | Estatísticas de CPU por core |
| iostat | sysstat | I/O de disco por dispositivo — await, %util, aqu-sz |
| sar | sysstat | Histórico de CPU, memória, disco e rede |
| pidstat | sysstat | CPU e I/O por processo com histórico |
| iotop | apt/yum install iotop | I/O em tempo real por processo |
| iftop | apt/yum install iftop | Tráfego de rede por endereço IP |
| nethogs | apt/yum install nethogs | Tráfego de rede por processo |
| atop | apt/yum install atop | Monitor completo com histórico persistente |
| dstat | apt/yum install dstat | Monitor all-in-one combinado (CPU+disco+rede+RAM) |
| perf | linux-tools-$(uname -r) | Profiling de CPU e funções de kernel |
| strace | pré-instalado | Rastreio de syscalls de um processo |
| lsof | pré-instalado | Ficheiros e conexões abertas por processo |
| fio | apt/yum install fio | Benchmark de performance de disco |
| mtr | apt/yum install mtr | Diagnóstico de rede ping+traceroute em tempo real |
| tcpdump | pré-instalado | Captura de pacotes de rede |
| smartctl | smartmontools | Saúde de disco SMART |
| bpfcc-tools | apt install bpfcc-tools | Observabilidade avançada com eBPF (kernel >= 4.1) |
5. Limiares de Referência Rápida
| Métrica | ✅ Normal | ⚠️ Atenção | 🔴 Crítico |
|---|---|---|---|
| Load Average (1 min) | < nº CPUs | = nº CPUs | > 2× nº CPUs |
| CPU iowait (%wa) | < 5% | 5 – 20% | > 20% sustentado |
| CPU steal (%st) | < 1% | 1 – 5% | > 5% |
| RAM available (VM 4GB) | > 500 MB | 200 – 500 MB | < 200 MB |
| Swap out (vmstat so) | 0 | ocasional | contínuo > 0 |
| Disco await (ms) | < 10 ms | 10 – 25 ms | > 25 ms |
| Disco aqu-sz | < 1 | 1 – 3 | > 3 |
| Disco %util | < 70% | 70 – 90% | > 90% |
| Espaço livre disco | > 20% | 10 – 20% | < 10% |
| Inodes livres | > 20% | 5 – 20% | < 5% |
| TCP retransmissões/s | 0 | < 5 | > 5 |
6. Comandos por Sintoma — Referência Rápida
| Sintoma | Primeiro Comando |
|---|---|
| Sistema lento — geral | uptime && top -bn1 | head -20 |
| CPU a 100% | mpstat -P ALL 1 3 && ps aux --sort=-%cpu | head -10 |
| iowait elevado | iostat -xz 2 5 && iotop -o -bn 3 |
| RAM esgotada | free -h && vmstat 1 5 | awk '{print $7,$8}' |
| Swap em uso ativo | vmstat 1 10 (colunas si/so) && sar -W 1 5 |
| Disco lento | iostat -xz 2 10 — focar em await e aqu-sz |
| Disco cheio | df -h && df -i && du -sh /var/* | sort -rh |
| Ficheiro apagado ocupa espaço | lsof | grep deleted | sort -k7 -rn | head -10 |
| Rede lenta | mtr -n 8.8.8.8 && netstat -st | grep retransmit |
| Conectividade intermitente | ping -c 100 <gateway> && ip -s link show |
| DNS lento | time dig <domínio> && cat /etc/resolv.conf |
| Serviço parado | systemctl --failed && journalctl -u <serviço> -n 50 |
| OOM Killer ativo | dmesg -T | grep -i 'oom\|killed process' |
| Processo bloqueado (estado D) | ps aux | awk '$8~/^D/' && iostat -xz 2 3 |
7. Checklist Final — 8 Fases
- ✅ Recolha inicial:
uptime && nproc && free -h && df -h— baseline em 30 segundos - ✅ CPU: load average,
mpstatpor core, CPU steal (%st), iowait (%wa) - ✅ Memória: campo available no
free, swap in/out novmstat, OOM nodmesg - ✅ Disco:
iostat -xz— await e aqu-sz;iotop— processo responsável - ✅ Rede: erros em
ip -s link;mtrpara latência; retransmissões TCP - ✅ Processos: processos em estado D;
systemctl --failed;strace -cse suspeito - ✅ Kernel/Logs:
dmesg --level=err,warn;journalctl -p err;atophistórico - ✅ Documentação: executar
diagnostico_linux.she guardar relatório com timestamp
