温馨提示×

Debian syslog如何分割

小樊
37
2026-07-19 04:06:17
栏目: 智能运维

在 Debian 系统中,**syslog 日志分割(轮转)**通常是通过 rsyslog + logrotate 来完成的。下面分情况说明如何配置和生效。


一、Debian 默认机制说明

  • 日志服务rsyslog
  • 日志轮转工具logrotate
  • 默认配置文件路径
    • rsyslog:/etc/rsyslog.conf/etc/rsyslog.d/*.conf
    • logrotate:/etc/logrotate.conf/etc/logrotate.d/

Debian 已经默认对 /var/log/syslog 等日志做了轮转,一般不需要手动干预。


二、查看当前 syslog 轮转配置

cat /etc/logrotate.d/rsyslog

常见内容示例:

/var/log/syslog
{
    rotate 7
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

含义:

  • rotate 7:保留 7 个历史文件
  • daily:每天轮转
  • compress:压缩旧日志
  • postrotate:轮转后通知 rsyslog 重新打开日志文件

三、修改 syslog 分割策略(常见需求)

1️⃣ 按大小分割(例如超过 100M)

/var/log/syslog
{
    size 100M
    rotate 10
    missingok
    notifempty
    compress
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

⚠️ 注意:sizedaily 不建议同时使用


2️⃣ 按时间 + 保留更久

/var/log/syslog
{
    weekly
    rotate 12
    compress
    missingok
    notifempty
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
    endscript
}

3️⃣ 立即测试配置是否生效

logrotate -d /etc/logrotate.d/rsyslog
  • -d:调试模式,不真正执行
  • 无报错说明配置正确

强制执行一次:

logrotate -f /etc/logrotate.d/rsyslog

四、rsyslog 本身是否需要重启?

不需要手动重启,前提是 postrotate 正确执行了 rsyslog-rotate 或:

systemctl kill -s HUP rsyslog

否则 rsyslog 会继续写旧文件。


五、Debian 10+ 的 rsyslog-rotate 机制

Debian 10 以后使用:

/usr/lib/rsyslog/rsyslog-rotate

该脚本会自动处理:

  • 重新打开日志文件
  • 避免日志丢失

六、常见问题排查

1️⃣ 日志没有分割?

检查:

systemctl status cron
systemctl status rsyslog

logrotate 依赖 croncron.daily


2️⃣ 日志还在变大?

  • 是否配置了 size 却没有触发
  • 是否 cron 没运行
  • 是否被其他程序锁定

3️⃣ 自定义日志文件如何分割?

例如 /var/log/myapp.log

/etc/logrotate.d/myapp
/var/log/myapp.log
{
    daily
    rotate 7
    compress
    missingok
    notifempty
    postrotate
        systemctl reload rsyslog
    endscript
}

七、总结

✅ Debian syslog 分割核心:

  • rsyslog 负责写日志
  • logrotate 负责分割
  • postrotate 负责通知 rsyslog

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

  • Debian 版本(10 / 11 / 12)
  • 想按 大小 / 时间 / 天数 哪种方式
  • 是否使用 systemd-journald

我可以给你一份完全定制的 logrotate 配置

0