私はUbuntu 16.04.7 LTSを実行しているLinuxコンピュータを持っていますrsyslogd
。rsyslogd
dmesg
/var/log/syslog
したがって、名目上は「開始」メッセージが表示され、後で検索できるカーネルメッセージが表示されることが/var/log/syslog
予想されます。最初のカーネルメッセージが0.0000秒の相対時間でどのように開始されるかを確認してください。rsyslogd
dmesg
$ 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
この問題を解決するためにとられたおおよそのステップは次のとおりです。
- 通常通りに
auditd
設置してください。apt-get
- 名前付き
auditd
ルールを追加します。proc_kmsg
「誰かがこの記事を読むたびに/proc/kmsg
メモしてください」。
$ cat /etc/audit/rules.d/foobar.rule
-w /proc/kmsg -p r -k proc_kmsg
- 追加されたルールをロードして適用します。
$ augenrules --load
- システムを再起動します。
- ログを読み、
auditd
何がアクセスを試みたかを確認してください/proc/kmsg
。
$ ausearch -k proc_kmsg --interpret
/usr/sbin/rsyslogd
私の場合は、読み取り試行を示す行があり、読み取り試行を表す/proc/kmsg
別の行があることを確認しました。私はそれを活性化するつもりはなかったので、それに応じて無効にしました。/sbin/logd
/proc/kmsg
rsyslogd
logd
logd
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