Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 14.056 ]
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
Atualiza base de dados do Clamav e avisa o admin
Script em shell do artigo: Implementando a segurança em servicos de acesso remoto
Programação do Dia da Tv Aberta
Configurando um Domínio no BIND9 com Debian 3.1
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Converter os repositórios Debian para o novo formato com as chaves
Instalando Spotify no Debian 13
Realizar overclock no Miyoo Mini (plus ou normal)
Dúvidas sobre a originalidade de conteúdos online (12)
Direcionar uma URL para Outra No Mikrotik (1)
Monitoramento pfsense com zabbix (4)
Erro na inicialização do Debian como resolver (5)
linux mint reconhece microfone de lapela como fone de ouvido sem micro... (4)