温馨提示×

Ubuntu中如何优化日志存储

小樊
37
2025-12-19 21:13:02
栏目: 云计算

Ubuntu日志存储优化实操指南

一 核心思路与快速检查

  • 明确日志来源:传统文本日志(如 /var/log/syslog、/var/log/auth.log,由 rsyslog 写入)与 systemd journal(二进制日志,位于 /var/log/journal)。
  • 快速体检:
    • 查看各日志占用:sudo du -sh /var/log/* | sort -hr | head
    • 查看 journal 占用:journalctl --disk-usage
    • 实时观察异常输出:sudo tail -f /var/log/syslog
  • 优化目标:控制单文件大小、保留周期与总占用,避免无限增长与单文件过大影响排查效率。

二 优化 systemd journal 日志

  • 编辑配置文件:sudo nano /etc/systemd/journald.conf
  • 关键参数建议:
    • SystemMaxUse=1G(总上限,可按需设为 500M/10G
    • RuntimeMaxUse=1G(运行时内存日志上限)
    • MaxRetentionSec=2weeks(最长保留时间)
  • 使配置生效:sudo systemctl restart systemd-journald
  • 立即回收空间(谨慎):sudo journalctl --vacuum-size=500Msudo journalctl --vacuum-time=7d
  • 说明:journald 的参数能直接限制日志的磁盘上限与保留时长,是控制系统日志体积的最有效手段之一。

三 优化 rsyslog 与传统日志文件

  • 调整日志级别(减少写入量):编辑 /etc/rsyslog.conf/etc/rsyslog.d/50-default.conf,将类似
    *.info;mail.none;authpriv.none;cron.none 调整为 *.warning;mail.none;authpriv.none;cron.none,仅记录更高优先级事件。
  • 配置 logrotate 轮转(按大小或时间触发):编辑 /etc/logrotate.d/rsyslog,示例
    /var/log/syslog
    {
        daily
        maxsize 100M
        rotate 100
        missingok
        notifempty
        compress
        delaycompress
        postrotate
            /usr/lib/rsyslog/rsyslog-rotate
        endscript
    }
    
    • 要点:
      • sizemaxsize 均可触发轮转;dailymaxsize 组合可实现“时间或大小任一满足即轮转”。
      • rotate 100100M 组合可将总量控制在约 10GB 量级(间接控制,非严格上限)。
      • 使用 postrotate ... /usr/lib/rsyslog/rsyslog-rotate 通知 rsyslog 重新打开日志文件。
  • 立即回收空间(应急):sudo truncate -s 0 /var/log/syslog(清空当前日志,谨慎操作)。
  • 验证与演练:
    • 预演:sudo logrotate -d /etc/logrotate.d/rsyslog
    • 强制:sudo logrotate -f /etc/logrotate.d/rsyslog
  • 说明:logrotate 是 Ubuntu 默认的日志轮转机制,配合 rsyslog 能稳定控制文本日志的体积与保留份数。

四 应用日志与容器日志的治理

  • 为自定义应用添加 logrotate 配置(示例):
    /var/log/myapp/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 640 root adm
        postrotate
            systemctl reload myapp.service >/dev/null 2>&1 || true
        endscript
    }
    
    • 若应用不支持信号重载,可用 copytruncate 替代(注意可能丢少量日志)。
  • Docker 容器日志限制(docker-compose.yml):
    services:
      app:
        image: yourimage
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
    
  • 说明:为应用与容器单独设定轮转与上限,可避免单一应用或容器“撑爆”磁盘。

五 维护与自动化建议

  • 例行检查与演练:
    • 查看状态:systemctl status logrotate
    • 预演与强制:logrotate -d /etc/logrotate.conflogrotate -f /etc/logrotate.conf
  • 权限与路径问题:
    • 若 logrotate 报权限不足,可在配置中加入 su root root
    • 若 systemd 的 ProtectSystem=full 导致日志目录不可写,可在 /etc/systemd/system/logrotate.service.d/override.conf 中添加:
      [Service]
      ReadWritePaths=/var/log/myapp
      
      然后 sudo systemctl daemon-reload && sudo systemctl restart logrotate

0