Logrotate가 압축된 로그를 삭제하지 않음

Logrotate가 압축된 로그를 삭제하지 않음

rsyslog를 실행하는 CentOS 상자가 있고 전체 네트워크 장치에 대한 syslog 서버로 logrotate가 있습니다. 한동안 이것저것 고민해 보았는데, 로그 회전/압축 부분은 제대로 작동하지만, 오래된 압축 .gz 로그를 삭제하도록 할 수는 없는 것 같습니다. 기본 설정은 다음과 같습니다.

로그는 /var/log/syslog에 저장되며 각 호스트는 해당 IP 주소 또는 호스트 이름을 기반으로 새 하위 폴더를 생성합니다. 정말 수다스러운 두 개의 특정 호스트가 있으므로 5GB 이후에는 잘라야 하는 특정 규칙이 있습니다. 매일 새로운 로그를 압축하고 시작하여 60일 분량의 로그를 보관하는 것이 아이디어입니다.

내 구성은 다음과 같습니다(이 중 대부분은 내가 만든 것이 아니지만 일부는 유지 관리하고 수정했습니다).

고양이 /etc/cron.hourly/logrotate

#!/bin/sh`enter code here`
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

고양이 /etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    compress
    daily
    #delaycompress
    dateext
    missingok
    rotate 60
    maxage 60
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

고양이 /etc/logrotate.conf

/var/log/syslog/*/*.log {
daily
rotate 60
maxage 60
compress
}

daily
rotate 60
create
dateext
compress
include /etc/logrotate.d

/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
# Specific rule for HOST_A
/var/log/syslog/HOST_A/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}

# Specific rule for HOST_B
/var/log/syslog/HOST_B/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}

다음은 내 \var\log\syslog\host_a 폴더에 있는 내용의 예입니다.

ls /var/log/syslog/HOST_A/ | 화장실 -l

104

ls /var/log/syslog/HOST_A/ -lh

-rw------- 1 root root  416M Jun 20 23:59 HOST_A_2018_06_20.log.1.gz
-rw------- 1 root root   64M Jun 20 16:18 HOST_A_2018_06_20.log.2.gz
-rw------- 1 root root  1.5G Jun 21 23:59 HOST_A_2018_06_21.log.1.gz
<many files redacted>
-rw------- 1 root root  1.6G Sep  4 23:59 HOST_A_2018_09_04.log.1.gz
-rw------- 1 root root  1.5G Sep  5 23:59 HOST_A_2018_09_05.log.1.gz
-rw------- 1 root root  7.7G Sep  6 10:58 HOST_A_2018_09_06.log

따라서 위에서 볼 수 있듯이 60일 후에도 이전에 보관된 .gz 로그가 제거되지 않습니다. 무기한으로 보관하고 있습니다. 크기를 줄이기 위해 주기적으로 들어가서 오래된 파일을 수동으로 삭제해야 했습니다. 이 파일은 6월 20일부터 9월 6일(오늘)까지, 즉 104일입니다. 내가 잘못 구성했다고 확신하지만 내가 무엇을 놓치고 있는지 잘 모르겠습니다. 어떤 도움이라도 주시면 감사하겠습니다.

답변1

일일 로그 파일에 대해 두 가지 메커니즘을 사용하고 있으며 서로 협력하지 않습니다.

한편으로는 syslog가 매일 파일을 생성하도록 하고, 다른 한편으로는 logrotate가 파일을 회전하도록 합니다. Logrotate는 각 일일 파일을 별도의 고유한 파일 세트(HOST_A_2018_09_05.log가 HOST_A_2018_09_06.log와 관련된 것으로 간주하지 않음)로 회전하여 처리하므로 패턴당 5개의 파일을 가져오지 않습니다.

파일 이름에 날짜를 포함하지 않거나 syslog가 자체적으로 오래된 파일을 정리하도록 하는 것이 더 좋습니다.

관련 정보