Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 13.890 ]
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
Backup com TAR em LOG usando FITA LTO/DLT com filtro de arquivos, SPLIT em FITAS, envio de LOG por E
Simples inventário de máquinas em Shell Script
Gerador de PPP para USB (Palm OS e Pocket PC)
Firewall com iproute2 para 2 links com ip fixo
duplex_record: mixando áudio do microfone e saída de áudio de um programa via P
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Programa duplicado no "Abrir com" e na barra de pesquisa do ... (1)
VMs e Interfaces de Rede desapareceram (13)
Como abrir o pycharm no linux [RESOLVIDO] (4)