如何配置Logrotate
说明
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