• nginx之日志切割 X


    方便查看nginx日志, 平常会将nginx日志进行每日切割处理. 这里介绍 平常比较常用的两种方式

    1. logrotate

    在linux上logrotate是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,它是默认随linux一起被安装的。

    如果不存在的话, 可以进行手动安装

    yum -y install logrotate

    Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,内容如下:

    [root@huanqiu_web1 ~]# 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

    1)日志轮询周期有这几种:

    daily、weekly、monthly、yearly

    默认是daily(即logrotate脚本放到了/etc/cron.daily下),具体执行时间可以查看 /etc/crontab 或者 /etc/anacrontab (CentOS)。

    /etc/cron.daily/logrotate

    注意点:  logrotate是基于crontab运行的, 所以这个时间点是有crontab控制的, 具体可以查询crontab的配置文件/etc/anacrontab. 系统会按照计划的频率运行logrotate,通常是每天

    2)手动执行:

    如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;

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

    不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要

    logrotate [OPTION...] <configfile>
    -d, --debug :debug模式,测试配置文件是否有错误,不真实执行。
    -f, --force :强制转储文件。
    -m, --mail=command :压缩日志后,发送日志到指定邮箱。
    -s, --state=statefile :使用指定的状态文件。
    -v, --verbose :显示转储过程。

    默认日志保存在: cat /var/lib/logrotate/logrotate.status  , 如果需要指定其他文件, 可以通过-s/--state参数指定

    4)logrotate配置:

    默认使用 /etc/logrotate.conf 文件,作为全局配置,而不同应用的具体配置则在 /etc/logrotate.d 目录下,通常以应用程序的名称命名,例如 nginx、mysql、syslog、yum 等配置。

    例如:

    /var/log/nginx/*.log /var/log/tomcat/*log {   # 可以指定多个路径
        daily                      # 日志轮询周期,weekly,monthly,yearly
        rotate 30                  # 保存30天数据,超过的则删除
        size +100M                 # 超过100M时分割,单位K,M,G,优先级高于daily
        compress                   # 切割后压缩,也可以为nocompress
        delaycompress              # 切割时对上次的日志文件进行压缩
        dateext                    # 日志文件切割时添加日期后缀
        missingok                  # 如果没有日志文件也不报错
        notifempty                 # 日志为空时不进行切换,默认为ifempty
        create 640 nginx nginx     # 使用该模式创建日志文件
        sharedscripts              # 所有的文件切割之后只执行一次下面脚本
        postrotate
            if [ -f /var/run/nginx.pid ]; then
                kill -USR1 `cat /var/run/nginx.pid`
            fi
        endscript
    }

    当配置完成后,可以通过如下方式进行测试。

    ----- 可直接手动执行
    $ logrotate --force /etc/logrotate.d/nginx
    ----- 显示详细的信息;而且--debug/-d实际上不会操作具体文件(Dry Run)
    $ logrotate --debug --verbose --force /etc/logrotate.d/nginx

    常见配置参数: 

    daily :指定转储周期为天天
    weekly :指定转储周期为每周
    monthly :指定转储周期为每个月
    rotate count :指定日志文件删除以前转储的次数,0指没有备份,5 指保留5 个备份
    tabooext [+] list:让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,
    v, 和 ~
    missingok:在日志轮循期间,任何错误将被忽略,例如“文件没法找到”之类的错误。
    size size:当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem)
    compress: 经过gzip压缩转储之后的日志
    nocompress: 不压缩
    copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
    nocopytruncate: 备份日志文件可是不截断
    create mode owner group : 转储文件,使用指定的文件模式建立新的日志文件
    nocreate: 不创建新的日志文件
    delaycompress: 和 compress 一块儿使用时,转储的日志文件到下一次转储时才压缩
    nodelaycompress: 覆盖 delaycompress选项,转储同时压缩。
    errors address : 专储时的错误信息发送到指定的Email 地址
    
    ifempty :即便是空文件也转储,这个是logrotate 的缺省选项。
    notifempty :若是是空文件的话,不转储
    mail address : 把转储的日志文件发送到指定的E-mail地址
    
    nomail : 转储时不发送日志文件
    olddir directory:储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
    
    noolddir: 转储后的日志文件和当前日志文件放在同一个目录下
    prerotate/endscript: 在转储之前须要执行的命令能够放入这个对,这两个关键字必须单独成行

    2. 通过shell脚本定时执行切割

    #!/bin/bash
    
    dat=`date +"%Y%m%d" `
    mon=`date +"%Y%m"`
    echo $dat
    
    nginx_path="/data/log/nginx/"
    mondir=$nginx_path$mon
    
    /bin/echo $mondir 
    if [ ! -x "$mondir" ]; then 
        echo "开始创建日期文件夹"
        mkdir "$mondir"
        echo "创建日期文件夹结束"
    fi
    /bin/echo `date +"%Y-%m-%d %H:%M:%S"` 
    /bin/echo ` ls -al $mondir`
    
    # 声明需要分割的日志文件
    logs=("access_xxx.com" "nginx_access" "nginx_error")
    for log_name in ${logs[@]}
    do
        echo $log_name 
        mv $nginx_path$log_name".log" $mondir/$log_name-$dat".log"
    done
    
    kill -USR1 `cat /var/run/nginx.pid`
    /bin/echo "done "
  • 相关阅读:
    130517Dev GridControl建立多行复杂表头(Banded View)时,统计列与对应列无法对齐的解决办法
    C&C++标准库
    Linux操作系统下的多线程编程详细解析
    Ubuntu12.04用户以root身份登录
    ubuntu永久修改主机名
    linux信号 linux signal
    淘宝api 登录验证
    淘宝开店 防骗 易赛加款诈骗|冲q币恶意差评
    面试..
    test
  • 原文地址:https://www.cnblogs.com/xingxia/p/nginx_log_rotate.html
Copyright © 2020-2023  润新知