Journald是systemd引入的用于收集和存储日志数据的系统服务。它试图使系统管理员可以在越来越多的日志消息中更轻松地找到有趣且相关的信息。为了实现此目标,日记中的主要更改之一是用为日志消息优化的特殊文件格式替换简单的纯文本日志文件。这种文件格式使系统管理员可以更有效地访问相关消息。它还为单个系统带来了数据库驱动的集中日志记录实现的某些功能。
概览systemd-journald系统
Journald系统主要由三个主要的系统日记服务组件组成:
- 守护程序:systemd日志服务由systemd-journald守护程序处理。
- 配置文件:日志服务的配置在/etc/systemd/journald.conf里面设置。
- 日志搜索程序:用于搜索日记日志文件的程序是journalctl。
本文主要介绍systemd-journald日志相关的重要配置选项:主要包括systemd-journald logrotate和存储类型选择功能。
Journald支持的不同类型的存储
我们可以通过修改/etc/systemd/journald.conf文件控制存储类型值,在[Journal]字符串下面可以修改存储类型。
[Journal]
#Storage=auto
Storage支持的值为volatile,persistent,auto和none,默认是auto,所有值的含义如下
- 如果为volatile,则日志数据将仅存储在内存中,即在/run/log/journal目录下(根据需要创建)。
- 如果是persistent,则数据将会存储在磁盘上,即/var/log/journal目录下,并且在早期引导阶段磁盘不可写的时候把数据保存到/run/log/journal目录下。
- auto值意味着把日志数据存储在/var/log/journal/目录中。但是该目录必须已经存在并且设置了适当的权限。如果不存在,则日记数据将存储在易失性/run/log/journal/目录中,并且在系统关闭时会删除该数据。
- none关闭所有存储,所有接收到的日志数据将被丢弃。
对日志文件执行logrotate
systemd-journald日志文件的logrotate将基于以下值执行:
#SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #RuntimeMaxFiles=100 #MaxRetentionSec= #MaxFileSec=1month
这些设置将会限制日志文件的大小上限。 以System开头的选项用于限制磁盘使用量, 也就是 /var/log/journal 的使用量。 以Runtime开头的选项用于限制内存使用量, 也就是 /run/log/journal 的使用量。
- RuntimeMaxUse/SystemMaxUse= 控制日志最大可使用多少磁盘空间,然后对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的10%
- RuntimeKeepFree/SystemKeepFree= 控制systemd-journald将为其他用途保留多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的15%
- SystemMaxFileSize=/RuntimeMaxFileSize= 限制单个日志文件的最大体积, 到达此限制后日志文件将会自动滚动。 默认值是对应的 SystemMaxUse=/RuntimeMaxUse= 值的1/8 , 这也意味着日志滚动 默认保留7个历史文件。
- SystemMaxFiles/RuntimeMaxFiles= 限制最多允许同时存在多少个日志文件, 超出此限制后, 最老的日志文件将被删除, 而当前的活动日志文件 则不受影响。 默认值为100个。
- MaxRetentionSec=日志滚动的时间间隔。通常并不需要使用基于时间的日志滚动策略, 因为由SystemMaxFileSize/RuntimeMaxFileSize= 控制的基于文件大小的日志滚动策略已经可以确保日志文件的大小不会超标。 默认值是一个月, 设为零表示禁用基于时间的日志滚动策略。
- MaxRetentionSec=日志文件的最大保留期限。 当日志文件的最后修改时间(mtime)与当前时间之差,大于此处设置的值时,日志文件将会被删除。 通常并不需要使用基于时间的日志删除策略。
如果我们检查systemd-journald的状态,那么我们可以看到它的报告日志已轮换:
$ systemctl status systemd-journald ● systemd-journald.service - Journal Service Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled) Active: active (running) since Sat 2019-11-23 08:34:43 CST; 3 months 14 days ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 404 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 9484) CGroup: /system.slice/systemd-journald.service └─404 /lib/systemd/systemd-journald Nov 23 08:34:43 ubuntu systemd-journald[404]: Journal started Nov 23 08:34:43 ubuntu systemd-journald[404]: Runtime journal (/run/log/journal/0bc1c3fec0b84c47ac1b0ea61a9db220) is 8.0M, max 79.5M, 71.5M free. Nov 23 08:34:43 ubuntu systemd-journald[404]: Time spent on flushing to /var is 46.023ms for 1754 entries. Nov 23 08:34:43 ubuntu systemd-journald[404]: System journal (/var/log/journal/0bc1c3fec0b84c47ac1b0ea61a9db220) is 504.0M, max 4.0G, 3.5G free. Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.