调试日志轮转

本章节介绍如何轮转调试日志。

日志轮转原理

日志轮转概念: 日志轮转是一种日志管理机制,用于管理日志文件的大小和数量,避免日志文件过大占用过多磁盘空间。日志轮转会定期将当前日志文件重命名或移动,然后创建一个新的日志文件,旧的日志文件会被压缩或删除。

日志轮转原理

  1. logrotate 重命名或移动当前日志文件
  2. logrotate 执行 postrotate 脚本
  3. postrotate 脚本发送 SIGUSR1 信号给 Nginx
  4. Nginx 收到信号后,重新打开日志文件
  5. Nginx 将日志写入新的日志文件

日志轮转优势

  • 避免日志文件过大占用过多磁盘空间
  • 便于日志管理和分析
  • 便于日志备份和归档

日志轮转

使用 logrotate 管理日志轮转:

sudo vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

logrotate 配置说明

  • daily:每天轮转一次
  • missingok:如果日志文件不存在,不报错
  • rotate 14:保留 14 个日志文件
  • compress:压缩旧日志文件
  • delaycompress:延迟压缩
  • notifempty:如果日志文件为空,不轮转
  • create 0640 www-data adm:轮转后创建新日志文件,设置权限和所有者
  • sharedscripts:共享脚本
  • postrotate:轮转后执行的脚本
  • kill -USR1:发送 SIGUSR1 信号,重新打开日志文件

手动轮转

# 重新打开日志
sudo nginx -s reopen

# 或使用信号
sudo kill -USR1 $(cat /var/run/nginx.pid)

手动轮转说明

  • nginx -s reopen:重新打开日志文件
  • kill -USR1:发送 SIGUSR1 信号,重新打开日志文件

手动轮转原理

  1. 手动重命名或移动当前日志文件
  2. 发送 SIGUSR1 信号给 Nginx
  3. Nginx 收到信号后,重新打开日志文件
  4. Nginx 将日志写入新的日志文件

日志轮转策略

按大小轮转

/var/log/nginx/*.log {
    size 100M
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

按大小轮转说明

  • size 100M:当日志文件大小达到 100M 时轮转

按时间轮转

/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

按时间轮转说明

  • daily:每天轮转一次
  • weekly:每周轮转一次
  • monthly:每月轮转一次

最佳实践

  1. 使用 logrotate:使用 logrotate 自动轮转日志
  2. 设置轮转策略:根据需求设置轮转策略
  3. 监控日志大小:定期监控日志文件大小
  4. 定期清理:定期清理旧日志,释放磁盘空间
  5. 测试轮转:测试日志轮转是否正常工作
  6. 压缩旧日志:压缩旧日志,减少磁盘空间占用