Social Icons

24 de ago. de 2018

Script shell para monitoramento de espaço em disco no servidor Linux




Olá pessoal,

     No post de hoje irei compartilhar com vocês um script shell que criei para monitorar o espaço em disco de servidores Linux, usando como base outro script que vi no livro "Oracle Database 12c Performance Tuning Recipes" e que gostei bastante pela sua simplicidade e eficiência. 

     O script original verifica o espaço disponível nos discos do servidor e envia alertas por e-mail. Os scripts que eu fiz e estou compartilhando aqui no blog foram alterados apenas para formatar as mensagens de alerta para algo que ficasse melhor e mais fácil de interpretar, gerando também um arquivo de log (visando ter algum histórico desses alertas).

     Segue abaixo o código do primeiro script, o principal, que aqui terá o nome /oracle/ver_espaco_disco.sh (mas salve-o na pasta e dê o nome que melhor lhe convier):


#!/bin/bash
#----------------------------------------------------------------------------------
# 25/07/2018 [Fabio Prado] -> Script criado para monitorar espaco em disco nos pontos de montagem principais do servidor. Manda msg quando espaco estiver ocupado em 80% ou mais. 
#    a) Atribua para a var mntlist os nomes dos pontos de montagens que vc deseja monitorar, separados por espaços em branco
#    b) Altere o e-mail teste@oracle.com para o qual vc deseja enviar as msgs de monitoramento
#----------------------------------------------------------------------------------
mntlist="/u01 /u02 /u03"  
for ml in $mntlist
do
    # grava na var "usedSpc" o valor do percentual de uso do ponto de montagem, extraido do comando "df -h":
    usedSpc=$(df -h $ml | sed '1d' | awk '{print $5}' | grep -v capacity | cut -d "%" -f1 -)
    # grava na var "BOX" o nome da maquina:
    BOX=$(uname -a | awk '{print $2}')

    case $usedSpc in
        [0-9])
            arcStat="$ml => Relaxe,_ha_muito_espaco uso_de_$usedSpc%"
            ;;
        [1-7][0-9])
            arcStat="$ml => Espaco_em_disco_OK uso_de_$usedSpc%"
            ;;
        [8][0-9])
            arcStat="$ml => WARNING:_espaco_em_disco_esta_ficando_baixo uso_de_$usedSpc%"
            ;;
        [9][0-9])
            arcStat="$ml => CRITICAL:_espaco_em_disco_esta_ACABANDO uso_de_$usedSpc%"
            echo $arcStat $ml | mailx -s "Espaco em: $BOX" teste@oracle.com
            ;;
        [1][0][0])
            arcStat="$ml => CRITICAL:_espaco_em_disco_JA_ACABOU uso_de_$usedSpc%"
            echo $arcStat $ml | mailx -s "Espaco em: $BOX" teste@oracle.com
            ;;
        *)
        arcStat="% uso: $usedSpc"
    esac

    echo $arcStat
    #
done
#
exit 0


     Após criar o arquivo acima, atribua nele o privilégio de execute para todos os usuários e grupo, como no exemplo abaixo:
     $   chmod +x /oracle/ver_espaco_disco.sh
   
     O script já fornecido é suficiente para que você efetue o monitoramento do espaço em disco. Ele exibe mensagens diversas de acordo com o espaço ocupado em cada ponto de montagem informado na var mntlist, e dispara mensagens de e-mail quando a ocupação do disco estiver crítica. Neste caso, estamos considerando como crítico o espaço ocupado igual ou maior que 90% do tamanho total do ponto de montagem.

     Segue abaixo um exemplo do resultado da execução desse primeiro script (com os nomes de pontos de montagem alterados para apenas /, para não mostrar informações confidenciais):

Imagem 01 - Resultado da execução do primeiro script

     Segue abaixo o código do 2º script, que chamaremos aqui de /oracle/log_espaco_disco.sh, e que foi criado apenas para gerar o histórico de execução do script anterior, permitindo gravar em um arquivo de log a data e hora da execução e todas as demais informações relacionados ao espaço em disco ocupado em cada ponto de montagem, com uma formatação um pouco melhor que a do script anterior (ver Imagem 02):

#!/bin/bash
date '+%d/%m/%Y - %H:%M:%S' >> /tmp/ver_espaco_disco.log
/oracle/ver_espaco_disco.sh | column -t | tr "_" " " >> /tmp/ver_espaco_disco.log
exit 0


Imagem 02 - Conteúdo do arquivo de log gerado na execução do 2º sciptco


     Atribua também neste último script o privilégio de execute para todos os usuários e grupo, como no exemplo abaixo:
     $   chmod +x /oracle/log_espaco_disco.sh
   

     Para automatizar o monitoramento do espaço em disco sugiro incluir na crontab do servidor a a linha de comando abaixo para executar o 2º script a cada 1 hora:

01 * * * * /oracle/log_espaco_disco.sh


     Por hoje é só! Se tiver qualquer dúvida ou problema, deixe um comentário aqui no artigo!

[]s
  





6 comments:

  1. Boa tarde professor Fabio. Seguinte esse script tem que ficar no crontab no usuário root ou do usuario oracle? e outrra posso colocar permissoes 775 ou 777, geralmente coloco todos para no crontab no root e nas pastas /usr/bin.

    ResponderExcluir
    Respostas
    1. Manoel, se vc estiver monitorando somente pontos de montagem que o usuário oracle é dono, coloque na crontab dele, caso contrário coloque na crontab do root. Quanto aos privilégios, sugiro 755.

      []s

      Excluir
  2. quando executo com usuario oracle ele retorna uma erro:
    : comando não encontradoh: line 6:
    'erificar_disco_oracle.sh: line 8: erro de sintaxe próximo do `token' não esperado `do
    'erificar_disco_oracle.sh: line 8: `do

    ResponderExcluir
    Respostas
    1. Tinha um erros nas primeiras linhas do script, já fiz a correção, pegue o novo conteúdo e teste de novo, ok?

      Excluir
  3. Esse script funciona em qualquer versão do oracle ou somente apartir da versão 12?

    ResponderExcluir
    Respostas
    1. Leia melhor o artigo novamente. O script executa comandos no SO, e não no BD, ok?

      Excluir

 

LINKS ÚTEIS

Total de visualizações de página

Seguidores

Meu One Drive (antigo Sky Drive)