logrotate介绍
在开发过程中我们经常需要查看日志文件,来排查线上的问题。如果日志文件过大, 则打开会比较慢,这个时候就需要进行日志分割。logrotate是linux上的一个日志分割工具,可以很方便的进行日志分割。
logrotate的安装与配置
安装logrotate
主流的linux发行版都默认安装有logrotate, 如果没有的话,可以通过如下方式安装(日志分割常使用定时任务):
Debian或Ubuntu下: apt-get install logrotate cron
Fedora、CentOS或RHEL下: yum install logrotate crontabs
配置logrotate
在ubuntu上,logrotate安装完成的配置文件是/etc/logrotate.conf, 我们使用vim打开配置文件,可以看到类似如下的配置, 我们可以看到有include /etc/logrotate.d这行, 这是用来加载/etc/logrotate.d下的所有配置,我们一般是在/etc/logrotate.d下建立单独的文件,用来针对不同的日志文件,进行不同的分割配置。
1 | mpress |
配置文件示例
比方说,我想对nginx日志进行分割,我的nginx日志位于/opt/nginx/logs/access.log,下面是配置的步骤
在/etc/logrotate.d/目录中建立一个nginx文件
1
sudo touch nginx
使用vim编辑nginx文件,第一行是日志文件的位置(使用通配符可以针对目录下所有的日志进行分割),大括号里是一些配置的参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/opt/nginx/logs/access.log # /opt/nginx/logs/*.log 这样可对logs下所有的日志进行分割
{
size 20M #当日志超过20M后分割
create 640 root root # 分割创建的日志文件的权限与所有者
missingok # 忽略运行logrotate时找不到文件错误
notifempty # 如果日志文件为空,则不会分割日志
nocompress # 不对日志文件进行压缩,如果想要压缩,则设置成compress
rotate 7 # 除当天的外,保留7天的日志
daily # 日志文件以天进行分割 (这个和size选择一个设置)
dateext # 以日期命名
copytruncate # 先拷贝原有日志,再清空原有日志
postrotate
[ -f /opt/nginx/logs/nginx.pid ] && kill -USR1 `cat /opt/nginx/logs/nginx.pid`
endscript # 这段脚本在分割之后执行,重启nginx,重新加载日志文件,防止不写
}手动运行logrotate命令, -vf参数, -v 是执行时打印执行信息,-f是强制执行
1
2logrotate -vf /etc/logrotate.d/nginx #针对单个的logrotate配置运行指令
logrotate -vf /etc/logrotate.conf #这样会运行所有的logrotate配置
自动运行logrotate指令
我们在线上一般会使用定时任务来运行logrotate指令,例如每天执行一次logrotate,步骤如下(定时任务一般系统都会自带,如果没有,按照文章开头说的方式安装):
打开定时任务
1
crontab -e
编辑定时任务
1
20 1 * * * logrotate -vf /etc/logrotate.conf # 每天1点执行分割任务,所有的任务
0 1 * * * logrotate -vf /etc/logrotate.d/nginx #指定执行某个分割任务开启定时任务
1
sudo service cron start
查看定时任务
1
crontab -l