在我的 CentOS 中,有一个 Logstash,它会生成很多日志文件。日志文件如下所示:
logstash-2023-03-09.log logstash-2023-03-20.log logstash-deprecation-2023-03-08-1.log.gz logstash-plain-2023-03-14-1.log.gz logstash-plain-2023-03-25-1.log.gz
logstash-2023-03-10.log logstash-2023-03-21.log logstash-deprecation-2023-03-09-1.log.gz logstash-plain-2023-03-15-1.log.gz logstash-plain-2023-03-26-1.log.gz
logstash-2023-03-11.log logstash-2023-03-22.log logstash-deprecation-2023-03-10-1.log.gz logstash-plain-2023-03-16-1.log.gz logstash-plain-2023-03-27-1.log.gz
logstash-2023-03-12.log logstash-2023-03-23.log logstash-deprecation.log logstash-plain-2023-03-17-1.log.gz logstash-plain-2023-03-28-1.log.gz
logstash-2023-03-13.log logstash-2023-03-24.log logstash-json.log logstash-plain-2023-03-18-1.log.gz logstash-plain.log
logstash-2023-03-14.log logstash-2023-03-25.log logstash-plain-2023-03-07-1.log.gz logstash-plain-2023-03-19-1.log.gz logstash-slowlog-json.log
logstash-2023-03-15.log logstash-2023-03-26.log logstash-plain-2023-03-09-1.log.gz logstash-plain-2023-03-20-1.log.gz logstash-slowlog-plain.log
logstash-2023-03-16.log logstash-2023-03-27.log logstash-plain-2023-03-10-1.log.gz logstash-plain-2023-03-21-1.log.gz
logstash-2023-03-17.log logstash-2023-03-28.log logstash-plain-2023-03-11-1.log.gz logstash-plain-2023-03-22-1.log.gz
logstash-2023-03-18.log logstash-2023-03-29.log logstash-plain-2023-03-12-1.log.gz logstash-plain-2023-03-23-1.log.gz
logstash-2023-03-19.log logstash-deprecation-2023-03-07-1.log.gz logstash-plain-2023-03-13-1.log.gz logstash-plain-2023-03-24-1.log.gz
所有这些都是由 Logstash 生成的。
现在我想用logrotate
它们来删除旧文件。
这是我的配置logrotate
:
[envoy@mirror-dfh0splogv logstash]$ cat /etc/logrotate.d/logstash
/var/log/logstash/logstash-20*.log {
daily
rotate 15
compress
delaycompress
}
/var/log/logstash/logstash-plain*.log.gz {
daily
rotate 5
}
我想要的很简单。对于logstash-20*.log
文件,我只想保留 15 个最新文件。而对于logstash-plain*.log.gz
,我只想保留 5 个最新的。
但是,当我执行命令时logrotate --force /etc/logrotate.d/logstash
,所有文件名都附加了.1
并且没有文件被删除:
logstash-2023-03-09.log.1 logstash-2023-03-20.log.1 logstash-deprecation-2023-03-07-1.log.gz logstash-plain-2023-03-13-1.log.gz.1 logstash-plain-2023-03-24-1.log.gz.1
logstash-2023-03-10.log.1 logstash-2023-03-21.log.1 logstash-deprecation-2023-03-08-1.log.gz logstash-plain-2023-03-14-1.log.gz.1 logstash-plain-2023-03-25-1.log.gz.1
logstash-2023-03-11.log.1 logstash-2023-03-22.log.1 logstash-deprecation-2023-03-09-1.log.gz logstash-plain-2023-03-15-1.log.gz.1 logstash-plain-2023-03-26-1.log.gz.1
logstash-2023-03-12.log.1 logstash-2023-03-23.log.1 logstash-deprecation-2023-03-10-1.log.gz logstash-plain-2023-03-16-1.log.gz.1 logstash-plain-2023-03-27-1.log.gz.1
logstash-2023-03-13.log.1 logstash-2023-03-24.log.1 logstash-deprecation.log logstash-plain-2023-03-17-1.log.gz.1 logstash-plain-2023-03-28-1.log.gz.1
logstash-2023-03-14.log.1 logstash-2023-03-25.log.1 logstash-json.log logstash-plain-2023-03-18-1.log.gz.1 logstash-plain.log
logstash-2023-03-15.log.1 logstash-2023-03-26.log.1 logstash-plain-2023-03-07-1.log.gz.1 logstash-plain-2023-03-19-1.log.gz.1 logstash-slowlog-json.log
logstash-2023-03-16.log.1 logstash-2023-03-27.log.1 logstash-plain-2023-03-09-1.log.gz.1 logstash-plain-2023-03-20-1.log.gz.1 logstash-slowlog-plain.log
logstash-2023-03-17.log.1 logstash-2023-03-28.log.1 logstash-plain-2023-03-10-1.log.gz.1 logstash-plain-2023-03-21-1.log.gz.1
logstash-2023-03-18.log.1 logstash-2023-03-29.log logstash-plain-2023-03-11-1.log.gz.1 logstash-plain-2023-03-22-1.log.gz.1
logstash-2023-03-19.log.1 logstash-2023-03-29.log.1 logstash-plain-2023-03-12-1.log.gz.1 logstash-plain-2023-03-23-1.log.gz.1
执行此操作的正确方法是在应用程序中的 log4j2 配置中,例如:
要
logrotate
删除实际上已经被 logstash 轮换的文件,您需要说服它旧的日志文件确实是由它自己创建的。所以,对于一个旧文件,比如logstash-2023-03-09.log
,你需要说要旋转的原始文件是logstash
,并且要使用的旋转机制是添加日期扩展格式-%Y-%m-%d.log
。这导致配置文件类似于为此,即使使用
--force
,“触发器”文件也logstash
必须存在,因此需要在第一次运行之前手动将其创建为空。因为它将轮换到,比如说,logstash-2023-04-01.log
如果那是今天的日期,我们还需要create
重新创建触发器文件的选项。我们还需要删除伪造的重命名文件。配置文件可能变成:我们检查要删除的文件是否为空,以防日志记录应用程序实际首先创建它,在这种情况下 logrotate 将不会旋转触发器文件。
文件的类似条目可能
logstash-plain-2023-03-25-1.log.gz
是:触发器文件
logstash-plain
也必须手动创建。这有点像 hack,所以请尝试在单独的目录中复制文件副本,而不使用
--force
. 等待 24 小时进行第二次运行,并使用它-v
来确认正在发生的事情。