Centos / Linux设置logrotate为所有日志的最大文件大小


74

我们使用logrotate并每天运行一次...现在,在某些情况下,日志已经显着增长(请阅读:gigbaytes)并杀死了我们的服务器。所以现在我们想为日志设置最大文件大小。

我可以将其添加到logrotate.conf吗?

大小50M

它将适用于所有日志文件吗?还是我需要在每个日志的基础上进行设置?

或其他建议?

(ps。我知道,如果您想收到通知,日志会像所描述的那样增长,而我们想要做的事并不理想-但这总比无法登录好,因为没有可用空间了)

谢谢,肖恩

Answers:


82

它指定要触发轮换的日志文件的大小。例如,size 50M一旦文件大小为50MB或更大,将触发日志轮换。您可以将后缀M用于兆字节,k千字节和G千兆字节。如果不使用后缀,则将其表示为字节。您可以在最后检查示例。有三个指令可用sizemaxsizeminsize。根据手册页

minsize size
              Log  files  are  rotated when they grow bigger than size bytes,
              but not before the additionally specified time interval (daily,
              weekly,  monthly, or yearly).  The related size option is simi-
              lar except that it is mutually exclusive with the time interval
              options,  and  it causes log files to be rotated without regard
              for the last rotation time.  When minsize  is  used,  both  the
              size and timestamp of a log file are considered.

size size
              Log files are rotated only if they grow bigger then size bytes.
              If size is followed by k, the size is assumed to  be  in  kilo-
              bytes.  If the M is used, the size is in megabytes, and if G is
              used, the size is in gigabytes. So size 100,  size  100k,  size
              100M and size 100G are all valid.
maxsize size
              Log files are rotated when they grow bigger than size bytes even before
              the additionally specified time interval (daily, weekly, monthly, 
              or yearly).  The related size option is  similar  except  that  it 
              is mutually exclusive with the time interval options, and it causes
              log files to be rotated without regard for the last rotation time.  
              When maxsize is used, both the size and timestamp of a log file are                  
              considered.

这是一个例子:

"/var/log/httpd/access.log" /var/log/httpd/error.log {
           rotate 5
           mail www@my.org
           size 100k
           sharedscripts
           postrotate
               /usr/bin/killall -HUP httpd
           endscript
       }

这是文件/var/log/httpd/access.log和的说明/var/log/httpd/error.log。每当大小超过100k时,它们都会旋转一次,并且www@my.org经过5次旋转后,旧日志文件将被邮寄(未压缩)到而不是被删除。这sharedscripts意味着postrotate脚本将只运行一次(在压缩旧日志之后),而不是对每个循环日志运行一次。请注意,在本节开头,第一个文件名周围的双引号允许logrotate旋转名称中带有空格的日志。会使用普通的shell引用规则,并带有,\字符。


2
真好 值得注意的是,我发现maxsize和minsize不适用于旧发行版(例如centos5和ubuntu 10.10……不管怎么说后者都是EOL)。
tobixen

有点题外话,但是@tobixen是正确的;maxsize已在3.8.1版中添加。帮忙找,你的操作系统的版本有logrotate的是哪个版本,尝试特定版本的手册页的debian版地图同为CentOS
tutuDajuju

102

正如Zeeshan的logrotate的选项中提到sizeminsizemaxsize是旋转的触发器。

为了更好地解释它。您可以随意运行logrotate,但是除非达到阈值(例如达到文件大小或经过了适当的时间),否则日志将不会旋转。

大小选项不能确保您轮换的日志也具有指定的大小。为了使它们接近指定的大小,您需要足够频繁地调用logrotate程序。这很关键。

对于快速建立的日志文件(例如每天数百MB),除非您希望它们很大,否则需要确保经常调用logrotate!这很关键。

因此,要防止磁盘充满数GB的日志文件,您需要确保足够频繁地调用logrotate,否则日志轮换将无法正常工作。

在Ubuntu上,您可以通过将脚本/etc/cron.daily/logrotate移至/etc/cron.hourly/logrotate轻松地切换至每小时轮换

或添加

*/5 * * * * /etc/cron.daily/logrotate 

到您的/ etc / crontab文件。每5分钟运行一次。

size选项将忽略每日,每周,每月时间选项。但是minsize和maxsize会将其考虑在内。

手册页在这里有些混乱。这是我的解释。

minsize仅当文件达到适当的大小并且已过设置的时间段时才旋转。 例如,最小大小为50MB +每天如果文件在每日时间之前达到50MB,它将一直增长到第二天。

maxsize当日志达到设置的大小或经过适当的时间时,它将旋转。 例如,每天最大大小为50MB以上。如果文件为50MB,而我们还没有到第二天,日志将被轮换。如果文件只有20MB,并且我们将其移至第二天,则文件将被轮换。

size当log> size时将旋转。无论是否指定每小时/每天/每周/每月。因此,如果大小为100M,则意味着当日志文件> 100M时,如果在此条件为true的情况下运行logrotate,则日志将被旋转。旋转后,主日志将为0,随后的运行将不执行任何操作。

因此,在op的情况下。特别是最大50MB,我会使用以下内容:

/var/log/logpath/*.log {
    maxsize 50M
    hourly
    missingok
    rotate 8
    compress
    notifempty
    nocreate
}

这意味着他将最多创建8小时的日志。其中有8个,每个不超过50MB。因为他说他每天要获得几千兆字节,并假设它们以相当恒定的速率增长,并且使用了maxsize,所以最终他得到的结果将接近每个文件达到的最大值。因此它们每个将可能接近50MB。给定他们构建的体积,他将需要确保logrotate经常运行足以满足目标大小。

由于我每小时放置一次,因此我们需要logrotate至少每小时运行一次。但是由于它们每天增加2 GB,因此我们希望50MB ...假设恒定速率为每小时83MB。因此,您可以想象如果我们每小时运行一次logrotate,尽管将maxsize设置为50,那么在这种情况下,最终将获得83MB的日志。因此,在这种情况下,将运行时间设置为每30分钟或更短时间就足够了。

确保logrotate每30分钟运行一次。

*/30 * * * * /etc/cron.daily/logrotate 

您能否详细解释一下“大小选项忽略每日,每周,每月时间选项”。
Jisson

与maxsize几乎相同吗?
Jisson

好吧,增加了尺寸的说明
Matt

2
感谢您的解释。它比手册页中的原始版本要好得多。
Tran

2
这个答案比公认的答案要扎实得多。做得好!
Giacomo1968 '18
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.