logrotate 使用
前言
在使用envoy过程中 access log 越来越多,想从文档中找到答案,但没有发现相关的配置。从 github 中找到了相关的 issues:13962、1109,从里面内容来看,用的是 logrotate 来做日志切分。众所周知,logratate是linux下做日志切割的工具。网络上比较多介绍它的文章,这里不做过多的介绍。
简介
logratate 是根据配置的规则进行日志文件切割,想要持续的的对日志文件进行切割,那么需要crond来配合。即使用crond来定时运行logratate
crond
用于定时运行 logratate,CentOS的配置在/etc/cron.daily/
目录下
1 | [root@localhost ~]# ls /etc/cron.daily/logrotate |
logratate
默认配置文件位于/etc/logrotate.conf
,配置文件最后引用了/etc/logrotate.d
,一般来讲,用户可将自定义配置放到该目录内
测试使用
这里在使用docker来运行centos进行测试
安装
首先我们安装logrotate
1 | [root@localhost ~]# docker run --rm --name centos -it centos:centos7 bash |
安装完logrotate,可以看到创建了一个cron.daily的目录,和logrotate相关的配置及目录,这里还需要安装crond
1 | [root@0c4a0d0885e8 ~]# yum install cronie -y |
配置
配置如下所示,最多3个文件,大小超过100K进行切割,保留3天前的日志
1 | [root@0c4a0d0885e8 ~]# cat << EOF > /etc/logrotate.d/test.conf |
模拟日志生成
这里简单的无限循环进行日志打印
[root@0c4a0d0885e8 ~]# while true;do echo "$(date)" >> /var/log/test.log;done
查看日志切割状态
[root@0c4a0d0885e8 ~]# ls -lth /var/log/
total 248K
-rw-r--r-- 1 root root 101K Apr 15 14:05 test.log
-rw-r--r-- 1 root root 1.2K Apr 15 14:05 test.log1650031501.gz
-rw-r--r-- 1 root root 1.2K Apr 15 14:04 test.log1650031441.gz
-rw-r--r-- 1 root root 6.6K Apr 15 14:03 test.log1650031381.gz
[root@0c4a0d0885e8 ~]# ls -lth /var/log/
total 180K
-rw-r--r-- 1 root root 75K Apr 15 14:06 test.log
-rw-r--r-- 1 root root 865 Apr 15 14:06 test.log1650031561.gz
-rw-r--r-- 1 root root 1.2K Apr 15 14:05 test.log1650031501.gz
-rw-r--r-- 1 root root 1.2K Apr 15 14:04 test.log1650031441.gz
从日志切割记录来看,保留了3个,符合配置规则
容器化实践
可参考 docker-logrotate
配置
效果
参考文档
[1] cron-in-docker
[2] logrotate