Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 14.167 ]
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
Baixe arquivos em pedaços com o DCDownloader
mailnow - Envia mensagens pelo shell
Script para limpar os caches do proxy (squid)
Select DATAFILES especificando uma Tablespace
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Opções secretas em tema do Cinnamon
Como mapear unidade de rede no Linux
Como quebrar senha usando john the ripper
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (1)
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (1)









