目 录CONTENT

文章目录

linux系统日志清理

过客
2025-10-24 / 0 评论 / 1 点赞 / 2 阅读 / 0 字

阿里云ECS服务器运行了六七年,发现 /var/log/journal目录占了10个多G的空间。/var/log/journal目录是 Linux 系统中 ​​systemd-journald 服务存储其二进制日志文件(journal)的主要位置​​。

一、它是什么?​

  1. ​核心组件:​​ 它是 systemd 生态系统的一部分,替代或补充了传统的基于文本的 syslog(如 /var/log/syslog, /var/log/messages)。

  2. ​二进制格式:​​ 日志以高效的二进制格式存储,而不是纯文本。这使得日志检索、过滤和结构化更高效。

  3. ​结构化日志:​​ 它存储的日志条目包含丰富的元数据(如时间戳、来源单元、优先级、进程ID、主机名等),便于精确查询和分析。

  4. ​集中存储:​​ 收集来自内核、启动过程、系统服务以及支持 systemd journal 协议的应用程序的所有日志消息。

  5. ​查看工具:​​ 使用 journalctl命令来查看、搜索、过滤和分析这些日志。例如:

    • journalctl:查看所有日志
    • journalctl -u nginx.service:查看 nginx 服务的日志
    • journalctl --since "2023-10-23" --until "2023-10-24":查看特定时间范围的日志
    • journalctl -p err -b:查看本次启动以来的错误级别日志
    • journalctl -f:实时跟踪日志(类似 tail -f

二、为什么需要清理?​

  • ​磁盘空间占用:​​ Journal 日志会随着时间推移不断增长,占用大量磁盘空间,尤其是在活跃的系统或启用了详细日志记录的系统中。
  • ​性能影响:​​ 非常大的 journal 文件可能会略微影响 journalctl的查询速度(虽然其设计通常能很好地处理大文件)。
  • ​日志轮转:​​ 与传统的 syslog 使用 logrotate 不同,journal 主要依靠其内置机制或手动命令进行清理。

三、​如何清理 /var/log/journal?​​

1. 使用 ​journalctl命令​

这是清理 journal 日志最安全、最推荐的方法,因为它能正确处理日志文件的内部结构。

  1. ​查看当前日志占用的磁盘空间:​

    journalctl --disk-usage
    

    这会显示当前 journal 日志总共占用了多少空间。

  2. ​清理策略:​

    • ​按时间清理:​

      • ​清理指定时间之前的日志:​

        sudo journalctl --vacuum-time=2d  # 删除所有早于 2 天的日志
        

        2d替换为所需的时间,例如 10d(10天)、4weeks(4周)、6months(6个月)、1year(1年)。

      • ​清理指定时间之前的日志(保留最新的):​

        sudo journalctl --vacuum-time=2d
        
    • ​按大小清理:​

      • ​将日志总体积限制到指定大小:​

        sudo journalctl --vacuum-size=500M  # 尝试将日志总大小缩减到 500MB
        

        journalctl会删除最旧的日志文件,直到总大小小于或等于指定值(这里是 500MB)。注意,这是一个目标值,实际大小可能略低于此值。

      • ​限制单个日志文件大小(较少直接使用):​

        sudo journalctl --vacuum-files=5  # 只保留最新的 5 个日志文件,删除旧的
        

        这直接控制文件数量,而不是总大小。

  3. ​验证清理结果:​
    再次运行 journalctl --disk-usage查看清理后的磁盘占用情况。

2. 配置自动清理

更省心的做法是配置 systemd-journald 自动清理日志。编辑配置文件:

  1. 打开配置文件(通常位于 /etc/systemd/journald.conf):

    sudo vim /etc/systemd/journald.conf
    
  2. 找到并修改以下行(如果被注释掉 #,则取消注释):

    # 按大小限制(示例:最大总日志大小 500MB)
    SystemMaxUse=500M
    # 或按时间限制(示例:最多保留 2 周的日志)
    MaxRetentionSec=2week
    # 限制单个文件大小(可选)
    SystemMaxFileSize=100M
    # 限制日志文件数量(可选)
    SystemMaxFiles=5
    
    • SystemMaxUse=:journal 可以使用的最大磁盘空间。达到此限制时,最旧的日志会被删除。
    • SystemKeepFree=:在日志目录所在文件系统上,journal 应保留的剩余空间。如果 SystemMaxUseSystemKeepFree都设置了,会优先满足 SystemKeepFree
    • RuntimeMaxUse=/ RuntimeKeepFree=:同上,但针对 /run/log/journal(内存中的临时日志,重启消失)。
    • MaxRetentionSec=:日志条目保留的最长时间(如 1month, 2weeks)。早于此时间的日志会被自动删除。
    • SystemMaxFileSize=:单个 journal 文件增长到的最大大小,之后会被轮转。
    • SystemMaxFiles=:保留的 journal 文件的最大数量。旧文件会被删除。
  3. 保存文件并退出编辑器。

  4. 重启 systemd-journald 服务使配置生效:

    sudo systemctl restart systemd-journald.service
    

    配置完成后,journald 会根据你的设置自动管理日志大小和轮转。

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区