Systemd ジャーナル ログを永続ストレージで保存する |
このガイドでは、Systemd Journal ログをサーバーに保存する方法を説明します。システム ジャーナルを保存しておくと、サービスが壊れ続けた場合のトラブルシューティングに役立ちます。この記事の最後では、サーバーの再起動時にイベントの記録を保存するようにシステム ジャーナルを構成できるようになります。
類似の記事: Promtail を使用してログを Grafana Loki に転送する方法
システムジャーナルの基本
Systemd は、デフォルトでシステム ジャーナルを /run/log/journal ディレクトリに保存します。 「Linux ファイル システム階層について」で説明したように、/run ディレクトリ内のすべてがクリアされ、再起動時に内容が再作成されます。これは、システムの再起動時にジャーナルがクリアされることを意味します。
/etc/systemd/journald.conf
ファイル内の systemd-journald サービスの構成設定を調整して、再起動後もジャーナルが保持されるようにすることができます。ファイルを開いて内容を表示します。
$ sudo vim /etc/systemd/journald.conf
これらは設定できる一般的なオプションです。ほとんどのシステムではほとんどがコメントアウトされ、それに応じて調整できます。
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
永続的なシステムジャーナルの構成
再起動後もシステム ジャーナルを永続的に保存するように systemd-journald サービスを構成するには、ストレージを永続に設定する必要があります。
Storage パラメータに設定できるその他の値は次のとおりです。
persistent
: 再起動後も保持されるジャーナルを/var/log/journal
ディレクトリに保存します。ディレクトリが存在しない場合は作成されますvolatile
: ジャーナルを volatile/run/log/journal
ディレクトリに保存します。これはシステムの再起動を継続しません。auto
: rsyslog は永続ストレージと揮発性ストレージのどちらを使用するかを決定します。/var/log/journal
ディレクトリが存在する場合、rsyslog は永続ストレージを使用し、それ以外の場合は揮発性ストレージを使用します。
永続的なジャーナル ストレージの場合は、次のように設定します。
[Journal]
Storage=persistent
変更がコミットされたら、systemd-journald サービスを再起動して、構成の変更を有効にします。
sudo systemctl restart systemd-journald
サービスが再起動され、実行されていることを確認します。
$ systemctl status systemd-journald
● systemd-journald.service - Journal Service
Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static; vendor preset: disabled)
Active: active (running) since Sun 2020-02-09 10:59:36 UTC; 8s ago
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 5299 (systemd-journal)
Status: "Processing requests..."
CGroup: /system.slice/systemd-journald.service
└─5299 /usr/lib/systemd/systemd-journald
Feb 09 10:59:36 cent7.novalocal systemd-journal[5299]: Permanent journal is using 8.0M (max allowed 1.9G, trying to leave 2.9G free of 16.9G a…it 1.9G).
Feb 09 10:59:36 cent7.novalocal systemd-journal[5299]: Permanent journal is using 8.0M (max allowed 1.9G, trying to leave 2.9G free of 16.9G a…it 1.9G).
Feb 09 10:59:36 cent7.novalocal systemd-journal[5299]: Time spent on flushing to /var is 68.506ms for 7962 entries.
Feb 09 10:59:36 cent7.novalocal systemd-journal[5299]: Journal started
Hint: Some lines were ellipsized, use -l to show in full.
/var/log/journal ディレクトリを作成する必要があります。
$ ls /var/log/journal
65113b1a0d2f6087d515e6a8cd0ee7ef
/var/log/journal
の下のサブディレクトリの長い名前には 16 進文字が含まれており、*.journal
ファイルが含まれています。
$ ls /var/log/journal/65113b1a0d2f6087d515e6a8cd0ee7ef/
system.journal
*.journal
ファイルは、構造化されインデックス付けされたジャーナル エントリを保存するバイナリ ファイルです。
ジャーナルの最大ストレージ使用量の調整
以下のコメントを解除して変更することで、永続ジャーナルの最大サイズを設定できます。
SystemMaxUse=500M
デフォルトのサイズ制限は、基礎となるファイル システムのサイズの10%の値に設定されていますが、上限は 4 GiB です。
sudo systemctl restart systemd-journald
その他のガイド:
Linux ファイル システム階層を理解する
Linux でハード リンクとソフト (シンボリック) リンクを作成する方法