我在 RHEL 7.7 机器上:
Linux myhost 3.10.0-1062.el7.x86_64 #1 SMP 星期四 7 月 18 日 20:25:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
运行 rsyslog-8.24.0-38.el7.x86_64
根据 rsyslog 文档(目前位于 2021 年) https://www.rsyslog.com/doc/master/configuration/converting_to_new_format.html)$ModLoad
已过时并被 取代module(load=
。所以我试过了,发现它们并不等效。我的问题是,为什么新格式与旧格式不一样?
作为参考,这里是文档中的条目:
转换模块负载
这非常简单。在过时的旧格式中,我们使用:
$ModLoad module-name
这可以非常简单地转换为:
module(load="module-name")
当我在我的rsyslog.conf
文件中执行此操作时:
$ModLoad imuxsock.so # provides support for local system logging (e.g. via logger command)
$ModLoad imklog.so # provides kernel logging support (previously done by rklogd)
重新启动 rsyslog,然后执行:systemctl restart crond
,我注意到这一点/var/log/messages
:
Mar 8 18:16:19 myhost systemd[1]: Started System Logging Service.
Mar 8 18:16:24 myhost systemd[1]: Stopping Command Scheduler...
Mar 8 18:16:24 myhost systemd[1]: Stopped Command Scheduler.
Mar 8 18:16:24 myhost systemd[1]: Started Command Scheduler.
但是当转换为现代配置时,如下所示:
module(load="imuxsock") # provides support for local system logging (e.g. via logger command)
module(load="imklog") # provides kernel logging support (previously done by rklogd)
(仅更改这两行)我看到的是:
Mar 8 18:18:40 myhost rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-38.el7" x-pid="28876" x-info="http://www.rsyslog.com"] start
没有提到 crond 重启。
我也尝试过,只是为了好玩:
module(load="imuxsock.so") # provides support for local system logging (e.g. via logger command)
module(load="imklog.so") # provides kernel logging support (previously done by rklogd)
行为上没有区别。
编辑:我注意到如果文件 /etc/rsyslog.d/listen.conf 存在,并且它包含
$SystemLogSocketName /run/systemd/journal/syslog
然后我得到了所描述的行为以及一条错误消息/var/log/messages
:
Mar 8 18:45:13 myhost rsyslogd: command 'SystemLogSocketName' is currently not permitted - did you already set it via a RainerScript command (v6+ config)? [v8.24.0-38.el7 try http://www.rsyslog.com/e/2222 ]
但只有当我使用新样式的模块加载时才会发生这种情况。这意味着它不是“非常简单的转换”,至少在我看来是这样。
/var/log/messages
如果我删除该 listen.conf 文件,那么我就根本无法记录 crond 重启的信息。
现在我想知道我能/var/log/messages
使用新样式模块加载语法获取日志。
答案1
总体而言,rsyslog 很好地允许 20 年前的遗留选项与自那时以来的所有巨大变化共存。
请注意,$ModLoad
一行可以包含多行其他行,为该模块提供选项。例如,$SystemLogSocketName
您找到的选项对应于 imuxsockmodule()
选项SysSock.Name=
。
您应该查看所有其他未注释掉的行$
并将它们转换为适当的模块参数。