使用logrotate对nginx/php-fpm做日志转储
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
1 2 3 4 5 6 7 8 9 10 11 |
[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 |
三:配置php-fpm
1 2 3 4 5 6 7 8 9 |
[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 |
四: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,手动执行
满足转储条件时:
1 |
[root@vagrant-centos64 /]# logrotate -v /etc/logrotate.conf |
没有满足条件时,如果文件的时间小于一天,则用上面的命令无法生效,此时需要用”-f”强制执行:
1 |
[root@vagrant-centos64 /]# logrotate -vf /etc/logrotate.conf |
2,crond执行
系统默认会自动创建logrotate文件在# /etc/cron.daily/ 下日常执行。
参考链接:
上一篇: nginx请求状态访问量等统计 下一篇: 简要测试服务器并发处理能力
发表评论