Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 13.973 ]
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
Plugin para o Nagios monitorar o vencimento do certificado Zimbra
Distribuindo arquivos para máquinas em rede
Editor de configurações para Tint2
Baixa os pacotes de uma determinada versão do Slackware para posterior atualizaçao
Automatizando digitação de códigos 2FA no browser
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Como converter imagens PNG/JPEG para SVG em linha de comando
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Java é uma linguagem de brinquedo? (1)
Linux não desliga a tela da TV nunca (4)
Mudar ícone do favorito "encerrar sessão" do Debian 12.10, c... (2)