Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 14.099 ]
O script a seguir monitora os processos bem como a utilização de memória de cada processo, a utilização de CPU, espaço livre em partições do sistema, espaço livre em memória e swap.
Script é similar ao perfmon do Windows Advanced Server porém os alertas são só enviados por e-mail do administrador. É customizável poderá ajustar as configurações de alertas.
#!/bin/bash
#
############################################################################
# Script produzido por Leandro da S. Barbosa ( 26/11/2004 1:44pm ) #
############################################################################
# #
# Monitoramento de processos, memória e disco. #
# #
############################################################################
# v1.5 (Updated)
#
############### CONFIGURAÇÃO DA VARIÁVEL DE AMBIENTE #######################
# Quantidade máxima de CPU utilizada em % ( entre 1 a 9 )
CPU_MAX_SYSTEM=8
# Quantidade mínima de memória livre em % (entre 1 a 99 )
MEM_MIN_SYSTEM=5
# Quantidade mínima de espaço em disco livre em % (entre 1 a 99)
DISK_MIN_SYSTEM=10
# Quantidade mínima livre de swap em % (entre 1 a 99)
SWAP_MIN_SYSTEM=5
# Processamento Máximo por Usuário em % (entre 1 a 9)
PROC_MAX_USER=3
# Uso máximo da memória por Usuário em % (entre 1 a 9)
MEM_MAX_USER=3
# Email para o envio de status do monitoramento
EMAIL=lbarbosa@dba.com.br,aamaro@dba.com.br,gconverso@dba.com.br
# Pasta Temporário de Logs
PASTALOG=/backup/monitor
#################### CÓDIGO FONTE ###### FAVOR NÃO MEXER #####################
if [ ! -d $PASTALOG ]; then
mkdir -p $PASTALOG
fi
LOGFILE="$PASTALOG/log-monitor-$(/bin/date +%d-%m-%Y-%H-%M-%S).log"
touch $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo "- Informações do Servidor " >> $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo "Kernel: `uname -a` " >> $LOGFILE
echo "Distro: `cat /etc/redhat-release` " >> $LOGFILE
echo "Hostname: `hostname` " >> $LOGFILE
echo " " >> $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo "- Detalhes do Status " >> $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo " " >> $LOGFILE
monitor_detalhado()
{
a=`ps -aux |awk '{print $2}'`
b=`ps -aux |awk '{print $3}' |cut -d "." -f1`
c=`ps -aux |awk '{print $4}' |cut -d "." -f1`
d=`ps -aux |awk '{print $1}'`
contador=0
for x in $b; do
if [ $x != "%CPU" ]; then
vetb[$contador]=$x
contador=$(expr $contador + 1)
fi
done
contador=0
for x in $c; do
if [ $x != "%MEM" ]; then
vetc[$contador]=$x
contador=$(expr $contador + 1)
fi
done
contador=0
for x in $d; do
if [ $x != "USER" ]; then
vetd[$contador]=$x
contador=$(expr $contador + 1)
fi
done
contador=0
for PID in $a ; do
if [ $PID != "PID" ]; then
if ([ ${vetb[$contador]} -ge $PROC_MAX_USER ] || [ ${vetc[$contador]} -ge $MEM_MAX_USER ]) ; then
echo "($(/bin/date +%d/%m/%Y-%H:%M:%S)) Alerta - Processo $PID do usuário ${vetd[$contador]} ocupando ${vetb[$contador]} de cpu e ${vetc[$contador]} de memória" >> $LOGFILE
fi
contador=$(expr $contador + 1)
fi
done
}
MEM=`free -m | grep Mem | awk '{print $4}'`
MEM_TOTAL=`free -m | grep Mem | awk '{print $2}'`
MEM_PERC=$(expr $MEM_TOTAL \* $MEM_MIN_SYSTEM)
MEM_PERC=$(expr $MEM_PERC / 100 )
DISK_MIN_SYSTEM=$(expr 100 - $DISK_MIN_SYSTEM)
DISK_PERC=`df -m | grep -v none | grep -v Use | awk '{print $5}' | cut -d "%" -f1`
DISK_PERC=`df -m | grep -v none | grep -v Use | grep -v cdrom | awk '{print $5}' | cut -d "%" -f1`
DISK_PART=`df -h | grep -v none | grep -v Filesystem | grep -v cdrom | awk '{print $1}'`
echo "MEM_FREE $MEM MB - MEM_TOTAL $MEM_TOTAL - MEM_PERC $MEM_PERC - MEM_MIN_SYSTEM $MEM_MIN_SYSTEM"
contador=0
echo "DISK_MIN_SYSTEM $DISK_MIN_SYSTEM"
for x in $DISK_PART ; do
vetPart[$contador]=$x
echo "DISK_PART ${vetPart[$contador]}"
contador=$(expr $contador + 1)
done
contador=0
achou="false"
memachou="false"
for x in $DISK_PERC ; do
echo "DISK_PERC $x"
if [ $x -ge $DISK_MIN_SYSTEM ]; then
achou="true"
echo "Alerta ( A quantidade de espaço em disco na partição ${vetPart[$contador]} está abaixo de $DISK_MIN_SYSTEM% )" >> $LOGFILE
fi
contador=$(expr $contador + 1)
done
#if [ $MEM_PERC -ge $MEM ] ; then
# achou="true"
# memachou="true"
# echo "if [ $MEM_PERC -ge $MEM ] ; then "
# echo "Alerta ( A quantidade de memória está abaixo de $MEM_MIN_SYSTEM% ) TOTAL $MEM_TOTAL(MB) LIVRE $MEM(MB) " >> $LOGFILE
#fi
CPUN=`top -n 1 | grep % | grep -v USER | awk '{print $1}'`
CPU=`top -n 1 | grep % | grep -v USER | awk '{print $3}' | cut -d "." -f1`
contador=0
echo "CPU_MAX_SYSTEM $CPU_MAX_SYSTEM"
for x in $CPUN ; do
if [ $x == 'total' ]; then
x="cpu"
fi
vetCPUN[$contador]=$x
echo "CPUN ${vetCPUN[$contador]}"
contador=$(expr $contador + 1)
done
contador=0
for x in $CPU ; do
echo "CPU $x"
if [ $x -gt $CPU_MAX_SYSTEM ] ; then
echo "if [ $x -gt $CPU_MAX_SYSTEM ] ; then "
echo "Alerta ( A quantidade de processamento da ${vetCPUN[$contador]} está acima de $CPU_MAX_SYSTEM% ) " >> $LOGFILE
fi
contador=$(expr $contador + 1)
done
SWAP_LIVRE=`top -n 1 | grep Swap | awk '{print $6}' | cut -d "K" -f1 | cut -d "k" -f1`
SWAP_LIVRE=$(expr $SWAP_LIVRE / 1024)
SWAP_TOTAL=`top -n 1 | grep Swap | awk '{print $2}' | cut -d "K" -f1 | cut -d "k" -f1`
SWAP_TOTAL=$(expr $SWAP_TOTAL / 1024)
SWAP_PERC=$(expr $SWAP_TOTAL \* $SWAP_MIN_SYSTEM)
SWAP_PERC=$(expr $SWAP_PERC / 100 )
echo "SWAP_LIVRE $SWAP_LIVRE - SWAP_TOTAL $SWAP_TOTAL - SWAP_PERC $SWAP_PERC - SWAP_MIN_SYSTEM $SWAP_MIN_SYSTEM"
sleep 2
#if [ $SWAP_PERC -gt $SWAP_LIVRE ] && [ $SWAP_LIVRE != '' ] && [ $SWAP_TOTAL != '' ] ; then
# echo "if [ $SWAP_PERC -gt $SWAP_LIVRE ] ; then "
# achou="true"
# memachou="true"
# echo "Alerta ( A quantidade de memória SWAP está abaixo de $SWAP_MIN_SYSTEM% ) TOTAL $SWAP_TOTAL (MB) LIVRE $SWAP_LIVRE (MB) " >> $LOGFILE
#fi
if [ $achou == 'true' ] ; then
echo "envio de email [OK]"
if [ $memachou != "false" ] ; then
echo " " >> $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo "- Maiores detalhes de Processamento e Memória - " >> $LOGFILE
echo "------------------------------------------------------------------------------------------------ " >> $LOGFILE
echo " " >> $LOGFILE
monitor_detalhado
fi
sleep 1
echo " " >> $LOGFILE
echo " " >> $LOGFILE
echo "Script Monitor v1.0 Prod. Leandro da S. Barbosa (lbarbosa@dba.com.br)" >> $LOGFILE
echo "'A imaginação é o mais importante fruto do conhecimento' Albert Einstein " >> $LOGFILE
cat $LOGFILE | mail $EMAIL -s "Alerta - Monitoramento da `hostname` ($(/bin/date +%d/%m/%Y-%H:%M:%S))"
sleep 1
rm -f $LOGFILE
fi
Monitorando seus daemon de impressão...
Testando se a conexão com a Internet está ativa
Criando Autoridades Certificadoras e Certificados de Testes no Linux
Script para Firewall de Borda Corporativo
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Linux é a solução para o fim do Windows10? (1)
Programa fora de escala na tela do pc (28)
converter algoritmo C++ em C? (1)
Problemas com Driver NVIDIA (1)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)









