私はsystemd-journaldがカーネルの起動後にロギングを開始し、ストレージやネットワークサービスなどのシステムを設定するのに時間がかかると思います。ただし、ログログにはdmesgなどのカーネルメッセージがあり、実際のタイムスタンプもあります。ただし、カーネルは初期段階でRTCから実際の日時を回復する機会がありません。 Journaldはどのようにカーネルログメッセージを取得または表示しますか?
答え1
/dev/kmsg
Journaldはカーネルログを含むリングバッファから読み込みます。dmesg
同じバッファにアクセスします。私はログが始まるまで、最初のカーネルログの「実際の日時」は非常に正確であるとは思わない。
ここに例があります。dmesg
どちらもjournalctl
開始と同じオフセットを表示します。
root@ubuntu:~# dmesg | head -n 1
[ 0.000000] Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)
root@ubuntu:~# journalctl --quiet -k -b --output short-monotonic | head -n 1
[ 0.000000] ubuntu kernel: Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)
ただし、初期カーネルログメッセージの実際の時間は9秒以上異なります。
root@ubuntu:~# dmesg --time-format iso | head -n 1
2022-11-02T20:29:35,000000+00:00 Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)
root@ubuntu:~# journalctl --quiet -k -b --output short-iso-precise | head -n 1
2022-11-02T20:29:44.345820+0000 ubuntu kernel: Linux version 5.4.0-131-generic (buildd@lcy02-amd64-108) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 (Ubuntu 5.4.0-131.147-generic 5.4.210)
最初のカーネルログの「リアルタイム」の違いがログが始まるまでにかかる時間に近いのが偶然かどうか疑問に思います。
[ 8.335415] systemd[1]: Started Journal Service.
Journaldが始まった後の「リアルタイム」距離は非常にdmesg
近いですjournalctl
が、まったく同じではありません。
別の例があります。新しいカーネルログを作成します。
root@ubuntu:~# echo "THE TIME IS NOW: $(date --iso-8601=ns)" | tee /dev/kmsg
THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00
オフセットは同じままです。
root@ubuntu:~# dmesg | tail -n 1
[ 6467.404507] THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00
root@ubuntu:~# journalctl --quiet -b -k --output short-monotonic | tail -n 1
[ 6467.404507] ubuntu unknown: THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00
「リアルタイム」はまだ少し異なります。
root@ubuntu:~# dmesg --time-format iso | tail -n 1
2022-11-02T22:17:22,404507+00:00 THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00
root@ubuntu:~# journalctl --quiet -b -k --output short-iso-precise | tail -n 1
2022-11-02T22:17:22.988718+0000 ubuntu unknown: THE TIME IS NOW: 2022-11-02T22:17:22,986374849+00:00
dmesg
私たちは一生懸命働いていると信じています時間計算journalctl
使用時のオフセット__REALTIME_TIMESTAMP
フィールド日記帳に含まれる。もう少し確実になってほしいです。