温馨提示×

ubuntu系统如何回收利用日志文件

小樊
35
2025-12-17 22:32:06
栏目: 智能运维

Ubuntu 日志文件的回收与自动管理

一、先评估日志占用

  • 查看整体磁盘与日志目录占用:
    • 整体空间:df -h
    • 日志目录:sudo du -sh /var/log
    • systemd 日志占用:journalctl --disk-usage
  • 快速定位大文件:sudo du -h /var/log | sort -rh | head -10
  • 预览近期日志,确认无正在排查的关键信息:journalctl -n 100journalctl -r

二、安全清理 systemd 日志(journald)

  • 按时间保留(推荐):保留最近一段时间,删除更早日志
    • 示例:sudo journalctl --vacuum-time=2weeks(可用单位:1week/7days/24h/1month
  • 按大小保留:限制日志总体积,超出自动删除最旧
    • 示例:sudo journalctl --vacuum-size=500M
  • 执行前可先轮转一次,减少正在写入文件的影响:sudo journalctl --rotate
  • 清理后核验:journalctl --disk-usagedu -sh /var/log/journal
  • 建议避免直接删除 /var/log/journal 目录或正在写入的主日志文件,优先使用 journalctl 子命令完成回收。

三、回收传统文本日志与轮转管理(/var/log/*.log)

  • 清空正在写入的日志内容(保留文件与 inode,业务不中断):
    • 示例:sudo truncate -s 0 /var/log/syslogsudo > /var/log/syslog
  • 删除已轮转的旧归档(如 .gz、.1、.old 等),谨慎避免误删当前正在写入的文件
    • 示例:sudo find /var/log -name "*.gz" -mtime +7 -delete
  • 使用 logrotate 做长期“回收-压缩-删除”自动化(Ubuntu 默认已安装)
    • 全局配置:/etc/logrotate.conf
    • 服务配置:/etc/logrotate.d/rsyslog(常见示例)
      /var/log/syslog {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 0640 root adm
      }
      /var/log/auth.log {
          daily
          rotate 7
          compress
          delaycompress
          missingok
          notifempty
          create 0640 root adm
      }
      
    • 强制执行一次以验证:sudo logrotate -f /etc/logrotate.conf
  • 提示:文本日志通常由 rsyslog 写入,确保服务运行:sudo systemctl status rsyslog

四、设置长期自动回收策略

  • 配置 systemd-journald 的持久化与保留策略
    • 创建目录:sudo mkdir -p /etc/systemd/journald.conf.d
    • 新建配置:sudo nano /etc/systemd/journald.conf.d/99-custom.conf
      [Journal]
      SystemMaxUse=500M
      MaxRetentionSec=2week
      MaxFileSize=100M
      
    • 使配置生效:sudo systemctl restart systemd-journald
  • 说明:上述策略会在达到大小或时间阈值时自动删除最旧日志,避免再次膨胀。

五、注意事项与应急

  • 清理前备份关键时段日志(导出后再清理):
    • 示例:journalctl --since "2025-12-01" --until "2025-12-02" > ~/backup/journal_2025-12-01.log
  • 不要直接 rm> /var/log/syslog 后立即删除同文件,可能导致日志写入异常;如需替换,先清空内容并确保 rsyslog 正常运行。
  • 清理 /tmp 等临时目录前确认无进程占用:sudo rm -rf /tmp/*
  • 若磁盘已接近满,优先执行:sudo journalctl --rotate && sudo journalctl --vacuum-size=200M,再处理文本日志与缓存。

0