Quero capturar consultas lentas por meio logrotate
de , e quero que elas girem semanalmente e quero economizar o valor de um ano. Os logs assumem o formato:
-rw-r-----. 1 mysql root 1239 Feb 21 18:46 mysqld1-slow.log
-rw-r-----. 1 mysql root 885 Feb 11 14:48 mysqld2-slow.log
-rw-r-----. 1 mysql root 885 Feb 22 08:58 mysqld3-slow.log
-rw-rw-rw-. 1 mysql root 802 Feb 11 14:47 mysqld-slow.log
Como os logs acabam sendo gravados com tanta frequência, como posso garantir que nada seja perdido logrotate
? O processo em si não cria o arquivo, ele precisa ter o original ali. Eu estava pensando que isso faria isso:
/var/log/mysqld*-slow.log {
missingok
notifempty
weekly
rotate 52
compress
delaycompress
create 0644 mysql root
}
Portanto, ele deve compactar o antigo e criar o mesmo nome de arquivo com as permissões corretas, mas não tenho certeza de como o logrotate lida com algo que está escrito em meio ao movimento.
Parece que a
copytruncate
função pode fazer isso:copytruncate Truncate the original log file in place after creating a copy, instead of moving the old log file and optionally creating a new one. It can be used when some program cannot be told to close its logfile and thus might continue writing (appending) to the previous log file forever. Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost. When this option is used, the create option will have no effect, as the old log file stays in place.
Eu coloquei isso no lugar.