Lab 2.3 - Monitoramento Avançado de Sistema
Objetivos
Ao final deste lab, você será capaz de:
- Monitorar o desempenho do sistema
- Analisar os recursos (CPU, RAM, disco, rede)
- Utilizar ferramentas de monitoramento avançadas
- Criar scripts de monitoramento
- Configurar alertas
Pré-requisitos
- Sistema Linux funcional
- Acesso root ou sudo
- Ferramentas: htop, iotop, nethogs (opcionais, mas recomendadas)
Exercício 1: Instalação das Ferramentas
Etapa 1: Ferramentas Básicas
# Atualizar
sudo apt update
# Instalar ferramentas de monitoramento
sudo apt install -y htop iotop nethogs sysstat
# Verificar instalação
which htop iotop nethogs sar
Exercício 2: Monitoramento de CPU
Etapa 1: Informações da CPU
# Informações da CPU
lscpu
# Detalhes da CPU
cat /proc/cpuinfo
# Número de CPUs
nproc
# Load average
uptime
cat /proc/loadavg
Etapa 2: Utilização da CPU
# Top processos de CPU
top -bn1 | head -20
# Com htop
htop
# Estatísticas da CPU
mpstat 1 5
# Por CPU
mpstat -P ALL 1 5
Etapa 3: Script de CPU
# Script de monitoramento de CPU
cat > cpu-monitor.sh << 'EOF'
#!/bin/bash
echo "=== CPU Info ==="
lscpu | grep -E 'Model name|CPU\(s\)|Thread|Core'
echo
echo "=== Load Average ==="
uptime
echo
echo "=== Top 5 CPU ==="
ps aux --sort=-%cpu | head -6
EOF
chmod +x cpu-monitor.sh
./cpu-monitor.sh
Exercício 3: Monitoramento de Memória
Etapa 1: Visão Geral
# Memória
free -h
# Detalhes
vmstat -s
# Por processo
ps aux --sort=-%mem | head -10
Etapa 2: Monitoramento Contínuo
# Watch memória
watch -n 1 'free -h'
# Com top processos
watch -n 1 'free -h && echo && ps aux --sort=-%mem | head -5'
Exercício 4: Monitoramento de Disco
Etapa 1: Espaço em Disco
# Espaço disponível
df -h
# Por diretório
du -sh /* 2>/dev/null | sort -h
# Top 10 maiores diretórios
du -h /home 2>/dev/null | sort -rh | head -10
Etapa 2: I/O de Disco
# Estatísticas de I/O
iostat -x 1 5
# Por processo (iotop)
sudo iotop
# Estatísticas detalhadas
cat /proc/diskstats
Etapa 3: Script de Disco
# Script de monitoramento de disco
cat > disk-monitor.sh << 'EOF'
#!/bin/bash
echo "=== Espaço em Disco ==="
df -h
echo
echo "=== Top 10 Diretórios /home ==="
du -h /home 2>/dev/null | sort -rh | head -10
EOF
chmod +x disk-monitor.sh
./disk-monitor.sh
Exercício 5: Monitoramento de Rede
Etapa 1: Interfaces de Rede
# Interfaces
ip addr show
# ou
ifconfig
# Estatísticas
ip -s link show
# Por interface
cat /proc/net/dev
Etapa 2: Conexões
# Conexões ativas
ss -tuln
# Escuta
ss -tulpn
# Por processo
sudo netstat -tulpn
Etapa 3: Tráfego de Rede
# nethogs (por processo)
sudo nethogs
# iftop (por conexão)
sudo iftop
# Estatísticas
cat /proc/net/sockstat
Exercício 6: Monitoramento Completo
Etapa 1: Script de Monitoramento
# Script completo
cat > system-monitor.sh << 'EOF'
#!/bin/bash
clear
echo "=== MONITORAMENTO DE SISTEMA $(date) ==="
echo
echo "=== CPU ==="
echo "Load: $(uptime | awk -F'load average:' '{print $2}')"
echo "Top CPU:"
ps aux --sort=-%cpu | head -4 | tail -3
echo
echo "=== MEMÓRIA ==="
free -h | grep -E 'Mem|Swap'
echo "Top Memória:"
ps aux --sort=-%mem | head -4 | tail -3
echo
echo "=== DISCO ==="
df -h / | tail -1
echo
echo "=== REDE ==="
ss -tun | grep ESTAB | wc -l
echo "Conexões estabelecidas"
EOF
chmod +x system-monitor.sh
./system-monitor.sh
Etapa 2: Monitoramento Contínuo
# Watch a cada 2 segundos
watch -n 2 ./system-monitor.sh
# Ou com while
while true; do
clear
./system-monitor.sh
sleep 2
done
Exercício 7: Alertas Automáticos
Etapa 1: Script de Alerta
# Script com limites
cat > system-alert.sh << 'EOF'
#!/bin/bash
THRESHOLD_CPU=80
THRESHOLD_MEM=80
THRESHOLD_DISK=80
# CPU
CPU_IDLE=$(mpstat 1 1 | tail -1 | awk '{print $NF}')
CPU_USED=$(echo "100 - $CPU_IDLE" | bc)
if (( $(echo "$CPU_USED > $THRESHOLD_CPU" | bc -l) )); then
echo "ALERTA: CPU em ${CPU_USED}%"
fi
# Memória
MEM_USED=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USED" -gt "$THRESHOLD_MEM" ]; then
echo "ALERTA: Memória em ${MEM_USED}%"
fi
# Disco
DISK_USED=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$DISK_USED" -gt "$THRESHOLD_DISK" ]; then
echo "ALERTA: Disco em ${DISK_USED}%"
fi
EOF
chmod +x system-alert.sh
./system-alert.sh
Etapa 2: Cron para Monitoramento
# Adicionar ao crontab
crontab -e
# Adicionar esta linha (a cada 5 minutos)
# */5 * * * * /caminho/para/system-alert.sh >> /var/log/system-alerts.log 2>&1
Exercício 8: Relatórios
Etapa 1: Relatório Diário
# Script de relatório
cat > daily-report.sh << 'EOF'
#!/bin/bash
REPORT="/var/log/daily-report-$(date +%Y%m%d).txt"
{
echo "=== RELATÓRIO DE SISTEMA $(date) ==="
echo
echo "=== CPU ==="
lscpu | grep -E 'Model name|CPU\(s\)'
uptime
echo
echo "=== MEMÓRIA ==="
free -h
echo
echo "=== DISCO ==="
df -h
echo
echo "=== TOP PROCESSOS ==="
ps aux --sort=-%cpu | head -6
echo
ps aux --sort=-%mem | head -6
} > "$REPORT"
echo "Relatório criado: $REPORT"
EOF
chmod +x daily-report.sh
sudo ./daily-report.sh
Verificação
Checklist
Verifique se você consegue:
- Monitorar CPU, memória, disco, rede
- Utilizar htop, iotop, nethogs
- Criar scripts de monitoramento
- Configurar alertas
- Gerar relatórios
Perguntas para Reflexão
-
Qual ferramenta usar para cada tipo de monitoramento?
- CPU: top, htop, mpstat
- Memória: free, vmstat
- Disco: df, du, iotop
- Rede: ss, netstat, nethogs
-
Por que é importante monitorar regularmente?
- Detectar problemas antes que se tornem críticos
- Planejar recursos
- Otimizar o desempenho
Próximos Passos
- Módulo 3: Sistema de Arquivos
- Módulo 4: Gerenciamento de Processos
- Módulo 11: Monitoramento e Logs (avançado)
Lab criado em: Dezembro 2024