ロギングを無効にする方法は?

ロギングを無効にする方法は?

journalctl最近、私は16GBのSDカード(Raspberry Pi)の大部分を占めていることに気づきました。

$ journalctl --disk-usage
Archived and active journals take up 312.1M in the file system.  

私はこのようなjournalctl気がしませんjournald頑張るこのマシンの私のユースケースでは。古いRPiでrsyslog動作します。私の要件と使用量journalctlは次のとおりです。「一生に一度」。したがって、私はjournald「フィード」を無効にすることにしましたjournalctl。私はそれが次の起動時に起動しないように簡単だと思いsystemctlますstopdisablesystemd-journald.service

プラグを抜く前に、私はいくつかの調査をすることにしました。 「方法」のアドバイスを提供する何千もの参考資料を見つけるのではなく、特定の検索クエリの結果はほとんどありませんでした。「ロギングを無効にする方法」。代わりに、結果は主に減少のjournald提案を提供します。LF。私はしばらく停止するいくつかの参考資料を見つけました。

journaldArchLinuxフォーラムの古い投稿によると、なしでは無効にすることはできません。エコー;つまり、"Masking systemd-journald causes all kinds of dependency failures and drops you at an emergency prompt."この記事は10年前の記事です...

これsystemd-journald.サービスマニュアル説明する、"stopping it [systemd-journald.service] is not recommended."。文書はそこから始まります名前空間

systemdデバイスの起動を防ぐための一般的なコマンドは効果がないことを学びました。つまり、正常に起動します。

$ sudo systemctl disable systemd-journald.service
$ sudo reboot 

# ... and after boot & login:

$ systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
     Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
     Active: active (running) since Fri 2022-06-03 07:30:29 UTC; 1min 59s ago
TriggeredBy: ● systemd-journald-audit.socket
             ● systemd-journald.socket
             ● systemd-journald-dev-log.socket
       Docs: man:systemd-journald.service(8)
             man:journald.conf(5)
   Main PID: 134 (systemd-journal)
     Status: "Processing requests..."
      Tasks: 1 (limit: 1598)
        CPU: 820ms
     CGroup: /system.slice/systemd-journald.service
             └─134 /lib/systemd/systemd-journald

...
$ 

どうすればjournald無効にできますか? ...または無効にすることはできますか?

そうでない場合は、systemdなぜ開発者がユーザーにこれを強制するのですか? (はい、アドバイスを求めることですので、質問の該当部分を忘れてください。)

答え1

journald使用時に取り除きたくない理由は、その情報を得ることができるからrsyslogdです。rsyslogd~から日記帳、そんなふうに二人が上手に遊びます。

これは、コメントにリンクされている一部のQ&Aとは多少相反します。ログが揮発性(メモリ内)リポジトリのみを使用し、rsyslog実際のログファイルに書き込むように構成されている現在のLinuxシステム(FedoraとDebianで確認)で、これについてのいくつかの観察は次のとおりです。

  • /var/run/logは 1 つのサブディレクトリがあるディレクトリです。これには、およびで作成したファイルがjournal含まれています。systemd-journaldリーダー rsyslogd。このディレクトリはtmpfsパーティションにあるため、メモリの揮発性ストレージと見なされます。
  • /dev/logへのシンボリックリンクです/run/systemd/journal/dev-log

これらのシステムには/etc/rsyslog.conf以下が含まれます(在庫なしrsyslog.conf)。

# Input
module (
        load="imjournal"
        ...
)

FedoraとDebianの違いはデフォルト設定にあります。電子imjournalも使用しますimuxsock(ユーザースペースソケット)。1 Debian はカーネル自体を受け取る必要がないため、imuxsockand (カーネルログ) を使用します。私も性格がちょっと合わなかったと思いました。imklogimjournal

私のポイントの1つは、ロギングを完全に削除することは不可能ではありませんが、悪い考えだということです。これは、現代のシステムベースのシステムの重要なコンポーネントです。欠点は、rsyslogよりも多くのディスク容量を使用できることですが、これはStorage=volatile(たとえば)を使用して簡単に設定できます。RuntimeMaxUse=64M/etc/systemd/journald

Journaldからrsyslogdを取得するのはバックエンド/フロントエンドの関係です。 rsyslogはプレーンテキストのロギングと記録される内容、場所、方法のより細かい制御を提供しますが、Journaldはシステムサービスとのより良い統合を提供するので優れています。


  1. rsyslog はimuxsockas の使用imuxjournalが効率が悪く、他の問題が発生する可能性があることを示唆しています。これに対するAndrew Henryの答えと以下の説明も参照してください。

答え2

ロギングを無効にする方法は?

まず、これRsyslogd ドキュメントでは、imjournalsystemd ログからログメッセージを取得するモジュールについて説明します。(太字はオリジナルで、イタリック体は私が強調したものです):

このモジュールはログデータベースを読み込みます。比較的パフォーマンスが集中するタスクとみなされるタスク。したがって、このモジュールを利用する構成のパフォーマンスは次のとおりです。imuxsockを使用する場合よりも著しく遅い。このログはすべての「クラシック」syslogメッセージのコピーをimuxsockに提供しますが、構造化データは提供しません。 Imjournalは、構造化データが必要な場合にのみ使用してください。 それ以外の場合は、imjournalをimuxsockに置き換えることができ、それを強くお勧めします。

意図されたユースケースの詳細については、rsyslogロギング統合の短いデモを確認することをお勧めします。

警告する:特定のバージョンのsystemdログにはデータベースの破損の問題があり、ログは緊密なループで同じデータを無限に返します。これにより、rsyslog 内で多数のメッセージが重複し、システム リソースが枯渇した場合にサービス拒否が発生する可能性があります。これは適切なスピードリミッタを使用してある程度軽減できますが、それでも古いデータには無限に繰り返される急増があります。デフォルトではレート制限が有効になっており、10分で20,000メッセージを処理できます。これはほとんどのユースケースには十分です。十分でない場合は、以下のパラメータを使用して許容される音量を調整してください。必要な場合にのみこのプラグインを使用することをお勧めします。

rsyslogに「構造化データ」を提供する必要がある「緊急のニーズ」はありますか?これを行うときは、より多くのCPUサイクルを使用しますが、はるかに遅くなりますか?

systemdのログを直接rsyslogに置き換えるのは簡単です。

  1. 編集する/etc/rsyslog.confimjournalとへのすべての参照を削除しますimuxsock

  2. 上記の行を次のように置き換えます。

    module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
    SysSock.Use="on") # Turn on message reception via local log socket;

  3. 次のコマンドを実行します。

    systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket

  4. 走る

    systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket

  5. 走る

    systemctl restart rsyslog

  6. 確認メッセージが表示されます。/var/log/messages 他。

特に、より多くのシステムサービスを無効にして、これらのコマンドのいくつかを調整する必要があるかもしれません。

答え3

このサービスを無効にしてもデバイスの動作が中断されることはありませんが、ロギングは著しく停止します。他の問題は見えません。

関連情報