Journalctlを使用してカーネル起動ログを取得するには?

Journalctlを使用してカーネル起動ログを取得するには?

私のボードにsystemd/ runningが1つあります。journaldシステムはバージョン216で構築されyoctoましたsystemd

私が得たいのは、渡すことができるカーネルブートログですjournalctl -k。しかし、私が知っている限り、このオプションの長いバージョンは、--dmesgこれがカーネルリングバッファから取得されたものだと思うようにします。もちろん、システムが数日間実行されている場合は、この情報を取得できない可能性があります。ここで私の理解は正しいですか?

これで問題は、journaldシステムが起動するとすぐにこの情報をダンプするオプションがあるかどうかです。そうでなければ、journalctl -k > dmesg.log単にスタートアップの最後のステップと呼んでも十分でしょうか?

答え1

Systemd はすべてをログに保存します。少なくとも私のラップトップでは、適切に使用すると、1年前のデフォルト設定に戻るのに十分な大きさです。

これが不十分な場合は修正できますログ構成ファイル

その後、使用に関するものですjournalctl -t kernel-k以前のブーツを見てフィルタを使用することができることを除いて、と似ています)。

答え2

もちろん、システムが数日間実行されている場合は、この情報を取得できない可能性があります。ここで私の理解は正しいですか?

はい。生成されるログ情報の量によって異なりますが、最後に起動情報は、カーネルリングバッファとシステムログの先頭からスクロールされます。他の人のシステムにどれくらいの時間がかかったかはわかりませんが、私のシステムの稼働時間は数百日に達し、ブートログデータはシステムログの上部に上がってから長くなりました。これは、巨大な結合ログストリームの欠点の1つです。すべてがファンになってからファンアウトされます。

したがって、FreeBSD、NetBSD、およびそのデリバティブについて学びます。すべてローカルファイルシステムがマウントされた後、起動時に一度実行されるサービスがあります。以下を行います。

dmesg > /var/run/dmesg.boot

/var/run/dmesg.bootしたがって、カーネルログが実際のログ以上にローリングされている場合でも、起動時にカーネルログのスナップショットを使用できます。

同じ機能を備えたシステムサービスを作成するだけです。シェルを使用してリダイレクトExecStart=/bin/sh -c "exec dmesg > /run/dmesg.boot"などを使用します。ローランベルコredirfdまたはnoshツールセットfdredir ExecStart=/usr/local/bin/fdredir --write 1 /run/dmesg.boot dmesg

journalctl -kカーネルログだけではなくsystemdログのスナップショットを撮るには、それを交換してサービスにしますType=oneshot。人々が望むものにするか、人々が望むサービスmulti-user.targetにしましょう。ローカルファイルシステムをマウントしたら、注文する必要はありません(例:)。 FreeBSDとOpenBSDはディスクファイルシステムである可能性があるため、この順序が必要です。システムオペレーティングシステムには、サービスの前にブートストラップに生成される「APIファイルシステム」があります。DefaultDependencies=nobasic.targetlocal-fs.target/var/run/run

(個人的に好ましいアプローチは、当初は巨大な中央ログストリームを持たないことです。専用サービスはカーネルログソースを提供します。ホロそして、プライベートログディレクトリにログインします。これが必要ですもっと長く上部から最後の案内メッセージがスクロールするポイントに到達します。また、以前の起動の開始ログも含まれます。

しかし、systemdの世界ではこれを設定するのが/run/dmesg.boot。これは、次のようなものを使用して行われます。fifo-listenそしてklog-readまたはsocklog。出力は、安定してサイズ制限があり、自動的に回転する専用のログディレクトリに標準で書き込むログデーモンを介してパイプされます。デーモンツール/走る/s6/おやつ/犯人赤ちゃんの世話プログラム。

答え3

カーネルログはsystemdログにコピーされます。これを手動で行う必要はありません。

説明する

systemd-journald は、ログデータを収集して保存するシステムサービスです。さまざまなソースから受け取ったログ情報に基づいて構造化インデックスログを作成して維持します。

カーネルログメッセージ、kmsgに基づいて

関連情報