Script - monitorando servidor

Publicado por Leandro da S. Barbosa 26/03/2005

[ Hits: 13.823 ]

Download monitoramento.sh




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.

  



Esconder código-fonte

#!/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

Scripts recomendados

Manutencao de arquivos no Squid-Cache

Iniciar nova instância do Firefox quando o mesmo não está respondendo

Configuração de failover de links de internet

Backup em Fita DDS

Jftp Script - Script para automação de um processo FTP


  

Comentários
[1] Comentário enviado por meetgyn em 14/11/2014 - 11:38h

Esta com erro na linha 118
./monitor.sh: line 118: [: /: esperado expressão de número inteiro
Mas gostei do seu script.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts