Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 14.223 ]
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
Instalador de Hotspot Linux Debian (SysV)
mPlayRecTv - assista e grave a programação da TV com MPlayer
Script de alteração do sources.list
Limitando largura de banda com o CBQ
Testa a conexão com a internet e se não tem reinicia o pc.
Papagaiando o XFCE com temas e recursos
WhatsApp com Chamadas no Linux via Waydroid
XFCE - quase um Gnome ou Plasma mas muito mais leve
LXQT - funcional para máquinas pererecas e usuários menos exigentes
Removendo entradas de boot UEFI "fantasmas" via terminal
Atualizações de Segurança Automáticas no Debian
Como cortar as partes de um vídeo com passagens de áudio em branco
Tiling automático no KDE Plasma
SNMP Scan no OCS Inventory só funciona com HTTPS corretamente configurado
Tentativa de instalar Linux em um notebook HP 246 G6 (2)
Uma pergunta bem simples mas não achei resposta (ainda) (1)
O que você está ouvindo agora? [2] (228)









