了解systemd-journald以及日志如何与RHEL 7中的Journal一起使用
在本文中,我将向我们概述systemd-journald
服务,Journal Logfiles的systemd-journald logrotate功能,并简要比较systemd-journald与rsyslod。
本文的不同部分将介绍以下主题
日志记录如何与日记文件和
systemd-journald
logrotate一起使用journald
的自动和永久存储类型之间有什么区别如何执行日记日志的日志轮换
Systemd-Journald和Rsyslogd
journald.conf中的RuntimeMaxUse和SystemMaxUse之间的区别
哪个值在" RuntimeMaxUse"和" RuntimeKeepFree"之间,或者在" journald.conf"中的" SystemMaxUse"和" SystemKeepFree"之间优先
日志记录机制的类型
日志文件是包含有关系统的消息的文件,包括系统上运行的内核,服务和应用程序。
有用于不同信息的不同日志文件。
例如,有一个默认的系统日志文件,一个仅用于安全消息的日志文件和一个用于cron任务的日志文件。
现在,服务可以使用三种不同的方法来写入日志信息:
直接写入:一些服务将日志信息直接写入日志文件,甚至一些重要的服务,例如Apache Web服务器和Samba文件服务器。
rsyslogd:rsyslogd是syslogd的增强功能,该服务负责管理集中式日志文件。
Syslogd已经存在很长时间了。journald:随着systemd的引入,日志日志服务systemd-journald也被引入。
该服务与systemd紧密集成,允许管理员从日志中读取详细信息,同时使用systemctl status命令监视服务状态。
传统的syslogd守护程序
大多数Linux系统采用特殊的守护程序以统一的方式处理日志维护。
传统的Linux守护程序日志管理器是syslogd,通常是从名为sysklogd的软件包中安装的。
syslogd守护程序处理来自服务器和其他用户模式程序的消息。
它通常与名为klogd的守护程序配对,该守护程序通常与syslogd使用相同的软件包安装。
klogd守护程序管理内核消息的日志记录。
存在系统记录器的其他选择。
例如,syslog-ng是支持高级选项的替代品。
许多发行版使用rsyslogd,它提供了改进的过滤功能和更高的性能。
systemd-journald和rsyslogd
日志记录以安全的方式提供结构和索引日志文件(称为日志)。
因此,不仅日志文件更容易搜索,而且系统入侵者很难掩盖它们的踪迹。
我们还可以以结构化格式维护rsyslog消息。与传统的日志记录守护程序相比,使用systemd-journald服务的另一个优点是,如果日志文件超过一定限制,它们将自动旋转。
这减少了日志文件维护问题和复杂性。journalctl实用程序用于读取日志二进制日志文件,此命令提供了几种过滤数据的方法,该方法非常强大。
默认情况下,这两个日志记录工具共存于RHEL 7系统上。
带日志记录的守护程序是进行故障排除的主要工具。
它还提供了创建结构化日志消息所需的其他数据。通过日志记录获取的数据被转发到
/run/systemd/journal/syslog
套接字,rsyslogd可以使用该套接字进一步处理数据。但是,rsyslog默认通过" imjournal"输入模块进行实际的集成,从而避免了上述套接字。
# grep imjournal /etc/rsyslog.conf $ModLoad imjournal # provides access to the systemd journal # local messages are retrieved through imjournal now. $IMJournalStateFile imjournal.state
提示:
我们还可以使用omjournal模块从rsyslogd向journald反向传输数据
了解系统日志
systemd-journald
守护程序是一项系统服务,它汇集并存储日志记录数据。
日记帐分录可能来自多个来源。
日志条目是根据服务器消息,用户模式程序消息和内核消息创建的,就像syslogd守护程序收集的消息一样。
但是,此外,日记帐分录是从所有系统服务消息创建的,例如生成的错误消息和引导时间通信。
系统日记帐服务可以存储日记帐分录,无论其大小,元数据或者格式如何。
该事件日志以二进制格式存储,可以使用" journalctl"命令进行查询。
我们可以根据日志存储类型,在/run/log/journal
或者/var/log/journal
下检查这些二进制日志文件,如下所示
# ls -l /run/log/journal/9bf0fc6f60ce41149a0a540f52db9773/ total 57600 -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-000000000014f164-000591c86adda67c.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-00000000001501fe-000591c86b188161.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-0000000000151299-000591c86b43bdd0.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-0000000000152332-000591c86b7e948f.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-00000000001533cd-000591c86ba9d162.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-0000000000154466-000591c86bd50274.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:57 system@e6620ce9c60b4b9387ed5e5bb507638a-0000000000155500-000591c86c0fdb78.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 11:58 system@e6620ce9c60b4b9387ed5e5bb507638a-0000000000156591-000591c86c3add8d.journal -rw-r-----+ 1 root systemd-journal 6553600 Sep 5 12:10 system.journal
systemd-journald系统
这里描述了三个主要的系统化日记服务组件:
守护进程:systemd日记服务由systemd-journald守护进程处理。
配置文件:
日志服务的配置在/etc/systemd/journald.conf
文件中设置。搜索工具:用于搜索日志日志文件的程序是journalctl。
如果删除system.journal文件会怎样?
假设" systemd-journald"服务正在运行,则" system.journal"文件将是当前文件,日志记录将在任何时间直接直接写入日志。
如果偶然有人意外删除了" system.journal",那么我们将丢失所有当前"正在写入"的日志,一旦生成新日志,就会自动创建" system.journal"文件来写入日志。
如果" systemd-journald"服务未处于运行状态,那么我们将丢失日志。
即使存在" system.journal"但服务本身未运行,日志记录也不会记录日志,rsyslog也不会收集日志。
重新启动服务后,将重新生成此文件。
journald.conf支持的不同类型的存储
存储类型的值由
/etc/systemd/journald.conf
文件控制。
在Journal下,我们可以修改存储类型。支持的值为" volatile"," persistent"," auto"和" none"
默认存储类型配置为"自动"
如果为volatile,则日志日志数据将仅存储在内存中,即在
/run/log/journal
层次结构下(如果需要创建)如果是永久性的,则数据将最好存储在磁盘上,即,在/var/log/journal层次结构之下,并在早期引导阶段回退到
/run/log/journal
并且如果磁盘不可写自动值将配置" journald"以将日志日志数据存储在"/var/log/journal /"目录中。
但是,该目录必须已经存在并且设置了适当的权限。
如果不存在,则日记数据将存储在易失性的/run/log/journal /
目录中,并且在系统关闭时会删除这些数据。
- none将关闭所有存储,所有接收到的日志数据将被丢弃。
对日志文件执行systemd-journald logrotate
日志日志文件的systemd-journald
logrotate将基于以下值执行
SystemMaxUse= SystemKeepFree= RuntimeMaxUse= RuntimeKeepFree= MaxFileSec=
其中
RuntimeMaxUse/SystemMaxUse =控制日志最大可使用多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。
默认为分配给节点的总物理内存的10%RuntimeKeepFree/SystemKeepFree =控制systemd-journald将为其他用途保留多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。
默认为分配给节点的总物理内存的15%
systemd-journald的logrotate将同时遵守这两个限制,并使用两个值中的较小者。
如果文件系统几乎已满,并且在启动" systemd-journald"时违反了" SystemKeepFree ="或者" RuntimeKeepFree =",则限制将提高到实际可用的百分比。
这意味着,如果在创建日记文件之前有足够的可用空间,并且随后其他原因导致文件系统填满,则" journald"将停止使用更多空间,但不会"删除"现有文件以减少文件空间。
再次占用空间,即不执行systemd-journald logrotate另请注意,system-journald logrotate仅删除归档文件,以减少日志文件占用的空间。
实际上,这意味着在systemd-journald logrotate完成日志日志文件的清理操作之后,仍然可能使用的空间超过了SystemMaxUse =或者RuntimeMaxUse =限制。
如果我们检查" systemd-journald"的状态,那么我们可以看到它报告了"日志已被轮换"。
# systemctl status systemd-journald ● systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled) Active: active (running) since Thu 2019-09-05 15:03:38 IST; 19h ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 29141 (systemd-journal) Status: "Processing requests..." CGroup: /system.slice/systemd-journald.service └─29141 /usr/lib/systemd/systemd-journald Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.