如何配置Logrotate

时间:2020-01-09 10:42:34  来源:igfitidea点击:

说明

Logrotate允许我们更好地管理日志,以防止占用过多的磁盘空间。根据我们决定的时间表,日志可以每天,每周或者每月轮换。每次轮换都会重命名我们现有的日志文件,通常会在文件名后添加一个'。'。并编号到末尾,然后创建一个新文件。为了保留存储空间,可以使用Gzip压缩已轮换的日志。

值得庆幸的是,大多数主要的Linux发行版(例如Ubuntu)都会自动轮换在/ var / log下找到的大多数日志。

安装

默认情况下,Logrotate安装在最新发行版中。在撰写本文时,这意味着Ubuntu 15.10和CentOS 71511. 但是,如果我们发现自己的安装中不包含该安装,则可以通过Yum或者Apt轻松安装。

创建日志轮播配置

Logrotate配置文件存储在/etc/logrotate.d下。 logrotate cron作业运行时,它将看起来执行该目录中找到的所有配置。

以下示例是来自CentOS 7服务器的默认Apache2日志的示例。我们可以将它用作我们自己的应用程序日志的模板,与默认日志分开。

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

这是上面使用的设置的说明。

/var/log/httpd/*log日志文件的位置。在本例中,在/var/log/httpd目录中查找以“log”结尾的任何文件
missingok如果日志文件不存在,则通知logrotate忽略任何错误
notifempty如果日志文件为空,请不要轮转它
sharedscripts找到所有匹配的日志文件后,postrotate脚本只运行一次。如果一个日志文件不需要轮转,脚本将不会运行
delaycompress将已轮转日志文件的压缩延迟到下一次轮转。这使我们能够保持最后一个轮转未压缩和容易搜索,同时确保旧的轮转压缩
postrotate轮转完成后执行的命令。在上面的示例中,Apache(httpd)被重新启动,这导致它创建新的日志文件

Logrotate支持的选项比上面列出的更多。要查看完整列表,我们可以手动进行logrotate或者访问linuxcommand.org logrotate页面。以下是一些可能有用的选项。

daily每天轮换日志
weekly每周轮换一次日志
monthly每月轮换一次日志
rotate x在清除旧日志之前,将日志轮转x次。使用“rotate 5”表示一根日志只能轮转5圈
copy此选项复制日志文件,实际上是在特定时间点创建日志文件的快照
prerotate与postrotate类似,但在日志轮转完成之前运行脚本

测试配置

像其他任何事情一样,在将配置投入生产之前,我们将需要对其进行测试以确保一切正常。 Logrotate包含一项功能,该功能使我们无需调试即可在调试模式下运行配置。如果在语法中发现错误或者其他问题,将通知我们。

sudo logrotate -d /etc/logrotate.d/myapp.conf

输出将类似于以下示例。输出将基于/ var / httpd / * log位置显示发现的日志,并对每个日志执行了什么操作。自从我在新构建的服务器上运行测试以来,没有日志被轮换。但是,如果日志内容更多且老化了一些,我们将看到一条消息,指示日志已轮换。现在,我们可以将其视为正确的配置文件语法。

empty log files are not rotated, old logs are removed
considering log /var/log/httpd/access_log
  log does not need rotating
considering log /var/log/httpd/error_log
  log does not need rotating
not running postrotate script, since no logs were rotated