Social Icons

19 de fev de 2018

Eliminando arquivos de log e trace do Oracle com o logrotate




Olá pessoal,

     No artigo de hoje vou lhes apresentar o utilitário logrotate do Linux como uma alternativa para apagar arquivos de log e trace de Bancos de Dados (BDs) Oracle. Normalmente ele é utilizado para eliminar/rotacionar arquivos de log, mas eu aproveito ele para também eliminar os arquivos de trace de BDs Oracle.

     Antes de falar sobre o logrotate, quero frisar que para implementar o procedimento que vou compartilhar neste artigo é necessário ter conhecimentos básicos de SO Linux. Ressalto também, que grande parte dos softwares servidores (como por exemplo, o Oracle Database) registram o que eles fazem (seus eventos) e os erros que ocorrem quando eles tentam fazer algo, em arquivos texto, chamados de arquivos de log ou log files, e estes arquivos quando não são eliminados (depois de um certo tempo), podem ocupar grande parte do(s) disco(s) do servidor. Dependendo de como está instalado/configurado o Banco de Dados (BD) Oracle, os arquivos de log podem crescer até ocupar todo o espaço do disco em que estão alocados, causando erros ou até mesmo o congelamento do BD, portanto, é necessário eliminá-los, preferencialmente através de algum procedimento automático, como por exemplo, a execução diária de um script que contém comandos para apagá-los, ou através do logrotate.
   
     Existem diversas formas de eliminar arquivos de log e trace de um BD Oracle. Citarei abaixo algumas que conheço e que acredito serem as mais comuns:

          1- Script customizado:
               No caso de um BD Oracle instalado em SO Linux, o DBA cria um script shell contendo comandos para apagar os arquivos de log e trace, e em seguida, configura o crontab para chamar esse script periodicamente.

          2- Política de retenção do ADRCI:
               A partir do 11G o Oracle elimina automaticamente os arquivos de log e trace através do ADRCI. As configurações default são bastante conservadoras para BDs grandes e que possuem alta carga, portanto, talvez seja necessário fazer ajustes nas configurações padrões deste utilitário. Para mais informações sugiro a leitura do artigo ADRCI - Como Otimizar a Utilização de Espaço Causado pelos Logs e Traces? - PARTE I.

          3- Logrotate:
               Utilitário do SO Linux que permite não apenas eliminar os arquivos de log e trace, mas que possui vários outros recursos, que as opções anteriores não oferecem, e que irei comentar mais adiante.

     O assunto principal deste artigo é referente ao item 3 mencionado acima. Irei falar um pouco mais sobre o logrotate e demonstrarei como utilizá-lo. O logrotate normalmente é executado diariamente através de um cron job e foi projetado para facilitar o gerenciamento de arquivos de log. Ele normalmente é utilizado para eliminar "velhos" arquivos de log, mas também permite rotacionar, compactar e enviar os arquivos por e-mail. Você pode configurá-lo para ser executado em determinados caminhos de arquivos de log, com uma frequência diária, semanal ou mensal, ou de acordo com o tamanho dos arquivos.

     Para descobrir se o pacote do logrotate está instalado em uma distribuição do Linux compatível com o kernel do Red Hat (Exemplos: Red Hat, CentOs e Oracle Linux), execute o comando abaixo conectado como root:
    # rpm -qa | grep logrotate

     ou:
    # yum list installed | grep logrotate
 
     e espere por um resultado similar aos que seguem nas linhas abaixo, caso ele esteja instalado:
    logrotate-3.8.6-12.el7.x86_64
    logrotate.x86_64     3.8.6-12.el7    @anaconda/7.3
    
     Após ter certeza de que o logrotate está instalado, sugiro também verificar a frequência com que ele é executado pelo cron do SO. Como a frequência de execução dele normalmente é diária, você poderá fazer essa conferência vendo o conteúdo do arquivo /etc/cron.daily/logrotate (ver Imagem 01):
     # more /etc/cron.daily/logrotate

Imagem 01 - Conteúdo do arquivo /etc/cron.daily/logrotate

     Veja no resultado da Imagem 01 que o utilitário logrotate é executado através do arquivo /usr/sbin/logrotate, que lê um arquivo de configuração no caminho /etc/logrotate.conf e grava um arquivo de status de sua execução no caminho /var/lib/logrotate/logrotate.status.
  
     O arquivo /etc/logrotate.conf é um dos mais importantes para efetuarmos a configuração do logrotate, pois  o utilitário lê ele todas as vezes que é executado, e nele podemos inserir as configurações de limpeza/rotação dos arquivos de logs desejadas, através de 2 formas:
          - Diretamente: incluindo os parâmetros de configuração dentro do arquivo /etc/logrotate.conf;
          - Indiretamenteincluindo os parâmetros de configuração em arquivos separados, criados na pasta /etc/logrotate.d, pasta que é referenciada através de um include no arquivo /etc/logrotate.conf.
 
     Gosto mais da forma indireta, portanto, sugiro a criação de um arquivo com o nome oracle na pasta /etc/logrotate.d, que tenha o conteúdo abaixo:

# *** 1: arquivos de log dos listeners e sqlnet:
# faz rotacionamento mensal durante 1 ano, eliminando os logs mais velhos que esse periodo. Acrescenta data no nome das copias mensais e trunca arquivo de log original apos a copia. Nao manda email contendo arquivos expirados.
/ORACLE_HOME/network/log/*.log {
   monthly
   rotate 12
   copytruncate
   notifempty
   missingok
   nomail
   noolddir
   dateext
   dateformat _%Y%m%d_%s
}

# *** 2: arquivos de log das instancias de bd:
# faz rotacionamento mensal durante 1 ano, eliminando os mais velhos que esse periodo. Acrescenta data no nome das copias mensais e trunca arquivo de log original apos a copia. Nao manda email dos arquivos expirados.
/ORACLE_BASE/diag/rdbms/*/*/trace/*.log {
   monthly
   rotate 12
   copytruncate
   notifempty
   missingok
   noolddir
   dateext
   dateformat _%Y%m%d_%s
}

# *** 3: arquivos de traces das instancias de bd:
# mensalmente elimina todos arquivos que forem mais velhos que 1 ano, sem gerar copias, renomeando os logs originais acrescentando incremento numerico
/ORACLE_BASE/diag/rdbms/*/*/trace/*.tr? {
   monthly
   rotate 12
   missingok
   nocopy
}

# *** 4: arquivos de log diversos do EM:
# idem "arquivos de log das instancias de bd"
/ORACLE_HOME_EM/sysman/log/*.log {
   monthly
   rotate 12
   copytruncate
   notifempty
   missingok
   noolddir
   dateext
   dateformat _%Y%m%d_%s
}

     Podemos verificar que o arquivo oracle acima é composto de 4 partes. Em cada parte ele começa com comentários que descrevem o que será executado, depois segue uma linha que contém o diretório e nome dos arquivos de logs, e por fim, linhas com parâmetros de configuração. A primeira parte foi criada para eliminar e rotacionar os arquivos de log do(s) listener(s) e sqlnet. A segunda foi criada para eliminar/rotacionar os arquivos de log (alert log)  de bancos de dados. A terceira para eliminar arquivos de trace, e a quarta e última parte, para eliminar arquivos de log do Enterprise Manager. Substitua os nomes em vermelho pelos diretórios correspondentes em sua instalação. Faça também alterações/adaptações conforme a sua necessidade. Segue abaixo uma pequena lista de parâmetros que podemos usar para configurar o logrotate:

- compress: comprimir os logs;
- compresscmd: comprimir os logs com especificacao do comando a utilizar. O padrao eh zip;
- uncompresscmd: definir o comando para descomprimir os logs. O padrao eh zip;
- compressext: especifica a extensao sada para o arquivo de log comprimido;
- compressoptions: para possibilitar incluir opcoes aos comandos de compressao. Por exemplo: gzip -5. O padrao eh a compressao maxima (-9);
- copy: copia o log sem modificar o original;
copytruncate: copia o log e move o original para outro lugar;
- create [mode owner group]: Este é o comando usado para a criacao de um novo arquivo de log vazio apos rotacao Voce pode alterar as permissoes, o dono do arquivo e o grupo;
- daily: rotacionar diariamente;
- delaycompres: Atrasa a compressao do log para a proxima rotacao;
- extension [ext]: Inclui uma extensao para o arquivo de log. Se a compressao usada for a padrao a extensao sera .gz;
- ifempty: Rotaciona os logs mesmo quando vazios;
- include [file or directory]: Indica outros arquivos de configuracao ou diretorios que tenham arquivos de configuracao para o logrotate;
- mail: envia um email com logs extintos;
- mailfirst: envia um email com os logs rotacionados;
- maillast: envia um email com os logs que serao rotacionados, os logs originais.
- missingok: nao enviar mensagem de erro no caso de um arquivo de log nao existir;
- monthly: rotaciona os logs mensalmente;
- nocompress/nocopy/nocopytruncate/nocreate/nodelaycompress/nomail: negativas aos comandos correspondentes;
- nocopy: nao copia o arquivo original deixando-o no lugar;
- nomissingok/noolddir/nosharedscripts/notifempty - negativas aos comandos correspondentes;
- nooldir: manter os arquivos de log no diretorio de origem;
- notifyempty: Nao rotaciona o log se ele estiver vazio;
- olddir [directory]: guardar as versoes rotacionadas em outro diretorio;
- postrotate/endscript: comandos a serem executados apos rotacao do log;
- prerotate/endscript: comandos a serem executados antes da rotacao do log, caso o log seja rotacionado;
- firstaction/endscript: comandos a serem executados imediatamente antes dos prerotates comandos;
- lastaction/endscript: comandos a serem executados depois daqueles invocados atraves do -postrotate;
- rotate: comando para rotacionar os logs;
- size: rotacionar os logs quando ultrapassarem o tamanho indicado;
- sharedscripts: postrotate e prerotate serao xecutados para cada log que tenha a mesma identificacao. Este comando faz com que sejam executados apenas uma vez;
- start: inclui um numero para a base dos logs rotacionados;
- tabooext [+] list: mudar a lista de extensoes;
- weekly: rotacionar semanalmente.
   
   
     Para aprender mais sobre como configurar o logrotate.conf sugiro a leitura dos links das referências. Para testar o logrotate execute a linha de comando abaixo:
     $ /usr/sbin/logrotate --force --verbose /etc/logrotate.d/oracle -s /tmp/logrotate.status

     Espero que você tenha aprendido algo, e se tiver qualquer dúvida é só deixar um comentário que eu irei responder o mais breve possível!

[]s


Referências:

0 comentários:

Postar um comentário

 

Suporte remoto alunos

Seguidores

Meu One Drive (antigo Sky Drive)