Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Logo Logo cataclysm no meu pc
Por removido
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Leandro da S. Barbosa em 26/03/2005    [ 5666 hits ]

Login: leows, 11852 pontos

   


Descrição

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.

[ Download: monitoramento.sh ]   [ Enviar nova versão ]

[ 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
   Script Linux recomendado Utilitário para Slackware 10
   Script Linux recomendado ping alarme - avisa quando o ip esta offline e gera log
   Script Linux recomendado Instalação para Placa Atheros
   Script Linux recomendado Limpeza de Cache no Squid
   Script Linux recomendado Make Knoppix

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.