温馨提示×

nginx日志切割策略是什么

小樊
52
2025-08-22 13:06:54
栏目: 编程语言

Nginx日志切割策略主要通过工具实现,核心目标是按规则分割日志文件,避免单个文件过大,便于管理与分析。以下是常见策略及实现方式:

一、核心策略

  • 按时间切割:按天、周、月、年等周期切割日志,适合不同场景的归档需求。
  • 按大小切割:当日志文件达到指定大小(如100MB)时立即切割,应对突发流量场景。
  • 压缩与归档:对旧日志进行压缩(如gzip)以节省空间,保留指定天数/版本的日志。
  • 通知服务重载:切割后通过发送信号(如kill -USR1)通知Nginx重新打开日志文件,确保服务不中断。

二、主流实现方式

1. 使用logrotate工具(推荐)

  • 配置文件:在/etc/logrotate.d/nginx中定义规则,例如:
    /var/log/nginx/*.log {
        daily       # 每天切割
        rotate 30   # 保留30天日志
        compress    # 压缩旧日志
        delaycompress # 延迟压缩
        notifempty  # 空日志不切割
        create 0640 nginx nginx # 新日志权限与所有者
        sharedscripts
        postrotate
            if [ -f /var/run/nginx.pid ]; then
                kill -USR1 `cat /var/run/nginx.pid` # 通知Nginx重开日志
            fi
        endscript
    }
    
    • 参数说明daily(时间间隔)、rotate(保留数量)、compress(压缩)、postrotate(执行脚本)。
  • 执行方式:通过系统cron定时任务自动运行(默认/etc/cron.daily/logrotate)。

2. 自定义脚本切割

  • 示例脚本:通过Bash脚本按天切割并压缩日志,发送信号通知Nginx:
    #!/bin/bash
    LOG_PATH="/var/log/nginx"
    BACKUP_PATH="${LOG_PATH}/$(date -d 'yesterday' +%Y-%m-%d)"
    mkdir -p "$BACKUP_PATH"
    mv "${LOG_PATH}/access.log" "${BACKUP_PATH}/access.log.$(date -d 'yesterday' +%Y-%m-%d)"
    gzip "${BACKUP_PATH}/access.log.$(date -d 'yesterday' +%Y-%m-%d)"
    kill -USR1 $(cat /var/run/nginx.pid)
    
  • 定时任务:通过crontab -e添加每日执行,如0 0 * * * /path/to/script.sh

三、策略选择建议

  • 中小型网站:按天切割+保留30天+压缩,满足日常分析需求。
  • 大流量站点:按小时或按大小切割,避免单文件过大,配合分布式存储。
  • 合规性场景:按年切割+长期保留,满足审计要求。

四、注意事项

  • 确保脚本中Nginx的pid路径正确,可通过cat /var/run/nginx.pid获取。
  • 测试配置时使用logrotate -d(debug模式)或logrotate -f(强制模式)。

0