温馨提示×

CentOS Syslog日志轮转策略解析

小樊
44
2025-12-17 12:35:59
栏目: 智能运维

CentOS Syslog日志轮转策略解析

一 核心组件与工作机制

  • 日志写入由rsyslog负责,规则通常在**/etc/rsyslog.conf/etc/rsyslog.d/中定义,常见路径包括/var/log/messages**、/var/log/secure/var/log/cron等。系统日志的落盘与轮转解耦:rsyslog持续写入当前日志文件,轮转由logrotate按周期或条件重命名/压缩/清理旧文件。logrotate的主配置为**/etc/logrotate.conf**,并通过include /etc/logrotate.d/加载各服务片段;执行通常由/etc/cron.daily/logrotate每日触发。rsyslog从systemd journal读取本地日志(imjournal),不再依赖传统的/var/run/log套接字。

二 配置文件与关键参数

  • 全局与包含
    • 在**/etc/logrotate.conf中可设置全局策略(如daily/weekly/monthly**、rotate Ncompressdateext、以及include /etc/logrotate.d)。dateext启用日期后缀(如 secure-20241010),便于按日期保留与检索。
  • 服务片段示例(/etc/logrotate.d/syslog 或 rsyslog)
    • 常见写法:
      • /var/log/messages、/var/log/secure、/var/log/maillog、/var/log/cron {
        • daily
        • rotate 7
        • compress
        • delaycompress
        • missingok
        • notifempty
        • create 0640 root adm
        • sharedscripts
        • postrotate
          • /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
        • endscript
        • }
    • 关键指令说明
      • daily/weekly/monthly:按时间周期触发
      • rotate N:保留N个旧日志
      • compress/delaycompress:压缩旧日志(delaycompress常用于保留最近一份未压缩以便快速回溯)
      • missingok/notifempty:文件缺失或为空时不报错/不轮转
      • create mode owner group:轮转后重建新文件的权限与属主
      • size 100M:达到指定大小即触发(可与时间条件并存,满足其一即触发)
      • minsize 1M:至少达到该大小才满足时间条件触发
      • dateext:使用日期作为后缀,避免序号回绕冲突
      • sharedscripts/postrotate/endscript:在轮转前后执行脚本;对rsyslog推荐用HUP信号让其重新打开日志文件,避免copytruncate带来的文件句柄与潜在丢日志风险。

三 触发时机与执行方式

  • 定时触发:默认由**/etc/cron.daily/logrotate调用/usr/sbin/logrotate /etc/logrotate.conf**执行,通常每日运行一次。
  • 手动触发与验证
    • 强制执行一次:logrotate -f /etc/logrotate.d/syslog(或-f /etc/logrotate.conf)
    • 干跑/调试:logrotate -d /etc/logrotate.d/syslog(显示将要执行的操作而不真正轮转)
    • 观察轮转结果:ls -lh /var/log/messages*;查看轮转状态与系统日志:tail -f /var/log/messages。

四 常见场景与推荐配置

  • 高频日志(如心跳、监控、调试):建议“时间+大小”双阈值,避免单日暴涨
    • /var/log/messages {
      • daily
      • rotate 7
      • compress
      • delaycompress
      • missingok
      • notifempty
      • create 0640 root adm
      • size 100M
      • sharedscripts
      • postrotate
        • /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
      • endscript
      • }
  • 安全与审计日志(secure):更长的保留期与严格权限
    • /var/log/secure {
      • daily
      • rotate 30
      • compress
      • delaycompress
      • missingok
      • notifempty
      • create 0600 root root
      • sharedscripts
      • postrotate
        • /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
      • endscript
      • }
  • 不建议对rsyslog使用copytruncate:可能导致日志写入短暂中断、句柄复用引发应用写入错位或丢失;优先使用postrotate + HUP让rsyslog重新打开日志文件。

五 故障排查与最佳实践

  • 排查要点
    • 检查服务与权限:systemctl status rsyslog;ls -l /var/log | grep -E ‘messages|secure|maillog|cron’
    • 手动执行并观察:logrotate -dvf /etc/logrotate.d/syslog;tail -f /var/log/messages
    • 确认定时任务存在且可执行:cat /etc/cron.daily/logrotate
  • 最佳实践
    • 使用dateext便于审计与追溯;为不同日志设置差异化保留期(如secure保留更久)
    • 统一在**/etc/logrotate.d/**维护服务片段,避免直接改动全局配置
    • 采用postrotate HUP而非copytruncate;必要时用sharedscripts确保脚本只执行一次
    • 对大文件与关键业务日志设置size阈值,避免磁盘被瞬时打满
    • 结合集中式日志平台(如ELKLoki)做长期留存与检索,降低单机磁盘压力。

0