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
# 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):
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$ 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):
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:
$ 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
[]s
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.
ResponderExcluirManoel, 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.
Excluir[]s
quando executo com usuario oracle ele retorna uma erro:
ResponderExcluir: 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
Tinha um erros nas primeiras linhas do script, já fiz a correção, pegue o novo conteúdo e teste de novo, ok?
ExcluirEsse script funciona em qualquer versão do oracle ou somente apartir da versão 12?
ResponderExcluirLeia melhor o artigo novamente. O script executa comandos no SO, e não no BD, ok?
Excluir