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) e b (bloqueados).
  • memory: swpd (swap usado), free (memória livre), buff e cache.
  • swap: si (swap in) e so (swap out) — indicadores de pressão de memória.
  • io: bi (blocos recebidos) e bo (blocos enviados).
  • system: in (interrupções) e cs (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