首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用日志旋转删除旧日志文件

如何用日志旋转删除旧日志文件
EN

Unix & Linux用户
提问于 2023-03-29 02:07:59
回答 1查看 158关注 0票数 1

在我的CentOS中,有一个Logstash,它生成许多日志文件。下面是日志文件的样子:

代码语言:javascript
运行
复制
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的配置:

代码语言:javascript
运行
复制
[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,没有一个文件被删除:

代码语言:javascript
运行
复制
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
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-03-29 12:35:42

正确的方法是在应用程序中的log4j2配置中,请参阅例如

代码语言:javascript
运行
复制
appender.rolling.strategy.delete.ifLastModified.age = 30d

要让logrotate删除已经被logstash有效旋转的文件,您需要让它相信旧的日志文件确实是由自己创建的。因此,对于像logstash-2023-03-09.log这样的旧文件,您需要说要旋转的原始文件是logstash,使用的旋转机制是添加日期扩展格式-%Y-%m-%d.log。这将产生一个配置文件,类似于

代码语言:javascript
运行
复制
# 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选项来重新创建触发器文件。我们还需要删除假重命名的文件。配置文件可能变成:

代码语言:javascript
运行
复制
# 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 )的类似条目可能是:

代码语言:javascript
运行
复制
# 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来确认正在发生的事情。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/741270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档