除非日志超过一定大小,如何根据时间间隔轮换日志?


20

从logrotate的手册页中:

minsize size
日志文件的大小大于大小字节时(而不是在额外指定的时间间隔(每天,每周,每月或每年)之前),将轮换它们。相关的大小选项与时间间隔选项相互排斥,除了它与时间间隔选项互斥外,其他类似的选项都使日志文件轮换而不考虑最后的轮换时间。使用minsize时,将同时考虑日志文件的大小和时间戳。

size size
日志文件大于大小字节时,将对其进行轮换。如果大小后跟k,则假定大小为千字节。如果使用M,则大小以兆字节为单位;如果使用G,则大小以千兆字节为单位。因此,大小100,大小100k,大小100M和大小100G均有效。

我将大小设置为5M,将间隔设置每周一次,以为日志将每周轮换一次,如果日志的大小超过5M,则会发生其他轮换。但是发生的是,除非日志超过5M,否则日志不会旋转,这似乎是minsize应该做的。

我对手册的解释有误吗?如果日志超过500万,我如何使日志每周旋转一次?

编辑:

我不确定以下信息是否相关,只是为了补充:

我正在使用rsyslog对消息,安全,cron,maillog,引导进行主要日志记录。以下是倒数第二个日志的轮换日期和文件大小,其中如上所述设置了大小和间隔:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

可以看出,只有消息轮换了。

编辑2:

我应该向我核对一下man logrotate。他们实际上使用maxsize选项对其进行了升级。这应该是我在寻找的东西:

最大范围 的大小
,当他们长得比规模更大的日志文件旋转甚至还指定的时间间隔(每日,每周,每月或每年)之前字节。相关的大小选项与时间间隔选项相互排斥,除了它与时间间隔选项互斥外,其他类似的选项都使日志文件轮换而不考虑最后的轮换时间。使用maxsize时,将同时考虑日志文件的大小和时间戳。

Answers:


24

这里回答了一些问题: 每天logrotate和大小?

通常情况下logrotate,每天只会运行一次,因此不会严格遵守大小限制。logrotate的状态文件(可能/var/lib/logrotate.status)仅存储日期(而不是时间),因此不打算更频繁地使用它,因此您不能更频繁地轮换文件(更新:3.85版增加了每小时支持,并在状态文件中存储了完整的时间戳记)

您无需说说syslogd使用的是哪个,rsyslogsyslog-ng支持基于大小的自我管理的轮换,因此您应该能够使它们按大小轮换,并logrotate每周轮换(尽管可能需要一些思考)文件命名,以确保同时进行文件旋转不会意外删除某些内容)。

另一种选择是使用管道日志,就像Apache一样,实际上Apache-2.4 rotatelogs 完全支持此功能(以前的版本仅支持大小或时间)。您没有说出日志的来源,但是您可以登录到管道或fifo,并使用rotatelogs,如果支持的话。

对于logrotate<= v3.8.0,支持的三种方案是:

  1. 大小大小旋转,最多每天一次,与经过的时间无关
  2. TIMEPERIOD 旋转无条件TIMEPERIOD,无论大小
  3. minsizetimeperiod 如果日志文件大小超过minsize,则按timeperiod轮换。常见用法是“最小1”,这意味着0字节的日志不会旋转,从而将混乱降至最低。

logrotate-3.8.1 添加:

  1. 当大小超过maxsize或经过一段时间后,maxsizetimeperiod旋转。logrotate在这种情况下,可能每天需要运行超过默认值一次。

logrotate-3.8.5 添加:

  1. 每小时的支持,并将完整的时间戳存储在状态文件中。logrotate为此,您应该(至少)每小时运行一次。

请查看我的更新,感谢您的链接。好像需要一些脚本?minsize似乎不是很有用,我想知道为什么他们有它而不是maxsize。
问题溢流时间

1
是的,maxsize选项现在可用。案例结案:)
问题溢流时间

在我阅读您的更新之前在文档中发现了该问题……答案现已扩大。谢谢。
mr.spuratic

1
> logrotate的状态文件(可能是/var/lib/logrotate.status)仅存储日期(不存储时间)该语句可能已过期。我刚刚检查了我的logrotate状态文件,它包含带有第二个分辨率的时间戳:“ / var / log / kern.log” 2018-3-12-1:8:16
hyperair
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.