Introdução
Neste projeto, você criará um monitor de sistema Linux usando um script de shell. Este script rastreará continuamente o uso da CPU, memória e disco do seu sistema, exibindo as porcentagens de uso em tempo real. Se o uso de qualquer recurso exceder um limite predefinido, um alerta será exibido. Ao concluir este projeto, você aprenderá habilidades básicas de scripting Linux enquanto constrói uma ferramenta prática.

🎯 Tarefas
Ao concluir este projeto, você irá:
- Aprender como criar um script de shell para monitorar os recursos do sistema.
- Entender como definir e usar valores de limite (threshold) para o uso da CPU, memória e disco.
- Criar uma função para enviar alertas quando os limites forem excedidos.
🏆 Conquistas
Após concluir este projeto, você irá:
- Ser capaz de criar e executar um monitor de sistema Linux usando um script de shell.
- Entender como trabalhar com comandos de recursos do sistema como
top,freeedf. - Estar equipado para estender o script adicionando novos recursos, como notificações por e-mail.
Configurando o Projeto
Comece preparando um espaço de trabalho limpo para seu script. Recomendamos o uso do WebIDE para este projeto, pois ele se adapta à codificação e teste de scripts.
Navegue até este diretório e crie um arquivo chamado system_monitor.sh:
cd ~/project
touch system_monitor.sh

Abra o arquivo em seu editor de texto favorito e adicione as seguintes linhas:
#!/bin/bash
## Define the threshold values for CPU, memory, and disk usage (in percentage)
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80
Aqui está o que cada parte do código faz:
#!/bin/bash: Esta linha especifica que o script será interpretado usando o shell Bash.CPU_THRESHOLD=80: Define o limite de uso da CPU para 80%. Você pode ajustar este valor mais tarde.MEMORY_THRESHOLD=80eDISK_THRESHOLD=80: Da mesma forma, estes definem limites para o uso de memória e disco.
Salve o arquivo e torne-o executável:
chmod +x system_monitor.sh
Adicionando uma Função de Alerta
Agora, vamos adicionar uma função para enviar alertas quando o uso de recursos exceder os limites. Abra system_monitor.sh e adicione o seguinte código:
## Function to send an alert
send_alert() {
echo "$(tput setaf 1)ALERT: $1 usage exceeded threshold! Current value: $2%$(tput sgr0)"
}
Aqui está uma análise desta função:
send_alert: A função recebe dois argumentos:$1representa o tipo de recurso (por exemplo, CPU, Memória, Disco).$2representa a porcentagem de uso atual.
tput setaf 1: Muda a cor do texto para vermelho para tornar os alertas visualmente distintos.tput sgr0: Redefine a formatação do texto para normal após a mensagem de alerta.
Adicione uma chamada de teste para a função para verificar se ela funciona:
send_alert "CPU" 85

Execute o script:
./system_monitor.sh
Você deve ver uma mensagem de alerta vermelha semelhante a:
ALERT: CPU usage exceeded threshold! Current value: 85%
Antes de prosseguir, exclua a chamada de teste para send_alert do script.
Monitoramento do Uso da CPU
Vamos adicionar lógica para monitorar o uso da CPU. Abra o script e adicione o seguinte código:
## Monitor CPU usage
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*} ## Convert to integer
echo "Current CPU usage: $cpu_usage%"
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
Aqui está o que acontece neste código:
top -bn1: Executa o comandotopem modo batch por uma iteração para obter as estatísticas da CPU em tempo real.grep "Cpu(s)": Filtra a saída para focar na linha de uso da CPU.awk '{print $2 + $4}': Extrai e soma as porcentagens de uso da CPU do usuário e do sistema.cpu_usage=${cpu_usage%.*}: Remove a parte decimal para simplificar as comparações de limite.if ((cpu_usage >= CPU_THRESHOLD)): Compara o uso da CPU com o limite e chamasend_alertse for excedido.
Execute o script para testar o monitoramento da CPU:
./system_monitor.sh
Você deve ver o uso da CPU exibido. Se estiver acima do limite, você verá um alerta.
Monitoramento do Uso de Memória
Em seguida, adicione código para monitorar o uso da memória. Insira as seguintes linhas abaixo da lógica de monitoramento da CPU:
## Monitor memory usage
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
echo "Current memory usage: $memory_usage%"
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
Veja como funciona:
free: Fornece estatísticas de uso da memória.awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}': Calcula a porcentagem de memória em uso dividindo a memória usada ($3) pela memória total ($2).- O script compara
memory_usagecom o limite e envia um alerta, se necessário.
Execute o script:
./system_monitor.sh
Você deve ver a porcentagem de uso da memória, e os alertas serão acionados se o uso exceder o limite.
Monitoramento do Uso do Disco
Agora, vamos monitorar o uso do disco. Adicione o seguinte código abaixo da lógica de monitoramento da memória:
## Monitor disk usage
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?} ## Remove the % sign
echo "Current disk usage: $disk_usage%"
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
Explicação:
df -h /: Obtém as estatísticas de uso do disco para o diretório raiz.awk '/\// {print $(NF-1)}': Extrai a coluna de porcentagem de uso.disk_usage=${disk_usage%?}: Remove o símbolo%para facilitar as comparações.- Os alertas são acionados se o uso do disco exceder o limite.
Execute o script:
./system_monitor.sh
Você deve ver as estatísticas de uso do disco, e os alertas serão acionados, se necessário.
Combinando Tudo em um Loop
Finalmente, combine o monitoramento de CPU, memória e disco em um loop para monitoramento contínuo. Substitua o conteúdo existente por isto:
while true; do
## Monitor CPU
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
cpu_usage=${cpu_usage%.*}
if ((cpu_usage >= CPU_THRESHOLD)); then
send_alert "CPU" "$cpu_usage"
fi
## Monitor memory
memory_usage=$(free | awk '/Mem/ {printf("%3.1f", ($3/$2) * 100)}')
memory_usage=${memory_usage%.*}
if ((memory_usage >= MEMORY_THRESHOLD)); then
send_alert "Memory" "$memory_usage"
fi
## Monitor disk
disk_usage=$(df -h / | awk '/\// {print $(NF-1)}')
disk_usage=${disk_usage%?}
if ((disk_usage >= DISK_THRESHOLD)); then
send_alert "Disk" "$disk_usage"
fi
## Display current stats
clear
echo "Resource Usage:"
echo "CPU: $cpu_usage%"
echo "Memory: $memory_usage%"
echo "Disk: $disk_usage%"
sleep 2
done
Este loop monitora e atualiza continuamente o uso de recursos, limpando a tela e exibindo as estatísticas atuais em intervalos regulares.
Execute o script para testar:
./system_monitor.sh
Resumo
Parabéns! Você construiu um monitor de sistema Linux totalmente funcional usando Bash. Esta ferramenta rastreia o uso de CPU, memória e disco em tempo real, alertando você se o uso exceder os limites predefinidos. Sinta-se à vontade para estender o script adicionando recursos como notificações por e-mail ou monitorando recursos adicionais.




