Nginx日志自动切割神器

Nginx日志自动切割神器

背景:发现nginx日志文件过大:50g一个文件,手动切割都要半天

centos7

压测环境 大量压测请求,nginx日志过于庞大,一开始是写了一份shell脚本进行日期匹配自动切割日志。

考虑到不同的环境可能nginx日志格式不一样,匹配规则需要重新写。非常麻烦。

所以找到了这个方法

logrotate

使用系统自带日志切割神器logrotate

cat <<EOF >> /etc/logrotate.d/nginx
/var/log/nginx/*.log {  
    # create: 在日志文件轮换时创建新的日志文件,权限为 0640,属主是 nginx 用户,属组是 root 用户
    create 0640 nginx root
    # daily: 每天轮换一次日志文件
    daily
    # rotate 10: 保留最近的 10 个轮换后的日志文件
    rotate 10
    # missingok: 如果轮换的日志文件不存在,不会报错,直接继续进行轮换
    missingok
    # notifempty: 如果日志文件为空,不会进行轮换
    notifempty
    # compress: 轮换后的日志文件会被压缩
    compress
    # delaycompress: 在下一次轮换时才对上一次轮换的文件进行压缩
    delaycompress
    # sharedscripts: 如果有多个日志文件被轮换,只执行一次 postrotate 和 endscript 部分的脚本
    sharedscripts
    
     # 在日志文件轮换后执行的脚本
    postrotate
        # 发送 USR1 信号给 Nginx 进程,通知它重新打开日志文件
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
    
    #命名格式
     dateext
    dateformat -%Y%m%d%H
}
EOF

效果如下

image-20231029142013268

#手动触发
logrotate -f /etc/logrotate.d/nginx

#强行手动触发
logrotate -f /etc/logrotate.d/nginx

扩展

  1. size 100M:指定日志文件的大小阈值,当日志文件达到指定大小时进行轮换。
  2. maxsize 1G:设置日志文件的最大大小,当超过指定大小时进行轮换。
  3. lastactionendscript:与 postrotateendscript 类似,用于在轮换之后执行用户自定义的脚本。
  4. extension .gz:指定压缩后的日志文件的扩展名。
  5. ifempty:即使日志文件为空也进行轮换。
  6. copytruncate:在进行轮换时,先复制日志文件,再截断原始日志文件,适用于不能中断写入的应用程序。
  7. su user group:指定在进行轮换操作时的用户和用户组。
  8. nocompress:禁止对日志文件进行压缩。
  9. olddir /var/nginx/old:指定存放旧日志文件的目录。
  10. rotate 5 :指定轮换周期的倍数,例如 rotate 5 表示每5个周期进行一次轮换。
  11. compresscmd /usr/bin/gzip :指定用于压缩日志文件的压缩命令。
  12. uncompresscmd /usr/bin/gunzip:指定用于解压缩日志文件的解压缩命令。
  13. dateext:在压缩后的日志文件名后添加一个日期后缀。
  14. dateformat:指定日期后缀的格式。
  15. createolddir:如果指定的旧日志目录不存在,将会创建。
  16. sharedscripts:如果有多个日志文件被轮换,只执行一次 postrotateendscript 部分的脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值