Páginas

▼

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 comentários:

  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