rsyslog 不记录

Ark*_*del 18 rsyslog syslog systemd

这是一个奇怪的问题。

我正在 RHEL7 VM 上测试 chrony/ntp 服务,并正在重置其时间以及主机的时间。一旦我对它感到满意,我检查/var/log/messages并意识到它已经有一段时间没有改变了。

现在无论我做什么,除了重新启动 rsyslog 服务本身之外,什么都没有被记录;当我这样做时:

Apr 15 13:59:43 mymachine1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2847" x-info="http://www.rsyslog.com"] exiting on signal 2.

Apr 15 13:59:59 mymachine1 rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2853" x-info="http://www.rsyslog.com"] start

Apr 15 14:00:11 mymachine1 rsyslogd-3000: sd_journal_get_cursor() failed: 'Cannot assign requested address'
Run Code Online (Sandbox Code Playgroud)

尝试诸如logger test不记录之类的事情,似乎除了 rsyslog 自己的消息之外别无其他。当我使用-n -N1参数手动运行 rsyslog 时,我得到:

rsyslogd: version 7.4.2, config validation run (level 1), master config /etc/rsyslog.conf

rsyslogd: End of config validation run. Bye
Run Code Online (Sandbox Code Playgroud)

由于某种原因,似乎没有任何东西可以通过 rsyslog 登录。同一主机上的第二个相同的虚拟机(它没有经历完全相同的循环,反复禁用 ntp,更改日期并多次重新启动)使用相同的 rsyslog.conf 文件记录就好了。

此时日期/时间是正确的,chrony 已启用并正在运行,并且我已经重新启动了几次 - 在 30 秒的内核消息之后,没有其他任何内容再次被记录。

想法?

slm*_*slm 20

不是直接的解决方案,但我会启用一些调试来查看幕后发生的事情。

想法 #1 - 调试记录器

首先,当你运行你的logger命令时,你可以这样做,将消息回显到 STDERR。

$ logger -s "hi"
saml: hi
Run Code Online (Sandbox Code Playgroud)

想法#2 - 验证您的配置文件

您还可以尝试验证您的 rsyslog 配置文件:

$ sudo rsyslogd -N6 | head -10
rsyslogd: version 7.2.6, config validation run (level 6), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

6921.173842409:7f8b11df2780: rsyslogd 7.2.6 startup, module path '', cwd:/root
6921.175241008:7f8b11df2780: caller requested object 'net', not found (iRet -3003)
6921.175261977:7f8b11df2780: Requested to load module 'lmnet'
6921.175272711:7f8b11df2780: loading module '/lib64/rsyslog/lmnet.so'
6921.175505384:7f8b11df2780: module lmnet of type 2 being loaded (keepType=0).
6921.175520208:7f8b11df2780: entry point 'isCompatibleWithFeature' not present in module
6921.175528413:7f8b11df2780: entry point 'setModCnf' not present in module
6921.175535294:7f8b11df2780: entry point 'getModCnfName' not present in module
6921.175541502:7f8b11df2780: entry point 'beginCnfLoad' not present in module
Run Code Online (Sandbox Code Playgroud)

想法 #3 - 打开 rsyslogd 调试

此外,我会尝试启用rsyslogd守护进程的调试以进一步了解。

$ sudo -i
$ export RSYSLOG_DEBUGLOG="/tmp/debuglog"
$ export RSYSLOG_DEBUG="Debug"

$ service rsyslog stop
$ rsyslogd -d | head -10    
7160.005597645:7fae096a3780: rsyslogd 7.2.6 startup, module path '', cwd:/root
7160.005872662:7fae096a3780: caller requested object 'net', not found (iRet -3003)
7160.005895004:7fae096a3780: Requested to load module 'lmnet'
7160.005906331:7fae096a3780: loading module '/lib64/rsyslog/lmnet.so'
7160.006023505:7fae096a3780: module lmnet of type 2 being loaded (keepType=0).
7160.006030872:7fae096a3780: entry point 'isCompatibleWithFeature' not present in module
7160.006033780:7fae096a3780: entry point 'setModCnf' not present in module
7160.006036209:7fae096a3780: entry point 'getModCnfName' not present in module
7160.006038359:7fae096a3780: entry point 'beginCnfLoad' not present in module
...
...
7160.006063913:7fae096a3780: rsyslog runtime initialized, version 7.2.6, current users 1
7160.006102179:7fae096a3780: source file syslogd.c requested reference for module 'lmnet', reference count now 2
7160.006113657:7fae096a3780: GenerateLocalHostName uses 'greeneggs'
Run Code Online (Sandbox Code Playgroud)

确认版本信息

$ rsyslogd -version
rsyslogd 7.2.6, compiled with:
    FEATURE_REGEXP:             Yes
    FEATURE_LARGEFILE:          No
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported:  Yes
    64bit Atomic operations supported:  Yes
    Runtime Instrumentation (slow code):    No
    uuid support:               Yes

See http://www.rsyslog.com for more information.
Run Code Online (Sandbox Code Playgroud)

已确认的错误和解决方法

OP 将此作为错误提交给 Red Hat。

该漏洞的特征如下:

果然,当我设置主机自己的时间时,VM 与主机的时间错误相同。那时我注意到 /var/log/messages 不再更新。

事实证明,此时除了重新启动 rsyslog 服务本身将日志记录到文件之外,别无他物。如果我这样做,这将被记录:

  ---
   Apr 15 16:39:39 rhel7time-dev rsyslogd-3000: sd_journal_get_cursor() failed: 'Cannot assign requested address'

  Apr 15 16:39:39 rhel7time-dev rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="574" x-info="http://www.rsyslog.com"] exiting on signal 15.
  Apr 15 16:39:39 rhel7time-dev rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="2117" x-info="http://www.rsyslog.com"] start
  ---
Run Code Online (Sandbox Code Playgroud)

否则不会将任何内容记录到文件中,包括记录器。

如果我在 rsyslog.conf 中注释掉 $OmitLocalLogging on 然后文件日志记录恢复(请注意,在那之前我没有更改 rsyslog.conf)。

通过日志记录不受所有这些影响。journalctl -b 显示日志记录,包括记录器发送的任何内容。

其中一位开发人员回应:

发生此问题时,您可以删除/var/lib/rsyslog/imjournal.state并重新启动守护程序作为解决方法。

rsyslog 不直接处理日期,而只能通过 systemd API 处理。不久前我在 imjournal 中检查了代码,这看起来像是 systemd 中的一个问题。

参考:https : //github.com/rsyslog/rsyslog/issues/43


小智 5

在我的情况下有systemctl restart systemd-journald帮助,因为

File /run/log/journal/29c32d60f93c42489aabb4ebeb593f5b/system.journal corrupted or uncleanly shut down, renaming and replacing.
[12274404.541271] systemd-journald[15492]: Deleted empty journal /run/log/journal/29c32d60f93c42489aabb4ebeb593f5b/system@0005317804680d96-e103c48634d16856.journal~ (4096 bytes).
Run Code Online (Sandbox Code Playgroud)