Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 13.824 ]
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
Geração de gráfico em shell script
Jftp Script - Script para automação de um processo FTP
Identificar,matar e Iniciar novo Processo
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Instalação Uefi com o instalador clássico do Mageia (0)
É cada coisa que me aparece! - não é só 3% (2)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta