使用logrotate对nginx/php-fpm做日志转储
2016-12-23
2135
logrotate是linux系统日志的管理工具,目前主流的Linux发行版上都默认安装有logrotate包。他可以轮换,压缩,邮件系统日志文件。对于Linux 的系统安全来说,日志文件是极其重要的工具。日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。
logrotate可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。本文主要介绍使用logrotate对nginx/php-fpm等日志进行切割转储。
一:logrotate配置文件
/etc/logrotate.conf, 通常不需要对它进行修改。
/etc/logrotate.d/,该目录里的所有文件都会被主动的读入 /etc/logrotate.conf 中执行。另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则会以 /etc/logrotate.conf 这个文件的设定来作为默认值。
二:配置nginx
PHP
[root@vagrant-centos64 logrotate.d]# vi /etc/logrotate.d/nginx
/var/log/nginx/*log {
daily
rotate 10
missingok
notifempty
compress
sharedscripts
postrotate
kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || :
endscript
1
2
3
4
5
6
7
8
9
10
11
[root@vagrant-centos64logrotate.d]# vi /etc/logrotate.d/nginx
/var/log/nginx/*log{
daily
rotate10
missingok
notifempty
compress
sharedscripts
postrotate
kill-USR1$(cat/var/run/nginx.pid2>/dev/null)2>/dev/null||:
endscript
三:配置php-fpm
PHP
[root@vagrant-centos64 logrotate.d]# vi /etc/logrotate.d/php-fpm
/var/log/php-fpm/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
kill -SIGUSR1 `cat /var/run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
1
2
3
4
5
6
7
8
9
[root@vagrant-centos64logrotate.d]# vi /etc/logrotate.d/php-fpm
/var/log/php-fpm/*log{
missingok
notifempty
sharedscripts
delaycompress
postrotate
kill-SIGUSR1`cat/var/run/php-fpm/php-fpm.pid2>/dev/null`2>/dev/null||true
endscript
四:logrotate字段详解
daily: 日志文件将按日轮循。其它可用值为‘monthly’,‘weekly’或者‘yearly’。
rotate 10: 一次将存储10个归档日志。对于第11个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。不需要压缩时,用nocompress 参数。
sharedscripts:只为整个日志组运行一次的脚本。
delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
size size: 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
errors address: 专储时的错误信息发送到指定的Email 地址。
ifempty: 即使是空文件也转储,这个是 logrotate 的缺省选项。notifempty 如果是空文件的话,不转储
mail address: 把转储的日志文件发送到指定的E-mail 地址,nomail 转储时不发送日志文件
dateext:日志rotate后再后面加日期,例如:access.log轮转后会变为access.log-20130803
五:执行logrotate
1,手动执行
满足转储条件时:
PHP
[root@vagrant-centos64 /]# logrotate -v /etc/logrotate.conf
1
[root@vagrant-centos64/]# logrotate -v /etc/logrotate.conf
没有满足条件时,如果文件的时间小于一天,则用上面的命令无法生效,此时需要用”-f”强制执行:
PHP
[root@vagrant-centos64 /]# logrotate -vf /etc/logrotate.conf
1
[root@vagrant-centos64/]# logrotate -vf /etc/logrotate.conf
2,crond执行
系统默认会自动创建logrotate文件在# /etc/cron.daily/ 下日常执行。
参考链接:
nginx请求状态访问量等统计 下一篇: 简要测试服务器并发处理能力