Crie um Monitor de Sistema Linux Usando Bash

LinuxBeginner
Pratique Agora

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.

Linux System Monitor

🎯 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, free e df.
  • Estar equipado para estender o script adicionando novos recursos, como notificações por e-mail.
Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 63%. Recebeu uma taxa de avaliações positivas de 99% dos estudantes.

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
Criando o script do monitor do sistema

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=80 e DISK_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:
    • $1 representa o tipo de recurso (por exemplo, CPU, Memória, Disco).
    • $2 representa 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
trecho de código da função de alerta

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:

  1. top -bn1: Executa o comando top em modo batch por uma iteração para obter as estatísticas da CPU em tempo real.
  2. grep "Cpu(s)": Filtra a saída para focar na linha de uso da CPU.
  3. awk '{print $2 + $4}': Extrai e soma as porcentagens de uso da CPU do usuário e do sistema.
  4. cpu_usage=${cpu_usage%.*}: Remove a parte decimal para simplificar as comparações de limite.
  5. if ((cpu_usage >= CPU_THRESHOLD)): Compara o uso da CPU com o limite e chama send_alert se 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:

  1. free: Fornece estatísticas de uso da memória.
  2. 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).
  3. O script compara memory_usage com 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:

  1. df -h /: Obtém as estatísticas de uso do disco para o diretório raiz.
  2. awk '/\// {print $(NF-1)}': Extrai a coluna de porcentagem de uso.
  3. disk_usage=${disk_usage%?}: Remove o símbolo % para facilitar as comparações.
  4. 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.

Linux System Monitor