我们的服务的 logrotate 配置如下:
{
rotate 30
create 644 root syslog
missingok
notifempty
daily
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript }
即使compress
配置中没有提及,日志文件也会在每次轮换后进行 gzip 压缩。我相信这是因为该compress
行在 /etc/logrotate.conf 文件中未注释,通过全局启用它。问题是:
日志文件轮换之间是否存在时间延迟或间隔,(从 debug.log 到 debug.log-20190315)并且当它被压缩时(从 debug.log-20190315 到 debug.log-20190315.gz)?
如果存在延迟,
compress
在服务的特定日志旋转配置文件中提及是否会在将日志文件从 debug.log 旋转到 debug.log-20190315 后立即压缩该日志文件?
我没有delaycompress
在任何 logrotate 配置文件中看到提及。
(背景:我们的 Splunk 索引器似乎正在从此服务中索引 debug.log-2019xxxx 文件。我们已将*.gz$
和列入黑名单debug.log$
,禁止转到 Splunk,但文件 debug.log-2019xxxx 似乎存在几秒钟或几分钟,因此它被转发到 Splunk,因为在此期间它与列入黑名单的正则表达式 -*.gz$
和不匹配debug.log$
。我知道我可以通过添加debug.log-[0-9]*
到黑名单来解决此问题,但想知道是什么原因导致 xxxxxx.debug.log-20190315 的存在)
答案1
压缩步骤gzip
将花费有限的时间,因此您有可能在压缩过程正在进行时看到原始文件。如果原始文件的大小足够大,则在压缩完成之前它可以存在相当长的时间。压缩所需的时间将根据传递给 gzip 的设置(压缩速度和级别)以及文件的可压缩性而有所不同。gzip
仅在压缩过程完成后才会删除原始文件。
作为验证的小测试,我创建了一个大小为 1 GiB 的文件/dev/urandom
和另一个大小为 1 GiB 的文件/dev/zero
,并测试了压缩它们所需的时间。
包含随机数据的文件大约需要 2 分 23 秒:
[root@testvm1 ~]# time gzip testfile-random.txt
real 2m27.417s
user 2m22.172s
sys 0m2.839s
而零文件大约花费了29秒:
[root@testvm1 ~]# time gzip testfile-zero.txt
real 0m28.930s
user 0m27.453s
sys 0m0.989s
进行压缩时,原始文件在两种情况下都是可见的:
[root@testvm1 ~]# ls -lh testfile-random.txt*
-rw-r--r--. 1 root root 1.0G Mar 15 17:49 testfile-random.txt
-rw-------. 1 root root 75M Mar 15 17:59 testfile-random.txt.gz
[root@testvm1 ~]# ls -lh testfile-zero.txt*
-rw-r--r--. 1 root root 1.0G Mar 15 18:04 testfile-zero.txt
-rw-------. 1 root root 992K Mar 15 18:05 testfile-zero.txt.gz