温馨提示×

CentOS Syslog日志清理策略有哪些

小樊
36
2025-11-15 21:42:50
栏目: 智能运维

CentOS Syslog日志清理策略

一 核心策略总览

  • 使用 logrotate 做基于时间或大小的自动轮转、压缩与保留,适合 /var/log/messages/var/log/secure 等由 rsyslog 写入的 syslog 文件。
  • 使用 journalctl 管理 systemd-journald 的二进制日志,按时间或容量清理,适合 CentOS 7+
  • 执行临时清理时,优先采用“清空”而非“删除”日志文件,避免破坏正在写入的 inode 导致日志中断。
  • 通过 cron 或系统自带的每日任务触发 logrotate,必要时可自定义强制轮转与监控。

二 基于 logrotate 的 syslog 轮转配置

  • 典型配置示例(/etc/logrotate.d/syslog 或 /etc/logrotate.d/rsyslog):
    /var/log/messages
    /var/log/secure
    /var/log/maillog
    /var/log/cron {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
            /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
        endscript
    }
    
    • 关键参数说明:
      • daily/weekly/monthly:按时间触发轮转。
      • size 100M:达到指定大小即轮转(可与时间条件并存,满足任一即触发)。
      • rotate N:保留最近 N 个归档。
      • compress / delaycompress:压缩旧日志,delaycompress 常用于保留一份未压缩以便快速回溯。
      • missingok / notifempty:文件缺失不报错;空文件不轮转。
      • create 640 root adm:轮转后重建文件并设置权限/属主。
      • copytruncate:复制后截断原文件,避免重启服务(适用于不便发送信号的应用)。
      • postrotate … endscript:轮转后向 rsyslog 发送 HUP 信号让其重新打开日志文件。
  • 手动测试与触发:
    • 测试配置与强制执行:logrotate -f /etc/logrotate.conf 或针对单个配置:logrotate -f /etc/logrotate.d/rsyslog
    • 查看轮转状态与日志:tail -f /var/log/messagestail -f /var/log/logrotate.log
  • 定时执行:
    • 系统通常通过 /etc/cron.daily/logrotate 每日运行;如需自定义时间,可在 root 的 crontab 中增加条目,例如:0 1 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

三 基于 journalctl 的 systemd 日志清理

  • 常用清理方式:
    • 按时间保留:journalctl --vacuum-time=2weeks(保留最近两周)
    • 按容量保留:journalctl --vacuum-size=1G(保留最近 1GB)
    • 先切分再清理:journalctl --rotate(便于快速释放空间)
  • 建议将持久化日志目录(如 /var/log/journal)纳入磁盘配额或单独分区,避免无限制增长。

四 临时清理与风险控制

  • 清空而非删除正在写入的日志文件(避免破坏文件句柄):
    • > /var/log/messagestruncate -s 0 /var/log/messages
    • 重要日志建议先备份:cp /var/log/messages /var/log/messages.bak
  • 谨慎使用 rm 删除日志文件,可能导致应用无法继续写入或审计线索中断。
  • 清理后及时通知日志服务重新打开文件(如向 rsyslog 发送 HUP),或使用 copytruncate 避免重启。

五 策略选择与落地建议

  • 同时存在 rsyslog 文本日志journald 二进制日志 时,建议同时配置两类清理策略,分别控制 /var/log/ 下的文本日志与 journal 持久化日志。
  • 生产推荐组合:
    • rsyslog:按天轮转、保留 7–30 天、启用 compressdelaycompress、必要时用 copytruncate、轮转后 kill -HUP rsyslog
    • journald:设置 SystemMaxUse=MaxRetentionSec=(在 /etc/systemd/journald.conf),并定期执行 journalctl --vacuum-time--vacuum-size 做容量控制。
  • 监控与告警:
    • 监控 /var/log/var/log/journal 使用率,结合 logrotate 日志与系统监控,提前预警磁盘空间风险。

0