跳转至

使用 logrotate 转储日志


2015-08-21 by dongnan

环境

操作系统: CentOS 6.6
日志应用: nginx 1.6 (源码方式安装)

目标

使用 logrotate 转储 nginx 日志。

步骤

创建配置文件

/etc/logrotate.d 目录下创建一个 nginx 的配置文件。

vim /etc/logrotate.d/nginx

配置文件内容类似如下

# see "man logrotate" for details
/var/log/nginx/admin/admin.log
/var/log/nginx/cdn/cdn.log
/var/log/nginx/www/www.log
/var/log/nginx/www/m.log    #文件不存在

{
    daily
    rotate 15
    missingok
    notifempty
    compress
    dateext
    dateformat -%Y%m%d
    sharedscripts
    postrotate
    if [ -f /usr/local/nginx/logs/nginx.pid ];then
        kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    fi
    endscript
}

参数说明

  • daily: 指定转储周期为每天 weekly为周 、monthly为月。
  • rotate 15: 指定日志文件删除之前转储的次数,0指没有备份,15指保留15个备份。
  • missingok: 日志不存在,不会输出错误信息。
  • notifempty: 如果是空文件的话不转储。
  • compress: 通过gzip压缩转储的日志文件。
  • postrotate/endscript: 在转储以后需要执行的命令,可以放入这对关键字之间,这两个关键字必须单独成行。

转储日志

/usr/sbin/logrotate -f /etc/logrotate.d/nginx

生成日志文件

ls /var/log/nginx/www/
www.log  www.log-20150820.gz

设置任务计划

每天对日志转储一次

cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Haproxy日志转储

配置文件

cat /etc/logrotate.d/haproxy

/var/log/haproxy/haproxy.log {
    daily
    rotate 5
    missingok
    notifempty
    compress
    dateext
    dateformat -%Y%m%d
    sharedscripts
    postrotate
        #kill -HUP `cat /var/run/haproxy.pid`
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

参数详见 nginx 示例。

debug参数

命令

logrotate -d -f /etc/logrotate.d/nginx

reading config file /etc/logrotate.d/nginx
reading config info for /var/log/nginx/www.log

Handling 1 logs

rotating pattern: /var/log/nginx/www.log

 forced from command line (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/www.log
  log does not need rotating
not running postrotate script, since no logs were rotated

参数

 -d, --debug
    Turns on debug mode and implies -v. In debug mode, 
    no changes will be made to the logs or to the logrotate  state  file.

参考

内容来自: 日志管理(2) 用logrotate切割php和nginx日志

回到页面顶部