デバッグロック - systemdが私のログを失う

デバッグロック - systemdが私のログを失う

Arch Linux から systemd に「アップグレード」してから予期しないダウンタイムが発生した場合、ログは失われます。私は戦う同じログ損失の問題1ヶ月前にこの問題が再発生しました。他にも独立確認

状態:

  • Javaおよびネットワーク関連のユーティリティで作業中にKDE(時計)が停止することがわかりました。 CPUファンでノイズが発生し、熱が上昇し続けます。しかし、マウスポインタはまだ動くことができます。
  • 別のコンピュータでSSHを試みました(「ホストへのパスなし」のため失敗しました)。
  • 私は数分間待ちました。おそらく、NMIウォッチャーは問題のあるタスクを終了する可能性があります。サイコロがありません。
  • Ctrl++は+以降も機能AltしませF1ん。SysRqR
  • 上記のステップが機能していないので、SysRqシーケンスREIを発行することにしました。その後、E画面は黒く変わりますが、コンソールもありません。 +以降でもSysRqないK
  • したがって、セッションが失われたように見える唯一のことは、デバッグ情報を収集することだけです。見ているウィキペディアSysRq、+ d(ディスプレイロック)などを押すことにしました。
  • SysRq+を押してからSしばらく待ってSysRqから+で再開しましたB
  • 再起動してコンソールにログインしても、競合の兆候は表示されません。最後に記録された項目はWiresharkを使用したものですが、まだ45分の間隔があります。

(ところで私はLinux v3.8-rc5-218-ga56e160を実行しています)

もしそうなら、ロックによって予期しない再起動が発生した場合にログが保存されるようにするにはどうすればよいですか?

ベストアンサー1

それで、#systemd IRCチャネルに問い合わせた結果、ジャーナルド(systemdのジャーナルデーモン)が定期的にディスクにログをまったくフラッシュしないことがわかりました。これはあなたのログが常に危険にさらされていることを意味します。

SIGUSR2ログに公開するとjournaldログがディスクに書き込まれますが、それを複数回実行すると多くのファイルが生成されます。 (このオプションは実際に「ログの回転」として説明されています。)

最後に、私は別の提案をすることにしました:専用のsyslogデーモンを使用してカーネルログを収集することです。 rsyslogが提案されているので(そしてすでにそれを使った経験があるので)、そのオプションをもっと詳しく見ました。詳細についてはに書きました。アーチスウィキrsyslog 使用情報。

アイデアはrsyslogを実行し、カーネル施設からのみデータを収集することです。 rsyslogの読み取り/proc/kmsg(単一のリーダーのみを許可)とJournaldの読み取り(複数のリーダーを許可)により、/dev/kmsgデーモンがログを失うことは不可能です(私にとって非常に重要です!)。カーネルメッセージをファイルに書き込むようにrsyslogを設定し、ディスクスペースの消費を防ぐためにファイルを循環させる必要があります。

このソリューションは完璧ではありません。

  • NetworkManagerのログなどの他のログは失われます。この問題は次のように解決できます。SyslogからJournaldにさらにログを渡す(これは重複を意味します!)
  • ログが重複しています。カーネルメッセージは2つのファイルに書き込まれます。これは問題ではありません。通常、ログ数が少ないため、ログコピーがないよりも多くのログコピーがあることをお勧めします。grepシングルログファイルなどの高速ツールや遅いですが、高度なツールを使用することもできますjournalctl

一つあるやることリストログをより頻繁にフラッシュするために使用されますが、まだ十分に信頼できません。

ログ:時々マーカーメッセージを送信し、すぐにfdatasync()と同期して毎時同期を保証します。

systemd / journaldにはディスクにログを書き込むオプションがありますが、その間に目標を達成するためにツールを組み合わせることができます。

おすすめ記事