在我的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
发布于 2023-03-29 12:35:42
正确的方法是在应用程序中的log4j2配置中,请参阅例如:
appender.rolling.strategy.delete.ifLastModified.age = 30d
要让logrotate
删除已经被logstash有效旋转的文件,您需要让它相信旧的日志文件确实是由自己创建的。因此,对于像logstash-2023-03-09.log
这样的旧文件,您需要说要旋转的原始文件是logstash
,使用的旋转机制是添加日期扩展格式-%Y-%m-%d.log
。这将产生一个配置文件,类似于
# for eg logstash-2023-03-09.log
"logstash" {
dateext
dateformat -%Y-%m-%d.log
daily
rotate 15
}
为此,即使在--force
中,“触发器”文件logstash
也必须存在,因此需要在第一次运行之前手动创建该文件。由于它将被旋转到,例如,logstash-2023-04-01.log
,如果是今天的日期,我们还需要create
选项来重新创建触发器文件。我们还需要删除假重命名的文件。配置文件可能变成:
# for eg logstash-2023-03-09.log
"logstash" {
dateext
dateformat -%Y-%m-%d.log
daily
rotate 15
create
postrotate
f=logstash-$(date +%Y-%m-%d).log; [ ! -s "$f" ] && rm "$f"
endscript
}
我们检查要删除的文件是否为空,以防日志记录应用程序首先实际创建它,在这种情况下日志旋转不会旋转触发器文件。
文件(如logstash-plain-2023-03-25-1.log.gz
)的类似条目可能是:
# for eg logstash-plain-2023-03-25-1.log.gz
"logstash-plain" {
dateext
dateformat -%Y-%m-%d-1.log.gz
daily
rotate 5
create
postrotate
f=logstash-$(date +%Y-%m-%d)-1.log.gz; [ ! -s "$f" ] && rm "$f"
endscript
}
触发器文件logstash-plain
也必须手工创建。
这是一种黑客行为,所以在不使用--force
的情况下,在一个单独的目录中进行文件副本的实验。等待24小时再运行一次,然后使用-v
来确认正在发生的事情。
https://unix.stackexchange.com/questions/741270
复制相似问题