温馨提示×

如何分割linux syslog

小樊
52
2026-07-15 13:23:40
栏目: 智能运维

在 Linux 系统中,syslog 的“分割”通常指日志轮转(Log Rotation),最常用的是 logrotate 工具。下面按常见场景给你一个完整说明。


一、为什么需要分割 syslog

  • 防止日志文件过大(如 /var/log/messages / /var/log/syslog
  • 保留历史记录便于排查问题
  • 压缩旧日志节省磁盘空间
  • 避免磁盘写满导致系统异常

二、常见 syslog 文件位置

发行版 主要 syslog 文件
Debian / Ubuntu /var/log/syslog
RHEL / CentOS / Rocky /var/log/messages
通用 /var/log/auth.log/var/log/kern.log

三、使用 logrotate 分割 syslog(推荐)

1️⃣ logrotate 配置文件位置

/etc/logrotate.conf        # 主配置
/etc/logrotate.d/          # 各服务配置

syslog 通常由:

/etc/logrotate.d/rsyslog

/etc/logrotate.d/syslog

2️⃣ 示例:rsyslog 日志轮转配置

/var/log/syslog
/var/log/messages
/var/log/auth.log
/var/log/kern.log
{
    daily              # 每天轮转
    rotate 7           # 保留 7 个备份
    missingok          # 文件不存在不报错
    notifempty         # 空文件不轮转
    compress           # 压缩旧日志
    delaycompress      # 延迟压缩
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

3️⃣ 参数说明

参数 含义
daily / weekly 轮转周期
rotate N 保留 N 个旧日志
compress gzip 压缩
missingok 文件不存在不报错
notifempty 空文件不轮转
postrotate 轮转后执行命令(如重载 rsyslog)

四、立即手动测试 logrotate

logrotate -vf /etc/logrotate.d/rsyslog
  • -v:显示过程
  • -f:强制执行

五、查看是否已轮转

ls -lh /var/log/syslog*

示例输出:

syslog
syslog.1
syslog.2.gz

六、临时手动分割(不推荐长期使用)

mv /var/log/syslog /var/log/syslog.1
kill -HUP $(cat /var/run/rsyslogd.pid)

⚠️ 仅用于应急,不会自动压缩和清理


七、systemd 系统(journalctl)

如果是 systemd-journal,不是传统 syslog:

查看日志

journalctl

限制日志大小

journalctl --vacuum-size=500M

或编辑:

/etc/systemd/journald.conf
SystemMaxUse=500M

八、常见问题

❓ 日志不轮转?

  • 检查 cron 是否运行
  • cron 每天执行:
/etc/cron.daily/logrotate

❓ 轮转后 rsyslog 不写新文件?

  • 必须 postrotate 重载 rsyslog

九、总结(推荐方案)

生产环境标准做法

  • 使用 logrotate
  • 配置 /etc/logrotate.d/rsyslog
  • 设置合理的轮转策略和保留时间

如果你愿意,可以告诉我:

  • 发行版(CentOS / Ubuntu / Rocky)
  • 是否是 Docker / 容器环境
  • 日志增长速度(GB/天)

我可以帮你定制一套最合适的 syslog 分割方案。

0