Monitoramento de recursos: htop, vmstat, iostat
1. Introdução ao Monitoramento de Recursos no Shell
O monitoramento de recursos é uma prática essencial para administradores de sistemas que precisam garantir desempenho, estabilidade e disponibilidade de servidores. No ambiente Bash/Shell Script, ferramentas como htop, vmstat e iostat oferecem visões complementares do estado do sistema: processos, memória, CPU e operações de entrada/saída (I/O) de disco.
Enquanto o htop proporciona uma interface interativa e amigável para análise em tempo real, o vmstat e o iostat são excelentes para coleta de dados estruturados em scripts, permitindo automação e geração de alertas. Compreender as diferenças entre monitoramento interativo e coleta programática é fundamental para escolher a ferramenta certa para cada cenário.
2. htop: Monitoramento Interativo e Amigável
O htop é uma versão aprimorada do tradicional top, com cores, navegação por teclas e possibilidade de filtrar processos. Para instalá-lo:
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
Ao executar htop, você visualiza:
- Barra de CPU: múltiplos núcleos com uso em porcentagem.
- Barra de memória e swap: consumo total e usado.
- Lista de processos: PID, usuário, prioridade, uso de CPU e memória.
Para navegação interativa, use as setas, F3 para buscar, F4 para filtrar e F9 para encerrar processos.
Embora o htop seja interativo, é possível usá-lo em scripts com a opção -C (modo sem cores) e redirecionar a saída para análise:
htop -C -b -d 2 -n 5 > htop_log.txt
Neste exemplo, -b ativa modo batch, -d 2 define delay de 2 segundos e -n 5 limita a 5 iterações. A saída pode ser processada com grep e awk.
3. vmstat: Estatísticas de Memória Virtual e Sistema
O vmstat (virtual memory statistics) fornece informações sobre processos, memória, swap, I/O e CPU. Sua saída é ideal para scripts por ser textual e previsível.
Execute:
vmstat 2 5
Isso gera 5 relatórios com intervalo de 2 segundos. As principais colunas são:
- procs:
r(processos em execução) eb(bloqueados). - memory:
swpd(swap usado),free(memória livre),buffecache. - swap:
si(swap in) eso(swap out) — indicadores de pressão de memória. - io:
bi(blocos recebidos) ebo(blocos enviados). - system:
in(interrupções) ecs(context switches). - cpu:
us(usuário),sy(sistema),id(ocioso),wa(I/O wait).
Para extrair métricas específicas em scripts:
vmstat 1 3 | tail -1 | awk '{print "CPU idle: " $15 "%"}'
Este comando captura a última linha (média) e exibe o percentual de CPU ociosa.
4. iostat: Monitoramento de I/O de Disco
O iostat faz parte do pacote sysstat e monitora dispositivos de bloco. Instale com:
sudo apt install sysstat
Sintaxe básica:
iostat -x 2 3
A opção -x ativa estatísticas estendidas. Métricas importantes:
- tps: transferências por segundo.
- kB_read/s e kB_wrtn/s: taxa de leitura e escrita.
- await: tempo médio de resposta (ms) — valores altos indicam gargalo.
- svctm: tempo médio de serviço (ms).
- %util: percentual de tempo em que o disco esteve ocupado.
Em scripts, podemos detectar discos sobrecarregados:
iostat -x 1 1 | grep -E '^sd' | awk '$NF > 80 {print "Alto uso: " $1 " - " $NF "%"}'
Este trecho verifica discos sd* com utilização acima de 80%.
5. Combinando Ferramentas em Scripts de Monitoramento
Para uma visão completa, é possível executar vmstat, iostat e htop em paralelo, salvando logs estruturados.
Exemplo de script que coleta dados por 10 segundos:
#!/bin/bash
LOGDIR="/var/log/monitoramento"
mkdir -p $LOGDIR
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# Coleta vmstat
vmstat 1 10 > $LOGDIR/vmstat_$TIMESTAMP.log &
# Coleta iostat
iostat -x 1 10 > $LOGDIR/iostat_$TIMESTAMP.log &
# Coleta htop (modo batch)
htop -C -b -d 1 -n 10 > $LOGDIR/htop_$TIMESTAMP.log &
wait
echo "Monitoramento concluído em $TIMESTAMP"
Cada ferramenta roda em background, e o wait garante que todas terminem antes da próxima ação.
6. Automação com Agendamento e Alertas
Para monitoramento contínuo, integre os scripts ao cron. Exemplo de entrada no crontab:
*/5 * * * * /usr/local/bin/monitor.sh
Isso executa o script a cada 5 minutos.
Para alertas, podemos verificar limites e enviar e-mail:
#!/bin/bash
CPU_USO=$(vmstat 1 2 | tail -1 | awk '{print $13}')
if [ "$CPU_USO" -gt 90 ]; then
echo "Alerta: CPU ociosa em $CPU_USO%" | mail -s "Alerta CPU" admin@exemplo.com
logger -p local0.warning "CPU acima de 90%: $CPU_USO%"
fi
O comando logger envia a mensagem ao syslog, e mail (ou sendmail) dispara o e-mail.
7. Boas Práticas e Considerações Finais
- Impacto no desempenho: ferramentas como htop em modo batch consomem recursos mínimos, mas evite coletas muito frequentes em produção (intervalos > 1s).
- Alternativas: sar (também do sysstat) armazena histórico, top é mais leve que htop, e nmon oferece interface interativa avançada.
- Scripts robustos: sempre trate erros com
set -e, valide permissões de escrita e use caminhos absolutos. - Ambientes de produção: prefira vmstat e iostat para scripts por sua saída previsível; htop é melhor para diagnóstico interativo.
Dominar essas ferramentas no contexto de shell scripting permite construir soluções de monitoramento personalizadas, leves e eficientes, adaptadas a qualquer infraestrutura.
Referências
- htop - Documentação Oficial — Manual completo, opções de linha de comando e guia de instalação.
- vmstat(8) - Linux man page — Referência detalhada de todas as colunas e opções do vmstat.
- iostat(1) - Linux man page — Documentação oficial do iostat com exemplos de uso e interpretação de métricas.
- sysstat - Guia de Instalação e Uso — Repositório oficial do pacote sysstat, que inclui iostat, sar e outras ferramentas.
- Bash Scripting: Monitoramento de Recursos (Tutorial) — Artigo técnico com exemplos práticos de scripts de monitoramento usando vmstat, iostat e outras ferramentas.
- Linux Performance Monitoring with vmstat and iostat — Tutorial reconhecido com casos de uso reais e interpretação de métricas.