使用logrotate旋转日志文件

日志文件很重要,因为它们可以更好地了解系统上发生的情况。 日志中的调试和错误消息可用于跟踪问题的来源并快速解决。 身份验证消息会记录谁访问系统以及何时访问,并且重复身份验证失败可能是攻击者试图获取未经授权访问的迹象。 但是,日志的有用性通常会随着年龄的增长而减少,如果不加以检查,生成大量日志条目的繁琐应用程序可能会轻松占用系统的所有存储资源。 此配方将向您展示如何旋转日志文件以防止文件失控和过时日志浪费空间.

准备

此配方需要具有有效网络连接的CentOS系统。 通过root帐户登录或使用sudo也需要管理权限.

怎么做

请按照以下步骤使用logrotate配置日志文件轮换:

  • 创建/etc/logrotate.d/example文件:
vi /etc/logrotate.d/example
  • 将以下内容写入文件:
/var/log/example.log { monthly rotate 4 missingok notifempty create 0600 root root postrotate kill -HUP $(cat /var/run/example.pid) endscript}
  • 保存更新并关闭文件.

工作原理

logrotate通过将日志文件重命名为顺序备份并为要写入的应用程序创建新文件来轮换日志文件。 在旋转example.log时,它将example.log重命名为example.log.1。 如果存在example.log.1,则首先将该文件重命名为example.log.2(对于其他枚举文件,依此类推)。

为了这个例子,这个配方创建了一个新的配置来旋转/var/log/example.log文件。 logrotate的主要配置文件是/etc/logrotate.conf,而其他文件可以放在/etc/logrotate.ddirectory中。 您需要检查logrotate.d以查看是否已经配置了您要管理的应用程序日志的轮换(许多软件包将在此处删除配置文件)。 如果软件包维护者的配置不符合您的需要,您可以更新配置。 主文件中的指令设置全局行为,该行为在logrotate.d中的其他文件的基于每个配置的基础上被覆盖。.

配置提供目标日志文件的名称,后跟一组支持的指令,指定logrotate应如何管理文件。 *可以用作通配符来匹配多个文件,这在应用程序写入多个日志文件时很有用。 例如,Apache HTTP服务器将消息记录到access_log和/ var / log / http中的error_log。 所以它的配置目标是日志文件,如下所示:

/var/log/http/*log {...}

month指令指示logrotate每月轮换文件。 其他选项包括每日,每周和每年。 或者,您可以指示logrotate根据文件大小管理文件 - size指令指定大小,logrotate将旋转那些大于该大小的文件.

size 30k

如果给定的值没有单位,则给定值被理解为字节。 logrotate还支持k表示千字节,M表示兆字节,G表示千兆字节.

rotate指令指定要在循环中保留多少个日志文件。 在我们的场景中,允许四个文件; 所以,example.log.3覆盖了example.log.4,没有example.log.5。 missingok指令让logrotate知道如果日志文件不存在就可以继续(它的默认行为是引发错误)。 此外,如果文件为空,则notifempty指令指示logrotate跳过旋转。 create指令指示logrotate在重命名原始文件后创建新的日志文件,并为新文件提供模式,用户和组:

rotate 4missingoknotifemptycreate 0600 root root




centos7 日志外发 centos7日志转发_日志文件

旋转的日志文件按顺序编号



注意

原始example.log.4文件的内容不必丢失。 一种选择是使用mail指令指示logrotate在覆盖之前通过电子邮件将其内容发送给您.

mail tboronczyk@example.com

就个人而言,我建议仅在文件相对较小时才使用邮件,因为发送大文件会对邮件服务器造成过度压力。 此外,不应通过电子邮件传输包含敏感信息的日志文件。 对于敏感日志和较大的文件,我建议使用prerotate来调用scp或其他实用程序,以便在旋转之前将文件复制到其他位置.

prerotate scp /var/log/example.log.4 storage@archive.example.com:example.log-$ (date +%F)endscript

我们可以指定在旋转日志文件之前和之后执行的外部操作。 prerotate指令提供一组将在旋转过程开始之前执行的shell命令,postrotate指令提供将在旋转之后运行的命令。 两个指令都使用endcript来标记命令集的结尾,如前面的提示和配方的配置中所示。 配置调用kill以将挂起信号(HUP)发送到将重新加载该守护进程的示例进程。 如果他们写入的日志文件被移动并重新创建,某些程序可能会混淆,重新加载它会导致程序重新打开它与日志文件的连接,以便它可以继续记录:

postrotate kill -HUP $(cat /var/run/example.pid)endscript

logrotate每天通过cron运行,所以一旦你创建/调整了你的旋转配置,你就应该完成了。 下次logrotate运行时,它将在重新读取所有配置文件时获取更新.

See also

Refer to the following resources for more information on working with logrotate:

  • The logrotate manual page (man 8 logrotate)
  • Manage Linux log files with Logrotate (http://www.techrepublic.com/article/manage-linux-log-files-with-logrotate)
  • How to manage system logs (http://www.tecmint.com/manage-linux-system-logs-using-rsyslogd-and-logrotate/)