Logrotate 不删除压缩日志

Logrotate 不删除压缩日志

我有一台 CentOS 机器,运行 rsyslog 和 logrotate 作为一大堆网络设备的系统日志服务器。我已经研究了一段时间了,logrotate/压缩部分工作正常,但我似乎无法让它删除旧的压缩 .gz 日志。以下是基本设置:

日志存储在:/var/log/syslog 中,每个主机根据其 IP 地址或主机名创建一个新的子文件夹。我有两个特别频繁的主机,所以我有特定的规则让它们在 5 GB 后截断。这个想法是每天压缩并开始一个新的日志,并保留 60 天的日志。

以下是我的配置(其中大部分不是我创建的,但我维护和修改了其中的几个):

cat /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/ | wc -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 自行修剪旧文件。

相关内容