rsyslog 不記錄
這是一個奇怪的問題。
我正在 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 中的一個問題。