アップデートと説明

アップデートと説明

rsyslog私はDebianバスターを使用しています。

私はsysvinitsystemdではなく古いスタイルを使用しています。rsyslogほとんどのinitスクリプトが実行された後、init起動シーケンスの後半に開始されました。

起動プロセス中に、メッセージdmesgとrsyslogが起動する前に実行される他の起動スクリプトからの他の以前のログメッセージは失われません。rsyslog起動時にすぐに記録されます。

rsyslogが実行されていない場合、これらのメッセージはどこに保存されますか?

初期起動メッセージが記録されないように、rsyslogを起動する前にこの「キャッシュ」を消去できますか?

あるいは、より良い方法は、フィルタリングしてデフォルトのsyslogファイルに書き込むことができることです。

*.*    -/var/log/syslog

しかし、もう一方はログインしていません。

*.*    |/dev/xconsole

アップデートと説明

私が解決しようとしている問題が完全にはっきりしていない可能性があることに気づきました。したがって、状況のいくつかの説明は次のとおりです。

syslog標準ロギング(例:)に加えて、/var/log/syslogに同じ情​​報を記録しており、/dev/xconsoleデスクトップセッションにユーザーとしてログインした場合は、バックグラウンドで次のコマンドを使用します。

cat /dev/xconsole

これにより、自分の背景に新しいログが表示されることをすぐに確認できます。また、通常のファイルと/dev/xconsoleは異なり、読んだ後は空になります。したがって、ログアウトして再度ログインすると、古いメッセージは表示されず、新しいメッセージのみが表示されます。

これで問題は、ブート後にカーネルバッファにログが多すぎるため、起動時に無駄なデバッグ初期ブート情報でフル容量をrsyslog埋めることです。/dev/xconsole

私が最も興味を持っているのは、失われた遅いブートメッセージです。初めて実行した後にのみcat /dev/xconsoleスペースが解放され、新しいメッセージを受け取ることができます。

私は次のような醜いハッキングを追加しました/etc/rsyslog.conf

:msg, startswith, "\[    "              stop
*.*    |/dev/xconsole

これにより、デフォルトでは、1秒秒のカウンターで始まるすべての初期メッセージが削除されます[ 0.000000]が、後続のすべてのメッセージを受け入れます。 [ 14.348189]

これはうまくいきますが、汚い解決策だと思います。

それでは、興味のない初期の起動メッセージをどのように削除し、便利なinit起動スクリプトメッセージを記録できますか?

ベストアンサー1

プロセスはsyslog通常、次の 3 つのソースからメッセージを取得します。

  1. アプリケーションを通じて/dev/log
  2. ポート514を介したネットワーク接続
  3. カーネル経由/proc/kmsg

/dev/log最初に... 従来、プロセスが開始される前に送信されたすべてのアプリケーションはsyslogdメッセージを失います。 systemd状況が少し混乱しているからそれ代わりにこのソケットを聞くことができます。これでsyslogd読むことができますsystemd。しかし、それはあなたが心配する問題ではないようです。

2番目のものは明らかにあなたの質問とは関係ありません。

だから私たちは3番目に集中します。以下は、で始まる行です[...]。ここで数字は開始後のタイムスタンプです。これは、ユーザー空間アプリケーションではなくカーネルによって生成されたメッセージです。

カーネルメッセージは「リングバッファ」に保存され、rsyslog起動時にこのバッファを読み込み、設定ファイルにデータを入れるように指示した場所にデータを入れます。

一般的な状況では大丈夫です。何かが正しくブートされない場合に備えて、すべてのカーネルブートメッセージのログを望んでいます。

ただし、気にしない場合は、このコマンドを使用できますdmesg --clear。これにより、「リングバッファ」がクリアされます。したがって、起動前に起動順序に入れると、rsyslogデーモンはバッファがすでに消去されているカーネルメッセージを読み取ることはありません。

どのように実行する操作は、実行しているディストリビューションによって大きく異なります。従来の方法では、sysvinitsyslog起動スクリプトの前に実行されるRCファイルを生成する必要があります。 systemdを使用すると、syslogプロセスの前提条件を持つユニットを作成できます。

おすすめ記事