Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 14.206 ]
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
estoque.sh - Gerenciamento de estoque/almoxarifado
Auto-installer ISP Config 3 - FC 11
Converter Wav para MP3 usando Lame e PPSS para multi processamento via shell script - Asterisk
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









