系统日志轮转

本章节介绍系统日志的轮转。

日志轮转原理

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

系统日志轮转原理: 系统日志通常由系统日志服务(如 rsyslog、syslog-ng)管理,自动轮转。系统日志服务会根据配置文件自动轮转日志文件,无需手动干预。

日志轮转优势

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

rsyslog 配置

编辑 /etc/rsyslog.conf

# Nginx 日志配置
$RotateFile 7
$FileCreateMode 0640
$FileOwner nginx
$FileGroup adm

rsyslog 配置说明

  • $RotateFile 7:保留 7 个日志文件
  • $FileCreateMode 0640:新日志文件的权限
  • $FileOwner nginx:日志文件的所有者
  • $FileGroup adm:日志文件的组

rsyslog 配置原理: rsyslog 是一个系统日志服务,用于接收、存储和分析日志消息。rsyslog 支持日志轮转,可以根据配置文件自动轮转日志文件。

查看日志轮转

# 查看日志文件
ls -la /var/log/syslog*

# 查看轮转配置
cat /etc/logrotate.conf

查看日志轮转说明

  • ls -la /var/log/syslog*:查看日志文件
  • cat /etc/logrotate.conf:查看轮转配置

手动轮转

# 测试 logrotate
sudo logrotate -f /etc/logrotate.conf

手动轮转说明

  • logrotate -f:强制轮转日志文件

手动轮转原理: 手动轮转会强制轮转日志文件,即使日志文件没有达到轮转条件。

日志轮转策略

按大小轮转

/var/log/syslog {
    size 100M
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 syslog adm
    sharedscripts
    postrotate
        systemctl reload rsyslog >/dev/null 2>&1 || true
    endscript
}

按大小轮转说明

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

按时间轮转

/var/log/syslog {
    daily
    rotate 7
    compress
    delaycompress
    notifempty
    create 0640 syslog adm
    sharedscripts
    postrotate
        systemctl reload rsyslog >/dev/null 2>&1 || true
    endscript
}

按时间轮转说明

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

最佳实践

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