http://www.williamsang.com/archives/1254.html
日志分割常用方法:
- 自己写脚本分割
- 使用linux自带的logrotate
前者灵活,可以应对各种需求,自定义文件夹、文件名。后者配置简单,使用方便。
下面我们以分割nginx日志为例介绍一下使用logrotate分割日志实例。
logrotate简单介绍
logrotate使用cron按时调度执行,日志的执行过程原理为不断改名称:比如你有个access.log文件,需要保留4个日志文件,那么logrotate是这么轮转的:
access.log满足轮转条件?(调度时间,日志大小是否满足要求)如果需要轮转则进行下列步骤,否则跳过
access.log.3存在?如果存在则删除
access.log.2如果存在则改名为access.log.3
access.log.1如果存在则改名为access.log.2
access.log如果存在则改名为access.log.1
创建一个空的access.log文件
如下图所示:
logrotate配置文件一般在:
/etc/logrotate.conf 通用配置文件,可以定义全局默认使用的选项。
/etc/logrotate.d/xxx 自定义服务配置文件
我们可以看下/etc/logrotate.conf里面的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# 一个星期轮转一次 weekly #保留四个日志 rotate 4 # 轮转旧的日志文件后创建新日志文件 create # 使用日期作为轮转日志的后缀 dateext # 压缩存储日志 #compress # 包含某个目录下的自定义日志轮转 include /etc/logrotate .d
# no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp {
monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp {
missingok monthly create 0600 root utmp rotate 1 } |
我们新建一个/etc/logrotate.d/nginx来分割nginx日志,配置文件内容如下:
1
2
3
4
5
6
7
8
9
|
/data/logs/nginx/access/access .log /data/logs/nginx/access/default .log {
daily rotate 15 minsize 10M sharedscripts postrotate /usr/local/server/nginx/sbin/nginx -s reload
endscript } |
第一行:指明日志文件位置,多个以空格分隔
第二行:调用频率,有:daily,weekly,monthly可选
第三行:总共轮换多少个日志文件,这里为保留15个
第四行:限制条件,大于10M的日志文件才进行分割,否则不操作
sharedscripts用于指明以下是执行轮转前和轮转后自定义执行的命令,比如postrotate和endscript表示,轮转后,执行nginx的重新加载配置文件,避免日志轮转后不写日志。如果要轮转前执行某个命令可以使用prerotate代替postrotate即可,两者可同时存在。
可以通过man logrotate查看更多选项
默认logrotate是通过crontab定期执行的,我们也可以手动执行查看结果:
- # logrotate -vf /data/log/nginx/access.log
v选项表示查看详细执行过程
f表示强制执行日志轮转(不然时间不到,日志文件大小等条件不满足,不会执行)
强烈建议执行一下,了解下执行过程。
验证是否执行,查看cron的日志即可
- # grep logrotate /var/log/cron
参考:
- 《鸟个的linux私房菜》,本文图取于此