Linux 日志管理工具 - Logrotate
最近在使用 openresty(nginx) 作为容器平台 kubernetes 的入口路由服务;流程大致为前端新建一个路由规则的时候,获取到 svc 的 endpoint 然后将其作为 nginx 的后端服务。实时监听 svc 的状态然后更新 ep 到 nginx;这里遇到一个问题,nginx 本身没有做到日志切割,在上线一段时间之后,nginx 的 vhost_access.log 日志文件竟然达到了 50G ,导致出现系统磁盘告警。google 一下没发现 nginx 有自带的日志轮转的功能(其实也有,只是要装插件和重新编译);在线上最好的方式是什么了?最后采用了 Logrotate 来做日志切割。
logrotate 的主要功能为定时对增长中的日志文件进行自动切割,压缩,删除等操作;可以将定时任务设置为日,周,月,也可以自定义 crontab 的时间执行。
Logrotate 安装与配置文件
首先需要安装 Logrotate: yum install -y logrotate; 安装完之后可以看到,默认是在/etc/cron.daily/logrotate 有一个定时执行任务。/etc/cron.daily/logrotate:
1 | !/bin/sh |
另外我们可以看到它的配置文件:

它的配置主要在/etc/logrotate.conf文件以及/etc/logrotate.d/目录下。
1 | # see "man logrotate" for details |
打开它的主配置文件/etc/logrotate.conf可以看到它的一个配置:include /etc/logrotate.d,所以我们的配置基本上可以放到这个logrotate.d目录下。
Logrotate 实际配置与操作
在/etc/logrotate.d目录下我们可以新建一个ingress文件,内容如下:
1 | # /data/caas/ingress-gateway 目录下的 *log 文件都会进行正则匹配 |
目录下的配置项如果没有的会使用 /etc/logrotate.conf 的默认配置,如果有的会覆盖掉全局配置使用自己定义的配置。在我上面定义的是一个将文件进行备份后进行 truncate 的操作,这种操作的好处就是容器与日志文件的句柄不会断。当然还有另一种方式:
1 | /data/caas/ingress-gateway/*log { |
强制执行方式:
logrotate -fv /etc/logrotate.d/ingress3:
1 |
|