如何设置nginx日志滚动?

如何设置nginx日志滚动?

nginx日志文件如果不做处理,则会一直追加,变得非常大,不利于处理和分析,因此,必须进行日志滚动。

方案
  1. 使用logrotate实现
logrotate介绍

通过 man logrotate,可以查看logrotate的帮助文档,这是学习的最佳方式

  1. logrotate是linux内置的工具,其作用在于简化日志的管理,能够实现日志的自动滚动,可以支持定时滚动和按大小滚动

  2. logrotate的命令格式如下

    logrotate [-dv] [-f|--force] [-s|--state file] config_file
    
  3. 在/etc/cron.daily目录下配置了logrotate执行的脚本,也就是说,logrotate默认每天自动执行一次

    #!/bin/sh
    /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
    EXITVALUE=$?
    if [ $EXITVALUE != 0 ]; then
        /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    fi
    exit 0
    # 上面的logger是linux的系统调用,用于打印系统日志systemlog
    
  4. 在/etc/logrotate.conf文件中,写了logrotate的配置

  5. 默认情况下,系统已经配置好一天执行一次,除非手动强制触发,触发的命令如下

    /usr/sbin/logrotate /etc/logrotate.conf --force
    
logrotate管理日志的机制
  1. 在logrotate的配置文件/etc/logrotate.conf中配置了logrotate需要处理的日志文件的配置文件。将应用的日志滚动信息配置到指定的目录下,logrotate会读取该目录下所有的配置文件,按照配置处理日志。

    # RPM packages drop log rotation information into this directory
    include /etc/logrotate.d
    # rpm安装包将日志滚动信息配置到上述目录,logrotate读取其中的配置信息,按照配置处理日志文件
    
如何用logrotate管理nginx的日志
  1. 在/etc/logrotate.d创建一个名为nginx的文件,用于配置nginx日志滚动信息,样例如下。如果是用yum安装的nginx,会自动生成该文件。

    # 管理的日志文件匹配,*log代表所有以log结尾的日志
    /var/log/nginx/*log {
    		# 日志文件的创建模式和所有者
        create 0664 nginx root
        # 每天滚动一次
        daily
        # 最多保留的日志文件个数
        rotate 10
        # 如果日志文件不存在,继续执行,不报错
        missingok
        # 如果日志文件是空的,则不进行rotate
        notifempty
        # 使用gzip格式压缩历史日志
        compress
        # 对匹配的日志文件批量执行prerotate和postrotate命令,要么一起成功,要么全都失败
        sharedscripts
        # rotate完成后的操作
        postrotate
        		# 通知nginx进程,更换日志文件,pid文件的位置必须是nginx实际pid文件的位置
            /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
        # 结束post或者pre脚本
        endscript
    }
    
  2. 配置完成后,一般不需要管,就会每天自动rotate日志,如果要校验是否正确,执行以下命令即可。如果生成了新的日志文件,有了历史压缩包,并且新日志文件有内容写入,则说明成功。

    /usr/sbin/logrotate /etc/logrotate.conf --force
    

    易错点:

    手动触发rotate后,新文件没有日志写入,此时,很可能是pid文件的位置配错了,nginx还在往老文件中写。

注意事项
  1. 在create配置行中指定的用户需要创建或者已存在
  2. 在滚动配置文件中第一行,是日志文件的路径,必须和实际路径一致
  3. 在滚动配置文件的postrotate配置项的脚本中,nginx.pid文件的位置必须和实际一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值