logrotate 日志管理和轮询

原理

日志轮询实际是基于logrotate命令对日志进行切割。
也可以通过修改配置文件,logrotate自动将要执行的命令,添加到crontab中。

1
2
3
4
5
6
7
8
9
10
11
12
13
logrotate --help
Usage: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v)
-f, --force Force file rotation
-m, --mail=command Command to send mail (instead of `/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation
--version Display version information

Help options:
-?, --help Show this help message
--usage Display brief usage message

中文翻译

1
2
3
4
5
6
7
8
9
10
11
12
13

Usage: logrotate [OPTION...] <configfile>
-d, --debug 测试文件是否正常,不执行。
-f, --force 强制转储文件。
-m, --mail=command 发送邮件(instead of `/bin/mail')
-s, --state=statefile 指定状态文件
-v, --verbose 显示转储过程
--version 显示版本信息

Help options:
-?, --help 显示帮助信息
--usage 显示简短的用法消息

配置文件解释

logrotate 默认配置文件/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
weekly   ## 所有的日志文件每周转储一次。
rotate 4 ## 转储的文件分为4份。
create ## logrotate自动创建新的日志文件。
dateext ## 轮询文件中包含日期信息
#compress :## 压缩日志文件。默认是注释掉的。
include /etc/logrotate.d ## 将/etc/logrotate.d/ 目录中的文件include 进来。
/var/log/wtmp { ## 指定日志的路径,支持通配符
monthly ## 按月切割
create 0664 root utmp ##切割文件的权限
minsize 1M ## 文件最小大小
rotate 1 ## 保留一个文件
}
/var/log/btmp {
missingok ## 如果日志不存在则忽略改日志的警告信息。
daily ## 按天切割
create 0600 root utmp
rotate 1
## 补充配置
postrotate
### sendall
echo "backup log OK"
endscript
## postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
}

实战

配置logstash的日志切割

执行命令 vim /etc/logrotate.d/logstash

1
2
3
4
5
6
7
8
9
/var/log/logstash/*.log /var/log/logstash/*.err /var/log/logstash/*.stdout {    ###配置要压缩的日志。
daily ### 按天切割。
rotate 7 ## 保留七天。
copytruncate ## 先copy running.log内容至历史文件,然后清空running.log的内容。
compress ## 对轮询出来的文件用gzip压缩。
delaycompress ## 与compress成对出现,不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok ## 在日志轮循期间,忽略所有错误。
notifempty ## 如果日志文件为空,轮循不会进行。
}

测试配置文件是否写正确

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>  logrotate -d /etc/logrotate.d/logstash
reading config file /etc/logrotate.d/logstash

Handling 1 logs

rotating pattern: /data/logs/logstash/*.log /data/logs/logstash/*.err /data/logs/logstash/*.stdout after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /data/logs/logstash/logstash.log
log does not need rotating
considering log /data/logs/logstash/*.err
log /data/logs/logstash/*.err does not exist -- skipping
considering log /data/logs/logstash/*.stdout
log /data/logs/logstash/*.stdout does not exist -- skipping
[root@10.10.235.228 logrotate.d]#