Configuração do logrotate em Centos 7
Ontem, deparei-me com um problema de baixa capacidade /var/log/ partição. Alguns logs eram demasiado grandes e o logrotate é a ferramenta perfeita para lidar com este problema. É um software concebido para reduzir a quantidade de espaço para cada ficheiro de log que temos. E pode ser feito de algumas maneiras.
Logrotate Description: logrotate foi concebido para facilitar a administração de sistemas que geram grandes números de ficheiros de log. Permite rotação automática, compressão, remoção, e envio de ficheiros de registo. Cada ficheiro de log pode ser tratado diariamente, semanalmente, mensalmente, ou quando cresce demasiado.
Normalmente, o logrotate é executado como um trabalho cron diário. Não modificará um log várias vezes num dia. Assim, em poucas palavras, o logrotate está a reduzir a utilização de espaço em disco por ficheiros log.
Configuração do logrotate
Configuração do logrotate é feita num ficheiro principal: /etc/logrotate.conf e outros ficheiros de configuração específicos do serviço que são armazenados em /etc/logrotate.d/
Então a configuração da amostra principal é:
# see "man logrotate" for details# rotate log files weekly specified in /etc/logrotate.d/weekly# keep 4 weeks of all log filesrotate 4# create new (empty) log files after rotating old onescreate# use date as a suffix of the rotated filedateext# uncomment this if you want your log files compressed by gzipcompress# RPM packages drop log rotation information into this directory#there are all other configurations of services and their logs to rotateinclude /etc/logrotate.d
algumas amostras e configurações reais de ficheiros de log
Então, podemos adicionar um novo ficheiro de log em /var/log/ por esta via:
echo "this is a sample log file" > /var/log/vasil.log#this create a log file vasil1.log of size 5MBdd if=/dev/zero of=/var/log/vasil1.log bs=1M count=5
Next, criamos um novo ficheiro de configuração que é armazenado no destino explicado acima:
vim /etc/logrotate.d/vasil###/var/log/vasil.log { missingok notifempty compress minsize 1M daily create 0600 root root}
vim /etc/logrotate.d/vasil1###/var/log/vasil1.log { missingok notifempty compress minsize 1M daily create 0600 root root}
E uma explicação das variáveis:
- missingok – não dar erro se faltar o ficheiro de log
- notifempty – não rodar o ficheiro de log se este estiver vazio
- compress – versões antigas de ficheiros de log são comprimidas com gzip por defeito
- minsize – Log só é rodado se for maior que 1M
- diariamente – assegura a rotação diária
- criar – cria um novo ficheiro de registo com permissões 600 onde o proprietário e o grupo é utilizador root
se quiser mais opções e a sua explicação, consultar o manual:
man logrotare
Lista de /var/log para os nossos ficheiros de registo. Podemos ver, que temos um log vasil.log com tamanho 26b e vasil1.log com tamanho 5MB.
ls -lah /var/log/va*-rw-r--r--. 1 root root 5.0M Mar 3 13:21 /var/log/vasil1.log-rw-r--r--. 1 root root 26 Mar 3 13:21 /var/log/vasil.log
Agora, podemos depurar a nossa configuração através deste comando:
logrotate -d /etc/logrotate.d/vasil1orlogrotate -d /etc/logrotate.d/vasil
Então, se quisermos executar o logrotate manualy e ver, o que está a acontecer, executar o seguinte comando. Mas esteja atento porque faz rodar todos os seus logs, definidos em /etc/logrotate.d/
logrotate -f /etc/logrotate.conf
E podemos ver tanto os ficheiros de log comprimido como dois novos ficheiros de log vazio criados:
ls -lah /var/log/va*-rw-------. 1 root root 0 Mar 3 13:23 /var/log/vasil1.log-rw-r--r--. 1 root root 5.0K Mar 3 13:21 /var/log/vasil1.log-20170303.gz-rw-------. 1 root root 0 Mar 3 13:23 /var/log/vasil.log-rw-r--r--. 1 root root 44 Mar 3 13:21 /var/log/vasil.log-20170303.gz
Podemos ver o nosso ficheiro de log comprimido através deste comando:
zcat /var/log/vasil.log-20170303.gzthis is a sample log file
Or podemos usar gunzip para os descomprimir através do comando gzip.
Quando usamos logrotate, por vezes precisamos de reiniciar uma aplicação ou serviço. O logrotate pode fazer isso através de um script chamado “postrotate”. Este script pode ser usado em ficheiro de configuração como httpd. Quando o log é rodado, o serviço de recarga de script para usar o novo ficheiro de log vazio.
cat /etc/logrotate.d/httpd/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript}
Então, espero, que isto ajude alguém 🙂 Tenha uma diversão.