🐧 Componente: Kernel, Logs e Sistema. O dmesg e os logs de sistema são frequentemente o primeiro lugar onde aparecem sinais de problemas — antes de qualquer queixa do utilizador. Este artigo cobre como filtrar eficientemente os logs mais relevantes, ajustar parâmetros de kernel e usar o atop para análise histórica.
1. dmesg — Mensagens do Kernel
# Mensagens recentes do kernel com timestamps
dmesg -T | tail -50
# Filtrar apenas erros e avisos
dmesg -T --level=err,warn
# Erros de disco, filesystem e controladores de armazenamento
dmesg -T | grep -E 'error|fail|warn|I/O|EXT4|XFS|BTRFS|ata|sd[a-z]|nvme' -i | tail -30
# Seguir mensagens em tempo real
dmesg -Tw
💡 Primeiro passo: Após qualquer evento de lentidão repentina, o
dmesg -T --level=err,warn | tail -30 deve ser o primeiro comando a executar — regista erros de driver, hardware, OOM Killer e problemas de rede ao nível do kernel, muitas vezes com o timestamp exato do incidente.
Padrões críticos a identificar no dmesg
| Padrão no dmesg | Significado | Ação |
|---|---|---|
| oom-kill / killed process | OOM Killer eliminou processo por falta de RAM | Aumentar RAM ou otimizar consumo |
| I/O error / blk_update_request | Erro de leitura/escrita em disco | Verificar SMART e fsck |
| EXT4-fs error / XFS error | Erro de filesystem | Verificar e reparar filesystem |
| NVRM / nvidia / drm error | Erro de driver gráfico ou de dispositivo | Atualizar driver |
| TCP: out of memory | Memória de rede esgotada | Ajustar net.ipv4.tcp_mem |
| WARN_ON / BUG / kernel panic | Erro crítico de kernel | Atualizar kernel ou abrir bug report |
| nf_conntrack: table full | Tabela de conexões do firewall cheia | Aumentar nf_conntrack_max |
2. journalctl — Logs Centralizados (systemd)
# Logs das últimas 2 horas
journalctl --since '2 hours ago' --no-pager
# Apenas erros e críticos (mais útil para triagem)
journalctl -p err -n 50 --no-pager
# Logs do arranque atual
journalctl -b
# Logs do arranque anterior (falha/crash)
journalctl -b -1
# Logs em tempo real do sistema inteiro
journalctl -f
# Espaço ocupado pelos logs
journalctl --disk-usage
# Limpar logs com mais de 30 dias
journalctl --vacuum-time=30d
💡
journalctl -b -1: Ver os logs do arranque anterior é especialmente útil quando o sistema reiniciou inesperadamente — permite ver o que estava a acontecer imediatamente antes do crash sem precisar de um dump de kernel.
3. Logs Clássicos por Distribuição
# Debian / Ubuntu
tail -f /var/log/syslog
tail -f /var/log/kern.log
tail -f /var/log/auth.log
# RHEL / CentOS / Rocky Linux
tail -f /var/log/messages
tail -f /var/log/secure
# Pesquisar erros críticos (ambas as distros)
grep -E 'error|critical|fail|panic|oops|segfault' /var/log/syslog -i | tail -30
grep -E 'error|critical|fail|panic|oops|segfault' /var/log/messages -i | tail -30
4. Parâmetros sysctl — Ajuste de Kernel
# Ver parâmetros críticos de memória e swap
sysctl vm.swappiness # default: 60 — reduzir para 10 em servidores
sysctl vm.dirty_ratio # % RAM que pode estar dirty antes de forçar escrita
sysctl vm.dirty_background_ratio # % RAM para iniciar escrita em background
# Ver parâmetros de rede relevantes
sysctl net.ipv4.tcp_syn_retries
sysctl net.ipv4.tcp_fin_timeout
sysctl net.core.somaxconn
# Parâmetros de kernel
sysctl kernel.panic # segundos até reboot após panic (0 = não reiniciar)
sysctl kernel.dmesg_restrict # controla acesso ao dmesg por utilizadores não-root
# Alterações temporárias (perdem-se após reboot)
sysctl -w vm.swappiness=10
# Alterações permanentes
echo 'vm.swappiness=10' >> /etc/sysctl.conf
echo 'vm.dirty_ratio=15' >> /etc/sysctl.conf
echo 'vm.dirty_background_ratio=5' >> /etc/sysctl.conf
# Aplicar alterações sem reboot
sysctl -p
⚠️ Cuidado com ajustes de sysctl em produção: Alguns parâmetros podem ter efeitos colaterais significativos. Testar em ambiente de desenvolvimento antes de aplicar em produção. Documentar todas as alterações e o motivo.
5. atop — Monitor Histórico Completo
# Instalar: apt install atop / yum install atop
# Monitorização em tempo real (interface interativa)
atop
# Ler dados históricos do dia de hoje
atop -r /var/log/atop/atop_$(date +%Y%m%d)
# Ler dados de ontem
atop -r /var/log/atop/atop_$(date -d yesterday +%Y%m%d)
# Extrair dados de CPU dos registos históricos
atop -r /var/log/atop/atop_$(date +%Y%m%d) -P CPU
Dentro do atop interativo, teclas úteis:
- c — ordenar por CPU
- m — ordenar por memória
- d — ordenar por I/O de disco
- n — ordenar por rede
- b — recuar no tempo (nos dados históricos)
- t — avançar no tempo
💡 Caso de uso: O utilizador diz “ontem às 14h o sistema estava impossível de usar”. Com
atop -r /var/log/atop/atop_$(date -d yesterday +%Y%m%d), é possível “rebobinar” para as 14h e ver exactamente o que estava a acontecer — CPU, memória, disco e rede nesse momento exacto.
6. Verificação de Integridade do Sistema
# Debian / Ubuntu — verificar pacotes corrompidos
dpkg --verify 2>&1 | grep -v '^$'
# RHEL / CentOS / Rocky — verificar integridade de RPMs
rpm -Va 2>&1 | grep -v '^$' | head -20
# Verificar agendamentos cron ativos
crontab -l
ls -la /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/
# Atividade recente de login
last | head -20
lastlog | grep -v 'Never logged'
# Comandos recentes com sudo
grep sudo /var/log/auth.log | tail -20 # Debian/Ubuntu
grep sudo /var/log/secure | tail -20 # RHEL/Rocky
7. Checklist — Kernel, Logs e Sistema
- ✅
dmesg -T --level=err,warn | tail -30— erros de kernel recentes? - ✅
dmesg -T | grep -i oom— OOM Killer ativado? - ✅
journalctl -p err -n 50— erros no sistema nas últimas horas? - ✅
journalctl -b -1— logs do arranque anterior (se houve crash)? - ✅
sysctl vm.swappiness— configuração adequada para o workload? - ✅
ls /etc/cron.d/— cron jobs ativos na janela temporal do problema? - ✅
atopcom dados históricos — estado do sistema no momento exato do problema?
