rsyslogd は時々 dmesg の初期ビットを /var/log/syslog に書き込まない。

rsyslogd は時々 dmesg の初期ビットを /var/log/syslog に書き込まない。

私はUbuntu 16.04.7 LTSを実行しているLinuxコンピュータを持っていますrsyslogdrsyslogddmesg/var/log/syslog

したがって、名目上は「開始」メッセージが表示され、後で検索できるカーネルメッセージが表示されることが/var/log/syslog予想されます。最初のカーネルメッセージが0.0000秒の相対時間でどのように開始されるかを確認してください。rsyslogddmesg

$ cat /var/log/syslog
... 
rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="4970" x-info="http://www.rsyslog.com"] start
...
kernel: [    0.000000] Booting Linux on physical CPU 0x0

時々を見ると、/var/log/syslog最初のカーネルメッセージが40秒以上後に始まることがわかります。

$ cat /var/log/syslog
... 
rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="4970" x-info="http://www.rsyslog.com"] start
...
kernel: [   45.829155] IRQ6 no longer affine to CPU4

すぐに見ると、dmesg「物理CPU 0x0からLinuxを起動する」というメッセージがないことがわかります。

$ dmesg | head -n1
kernel: [    0.000000] Booting Linux on physical CPU 0x0

これらすべてが私にそのような感覚を与えます一部なぜならrsyslogd、カーネルメッセージの最初のビットを記録しない競合状態が発生するからです。しかし、この問題を解決する方法がわかりません。この問題を深く解決する方法についてのガイダンスを取得したいと思います。

答え1

auditd興味のあるファイルにアクセスするタイミングを追跡することで、この問題を解決できました。簡単に言えば、彼らrsyslogと私はlogd両方ともそれを活性化し、両方を読みたいと思いました/proc/kmsg。しかし、@JamesThomasMoonが指摘したように、/proc/kmsg誰かが読んだ後に消去されました。だから私のシステムは時々到着したrsyslogdかどうかによってシステムログを失います。logd/proc/kmsg

この問題を解決するためにとられたおおよそのステップは次のとおりです。

  1. 通常通りにauditd設置してください。apt-get
  2. 名前付きauditdルールを追加します。proc_kmsg「誰かがこの記事を読むたびに/proc/kmsgメモしてください」
$ cat /etc/audit/rules.d/foobar.rule
-w /proc/kmsg     -p r    -k proc_kmsg
  1. 追加されたルールをロードして適用します。
$ augenrules --load
  1. システムを再起動します。
  2. ログを読み、auditd何がアクセスを試みたかを確認してください/proc/kmsg
$ ausearch -k proc_kmsg --interpret
  1. /usr/sbin/rsyslogd私の場合は、読み取り試行を示す行があり、読み取り試行を表す/proc/kmsg別の行があることを確認しました。私はそれを活性化するつもりはなかったので、それに応じて無効にしました。/sbin/logd/proc/kmsgrsyslogdlogdlogd
type=PROCTITLE msg=audit(05/30/23 18:10:50.266:28) : proctitle=/usr/sbin/rsyslogd -n 

そして

type=PROCTITLE msg=audit(05/30/23 18:10:50.846:32) : proctitle=/sbin/logd 

関連情報