Systemd

rsyslog 不記錄

  • March 31, 2021

這是一個奇怪的問題。

我正在 RHEL7 虛擬機上測試 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'

嘗試諸如logger test不記錄之類的事情,除了 rsyslog 自己的消息似乎沒有別的。當我使用參數手動執行 rsyslog 時-n -N1,我得到:

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

rsyslogd: End of config validation run. Bye

由於某種原因,似乎沒有任何東西可以通過 rsyslog 記錄。並且在同一主機上的第二個相同的虛擬機(它沒有經歷完全相同的重複禁用 ntp、更改日期並多次重新啟動的循環)具有相同的 rsyslog.conf 文件日誌就好了。

此時日期/時間是正確的,chrony 已啟用並正在執行,並且我已經重新啟動了幾次 - 在 30 秒的核心消息之後沒有其他任何內容被再次記錄。

想法?

不是直接的解決方案,但我會啟用一些調試以查看幕後發生的事情。

想法 #1 - 調試記錄器

對於初學者,當您執行logger命令時,您可以像這樣執行它們,將消息回顯到 STDERR。

$ logger -s "hi"
saml: hi

想法 #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

想法 #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'

確認版本資訊

$ 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.

確認的錯誤和解決方法

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
  ---

否則沒有任何東西被記錄到文件中,包括記錄器。

如果我在 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

引用自:https://unix.stackexchange.com/questions/124942