Implementando Logrotate

    Em poucas palavras, logrotate irá renomear ou comprimir o log principal quando uma condição for encontrada, então o próximo evento será guardado num arquivo vazio. Adicionalmente, logrotate removerá “velhos” arquivos de log e manterá os mais recentes. Claro, temos que decidir o que “velhos” significa e com que frequência queremos que logrotate limpe os logs para nós.

    Para instalar logrotate use seu gerenciador de pacotes. No CentOS:

    # yum install logrotate

    O arquivo de configuração primária para o logrotate, que abrange os parametros padrões é /etc/logrotate.conf; configurações adicionais específicas são incluídas no diretório /etc/logrotate.d. Valores de configuração específicas sobreescrevem os parametros no arquivo de configuração primária.

    Em resumo, a configuração do logrotate é feita em duas etapas separadas:

    • Editando-se /etc/logrotate.conf
    • Editando-se a configuração específica relacionada ao serviço que é armazenada no diretório /etc/logrotate.d/

    O arquivo principal logrotate.conf contém uma configuração genérica. Segue um exemplo de configuração padrão do logrotate.conf:

     weekly  
     rotate 4  
     create  
     dateext  
     include /etc/logrotate.d  
     /var/log/wtmp {  
           monthly  
           create 0664 root utmp  
               minsize 1M  
           rotate 1  
      }
    

    Agora vamos adicionar um novo arquivo de log a ser rotacionado. Vamos supor que tenhamos um arquivos de log chamado:

    /var/log/linux.log

    situado no diretório /var/log e que necessita ser rotacionado diariamente. Primeiro, necessitamos criar um novo arquivo de configuração de logrotate para acomodar nosso novo log:

    # vi /etc/logrotate.d/linux

    Insira a seguinte configuração:

    /var/log/linux.log {
    missingok
    notifempty
    compress
    size 20k
    daily
    create 0600 root root
    }

    A seguir uma breve explicação do arquivo criado:

    • missingok - não mostra erro se o arquivo de log estiver faltando
    • notifempty - não rotaciona o log se estiver vazio
    • compress - versões antigas do arquivo de log são comprimidas com gzip
    • size - o arquivo de log só é rotacionado se maior que 20k
    • daily - rotação diária
    • create - cria um novo arquivo de log com permissões 600 onde o proprietário e o grupo é o usuário root

    Agora vamos simular a execução do logrotate (dry run):

    # logrotate -d /etc/logrotate.d/linux

    Para forçar a execução do logrotate mesmo quando as condições não são alcançadas:

    # logrotate -vf /etc/logrotate.d/linux

    Troubleshotting:

    Se a rotação der a mensagem de erro “Skipping log because parent directory has insecure permission” defina na configuração qual usuário e grupo devem trabalhar na execução da rotação:

    # vi /etc/logrotate.d/linux

    Insira a seguinte configuração (exemplo genérico):

    file-to-be-rotated {
    su user group
    rotate 4
    }