Script - monitorando servidor
Publicado por Leandro da S. Barbosa 26/03/2005
[ Hits: 13.992 ]
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
Script para acertar hora e data do sistema no linux.
Script de backup para Gravador CD-R ou CD-Rw
Monitoramento de usuário via screenshots
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Gestão de Ambiente em uma rede Linux (2)
Ajuda Pra Melhoria do NFTABLES. (7)
Zorin OS - Virtual Box não consigo abrir maquinas virtuais (4)