자주 기록되는 로그를 데이터 손실 없이 logrotate

자주 기록되는 로그를 데이터 손실 없이 logrotate

나는 느린 쿼리를 포착 logrotate하고 매주 순환하여 1년의 가치를 절약하고 싶습니다. 로그는 다음 형식을 취합니다.

-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

로그가 자주 기록되기 때문에 누락된 내용이 없는지 어떻게 확인합니까 logrotate? 프로세스 자체에서는 파일이 생성되지 않으며 원본 파일이 필요합니다. 나는 이것이 그것을 할 것이라고 생각합니다 :

/var/log/mysqld*-slow.log {
    missingok
    notifempty
    weekly
    rotate 52
    compress
    delaycompress
    create 0644 mysql root
}

따라서 이전 파일을 압축하고 올바른 권한으로 동일한 파일 이름을 생성해야 하지만 logrotate가 동작 중 쓰기를 어떻게 처리하는지 잘 모르겠습니다.

답변1

이 기능은 copytruncate작업을 수행하는 것 같습니다

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.

나는 이것을 제자리에 두었습니다.

관련 정보