Systemdジャーナル制限の設定:ディスク使用量とログローテーションの最適化

journald.conf、journalctl、安全なログクリーンアップコマンドを使用して、systemdジャーナルのサイズと保持制限を設定します。

Systemdジャーナル制限の設定:ディスク使用量とログローテーションの最適化

システムログは、静かにディスクを満たすまでは便利です。systemdを使用するLinuxシステムでは、systemd-journaldがインデックス化されたログを保存し、サイズと経過時間の制限を適用できるため、ジャーナルはシステムの他の部分を圧迫することなく十分な履歴を保持できます。

このガイドでは、systemdジャーナル制限を設定する場所、永続ストレージと揮発性ストレージの違い、およびjournalctlを使用してクリーンアップを確認する方法を示します。

ジャーナルストレージモードの理解

制限を設定する前に、ジャーナルがログを保存する場所を理解することが不可欠です。systemd-journaldは、journald.confStorage=ディレクティブで定義される2つの主要なストレージモードをサポートしています。

1. 揮発性ストレージ(/run/log/journal

揮発性ストレージは、一時的なファイルシステム(通常はtmpfsまたはメモリバッキングディレクトリ)にログを保持します。ここに保存されたログは、システム再起動時に失われます

  • 使用例: 非常に一時的なログ、永続的な履歴が不要なリソース制約のある環境。
  • 設定: Storage=volatileを設定します。

2. 永続ストレージ(/var/log/journal

永続ストレージは、システム再起動後もログが存続することを保証するため、サーバーや本番システムの標準的な選択肢です。ディレクトリ/var/log/journalは、存在しない場合に作成されます。

  • 使用例: 監査証跡と履歴分析が必要な本番システム。
  • 設定: Storage=persistentまたはStorage=auto(デフォルト。/var/log/journalが存在する場合、永続ストレージを有効化)を設定します。

ヒント: システムがStorage=autoで設定されており、/var/log/journalが存在しない場合、永続ディレクトリが作成されるまで、ログはデフォルトで揮発性ストレージに保存されます。

主要設定ファイル

systemd-journaldのすべての主要な制限と動作は、通常/etc/systemd/journald.confにあるメイン設定ファイルを介して制御されます。

# メイン設定ファイルを編集
sudo nano /etc/systemd/journald.conf

将来のパッケージアップデートがカスタマイズを上書きしないようにするには、/etc/systemd/journald.conf.d/ディレクトリにオーバーライドファイルを作成するのがベストプラクティスです。たとえば、/etc/systemd/journald.conf.d/01-custom-limits.confを作成します。

ディスク最適化のためのサイズ制限の実装

ジャーナルの成長を制御する最も一般的な方法は、最大ディスク使用量制限を設定することです。指定されたサイズを超えると、journaldは自動的に最も古いアーカイブログの削除を開始し、制限に達するまで続けます。

SystemMaxUse(絶対永続制限)

このディレクティブは、永続ジャーナルファイル(/var/log/journal)が占有できる最大合計ディスク容量を定義します。これは、永続ディスク使用量を制御するための主要なメカニズムです。

合計サイズがこの値を超えると、ジャーナルファイルはローテーションされ、クリーンアップされます。一般的な単位には、K(キロバイト)、M(メガバイト)、G(ギガバイト)、T(テラバイト)があります。

ディレクティブ 説明 設定例
SystemMaxUse 永続ジャーナルデータの最大サイズ。 500M または 2G

設定例:

永続ジャーナルストレージを最大1ギガバイトに制限するには:

[Journal]
SystemMaxUse=1G

SystemKeepFree(ディスク安全バッファ)

SystemMaxUseが上限を設定する一方で、SystemKeepFreeは重要な安全対策として機能します。これは、ジャーナルファイルを含むファイルシステム上で空けておくべき最小限のディスク容量を指定します。

利用可能な空き容量がSystemKeepFreeの値を下回ると、SystemMaxUseの制限にまだ達していなくても、journaldはログをクリーンアップします。これにより、ログの増加がディスクを完全に満たし、重要なシステム操作を停止するのを防ぎます。

ディレクティブ 説明 設定例
SystemKeepFree ジャーナルファイルシステムに必要な最小空き容量。 10% または 4G

ベストプラクティス: SystemMaxUseSystemKeepFreeの両方を設定することを強くお勧めします。大容量ドライブでは、SystemKeepFreeにパーセンテージ(%)を使用すると、スケーラビリティが向上します。

RuntimeMaxUse(揮発性ストレージ制限)

揮発性ストレージ(/run/log/journal)を使用している場合、または永続ストレージが有効な場合でもメモリ/tmpfsの使用量を制御したい場合は、RuntimeMaxUseを使用します。これは、メモリまたはtmpfsに存在する一時的な揮発性ジャーナルファイルによって使用されるディスク容量を制御します。

ディレクティブ 説明 設定例
RuntimeMaxUse 揮発性ジャーナルデータの最大サイズ。 300M

ログ保持のための時間制限の実装

サイズベースの制限はディスク容量の維持を保証しますが、ログの経過時間を保証するものではありません。ログボリュームが少ない場合、ログが無期限に残る可能性があります。時間ベースの制限により、合計サイズに関係なく、特定の期間後にログがローテーションアウトされます。

MaxRetentionSec

このディレクティブは、ログを保持する最大時間を指定します。この期間より古いログはすべて自動的に削除され、サイズ制限を補完します。

ディレクティブ 説明 設定例
MaxRetentionSec 保持するログの最大経過時間。 30 days1 month2 weeks

設定例:

ログが30日より古くならず、永続ストレージの合計が5ギガバイトを超えないようにするには:

[Journal]
Storage=persistent
SystemMaxUse=5G
SystemKeepFree=10%
MaxRetentionSec=30 days

注: MaxRetentionSecが30日、SystemMaxUseが5Gに設定されている場合、journaldは最初に達した制限に従います。5Gの制限が10日で達した場合、10日より古いログは削除され、30日の保持ポリシーが上書きされます。

実践的な手順:設定の適用と確認

1. 現在のジャーナル使用量を確認

変更を加える前に、ジャーナルの現在のディスク使用量を確認します。

journalctl --disk-usage

出力例:

Journals take up 3.4G of disk space.

2. 制限を設定

/etc/systemd/journald.conf(またはオーバーライドファイル)を編集し、目的のディレクティブをアンコメント/設定します。たとえば、最大使用量500MB、30日間保持を確保するには:

[Journal]
Storage=persistent
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30 days

3. ジャーナルサービスを再起動

変更を有効にするには、systemd-journaldサービスを再起動する必要があります。これはアクティブなログ記録には影響しませんが、デーモンに新しいサイズ制約を即座に適用し、クリーンアッププロセスを開始するように指示します。

sudo systemctl restart systemd-journald

4. 手動でクリーンアップを強制

新しい制限に基づいてディスク容量をすぐに回復する必要がある場合、サービスの再起動で十分なことがよくあります。または、journalctlを使用して明示的にファイルをクリーンアップすることもできます。

最後の500MBのみを残してログをクリーンアップし、容量を回復するには:

sudo journalctl --vacuum-size=500M

7日より古いログをクリーンアップするには:

sudo journalctl --vacuum-time=7d

主要ディレクティブのまとめ

ディレクティブ 範囲 目的
Storage グローバル ストレージの場所を定義(persistent、volatile、auto)。
SystemMaxUse 永続(/var/log/journal 永続ログの絶対最大合計サイズ。
SystemKeepFree 永続(/var/log/journal 最小限の空きディスク容量を確保。
RuntimeMaxUse 揮発性(/run/log/journal 揮発性(ランタイム)ログの絶対最大合計サイズ。
MaxRetentionSec 両方 保持するログの最大経過時間を定義。

まとめ

ログが障害になる前にジャーナル制限を設定しましょう。ほとんどのサーバーでは、/etc/systemd/journald.conf.d/の下にドロップインファイルを使用し、SystemMaxUseSystemKeepFreeを設定し、保持目標がある場合はMaxRetentionSecを追加し、systemd-journaldを再起動し、journalctl --disk-usageで結果を確認します。